方法 : XACT での X3DAudio の統合

XACT は、X3DAudio ライブラリを使用したキューでの 3D オーディオ出力をサポートしています。ここでは、X3DAudio およびその関連 XACT ヘルパー関数を使用して 3D 配置を XACT 対応タイトルに追加する方法について説明します。

はじめに

X3DAudio ライブラリは、サウンド エミッタおよびサウンド リスナー間の位置オーディオ計算を行う 3D オーディオ ジオメトリ ライブラリです。XACT では、X3DAudio を使用して 3D 配置情報を計算し、キューおよびキューに関連付けられているサウンドの再生に適用するため、ユーザーはリアルな配置エフェクトを使用したサウンドをステレオまたは 5.1 構成で聞くことができます。

また、XACT は 3D 情報を使用してキューの暗黙的な変数の値も設定するため、オーディオ デザイナーは、エミッタとリスナーの間の距離に応じたボリュームの減衰など、位置情報に基づいてエフェクトを作成できます。

X3DAudio は厳密には、シグナル処理機能を持たない 3D 算術ライブラリです。位置情報を計算し、キューに適用できるように X3DAudio ライブラリを XACT に簡単に統合するため、XACT には次の 3 つのヘルパー関数が用意されています。

  • XACT3DInitialize は、XACT エンジンからの設定を使用して X3DAudio を初期化します。
  • XACT3DCalculate は、1 つのエミッタと 1 つのリスナーの間の位置情報を計算します。
  • XACT3DApply は、XACT3DCalculate から受け取った計算をキューに適用し、キューが配置エフェクトを使用して再生できるようにします。

X3DAudio を使用して 3D サウンドを XACT キューに適用するには、次の手順に従います。

  1. X3DAudio エンジンの初期化
  2. X3DAudio 構造体の初期化
  3. エミッタ/リスナーのセットアップ
  4. XACT3DCalculate および XACT3DApply の呼び出し

X3DAudio エンジンの初期化

X3DAudio エンジンは、XACT3DInitialize ヘルパー関数を呼び出すことによって初期化します。この関数は、XACT エンジンのインスタンスへのポインターと X3DAudio ハンドルを取ります。XACT エンジンへのポインターは、X3DAudio の初期化に使用する設定の指定に使用され、X3DAudio ハンドルは、初期化された X3DAudio エンジンへの参照を返すために使用されます。

X3DAUDIO_HANDLE xact3dInstance;
XACT3DInitialize(pXACT3Engine,xact3dInstance);    

X3DAudio 構造体の初期化

3D 配置情報を計算するには、サウンド エミッタが使用するサウンド チャンネルの構成と、リスナーが使用するサウンド チャンネルの数に関する特定の初期データを X3DAudio に渡されている必要があります。これらの 2 つの値は X3DAUDIO_DSP_SETTINGS 構造体に SrcChannelCount および DstChannelCount として格納されています。これらの値によって、計算をリスナーのサウンド出力形式 (ステレオや 5.1 サウンドなど) にマップする方法が決まります。

カウントが設定されたら、係数の行列を割り当てる必要があります。行列は、ソース チャンネルからデスティネーション チャンネルへのマッピング データを格納するのに十分な大きさである必要があります。この行列は 1 次元で、SrcChannelCount x DstChannelCount に等しい要素数を含める必要があります。行列への値の入力は XACT3DCalculate を呼び出したときに行われるため、手動で行う必要はありません。

次のコードは、モノラルまたはステレオ ソースのいずれかから、ステレオまたは 5.1 デスティネーション サウンドのいずれかへのマッピングを含む X3DAUDIO_DSP_SETTINGS 構造体を構成します。

X3DAUDIO_DSP_SETTINGS DSPSettings = {0};
WAVEFORMATEXTENSIBLE format;
pXACT3Engine->GetFinalMixFormat(&format);

