Wwise SDK 2019.1.11
|
帯域幅が制約されると、多くの場合ストレージデバイスへのアクセスがゲーム内でのボトルネックになります。従って、データ転送要求の秩序を保つために、ゲームタイトルは通常I/Oへのアクセスを集中させます。順序は、転送サイズ、スループットとレイテンシに対する優先順位および消費者のニーズに基づいています。オーディオには、通常I/O 負荷があります:大抵の場合、音楽や長いサウンドは再生時にディスクからストリーミングされます。
AudiokineticサウンドエンジンのI/Oストリーミングソリューションは、自律性のあるオーバーライド可能なストリーミング管理モジュールより構成されています。次の図は、モジュールと、サウンドエンジン/ゲームアーキテクチャ内でのモジュールの場所を示すブロック図です:
IAkStreamMgr.hで定義されるそのパブリックインターフェースは、サウンドエンジンおよびゲームの両方で使用されます。サウンドエンジンは、サウンドバンクとストリームオーディオをロードするために、このインターフェースを使用します。一方、ゲームは、グラフィック、テクスチャ、レベル、保存したゲームなどをロードするために同インターフェースを使用します。
パブリックインターフェースは、データ転送のためのプラットフォーム非依存の高レベル抽象化で、プラットフォームのオペレーティングシステムやハードウェアの近くにあるファイルや他のオブジェクトへのハンドルを、いわゆる “ストリーム” にラップするストレージ(I/O)デバイスを伴います。このドキュメンテーションでは、ストリームオブジェクトとストリームファクトリを実装するモジュールを、High-Level Stream Manager、または、単に Stream Manager と呼んでいます。
必要に応じ、Stream Manager を完全にオーバーライドすることができますが、Wwise SDK にはデフォルトの実装が付属しています。このデフォルト実装は、使用方法がシンプルな Low-Level I/O (低レベルI/O)と呼ばれるI/O関連のコードをフックするための別のレベルを定義します。これは、Wwise I/O をゲームへ統合する望ましい方法です。
Default Streaming Manager Information
AK::StreamMgr::Create() のように、ストリーミングに関連しているが、Stream Manager のデフォルト実装に固有の関数や構造体は、SDKのインクルードディレクトリの AkStreamMgrModule.hで定義されています。 |
Wwiseを始めて統合する場合には、速やかに使用を開始できるよう、Wwise SDK付属のストリームマネージャおよび低レベル I/Oのデフォルトサンプルを使用してください:
1)AkStreamMgr.libとリンクする。
2)デフォルトのFile Location Resolver ならびに Blocking I/O Hook をゲームオブジェクトに含めます:
3)Stream Manager作成後、低レベル I/O フックデバイス CAkDefaultIOHookBlockingをインスタント化、初期化します。代わりに、I/Oフックのファイルパッケージ拡張機能(次のセクションを参照)を実装する CAkFilePackageLowLevelIOBlocking を使用することも可能です。これで、後ほどこのデバイスが必要な場合、使用可能な状態になります。初期化方法の例は、ストリーミングマネージャの初期化 を参照してください。
4)デフォルトのFile Location Resolver ( CAkFileLocationBaseで実装) は、Wwiseオーサリングツールによって生成されたファイルのあるディレクトリを知る必要があります。コード内で、 CAkDefaultIOHookBlocking::SetBasePath()(または CAkDefaultIOHookBlocking::AddBasePath() )を使用して、オーディオアセットがデプロイされているベースパスを設定します。ローカライズされたアセットがある場合は、AK::StreamMgr::SetCurrentLanguage() を使用して、Stream Manager デフォルトモジュール上での現在の言語を設定します。ファイルロケーションデフォルトリゾルバが、言語名をベースパスに連結し、ローカライズされたアセットを探せるようになります。
警告: AK::StreamMgr::SetCurrentLanguage() に渡す言語名にディレクトリ区切り文字(スラッシュまたはバックスラッシュ)を付けないでください。 |
サウンドエンジンがサウンドバンクをロードし、SetBasePath()(または AddBasePath() )で指定されたディレクトリのストリーミングファイルを再生する準備が整いました。 Wwiseツールでサウンドバンク出力ディレクトリにストリームファイルを自動的にコピーするには、ポストサウンドバンク生成ステップとして、"CopyStreamedFiles" 実行可能ファイルを使用する必要があることに注意してください。詳細は、Wwise HelpのSoundBank Settings (サウンドバンク設定)を参照してください。
CAkFilePackageLowLevelIOBlocking デバイスをインスタンス化すると、ファイルパッケージ使用の準備もほぼ整います。 ファイルパッケージ(*.PCK)は、1つのWwiseプロジェクトの全てのサウンドバンクとストリーミングオーディオの連結に起因する単一のファイルです。サウンドバンクとストリーミングファイルを異なるファイルパッケージにアサインすることも可能です。詳細は、File Packager ユーティリティドキュメンテーションを参照してください。
1)サウンドバック生成後のステップとして「FilePackager」を使い、サウンドバンク生成後、Wwiseツールに自動的にサウンドバンクとストリーミングファイルを使用してファイルパッケージを生成させます。 (WwiseヘルプのSoundBank Settingsセクションを参照してください)。
2)コードの中で、ファイルパッケージ(複数可)をCAkFilePackageLowLevelIOBlocking::LoadFilePackage()を使って明示して読み込みます。LoadFilePackage() が SetBasePath()(または AddBasePath() )で指定したパスからファイルパッケージを開きます。オーディオアセットのデプロイ先ディレクトリに、ファイルパッケージをインクルードする必要がありますが、ファイルパッケージが含むサウンドバンクとストリーミングファイルはインクルードする必要がありません。ファイルパッケージをロードすると、そのヘッダが解析され、CAkFilePackageLowLevelIOBlocking 内にルックアップテーブルが作成されます。AK::SoundEngine::LoadBank() への呼び出し、または、ストリーミングファイルの再生を伴うイベントに続いて、サウンドエンジンがファイルを開こうとすると、CAkFilePackageLowLevelIOBlocking が、ロードされたすべてのファイルパッケージのルックアップテーブルでこのファイルを検索します。見つからなかった場合、ファイルはベースパスで検索されます。
CAkDefaultIOHookBlocking は、プラットフォームファイルシステムAPIを使用してファイルを読み込みます。ご使用のゲームエンジンに既にI/Oマネージャがある場合、Wwise Stream Manager から発行されるI/Oリード要求を、既存のI/Oマネージャにルーティングしたいかもしれません。CAkDefaultIOHookBlocking::Read() を編集して、プラットフォームファイルシステムの代わりに既存のI/Oマネージャを呼び出します。必要ならば、CAkDefaultIOHookBlocking::Open() も編集します。
SDKで提供されるStream Managerデフォルト実装は、Low-Level I/O(低レベルI/O)と呼ばれるサブモジュールの上にあります。 上記のクラスはすべて、Low-Level I/O のサンプル実装として Wwise SDK で提供されています。 これらのクラスの関連ファイル一覧がこちらにあります:デフォルト低レベル I/O の実装.
Wwise I/O をゲームエンジンに統合する好ましい方法は、Low-Level I/O レイヤを、Wwise I/O とお使いのI/O管理技術間のアダプタとして実装することです。Low-Level I/O のゲームへの典型的な実装には、非常に簡単なものから非常に複雑で高度にカスタマイズされたものまで幅広くあります。手始めに、サンプルを使用してみるのもよいでしょう。
Low-Level I/Oモジュールには次のような2つの目的があります:
Stream Managerの初期設定は、Stream Manager と使用する Low-Level I/O システムとの相互作用や全体的な I/Oパフォーマンスに影響を与えます。 これについては、Audiokinetic ストリームマネージャ初期化設定 の章で詳しく説明されています。I/Oのヒント、トラブルシューティングと最適化 の章は、初期設定を微調整をする際の参考になります。
IAkStreamMgr.h でそのインターフェースが定義されている Stream Manager は、サウンドバンクとストリーミングオーディオファイルを読み込むために Wwise サウンドエンジンによって使用されます。I/Oマネージャをお持ちでない場合、ゲームの全てのI/Oのために Stream Manager を使用することが可能です。同様に、カスタムソースプラグインを記述する場合にも、Stream Manage にアクセスすることができます。
高レベルストリームマネージャAPI概要 explains セクションは、Stream Manager の API について詳細に説明しています。これをクライアントとして直接しない場合は、この章を読み飛ばし、低レベルI/O フックを実装することにより、Wwise I/O をゲームに統合してください。
基本的な概念について少し説明します。Stream Manager は、2種類のデータの抽象ストリームを管理します:標準ストリームと自動ストリーム。
Stream Manager は、スレッドセーフであることを意図していますが、1つのスレッドのみが指定されたストリームを所有することがあります。
メインインターフェース AK::IAkStreamMgr は、AK::IAkStreamMgr::Get() を呼び出すことによりどこからでもアクセス可能です。そこから、ストリームオブジェクトを作成し使用することができます。
以下のセクションには、ストリーミングに関する更に詳しい情報が掲載されています: