Wwiseサウンドエンジンのすべてのモジュールは、AKMemoryMgr インターフェイスを介してメモリにアクセスします。サウンドエンジンクライアントによって、このインターフェイスの初期化および終了が行われます。
デフォルト実装は、静的ライブラリ(AkMemoryMgr.lib)としてSDKで提供されています。このライブラリを使用するには、クライアントによるいくつかの関数定義が必要です:AKAllocHook()、AKFreeHook()およびプラットフォーム固有バリアント。AKAllocHook() と AK::FreeHook() は、単純に通常の malloc 関数と free 関数にリダイレクトすることができますが、AkMemoryMgr.h に記載されているように、他のアロケータは特定の OS 呼び出しを経る必要があります。AKMemoryMgr::Init() ファクトリ関数は、AkModule.h で公開されています。
AkMemoryMgr.libとその他ライブラリの使用に関する詳細は ビルド構成 を参照してください。
メモリマネージャを初期化する時、メモリマネージャの存続期間中にすべてのモジュールを収容するために必要とされる最大プール数を特定することが重要です。ビルド構成や存在する各種モジュールに応じて、初期化時におよそ14のプールが作成されます。また、(AKSoundEngine::LoadBank() 呼び出し時に既存のプールが指定されない場合)、ロードされた各バンクに対して1つのプールが作成されます。
ゲームのメモリマネージャ初期化に関するサンプルコードと詳細は サンプル をご覧ください。
サウンドバンクのメモリ使用に関する詳細は、 バンクのロード を参照してください。
メモリマネージャ存続期間中はメモリプールの作成と破棄が可能です。プールは、最小アロケーションユニットを表す等しいサイズのブロックにセグメント化されています。プールはいったん作成されると、メモリマネージャのデフォルト実装ではサイズ変更ができません。カスタムのメモリマネージャ実装に関する詳細は、メモリマネージャのオーバーライド をご覧ください。
|
Note: Xbox One 上の XMA ファイルを含むバンクは、 AkPhysicalAlloc 型で作成されたプールにロードされる必要があります。 |
|
Note: 作成される各プールには、プールの内部管理用に7.2キロバイトが追加されます。ブロックサイズに等しいプールサイズでプールを作成する場合には、余分なメモリのオーバーヘッドはアタッチされません。すべてのメモリ内統計が Wwise プロファイラで表示できるよう、単一ブロックのメモリにもプールを使用することが重要です。 プールの最適サイズ選択に関する詳細は、メモリプールの最適化 をご覧ください。 |
クライアントによる、AKMemoryMgr インターフェイスの実装が可能です。この場合に注意しなければならない点がいくつかあります。
AK::MemoryMgr::CreatePool() は、アロケーション型のパラメータを尊重する必要があります。
クライアントによる、最大プール数の動的割り当てや個々のプールのサイズ変更が可能です。これにより、予測性は低下するものの、サウンドエンジンに多くの柔軟性が与えられます。
デフォルトのメモリマネージャをオーバーライドする時に実装する必要のあるメソッドの詳細については、AKMemoryMgr ネームスペースを参照してください。