DSPSettings.SrcChannelCount = srcChannelCount;
DSPSettings.DstChannelCount = format.Format.nChannels;    
DSPSettings.pMatrixCoefficients = new FLOAT32[DSPSettings.SrcChannelCount * DSPSettings.DstChannelCount];

エミッタ/リスナーのセットアップ

X3DAudio は、エミッタとリスナーの間の位置情報を計算することで機能します。XACT に実装された X3DAudio は、XACT3DCalculate へのすべての呼び出しに対して、1 つのエミッタと 1 つのリスナーを使用します。

タイトルでは、エミッタおよびリスナーの構造体への入力に使用される位置情報を提供する必要があります。次のコードは、単純なエミッタおよびリスナーをセットアップします。

X3DAUDIO_EMITTER emitter = {0};
X3DAUDIO_LISTENER listener = {0};
listener.OrientFront = Z_AXIS_VECTOR;
listener.OrientTop = Y_AXIS_VECTOR;
listener.Position = positionVector;
listener.Velocity = ZERO_VECTOR;


// the following need to be orthonormal
emitter.OrientFront = Z_AXIS_VECTOR;
emitter.OrientTop = Y_AXIS_VECTOR;

emitter.Position = ZERO_VECTOR;
emitter.Velocity = ZERO_VECTOR; // needs to not be zero if you want to hear Doppler effect

// emitter ChannelCount and DSP Setting's SrcChannelCount must match
emitter.ChannelCount = 1;   

// this will be set by XACT3DCalculate if ChannelCount > 1.
emitter.ChannelRadius = 0.0f;   

// will be set by XACT3DCalculate
emitter.pChannelAzimuths = NULL;

// will be set by XACT3DCalculate
emitter.pVolumeCurve = emitter.pLFECurve
    = emitter.pLPFDirectCurve
    = emitter.pLPFReverbCurve
    = emitter.pReverbCurve
    = NULL;
    
emitter.CurveDistanceScaler = 1.0;
emitter.DopplerScaler = 1.0f;

エミッタの複数のフィールドが既定値として NULL または XACT3DCalculate 関数から提供される値を使用するように設定されていることに注意してください。

XACT3DCalculate および XACT3DApply の呼び出し

最後に、XACT3DCalculate を呼び出して、適用する最終的なチャンネル マッピングを計算し、XACT3DApply を呼び出して、このマッピングをキューに適用し、距離などの 3D 情報をキューの暗黙的な変数にコピーします。

次のコードは、XACT エンジンが初期化済みで、キューが使用可能であることを前提としています。

XACT3DCalculate( xact3dInstance, &listener, &emitter, &DSPSettings );
XACT3DApply( &DSPSettings, pCue);

暗黙的な変数の設定

XACT3DApply への呼び出しが成功すると、呼び出しのターゲットであるキューは XACT により複数の暗黙的な変数の値を使用して更新されます。

変数 意味
Distance エミッタからリスナーへの距離。XACT3DCalculate から返された X3DAUDIO_DSP_SETTINGS.EmitterToListenerDistance の値に対応します。
OrientationAngle エミッタからリスナーへの内角。エミッタの前方向に対する角度で表されます。XACT3DCalculate から返され、度数に変換された、X3DAUDIO_DSP_SETTINGS.EmitterToListenerAngle の値に対応します。
DopplerPitchScalar ソースとエミッタの間のドップラー偏移係数。XACT3DCalculate から返された X3DAUDIO_DSP_SETTINGS.DopplerFactor の値に対応します。

XACT の 3D 機能をタイトルで使用する予定がある場合、オーディオ デザイナーは RPC を使用してこれらの暗黙的な変数における変更を、ピッチやボリュームなどのサウンド パラメーターの値に関連付けることができます。

関連トピック

  • X3DAudio の概要
    X3DAudio の概要を説明します。
  • XACT の概要
    XACT API の使用方法について概説します。
  • XACT ツール
    Microsoft Cross-Platform Audio Creation Tool (XACT) GUI を使用したコンテンツ作成に関する概要と情報について説明します。