目次

Wwise SDK 2019.2.3
メモリアロケーションの最適化
注釈: Wwiseバージョン2019.2で、メモリマネージャを刷新しました。以下の手順は、バージョン2019.2以降に該当します。

Wwiseサウンドエンジンのメモリアロケーションは、主に、サウンドエンジンの初期化の際にサイズ固定で行われる数件のメモリアロケーションと、ダイナミックアロケーションの、2つのグループに分けられます。

サイズ固定のメモリアロケーション

サイズ固定のアロケーションの一部は、初期化パラメータによって制御できます。以下は、init-timeで制御できるメモリアロケーションです:

このうち、一番重要なのはuIOMemorySizeです。このストリーミングバッファサイズは、同時に再生するストリーミングサウンド数の上限や、サウンドのビットレートや、ストリーミングするサウンドの時間の安全幅などに基づいて設定してください。8MBというデフォルト値は、一部のゲームでメモリの無駄遣いとみられるかもしれませんが、多めにスタートし、メモリ消費量が具体的に分かってきてから減らしていくのが最適の方法です。ストリーミングバッファメモリの詳細については、 Audiokinetic ストリームマネージャ初期化設定 を参照してください。

ダイナミックアロケーション

サウンドエンジンによって行われる様々なメモリアロケーションを、よりよく理解するために、 AkMemID に記載されたメモリアロケーションのカテゴリに関するドキュメンテーションを参照してください。各カテゴリの数値は、Wwise Advanced Profiler ViewのMemoryタブに表示されています。

デバグ専用のアロケーションはMonitor QueueカテゴリとProfilerカテゴリで行われますが、これらはリリース版で使われません。この2つのカテゴリのサイズを引けば、リリース版のメモリ消費量の予測がつきます。

注釈: Memory タブで、ゲームに接続せずにWwise自体からプロファイル情報を取り込んで、サウンドエンジンメモリの使用量を調べることもできます。

メモリの不足

サウンドエンジンが行うメモリアロケーションの合計は、 AkMemSettings::uMemAllocationSizeLimit 初期化パラメータで制御できます。上限を設定しておくと、メモリ不足の状況がいつ発生したのかによって、サウンドエンジンの対応が異なります。例えば、以下のようなシナリオにおけるメモリ不足の場合、次のような事象が発生します:

  • サウンドエンジンの初期化:初期化の失敗。
  • バンクのロード:バンクロードの失敗。
  • ボリュームなどのパラメータの移行の開始:移行がスキップされ、パラメータが移行なしで目標値に直接ジャンプする。
  • サウンドの再生:再生が失敗するか優先度の低い他の再生が新しい再生のためのメモリを解放するために停止する。

メモリ問題の検出

Wwise Profiler を使用すると、ゲーム中で発生するあらゆるメモリ割り当ての失敗に対して、警告通知がキャプチャログに送信されます。この通知のリストを確認すれば、ゲームプレイ中にメモリ上限に達したときに、どのメモリカテゴリが関係していたのかが分かります。

メモリの使用が高くなる原因

以下のような事項により、メモリの使用率が高くなります:

  • バンクをロードすると、ObjectやMediaのメモリ使用量が上がります。各バンクが使用するメモリ量は異なることに注意してください。Objectカテゴリのバンクのメモリ使用量を左右するのは、バンクの物理的なサイズではなく、その中にある構成やイベントの数です。
  • リバーブやディレイなど一部のエフェクトは、再生中に、より多くのProcessingメモリを使います。
  • 複数のサウンドを同時に再生すると、Processingメモリの使用量が激増します。
  • 短時間に複数のアクションをセンドすると、Objectメモリの使用量が増えます。
  • ゲームオブジェクトの登録、"オブジェクト別"のパラメータ設定、オブジェクトのポジション設定などには、少量のメモリが使用されます。ただし、このメモリを解放するために未使用のゲームオブジェクトが登録解除される必要があることに注意してください。さもなければ、使用されるメモリ量が絶えず増加します。
警告: メモリのピーク使用量を確認するためにテストを実行するときは、必ずゲームのスピーカーセットアップのコンフィギュレーションを、最大のコンフィギュレーションにしてください(例えばPCシステムのオーディオアウトプットデバイスを使う場合は、7.1にします)。これが必要なのは、スピーカーのセットアップをステレオにすると、サウンドエンジンがある程度の最適化を行い、マルチチャンネルコンフィギュレーションのときよりもメモリ使用量が減るからです。

更なる詳細は以下のセクションからご覧いただけます:

参照