Wwise SDK 2023.1.8
|
帯域幅が制約されると、多くの場合ストレージデバイスへのアクセスがゲーム内でのボトルネックになります。従って、データ転送要求の秩序を保つために、ゲームタイトルは通常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)Include the default File Location Resolver and I/O Hook into your game's project:
3)After creating the Stream Manager, instantiate and initialize the low-level I/O hook device CAkDefaultIOHookDeferred. Note that you may use CAkFilePackageLowLevelIODeferred instead, which implements the File Package extension of the I/O hook (see next section). これで、後ほどこのデバイスが必要な場合、使用可能な状態になります。初期化方法の例は、ストリーミングマネージャの初期化 を参照してください。
4)デフォルトのFile Location Resolver ( CAkFileLocationBaseで実装) は、Wwiseオーサリングツールによって生成されたファイルのあるディレクトリを知る必要があります。In your code, set the base path where audio assets are deployed, using CAkDefaultIOHookDeferred::SetBasePath() (or CAkDefaultIOHookDeferred::AddBasePath() ). ローカライズされたアセットがある場合は、AK::StreamMgr::SetCurrentLanguage() を使用して、Stream Manager デフォルトモジュール上での現在の言語を設定します。ファイルロケーションデフォルトリゾルバが、言語名をベースパスに連結し、ローカライズされたアセットを探せるようになります。
警告: AK::StreamMgr::SetCurrentLanguage() に渡す言語名にディレクトリ区切り文字(スラッシュまたはバックスラッシュ)を付けないでください。 |
サウンドエンジンがサウンドバンクをロードし、SetBasePath()(または AddBasePath() )で指定されたディレクトリのストリーミングファイルを再生する準備が整いました。 To automatically copy streamed files in the SoundBanks output directory in Wwise Authoring, enable Copy Loose/Streamed Media on the SoundBanks tab in the Wwise Project Settings. See SoundBanks Tabfor more details.
If you instantiated the CAkFilePackageLowLevelIODeferred device, you are a few steps away from being ready to also use file packages. ファイルパッケージ(*.PCK)は、1つのWwiseプロジェクトの全てのサウンドバンクとストリーミングオーディオの連結に起因する単一のファイルです。サウンドバンクとストリーミングファイルを異なるファイルパッケージにアサインすることも可能です。詳細は、File Packager ユーティリティドキュメンテーションを参照してください。
1)サウンドバック生成後のステップとして「FilePackager」を使い、サウンドバンク生成後、Wwiseツールに自動的にサウンドバンクとストリーミングファイルを使用してファイルパッケージを生成させます。 (WwiseヘルプのSoundBank Settingsセクションを参照してください)。
2)In your code, load the file package(s) explicitly using CAkFilePackageLowLevelIODeferred::LoadFilePackage(). LoadFilePackage() が SetBasePath()(または AddBasePath() )で指定したパスからファイルパッケージを開きます。In the deployment directory of audio assets, you need to include your file packages, but not the soundbanks and streamed files that they contain. When you load a file package, its header is parsed and a look-up table is created inside CAkFilePackageLowLevelIODeferred. When the sound engine tries to open a file, following a call to AK::SoundEngine::LoadBank() or an event involving playback of a streamed file, CAkFilePackageLowLevelIODeferred searches for it in the look-up tables of all its loaded file packages. 見つからなかった場合、ファイルはベースパスで検索されます。
CAkDefaultIOHookDeferred reads files using the platform file system API. ご使用のゲームエンジンに既にI/Oマネージャがある場合、Wwise Stream Manager から発行されるI/Oリード要求を、既存のI/Oマネージャにルーティングしたいかもしれません。Edit CAkDefaultIOHookDeferred::BatchRead() to call your I/O manager instead of the platform file system. If necessary, you can also edit CAkDefaultIOHookDeferred::BatchOpen().
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() を呼び出すことによりどこからでもアクセス可能です。そこから、ストリームオブジェクトを作成し使用することができます。
以下のセクションには、ストリーミングに関する更に詳しい情報が掲載されています: