X3DAudio の概要
X3DAudio は、 XAudio2 と共に使用される API で、3D 空間にサウンドを配置して、カメラの位置に対する空間内のポイントからのサウンドの錯覚を作成します。特に、3D シーンを特徴とするタイトルでは、X3DAudio を使用する必要があります。 サウンドトラックや配置されていないアンビエント サウンドなど、3D 配置を必要としないサウンドは、X3DAudio を完全にバイパスする可能性があります。
リスナーとエミッター
3D 空間でサウンドを管理するために、X3DAudio は リスナー とエミッターの概念 を採用しています。 リスナーとエミッターは、3D サウンドを聞いているものの位置と、それらのサウンドの発生元のポイントを表します。
- リスナーは、空間内の点と向きとして定義されます。 音が 聞こえる位置です。 リスナーの位置と向きは、通常、カメラの位置と向きと同じです。 これは、タイトルが一人称または第三者のパースペクティブ ビューを使用しているかどうかに当てはまります。 リスナーの位置は、ワールド座標で表されます。 最終的なスピーカーボリュームの計算方法を決定するのはエミッタに 対 するリスナーの位置であることに注意することが重要です。
- エミッターは、サウンドの発生元となる空間内の 1 つ以上のポイントとして定義 されます。 エミッタの位置は、3D 空間内の任意の場所に配置できます。 リスナーと同様に、エミッタの位置はワールド座標で表されます。 最終的なスピーカー ボリュームの計算方法を決定するのは、リスナーに 対 するエミッタの位置です。
- X3DAudio では、左利きの座標が使用されます。 右辺座標で を使用するには、開発者は、X3DAUDIO_LISTENERおよびX3DAUDIO_EMITTERの OrientTop、OrientFront、Position、Velocity メンバーの .z 要素を否定する必要があります。
リスナーとエミッタには、位置に加えて速度を含めることができます。 3D レンダリング エンジンとは異なり、X3DAudio は速度のみを使用してドップラー効果を計算します (位置の計算には使用されません)。
リスナーとエミッターの詳細については、 X3DAUDIO_LISTENER および X3DAUDIO_EMITTER 構造体のリファレンス トピックを参照してください。
XAudio2 での X3DAudio の使用
X3DAudio と XAudio2 の間のすべての相互作用には、次の X3DAudio 関数を使用します。
-
X3DAudioInitialize 関数を呼び出して X3DAudio を初期化します。 通常、スピーカーの構成が変更されない限り、ゲームの有効期間中に X3DAudioInitialize を呼び出す必要があるのは 1 回だけです。
-
X3DAudio を初期化した後は、サウンドのエミッタとリスナーを X3DAudioCalculate 関数に渡すことで、特定のサウンドのボリュームやその他の値を決定できます。 X3DAudioCalculate によって計算された値は、関数に渡されるフラグに応じて、XAudio2 の音声または効果に適用できます。 X3DAudio によって計算されたボリューム値とピッチ値を、 IXAudio2Voice::SetOutputMatrix メソッドと IXAudio2SourceVoice::SetFrequencyRatio メソッドを使用して音声に適用できます。 X3DAudio によって計算されるその他の値は、IXAudio2Voice::SetEffectParameters メソッドを使用してリバーブ効果に適用する必要があります。
XAudio2 で X3DAudio を使用する詳細な例については、「方法: X3DAudio と XAudio を統合する」を参照してください。
関連トピック