共用方式為


XAudio2 預設通道對應

XAudio2 用戶端可以完全控制從語音通道到其每個目的地語音通道的對應。 它會透過使用 IXAudio2Voice::SetOutputMatrix 方法來控制對應。 不過,在某些情況下,XAudio2 會自動設定預設傳送矩陣來簡化這項工作。 若有任何與語音音訊通道相關聯的通道遮罩,則會使用通道遮罩來執行此動作。 通道遮罩是SPEAKER_xxx位元遮罩的組合,如 X3DAudio.h 和其他位置所定義。 XAudio2 需要通道遮罩為 0,或設定與通道數目相同的位數。

下表顯示 XAudio2 所支援之格式的通道遮罩需求和預設值。

格式 通道遮罩需求 預設遮罩 對應的結構成員
PCM 檔案可能包含通道遮罩 通道遮罩為 0 或不存在 WGATEXTENSIBLE.dwChannelMask 或無 ( ()
ADPCM 檔案不包含通道遮罩 預設通道遮罩一律使用 無 (ADPCMWAVEFORMAT)

 

對於副混音和主控語音,以及沒有通道遮罩或通道遮罩 0 的來源語音,XAudio2 會根據下表假設預設喇叭位置。

通道 隱含通道位置
1 在兩個喇叭中,一律會以全比例對應至 FrontLeft 和 FrontRight, (單聲道音效的特殊案例)
2 FrontLeft、FrontRight (基本身歷聲設定)
3 FrontLeft、FrontRight、LowFrequency (2.1 組態)
4 FrontLeft、FrontRight、BackLeft、BackRight (四次語音)
5 FrontLeft、FrontRight、FrontCenter、SideLeft、SideRight (5.0 組態)
6 FrontLeft、FrontRight、FrontCenter、LowFrequency、SideLeft、SideRight (5.1 設定) (請參閱下列備註)
7 FrontLeft、FrontRight、FrontCenter、LowFrequency、SideLeft、SideRight、BackCenter (6.1 設定)
8 FrontLeft、FrontRight、FrontCenter、LowFrequency、BackLeft、BackRight、SideLeft、SideRight (7.1 組態)
9 或更多 沒有隱含位置 (一對一對應)

 

如果音訊圖形中的指定語音配對沒有與其來源或目標語音相關聯的說話者位置, (一個語音有八個以上的通道) ,則兩個語音都無法播放,直到來源語音使用 IXAudio2Voice::SetOutputMatrix 方法明確設定傳送矩陣為止。 呼叫任一語音的 IXAudio2SourceVoice::Start 方法將會失敗,直到您這麼做為止。

如果來源語音和目標語音的說話者位置數目不同,而且 IXAudio2Voice::SetOutputMatrix 尚未在來源語音上呼叫,XAudio2 會將每個來源通道傳送至最接近的目標喇叭 (或喇叭) 可用,並按比例地與預定喇叭的距離。 有兩種特殊案例,預設行為不同。

  1. 如果來源音訊是單聲道,且位於SPEAKER_FRONT_CENTER或沒有定義的位置,則一律會傳送至SPEAKER_FRONT_LEFT,並在輸出音訊中存在時SPEAKER_FRONT_RIGHT。 如果不存在,則會回復為正常案例。
  2. 如果來源和目的地都是 6 通道,而且位於標準 5.1 喇叭設定 (Left+Right+Right+BackL+BackR 或 Left+Right+Right+Sub+Sub+SideL+SideR) ,通道會透過一對一對應。 換句話說,SideLeft/Right 和 BackLeft/Right 會相等地處理。 這是因為這些設定有歷史混淆。 因此,假設的意圖一律是將一個對應至一個。

語音

XAudio2 程式設計指南

GetChannelMask