X3DAUDIO_EMITTER
任意の数のサウンド チャンネルで使用されるシングルポイントまたはマルチポイントの 3D オーディオ ソースを定義します。
typedef struct X3DAUDIO_EMITTER {
X3DAUDIO_CONE *pCone;
X3DAUDIO_VECTOR OrientFront;
X3DAUDIO_VECTOR OrientTop;
X3DAUDIO_VECTOR Position;
X3DAUDIO_VECTOR Velocity;
FLOAT32 InnerRadius;
FLOAT32 InnerRadiusAngle;
UINT32 ChannelCount;
FLOAT32 ChannelRadius;
FLOAT32 *pChannelAzimuths;
X3DAUDIO_DISTANCE_CURVE *pVolumeCurve;
X3DAUDIO_DISTANCE_CURVE *pLFECurve;
X3DAUDIO_DISTANCE_CURVE *pLPFDirectCurve;
X3DAUDIO_DISTANCE_CURVE *pLPFReverbCurve;
X3DAUDIO_DISTANCE_CURVE *pReverbCurve;
FLOAT32 CurveDistanceScaler;
FLOAT32 DopplerScaler;
} X3DAUDIO_EMITTER, *LPX3DAUDIO_EMITTER;
メンバ
- pCone
サウンド コーンへのポインターです。単一チャンネルのエミッタで、行列、LPF (ダイレクト パスおよびリバーブ パスの両方)、およびリバーブの計算のみに使用されます。NULL は全方向性を指定します。 - OrientFront
前方向の向きです。この値は OrientTop と正規直交でなければなりません。OrientFront は使用時に正規化されます。コーンを使用しない単一チャンネルのエミッタでは、OrientFront はエミッタの角度計算のみに使用されます。コーンを使用するマルチチャンネル エミッタまたは単一チャンネル エミッタでは、OrientFront は行列、LPF (ダイレクト パスおよびリバーブ パスの両方)、およびリバーブの計算に使用されます。 - OrientTop
上方向の向きです。この値は OrientFront と正規直交でなければなりません。OrientTop はマルチチャンネル エミッタでの行列の計算にのみ使用されます。 - Position
ユーザー定義のワールド単位の位置です。この値は Velocity には影響しません。 - Velocity
ユーザー定義のワールド単位/秒のベロシティ ベクトルです。この値はドップラー効果の計算にのみ使用され、Position には影響しません。 - InnerRadius
内部半径の計算に使用される値です。InnerRadius が 0 の場合、内部半径は使用されませんが、InnerRadiusAngle は使用される場合があります。0.0f ~ MAX_FLT の値を指定します。 - InnerRadiusAngle
内部角度の計算に使用される値です。0.0f ~ X3DAUDIO_PI/4.0 の値を指定します。 - ChannelCount
X3DAUDIO_EMITTER 構造体によって定義されるエミッタの数です。0 より大きい値を指定する必要があります。 - ChannelRadius
ChannelCount が 1 より大きい場合にエミッタが配置される Position からの距離です。ChannelRadius は、マルチチャンネル エミッタでの行列の計算のみに使用されます。この値は 0.0f 以上であることが必要です。 - pChannelAzimuths
ラジアン単位の方位角で表したチャンネル位置テーブルです。チャンネル半径と共に使用され、上方ベクトルと直交する平面の前方ベクトルとして示されます。低周波効果 (LFE) チャンネルを指定する場合は、X3DAUDIO_2PI にします。pChannelAzimuths は少なくとも ChannelCount 個の要素が必要です。テーブルの値は 0.0f ~ X3DAUDIO_2PI の範囲内でなければなりません。pChannelAzimuths は、マルチチャンネル エミッタでの行列の計算に使用されます。 - pVolumeCurve
ボリューム レベル距離カーブです。行列の計算にのみ使用されます。NULL を指定すると、次のような逆二乗則に一致する特化した既定のカーブになります。距離が 0.0f ~ CurveDistanceScaler× 1.0f の範囲内にある場合、減衰は適用されません。 距離が CurveDistanceScaler× 1.0f より大きい場合、増幅係数は (CurveDistanceScaler× 1.0f)/距離になります。CurveDistanceScaler× 2.0f の距離でサウンドは半分のボリューム (-6 dB) になり、CurveDistanceScaler× 4.0f の距離で 4 分の 1 のボリューム (-12 dB) になります。 注 RPC カーブが Distance 変数を使用するように定義されている場合は、XACT3DCalculate はこのメンバーを無視します。このような RPC カーブが定義されている場合、このメンバーではなくカーブ内に対応する情報が提供されているものと見なされます。 - pLFECurve
LFE ロールオフ距離カーブです。既定のカーブ ([0.0f,CurveDistanceScaler× 1.0f], [CurveDistanceScaler× 1.0f, 0.0f]) を使用する場合は NULL にします。pLFECurve に NULL 値を使用すると、減衰がないようにクランプされた距離 <= CurveDistanceScaler での逆二乗則に一致するデフォルト カーブが指定されます。 注 RPC カーブが Distance 変数を使用するように定義されている場合は、XACT3DCalculate はこのメンバーを無視します。このような RPC カーブが定義されている場合、このメンバーではなくカーブ内に対応する情報が提供されているものと見なされます。 - pLPFDirectCurve
ローパス フィルター (LPF) ダイレクト パス係数距離カーブです。既定のカーブ ([0.0f,0.0f], [1.0f,1.0f]) を使用する場合は NULL にします。pLPFDirectCurve は、LPF ダイレクト パスの計算にのみ使用されます。 注 RPC カーブが Distance 変数を使用するように定義されている場合は、XACT3DCalculate はこのメンバーを無視します。このような RPC カーブが定義されている場合、このメンバーではなくカーブ内に対応する情報が提供されているものと見なされます。 - pLPFReverbCurve
LPF リバーブ パス係数距離カーブです。デフォルトのカーブ ([0.0f,0.25f], [1.0f,0.25f]) を使用する場合は NULL にします。pLPFReverbCurve は LPF リバーブ パスの計算にのみ使用されます。 注 RPC カーブが Distance 変数を使用するように定義されている場合は、XACT3DCalculate はこのメンバーを無視します。このような RPC カーブが定義されている場合、このメンバーではなくカーブ内に対応する情報が提供されているものと見なされます。 - pReverbCurve
リバーブ センド レベル距離カーブです。デフォルトのカーブ ([0.0f, 1.0f], [1.0f, 0.0f]) を使用する場合は NULL にします。 注 RPC カーブが Distance 変数を使用するように定義されている場合は、XACT3DCalculate はこのメンバーを無視します。このような RPC カーブが定義されている場合、このメンバーではなくカーブ内に対応する情報が提供されているものと見なされます。 - CurveDistanceScaler
正規化された距離カーブをユーザー定義のワールド単位にスケーリングするために、またはその効果を強調するために使用するカーブ距離スケーラです。これは他の計算には影響しません。この値は FLT_MIN ~ FLT_MAX の範囲にする必要があります。CurveDistanceScaler は行列、LPF (ダイレクト パスおよびリバーブ パスの両方)、およびリバーブの計算にのみ使用されます。 注 RPC カーブが Distance 変数を使用するように定義されている場合は、XACT3DCalculate はこのメンバーを無視します。このような RPC カーブが定義されている場合、このメンバーではなくカーブ内に対応する情報が提供されているものと見なされます。 - DopplerScaler
ドップラー偏移効果を強調するために使用するドップラー偏移スケーラーです。DopplerScaler はドップラー効果の計算にのみ使用され、その他の計算には影響しません。この値は 0.0f ~ FLT_MAX の範囲内にする必要があります。
解説
X3DAUDIO_EMITTER は、単一点エミッタのコーンのみをサポートします。多点エミッタは、関連する音源のグループを管理するのに便利で効果的な方法です。すべてのチャンネル ポイントで、ドップラー効果などの多くのプロパティが共有されます。同じドップラー偏移がエミッタのすべてのチャンネルに適用されます。このため、ドップラー効果の値の計算が必要になるのは 1 回だけです。複数の独立した単一点エミッタが必要になった場合でも、点ごとの計算は必要になりません。これは、X3DAUDIO_EMITTER に 1 方向のベクトルしかないためで、多点エミッタのコーンは、すべてのチャンネルが同じ方向に向いているように強制されるため、用途が限定されます。複数の独立したコーンが必要な場合は、複数の単一点エミッタを、特定の方向ごとに使用する必要があります。
パラメーター型 X3DAUDIO_VECTOR は D3DVECTOR に型変換され、浮動小数点値 x、y、z を提供します。
X3DAudio では、x 軸の値が左から右に向かって、y 軸の値が下から上へ向かって、z 軸の値が近くから遠くに向かって大きくなる左手デカルト座標系を使用します。方位角は、指定した基準方向から時計回りに測定されます。
ユーザー定義の距離カーブでは、最初のポイントの距離フィールドが 0.0f で、最後のポイントの距離フィールドが 1.0f でなければなりません。
エミッタが CurveDistanceScaler× 1.0f を超える距離を移動する場合は、カーブの最後のポイントを使用してボリューム出力レベルを計算します。最後のポイントは次のように求められます。
X3DAUDIO_DISTANCE_CURVE.pPoints[PointCount-1].DSPSetting)
内部半径と内部半径角度
InnerRadius には、サウンドがリスナーを直接通り抜けるとき、またはリスナーの上下を通り抜けるときにサウンドがスムーズに移動する、音源の周囲の領域を指定します。InnerRadiusAngle を指定すると、仰角も考慮されます。仰角を上げたり下げたりすれば、2 台のスピーカーから出ているとは思えないようなサウンドが得られます。
内部半径と内部半径角度を使用しない場合、2 台の近接したスピーカー内のエミッタは、それらの現在の位置と方向に聞こえる状態になります (または、エミッタが 1 台のスピーカーの定義された角度を持つライン上にある場合は、そのスピーカーのみから聞こえます)。
内部半径と内部半径角度は、指定するコーンの外側に置かれたエミッタに対して、影響しません。コーンの内側で、エミッタがリスナーと同じ位置にある (またはリスナーの真上か真下にある) 場合、内部半径と内部半径角度により、サウンドがすべてのスピーカーで等しく聞こえるようになるまで徐々に反対側のスピーカーからサウンドが発せられます。
要件
ヘッダー: X3daudio.h 宣言