バージョン
menu

Wwise SDK 2025.1.0
外部ソースの統合

External Sourcesは、WwiseのSoundオブジェクトに置くことのできる、特別な種類のソースです。実際のサウンドデータは、ランタイム時に提供されます。これは、例えば大量のダイアログがある場合、それぞれのサウンドとEventを作成してバンクに入れ、これを適切に分割して管理する方法より便利です。また、AI を使用したスピーチジェネレータなど他のシステムを介してダイアログを既に管理している場合にも非常に便利です。

他のソースプラグインと同様に、Add Source(ソースの追加)" ボタンから、Wwise に外部ソースを作成することができ、必要であればこれを複雑な構造の一部にすることも可能です。ゲーム側では、外部ソースでのイベント再生は、他のサウンドの場合と同様に、AK::SoundEngine::PostEventAK::SoundEngine::DynamicSequence::Playlist::Enqueue を介して実行可能です。The actual audio data source information must be provided when an Event with an external source is posted. The decision of which data to play is left entirely to the programmer. つまり、ソースファイルのファイル管理は、Wwise サウンドエンジンの外部で行われます。より多くの作業を伴うことになりますが、結果としてより多くの柔軟性を得られます。

The audio data can be provided either as the path to a file to stream or as a memory pointer. Two formats are supported: Wwise's native WEM format and WAV files. We recommend using the WEM format because it is optimized for Wwise and the target platforms. In some occasions, WAV files can be more convenient, but they have some limitations:

  • They must be PCM encoded.
  • They can only be streamed from a file, in-memory data is not supported.
  • Wwise will do its best to map the audio channels correctly, but it may not always give the expected results.

外部ソースの変換

If you opt to used the recommended WEM proprietary format; you will need to convert your input files in order to pass them to the sound engine at runtime. これは、Wwise AuthoringのExternal Sources Listファイルを介して実行可能です。変換する必要のあるすべてのファイルが、使用するコンバージョン設定と共にXMLファイルに含まれています。Wsources ファイルを指定するには、External Sources タブの Project Settings で設定します。以下は、このファイルの例です:

<?xml version="1.0" encoding="UTF-8"?>
<ExternalSourcesList SchemaVersion="1" Root="d:\TestProject\ExternalSources">
<Source Path="kaaboom.wav" Conversion="VeryCompressed" />
<Source Path="SomeOtherFolderInTheProject\working.wav" Conversion="PCM"/>
<Source Path="d:\FolderOutsideTheProject\out.wav" Conversion="PCM" Destination="out.wav"/>
<Source Path="..\RelativeOutsideTheProject\relative.wav" Conversion="PCM" Destination="relative.wav"/>
<Source Path="MyHdrSound.wav" Conversion="PCM" AnalysisTypes="6"/>
</ExternalSourcesList>

Root 属性は、ソースエントリのルートパスを指定します。省略されると、プロジェクトディレクトリがルートとみなされます。ルートパスは、完全修飾パスまたはプロジェクトディレクトリへの相対パスです。

Source (ソース) アイテムは、変換するファイルを1つ特定します:

  • Path は常に、Root パスに対応しています。
  • Conversion 属性は、ファイルの変換に使用する Conversion Setting シェアセット名です。特定していないと、プロジェクトの Default Conversion Setting を使用します。
  • Destination 属性はオプションであり、異なる宛先ファイルとパスを特定することができます。このパスは、Project Settings またはコマンドラインで特定した出力パスに対応しています。この属性を用いて、ファイルの名前を変更することもできます。ファイルパスのみを使用することはできないことに注意してください: ファイル名も特定する必要があります。さらに、変換したファイルの拡張子は、Destination属性の拡張子と関係なく、".wem"である必要があります。 Destination属性が特定されていない場合、Rootディレクトリ内のフォルダ階層が、常に出力パスに複製されます。Rootディレクトリ外のファイルを使用する場合には、Destination 属性を特定する必要があります。
  • AnalysisTypes を使って、変換ファイルのヘッダーにどのような分析メタデータを含めるべきかを決定します。現在、サウンドエンジンでラウドネスとHDRの2種類の分析を利用することができます。 – ラウドネスは、ラウドネスの正常化に使用されます。よって、"Enable Loudness Normalization (ラウドネス正常化を有効)" チェックボックスがチェックされているサウンドストラクチャーで使用する場合には、外部ソースにこれを追加します。これを含めるには、AnalysisTypes に 2 を設定します。 – HDR はサウンドのエンベロープのみを含んでいます。"Enable Envelope" チェックボックスがチェックされているストラクチャーの、HDRシステム内でこのソースを使用する予定の場合にはこれを含みます。これを含めるには、AnalysisTypes に 4 を設定します。 – 両方のタイプを含むには、AnalysisTypes に 6 (つまり、2 + 4) を設定します。

