X3DAudio 概觀
X3DAudio 是一種 API,與 XAudio2 搭配使用,在 3D 空間中定位音效,以建立聲音從空間中的某一點發出的錯覺,這與相機的位置有關。特別是具有 3D 場景的遊戲會想要使用 X3DAudio。 不需要 3D 定位的音效,例如配樂或非定位的環境音效,可能會完全略過 X3DAudio。
監聽器和發射器
為了在 3D 空間中管理音效,X3DAudio 採用 接聽程式的概念, 和 發出器。 接聽程式和發出器代表任何聽到 3D 音效的位置,以及這些聲音的來源點。
- 聆聽者定義為空間中的一個點和一個方位。 在這個位置上可以聽到聲音 。 聆聽者的位置和方向一般與相機的位置和方向相同。 不論標題使用第一人或第三人稱檢視,都是如此。 聆聽器的位置是以世界座標表示。 請務必注意,是聆聽者的位置 相對於發出器,決定了如何計算最終的喇叭音量。
- 發射器被定義為在空間中一個或多個發出聲音 的來源點。 發射器的位置可以是 3D 空間中的任何位置。 如同接聽程式,發射器的位置會以世界座標表示。 發出器的位置 相對於聆聽者 決定了最終喇叭音量的計算。
- X3DAudio 使用左手座標系統。 若要搭配右手座標使用,開發人員必須否定 X3DAUDIO_LISTENER 和 X3DAUDIO_EMITTER 的 OrientTop、OrientFront、Position 和 Velocity 成員的 .z 元素。
除了位置之外,接收器和發射器還可以包括速度。 與 3D 轉譯引擎不同,X3DAudio 只會使用速度來計算 Doppler 效果(它不會用來計算位置)。
如需接聽程式和發出器的詳細資訊,請參閱 X3DAUDIO_LISTENER 和 X3DAUDIO_EMITTER 結構參考主題。
搭配 XAudio2 使用 X3DAudio
針對 X3DAudio 與 XAudio2 之間的所有互動,請使用下列 X3DAudio 函式。
-
呼叫 X3DAudioInitialize 函式來初始化 X3DAudio。 一般而言,除非揚聲器設定變更,否則您只需在遊戲的生命週期內呼叫 X3DAudioInitialize 一次。
-
初始化 X3DAudio 之後,您可以將聲音的發出器和接聽程式傳遞至 X3DAudioCalculate 函式,以判斷指定音效的音量和其他值。 然後,X3DAudioCalculate 所計算的值,即可針對傳遞至函式的旗標套用至 XAudio2 語音或效果。 您可以使用 IXAudio2Voice::SetOutputMatrix 和 IXAudio2SourceVoice::SetFrequencyRatio 方法,將 X3DAudio 計算的音量和音調值套用至語音。 X3DAudio 計算的其他值,必須使用 IXAudio2Voice::SetEffectParameters 方法,套用至 的 殘響效果。
如需搭配 XAudio2 使用 X3DAudio 的逐步範例,請參閱 如何:整合 X3DAudio 與 XAudio
相關主題