バージョン

menu_open
Wwise SDK 2024.1.0
ストリーミング/ストリームマネージャ

イントロダクション

帯域幅が制約されると、多くの場合ストレージデバイスへのアクセスがゲーム内でのボトルネックになります。従って、データ転送要求の秩序を保つために、ゲームタイトルは通常I/Oへのアクセスを集中させます。順序は、転送サイズ、スループットとレイテンシに対する優先順位および消費者のニーズに基づいています。オーディオには、通常I/O 負荷があります:大抵の場合、音楽や長いサウンドは再生時にディスクからストリーミングされます。

Audiokinetic の 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

注釈: この章全体を通じて、Audiokinetic の Stream Manager 実装に固有の追加的詳細を示すこのような囲み欄があります。

AK::StreamMgr::Create() のように、ストリーミングに関連しているが、Stream Manager のデフォルト実装に固有の関数や構造体は、SDKのインクルードディレクトリの AkStreamMgrModule.hで定義されています。

Wwise I/Oの統合

クイック統合

Wwiseを始めて統合する場合には、速やかに使用を開始できるよう、Wwise SDK付属のストリームマネージャおよび低レベル I/Oのデフォルトサンプルを使用してください:

1)AkStreamMgr.libとリンクする。

2)Include the default File Location Resolver and I/O Hook into your game's project:

  • SDK/Samples/SoundEngine/{Platform name}/AkDefaultIOHookDeferred.h and .cpp
  • SDK/Samples/SoundEngine/{Platform name}/AkFileHelpers.h
  • SDK/Samples/SoundEngine/Common/ の全ファイル

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. 見つからなかった場合、ファイルはベースパスで検索されます。

I/Oリードの既存I/Oマネージャへのルーティング

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().

応用:低レベルI/Oを使用した作業

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つの目的があります:

  • ディスク上のファイルロケーションをリゾルブ:Wwise に生成されたファイルは、ゲームディスク上のどこにでも配置可能ですが、サウンドバンクおよびストリーミングファイルの名前とID間の、プラットフォームファイルシステムに使用されるファイルディスクリプタへの適切なマッピングを確実にするために、コードの記述が必要です。
  • Abstracts all low-level I/O operations: All I/O transfer requests (open/read/write) scheduled by the Stream Manager are delivered there.

Wwise I/O パフォーマンス

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種類のデータの抽象ストリームを管理します:標準ストリームと自動ストリーム。

  • 標準ストリーム (Standard streams) (AK::IAkStdStream): AK::IAkStdStream::Read() または AK::IAkStdStream::Write() への呼び出しが発行された場合、Stream Manager へ I/O要求をオンデマンドで送出します。I/Oは、ユーザー指定のメモリ内で実行されます。
  • • 自動ストリーム (Automatic streams) (AK::IAkAutoStream): 自動ストリームは、AK::IAkAutoStream::GetBuffer() / AK::IAkAutoStream::ReleaseBuffer() メソッドで、内部ストリーミングメモリからアドレスを付与することによりデータにアクセスします。メインインターフェース AK::IAkStreamMgr は、ストリームファクトリとして機能します。自動ストリームはメモリを内部的に管理し、このメモリへの書き込みが自由になるとI/O要求が低レベルIOへ自動的に送出されます。

Stream Manager は、スレッドセーフであることを意図していますが、1つのスレッドのみが指定されたストリームを所有することがあります。

メインインターフェース AK::IAkStreamMgr は、AK::IAkStreamMgr::Get() を呼び出すことによりどこからでもアクセス可能です。そこから、ストリームオブジェクトを作成し使用することができます。

更なる情報

以下のセクションには、ストリーミングに関する更に詳しい情報が掲載されています:


このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう