Share via


XACT とゲームの統合

このトピックでは、Microsoft Cross-Platform Audio Creation Tool (XACT) についてプログラマの視点から説明します。

  • XACT のスコープ
  • XACT の統合
  • 関連トピック

XACT のスコープ

XACT API は、Microsoft クロスプラットフォーム オーディオ作成ツールでパッケージ化されたアセットを使用して機能する高レベルのインターフェイスを提供し、サウンドをレンダリングするために、ローレベル オーディオ ソフトウェア エンジンを使用します。API はデザイナーからは見えません。

XACT とその機能は、ほとんどのオーディオのニーズを満たす簡単かつ洗練されたソリューションとなります。XACT API は、ローレベル オーディオ ソフトウェア エンジンに置き換わるものではなく、このエンジンを基盤にして構築されています。オーディオ データを低レベルで管理する必要がある場合は、XAudio2 を使用して、オーディオ エンジンの機能に直接アクセスすることもできます。

オーディオ テクノロジ スタックへの XACT の適合に関するマップについては、「コア オーディオの概要」を参照してください。

XACT の統合

通常のワークフローでは、オーディオ デザイナーが、ゲームのオーディオ コンポーネントに必要なファイルを XACT を使用して作成します (これらのファイルの説明については、「XACT ファイルの種類」を参照してください)。プログラマはデザイナーから XACT ファイルを受け取り、それをゲームに統合します。統合には次のような作業が含まれます。

  • XACT の初期化
  • 処理ループの設定
  • Wave バンクおよびサウンド バンクの作成
  • キューの再生

Xbox 360:  XACT API の使用方法の詳細については、「オーディオ サンプル」を参照してください。

XACT の初期化

XACT オーディオ エンジンを起動するには、最初に IXACT3Engine::Initialize を呼び出します。次の例は、既定の設定を示す空の初期化パラメーターのセットを使用してこの関数を呼び出す方法を示しています。この関数は、アプリケーションの先頭で 1 回だけ呼び出します。

XACT_RUNTIME_PARAMETERS EngineParameters = {0};
if ( FAILED ( hr = pXACT3Engine->Initialize( &EngineParameters ) ) ) return hr;

処理ループの設定

アプリケーションでは、定期的に IXACT3Engine::DoWork を呼び出す必要があります。この関数は、通常、30 ~ 100 ミリ秒ごと (1 ~ 4 フレームごとに 1 回) に呼び出す必要があります。次の例では、アプリケーションのメイン実行ループ内で IXACT3Engine::DoWork を呼び出しています。

BOOL fDone = false;

do {
   // update all the game action
   Update();

   // render graphic elements to the screen
   Render();
pXACT3Engine->DoWork();
} while (!fDone);

Wave バンクおよびサウンド バンクの作成

ゲームは Wave バンクおよびサウンド バンクのデータにメモリーを割り当ててから、ファイルをメモリーに読み込みます。その後で、データを制御する Wave バンク オブジェクトとサウンド バンク オブジェクトをインスタンス化します。これらのバンクが不要になったら、オブジェクトを破棄してメモリーを解放します。

これらの関数は通常、シーンの開始時と終了時に呼び出します。

次の例では、メモリー内のウェーブ バンクを作成します。Wave バンクのストリーミングについては、「XACT のストリーミング」を参照してください。

IXACT3WaveBank * pWaveBank;
IXACT3SoundBank * pSoundBank;
if ( FAILED( hr = pXACT3Engine->CreateInMemoryWaveBank( pvWaveBank, dwFileSize, 0, 0, &pWaveBank ) ) ) 
    return hr;
if ( FAILED( hr = pXACT3Engine->CreateSoundBank( pvSoundBank, dwFileSize, 0, 0, &pSoundBank ) ) )
    return hr;

キューの再生

サウンド バンク内のキューはインデックスで参照します。ただし、IXACT3SoundBank::GetCueIndex メソッドを使用すれば、フレンドリ名を使用してキューのインデックスを調べることができます。フレンドリ名とは、デザイナーがビルド時にキューに関連付けることができるテキスト文字列です。

XACTINDEX dwSoundCueIndex = 0;
dwSoundCueIndex = pSoundBank->GetCueIndex( "MusicMono" );
IXACT3Cue* pCue;
if( FAILED( hr = pSoundBank->Play( dwSoundCueIndex, 0, 0, &pCue ) ) ) return hr;

関連トピック

  • XACT の概要
    XACT API の概要について説明します。
  • XACT
    XACT GUI を使用したコンテンツ作成に関する概要と情報について説明します。