バンク生成が発生すると、他のファイル変換とともに外部ソースの変換も自動的に行われます。すでに変換済みのファイルは、不必要に再変換されないことに注意してください。

注意: 再変換を避けるために、Wwise は出力ディレクトリ内の Wwise.dat ファイルにいくつかのデータを保存します。このファイルはゲームには必要のないものなので、最終ファイルにこれを含めないようにしてください。このファイルが削除されると、すべてのwaveファイルが再変換されます。

入力ディレクトリのディレクトリ構造は、ルートパスに相対的な出力ディレクトリに複製されます。上の例では、出力ディレクトリには、"ExternalSources" フォルダと "Lower Tests\Originals\SFX" フォルダが含まれます。".." を含むパスは取り除かれ、最初の本当のフォルダから開始します。

コマンドラインの変換

コマンドラインツールを使用して、プロジェクトの外部ソースのみを変換することも可能です。例えば、以下は、バンクを生成せずに Xbox One 用の外部ソースを変換します。

"%WWISEROOT%\Authoring\x64\Release\bin\WwiseConsole.exe" convert-external-source "C:\Project name.wproj" --platform XBoxOne

コマンドラインツール (WwiseConsole) に関する詳細は、コマンドラインを使う を参照してください。

ストリーミング VS インメモリ

To provide the audio data to the sound engine, you can either specify a file name or a data pointer (WEM format only) in the AkExternalSourceInfo structure. これにより、Wwise プロジェクト内の Sound オブジェクト上にある Streaming チェックボックスが完全に上書きされます。データポインタを使用する場合、メモリ管理を行い、データが再生中ずっとメモリ内に留まっていることを確認する必要があります。

ファイル名を指定すると、ファイルが開き、通常のストリーミングファイルと同様にディスクからストリーミングされます。ディスク上のそのロケーションは、低レベル I/O サブシステムの File Location Resolver(ファイルロケーションリゾルバ)実装内で解決される必要があります。低レベル I/O サブシステムの詳細については、 低レベル I/O を参照してください。

デフォルトの File Location Resolver サービスは、CAkFileLocationBase に実装されており、SDK のサンプルとして提供されています( デフォルト低レベル I/O の実装 参照)。この実装は、サブフォルダをサポートしないので、すべての外部ソースストリーミングファイルが "標準" ストリーミングファイルと同じ場所にあるとみなします。

Wwise Stream Managerは、フラグを AK::StreamMgr::IAkLowLevelIOHook::BatchOpen() に渡し、ファイルロケーションを正しく解決するサポートをします( AkFileSystemFlags )。このレベルでは、外部ソースと標準的なストリーミングファイルを"company ID" で区別可能です(AkFileSystemFlags::uCompanyID)。Wwise は、サウンドバンクおよび標準的なストリーミングファイル用に AKCOMPANYID_AUDIOKINETIC を、外部ストリーミングソース用に AKCOMPANYID_AUDIOKINETIC_EXTERNAL を渡します。したがって、この値を使用して、ディスク上の別のロケーションで外部ソースを検索することができます。

注釈: AkFileSystemFlags::bIsLanguageSpecific は、外部ソースが「ボイス」サウンド構造に含まれていても、常に外部ソース false に設定されています。実際、ボイスではなく、言語に依存しない SFX 内にで外部ソースを使用するよう、推奨しています。ファイル名、またはAkExternalSourceInfoのIDを指定する場合、ローカリゼーションは最初から扱う必要があります。

例:外部ソースメカニズムによる単独サウンド再生

プロジェクトには以下が含まれている必要があります:

  • "MySound" という名前のサウンドと("Add Source" ボタンで追加された)"MyExternal" という名前の外部ソース。
  • "Play_MySound" という再生イベント。
  • イベントの入ったバンク。
  • Project Settings内のExternal Sources Listファイル(上の例を参照)。
  • The External Sources List file must define the source "One.wav" (implicitly converted into "One.wem").
