X3DAudio の概要

X3DAudio は、3D 空間にサウンドを配置するために XAudio2 および XACT と組み合わせて使用される API です。特に、3D シーンを扱うタイトルでは、X3DAudio を使用することにより、カメラ位置に基づく相対的な空間地点からサウンドが聞こえてくるような効果を演出することができます。サウンドトラックや空間位置が考慮されない環境音など、3D 配置の不要なサウンドであれば、X3DAudio をまったく使用しないこともできます。

リスナーとエミッター

3D 空間におけるサウンドを管理するため、X3DAudio にはリスナーとエミッターという概念が採用されています。3D サウンドの種類に関係なく、リスナーはそのサウンドを聞く位置、エミッターはそのサウンドの発生元を示します。

  • リスナーとは、サウンドを聞く位置のことです。空間位置および方向で定義されます。一般に、リスナーの位置と方向はカメラの位置および方向と同じです。これは一人称視点のタイトルでも、三人称視点のタイトルでも同様です。リスナーの位置はワールド座標で表現されますが、最終的なスピーカー音量の計算は、エミッターに対するリスナーの相対位置によって決まるという点に注意してください。

  • エミッターとはサウンドの発生源のことです。1 つまたは複数の空間位置で定義されます。エミッターは、3D 空間のあらゆる位置に配置できます。リスナーと同様、エミッターの位置もワールド座標で表現されますが、最終的なスピーカー音量の計算は、リスナーに対するエミッターの相対位置によって決まります。

リスナーおよびエミッターには、位置だけでなく、速度が考慮される場合もあります。3D レンダリング エンジンとは異なり、X3DAudio における速度は、ドップラー効果の計算にのみ使用されます (位置の計算には使用されません)。

リスナーおよびエミッターの詳細については、X3DAUDIO_LISTENER 構造体および X3DAUDIO_EMITTER 構造体のリファレンス トピックを参照してください。

XAudio2 での X3DAudio の使用

X3DAudio と XAudio2 間の相互作用はすべて、2 つの X3DAudio 関数の直接呼び出しで実行されます。

  • X3DAudioInitialize

    X3DAudio は、X3DAudioInitialize 関数を呼び出して初期化します。通常、X3DAudioInitialize を呼び出す必要があるのは、スピーカー構成が変更されない限り、ゲームの存続期間中 1 回のみです。

  • X3DAudioCalculate

    X3DAudio でボリュームを初期化した後、サウンドのエミッターおよびリスナーを X3DAudioCalculate 関数に渡すことにより、特定のサウンドに別の値を指定できます。X3DAudioCalculate に渡されたフラグに従って、計算された値を XAudio2 ボイスまたはエフェクトに適用できます。X3DAudio で計算されるボリュームおよびピッチの値は、IXAudio2Voice::SetOutputMatrix および IXAudio2SourceVoice::SetFrequencyRatio メソッドによりボイスに適用できます。X3DAudio で計算されるその他の値は、IXAudio2Voice::SetEffectParameters メソッドを使用して、リバーブ エフェクトに適用する必要があります。

XAudio2 で X3DAudio を使用する方法の手順を追った例については、「方法 : X3DAudio と XAudio2 の統合」を参照してください。

XACT での X3DAudio の使用

XACT には、前述した 2 つの X3DAudio 関数の呼び出しを処理する独自の組み込み関数と、X3DAudio で計算された値の適用を処理する追加の X3DAudio 専用関数があります。

  • XACT3DInitialize

    X3DAudio は、XACT3DInitialize 関数を使用して XACT で初期化します。前述のとおり、XACT3DInitialize 関数を呼び出す必要があるのは、スピーカー構成が変更されない限り、ゲームの存続期間中で 1 回のみです。

  • XACT3DCalculate

    XACT で X3DAudio が初期化されると、XACT3DCalculate を呼び出すことにより、特定のリスナーおよびエミッターの組み合わせについてボリュームおよびその他の値を計算できます。

  • XACT3DApply

    XACT3DCalculate で返されたすべての値は、XACT3DApply を呼び出すことにより XACT キューに適用できます。

XACT で X3DAudio を使用する方法の手順を追った例については、「方法 : XACT での X3DAudio の統合」を参照してください。

関連トピック

  • X3DAudio の概要
    X3DAudio の概要を説明します。