X3DAUDIO_EMITTER 結構 (x3daudio.h)
定義單一點或多點 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 時必須正規化。 針對沒有 cones OrientFront 的單通道發出器,只會用於發出器角度計算。 對於具有 cones OrientFront 的多通道發出器或單一通道,用於矩陣、LPF (直接和殘響路徑) ,以及殘響計算。
OrientTop
頂端方向的方向。 此值必須與 OrientFront 正交。 OrientTop 只能與多通道發出器搭配使用,以進行矩陣計算。
Position
在用戶定義世界單位中的位置。 此值不會影響 速度。
Velocity
用戶定義的世界單位/秒速度向量。 此值僅用於 doppler 計算。 它不會影響 Position。
InnerRadius
要用於內部半徑計算的值。 如果 InnerRadius 為 0,則不會使用內部半徑,但 InnerRadiusAngle 仍可使用。 此值必須介於 0.0f 和 MAX_FLT之間。
InnerRadiusAngle
要用於內部半徑角度計算的值。 此值必須介於 0.0f 和 X3DAUDIO_PI/4.0 之間。
ChannelCount
X3DAUDIO_EMITTER 結構所定義的發出器數目。 必須大於 0。
ChannelRadius
如果 ChannelCount 大於 1,則會放置與通道位置的距離。 ChannelRadius 只與多通道發出器搭配使用,以進行矩陣計算。 必須大於或等於 0.0f。
pChannelAzimuths
通道位置的表格,以弧度表示,相對於平面正交向量與頂端方向向量之前端方向向量的通道半徑,以弧度表示。 X3DAUDIO_2PI的 azimuth 指定通道是低頻率效果, (LFE) 通道。 LFE 通道位於發出器基底,而且只會針對 pLFECurve 進行計算,永遠不會計算 pVolumeCurve。 pChannelAzimuths 至少必須有 ChannelCount 元素,但如果 ChannelCount = 1,則可為 NULL。 數據表值必須介於 0.0f 內,才能X3DAUDIO_2PI。 pChannelAzimuths 會與多通道發出器搭配使用,以進行矩陣計算。
pVolumeCurve
磁碟區層級距離曲線,僅用於矩陣計算。 NULL 指定符合反平方法的特殊預設曲線,因此當距離介於 0.0f 與 CurveDistanceScaler × 1.0f 之間時,不會套用衰減。 當 distance 大於 CurveDistanceScaler × 1.0f 時,放大因子會 (CurveDistanceScaler × 1.0f) /distance。 在 CurveDistanceScaler × 2.0f 的距離,音效會位於半音量或 -6 dB,而 CurveDistanceScaler × 4.0f 的距離,音效會位於一季音量或 -12 dB,依此類歸。
pVolumeCurve 和 pLFECurve 彼此獨立。 pVolumeCurve 不會影響 LFE通道 磁碟區。
pLFECurve
LFE 關閉距離曲線,或使用 NULL 來使用預設曲線:[0.0f、 CurveDistanceScaler ×1.0f]、[CurveDistanceScaler ×1.0f、0.0f]。 pLFECurve 的 NULL 值會指定預設曲線,該曲線符合反向平方法,且距離 <= CurveDistanceScaler 固定為無衰減。 pVolumeCurve 和 pLFECurve 彼此獨立。 pLFECurve 不會影響非 LFE 通道磁碟區。
pLPFDirectCurve
低傳遞篩選 (LPF) 直接路徑係數距離曲線,或 NULL 使用預設曲線:[0.0f,1.0f]、[1.0f、0.75f]。 pLPFDirectCurve 僅用於 LPF 直接路徑計算。
pLPFReverbCurve
LPF 殘響係數距離曲線或 NULL 使用預設曲線:[0.0f, 0.75f], [1.0f, 0.75f]。 pLPFReverbCurve 僅用於 LPF 殘響路徑計算。
pReverbCurve
Reverb 傳送層級距離曲線或 NULL 以使用預設曲線:[0.0f, 1.0f], [1.0f, 0.0f]。
CurveDistanceScaler
曲線距離縮放器,用來將標準化距離曲線縮放至用戶定義的世界單位,以及/或調整其效果。 這不會影響任何其他計算。 值必須位於FLT_MIN範圍內,才能FLT_MAX。 CurveDistanceScaler 僅用於矩陣、LPF (直接和殘響路徑) ,以及殘響計算。
DopplerScaler
用來調整 Doppler 移位效果的 Doppler 移位縮放器。 DopplerScaler 僅用於 Doppler 計算,而且不會影響任何其他計算。 此值必須介於 0.0f 的範圍內,才能FLT_MAX。
備註
X3DAUDIO_EMITTER 只支援單一點發出器中的圓錐。 多點發出器是管理相關音效來源群組的便利且有效率的方式。 許多屬性會在所有通道點之間共用,例如 Doppler—相同的 Doppler 移位會套用至發出器中的所有通道。 因此,Doppler 值只需要計算一次,而不是使用多個個別單一點發出器所需的每一點。 因為 X3DAUDIO_EMITTER 只有一個方向向量,所以多點發出器圓錐會很實用,因此強制所有通道的行為就像是面向相同的方向一樣。 如果需要多個獨立圓錐,則應該使用多個單一點發出器,每一個都有自己的方向。
參數類型X3DAUDIO_VECTOR會輸入到 DirectX::XMFLOAT3,以提供 x 、y 和 z 浮點值。
X3DAudio 使用左手笛卡兒座標系統,x 軸上的值會從左到右、從下到上從 Y 軸增加,以及從近到遠的 z 軸上。 Azimuth 是從指定的參考方向順時針測量。
若要搭配右手座標使用 X3DAudio,您必須否定 OrientFront、 OrientTop、 Position 和 Velocity 的 .z 元素。
對於使用者定義的距離曲線,第一個點的距離欄位必須是 0.0f,而最後一個點的距離字段必須是 1.0f。
如果發出器超出 (CurveDistanceScaler × 1.0f) 的距離,則曲線的最後一個點會用來計算磁碟區輸出層級。 最後一個點是由下列項目決定:
X3DAUDIO_DISTANCE_CURVE.pPoints[PointCount-1].DSPSetting)
內部半徑和內部半徑角度
InnerRadius 可用來指定原點周圍的平滑轉換區域,因為音效會直接通過接聽程式上方或下方。 藉由指定 InnerRadiusAngle 來考慮提高或減少提高許可權的音效,最終會開始將音效放大到兩個以上的喇叭。不使用內部半徑和內部半徑角度時,發出器會在兩個最接近目前位置/方向的喇叭中 (或直接在具有一個喇叭定義角度的一行上,只從該一個喇叭) 。
內部半徑和內部半徑角度不會影響它們所描述的錐體外部的發出器。 在圓錐內,當發出器位於與接聽程式相同位置或直接在接聽程式上方或) 下方時,它們會逐漸使音效跳入相反喇叭中,直到發出器位於與 (或直接在接聽程式上方或下方相同的位置時,所有喇叭都會同樣聽到音效。
平臺需求
Windows 10 (XAudio2.9) ;Windows 8,Windows Phone 8 (XAudio 2.8) ;DirectX SDK (XAudio 2.7)規格需求
需求 | 值 |
---|---|
標頭 | x3daudio.h |