source.iExternalSrcCookie = AK::SoundEngine::GetIDFromString("MyExternal"); //The cookie is a hash of the name of the external source object.
source.szFile = AKTEXT("One.wem"); //The file we're going to play.
source.idCodec = AKCODECID_PCM; //The file is in PCM.
AK::SoundEngine::PostEvent( "Play_MySound", 2, 0, NULL, 0, 1, &source );
source.szFile = AKTEXT("Two.wav"); //Let's play a different file with the same event/source, in WAV format
source.idCodec = AKCODECID_PCM_WAV; //The file is in PCM, WAV format.
AK::SoundEngine::PostEvent( "Play_MySound", 2, 0, NULL, 0, 1, &source );
注釈: When using WEM files, the extension of the file has to be ".wem". External Sources Listファイルでは、宛先ファイル名を変更することはできますが、拡張子は変更できません。変換後は、ファイルの拡張子は常に".wem"になります。File Package(ファイルパッケージ)に、変換されたファイルをパッケージする場合、コード内で拡張子 ".wem" を使用してこのファイルを参照する必要があります:File Packagerは、拡張子を含めた完全な名前をハッシュして、ルックアップ ID を生成します。

例:複数外部ソースでイベント再生

複数のwaveファイルを、単一イベントに置き換えることができます。例えば、3つの外部ソースでシーケンスコンテナをセットアップ可能です。イベントが1つ以上の外部ソース再生をトリガーする場合、これらのソースは、AkExternalSourceInfo 構造体を充填する時に区別可能であるよう、プロジェクト内で独自の名前を持つ(したがって独自の cookie を持つ)必要があります。

プロジェクトには以下が含まれている必要があります:

  • 3つのサウンドと1つの外部ソースを持つ MyExternalSequence というシーケンスコンテナ。
  • ソース名は、これらを別々に置換できるように、1、2 または 3 であること。
  • "Play_MyExternalSequence" という再生イベント。
  • イベントの入ったバンク。
  • Project Settings 内の外部ソースリスト(上の例を参照)。
  • 外部ソースリストが、(暗黙的にそれぞれ "One.wem" と "Two.wem" に変換されている)ソース "One.wav" および "Two.wav" を定義。
sources[0].iExternalSrcCookie = AK::SoundEngine::GetIDFromString("Extern_1st_number");
sources[0].szFile = AKTEXT("Five.wem");
sources[0].idCodec = AKCODECID_PCM;
sources[1].iExternalSrcCookie = AK::SoundEngine::GetIDFromString("Extern_2nd_number");
sources[1].szFile = AKTEXT("One.wem");
sources[1].idCodec = AKCODECID_PCM;
sources[2].iExternalSrcCookie = AK::SoundEngine::GetIDFromString("Extern_3rd_number");
sources[2].szFile = AKTEXT("Four.wem");
sources[2].idCodec = AKCODECID_VORBIS; //The codec can be different for each source, if needed
AK::SoundEngine::PostEvent( "Play_MyExternalSequence", 2, 0, NULL, 0, 3, sources );

Wwise Unrealインテグレーションの例

Unrealと統合したプロジェクトの外部ソースの使用方法については、Wwise Unrealインテグレーションのドキュメントを参照してください。

AkCodecID idCodec
Codec ID for the file. One of the audio formats defined in AkTypes.h (AKCODECID_XXX)
const char * szFile
UTF-8 File path for the source. If not NULL, the source will be streaming from disk....
#define AKCODECID_PCM
PCM encoding
Definition: AkConstants.h:116
AkUInt32 iExternalSrcCookie
Cookie identifying the source, given by hashing the name of the source given in the project....
#define AKCODECID_VORBIS
Vorbis encoding
Definition: AkConstants.h:119
#define AKTEXT(x)
Definition: AkTypes.h:98
#define NULL
Definition: AkTypedefs.h:33
#define AKCODECID_PCM_WAV
Standard PCM WAV file parser
Definition: AkConstants.h:121
V1::Source Source
Latest version of the C++ Source interface.
Definition: Source.h:173
AKSOUNDENGINE_API AkUInt32 GetIDFromString(const char *in_pszString)
AKSOUNDENGINE_API AkPlayingID PostEvent(AkUniqueID in_eventID, AkGameObjectID in_gameObjectID, AkUInt32 in_uFlags=0, AkCallbackFunc in_pfnCallback=NULL, void *in_pCookie=NULL, AkUInt32 in_cExternals=0, AkExternalSourceInfo *in_pExternalSources=NULL, AkPlayingID in_PlayingID=AK_INVALID_PLAYING_ID)

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

サポートは必要ですか?

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

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

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

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

Wwiseからはじめよう