Windows、Xbox 和 Hololens 2 應用程式開發人員的空間音效

注意

本檔是以開發人員對象為目標。 如需在裝置上啟用空間音效的用戶支援,請參閱 如何在 Windows 10 中開啟空間音效。

Microsoft Spatial Sound 是 Microsoft 在 Xbox、Windows 和 HoloLens 2 上提供空間音效支援的平臺層級解決方案,可同時啟用環繞和提升許可權(高於或低於接聽程式)音訊提示。Windows 桌面 (Win32) 應用程式以及支援平臺上的 通用 Windows 平台 (UWP) 應用程式可以利用空間音效。 空間音效 API 可讓開發人員建立從 3D 空間位置發出音訊的音訊物件。 動態音訊物件可讓您從空間中的任意位置發出音訊,這可能會隨著時間而變更。 您也可以指定音頻物件從17個預先定義的靜態通道 (8.1.4.4) 發出聲音,以代表實際或虛擬化的喇叭。 實際的輸出格式是由用戶選取,而且可以從 Microsoft Spatial Sound 實作中擷取;音訊將呈現給現有的喇叭、耳機和家庭影院接收器,而不需要任何程式代碼或內容變更。 平臺完全支援 HDMI 和立體聲耳機輸出的即時 Dolby Atmos 編碼、適用於耳機的 DTS:X,以及立體聲耳機的 耳機用 Windows Sonic 編碼。 最後,Microsoft Spatial Sound 應用程式會遵守系統混合原則,而且其音訊也會與非空間感知的應用程式混合。 Microsoft Spatial Sound 支援也已整合到媒體基礎;使用媒體基礎的應用程式可以順利播放 Dolby Atmos 內容,而不需要其他實作。

Microsoft Spatial Sound 的空間音效支援支援支援 Dolby Atmos 的電視、家庭影院和音效列。 空間音效也可以與消費者可能擁有的任何一對耳機搭配使用,平臺使用 耳機用 Windows Sonic、Dolby Atmos for Headphones 或 DTS 耳機:X 來轉譯音訊。

啟用 Microsoft Spatial Sound

無論是開發人員還是取用者,用戶都必須在其裝置上啟用 Microsoft Spatial Sound,才能聽到空間化的聲音。

Windows

在 Windows 電腦上,這會透過指定音效輸出裝置的屬性頁面來完成。 從 [ 音效 ] 控制面板中,選取輸出裝置,然後按兩下 [ 裝置屬性]。 在頁面的 [空間音效] 區段中,如果裝置支援空間音效,您可以從 [空間音效格式] 下拉式清單中選取其中一個可用的格式

enable spatial sound in the sound control panel

您也可以以滑鼠右鍵按兩下任務列中的 [音量 ] 圖示來啟用 Microsoft Spatial Sound。

enable spatial sound from the taskbar

Xbox

在 Xbox 上,Microsoft Spatial Sound 功能一律可供取用者使用,並透過 [一般 -> 音量和音訊輸出] 下的 [設定 應用程式啟用]。

HDMI 音訊按鈕會填入音訊接收器 (AVR) 或聲條或直接連線到 Xbox 控制台的電視所支援的所有格式。 「光學音訊」選項僅適用於較舊的 Xbox 控制台,不適用於 Xbox Series X|S 和更新版本。

Screenshot of the General Volume & Output settings page showing the HDMI audio dropdown.

請注意,如果尚未安裝,請在 HDMI 音訊中選取 [Dolby Atmos for home theater (HDMI only)] 或 [DTS:X for home theater (HDMI only)] 選項,將會提示用戶下載並安裝 Dolby Access 或 DTS Sound Unbound 應用程式。

Screenshot of the General Volume & Output settings page showing the selection of DTS Digital Surround.

[耳機格式] 下拉式列表中選取 [Dolby Atmos] 代表 [耳機]、[DTS 耳機:X] 或 [耳機用 Windows Sonic]

Screenshot of the General Volume & Output settings page showing the enabling spatial sound for headphones.

當 Microsoft Spatial Sound 無法使用時(例如,播放內嵌膝上型電腦立體聲喇叭時,或使用者尚未明確啟用上述 Microsoft Spatial Sound),ISpatialAudioClient::GetMaxDynamicObjectCount 傳回給應用程式的可用動態物件數目將會是 0。

HoloLens 2

在 HoloLens 2 上,預設會啟用 Microsoft Spatial Sound,並使用專為 耳機用 Windows Sonic 而設計的硬體 DSP 卸除。

Microsoft Spatial Sound and Audio 中間件

許多應用程式和遊戲開發人員都使用第三方音頻轉譯引擎解決方案,這些解決方案通常包括複雜的撰寫和試鏡工具。 Microsoft 已與其中數個解決方案提供者合作,在現有的撰寫環境中實作 Microsoft Spatial Sound。 這通常表示此處討論的 API 會從應用程式的檢視中抽象化;它們會包裝為應用程式可以具現化的數位訊號處理 (DSP) 外掛程式,而 app 的音訊實作者可以視需要將它混合到 Microsoft Spatial Sound 通道床、副混音或將個別聲音傳送至動態物件實例外掛程式。 請洽詢音訊中間件解決方案提供者,以取得 Microsoft Spatial Sound 的支援層級。

適用於音訊轉譯器的 Microsoft 空間音效

許多音訊轉譯器是以 Windows 音訊工作階段 API (WASAPI) IAudioClient 端點為目標,其中應用程式會將混合和格式一致性音訊數據的緩衝區饋送至 WASAPI 音訊接收;接著會取用傳遞的緩衝區與其他客戶端、最終的系統層級處理和轉譯。

Microsoft Spatial Sound 空間端點會實作為 ISpatialAudioClient,其與 IAudioClient 有許多相似之處。 它支援 形成通道床的靜態 音效物件,支援最多 8.1.4.4 個通道(接聽程式周圍有 8 個通道 – 左、右、中、左、右和後置;1 個低頻率效果通道;接聽程式上方 4 個通道;接聽程式下方 4 個通道)。 而且它支援 動態 音效物件,它可以任意放置在 3D 空間中。

ISpatialAudioClient 的一般實作編碼模式為:

  • 建立靜態和/或動態音頻物件。
  • 將每個物件的音訊緩衝區饋送每個畫面,讓系統可以轉譯它。
  • 視需要更新動態物件的 3D 位置 - 應用程式所需的頻率 (或不常使用)。

請注意,目前的輸出格式(喇叭或耳機;耳機用 Windows Sonic、Dolby Atmos 或 DTS 耳機:X) 是從上述實作中抽象的 – 應用程式開發人員可以專注於空間音效,而不需要根據格式進行樞紐分析。 想要其行為根據輸出格式而分裂的應用程式可以查詢使用中的格式,但抽象表示應用程式不需要處理這些格式。

Microsoft Spatial Sound 與音訊轉譯器整合

因為 ISpatialAudioClient 是取用數據的音訊接收,所以音訊轉譯器有數個選項可用來與其互動及傳遞音訊數據。 有三種常用的整合技術(針對使用音訊中間件的標題,您可能會看到根據這些選項提供的對等外掛程式):

  • 7.1.4 平移器和主控語音:已經支援 7.1 端點的 轉譯器可以選擇只新增 ISpatialAudioClient 靜態通道床支援的四個額外高度通道支援。 他們先前所做的任何通道移動流覽(可能已經利用 x、y、z 座標)都可以更新為現在包含這些高度通道。 這通常為轉譯器和應用程式音訊工作流程、訊號、流程和混合控制提供最少的中斷。 在耳機上,請注意,完整的應用程式混合會空間化,因此即使是立體聲音樂也可能被視為來自接聽程式的「外部化」。
  • 維護現有的端點,再加上新增 7.1.4 總線(和 panners):某些標題可以選擇維護兩個 端點:其現有的立體聲 WASAPI 端點(用於「直接到耳朵」內容,並非要空間化)以及支援 7.1.4 的 ISpatialAudioClient 靜態通道床(甚至高達 8.1.4.4)。 當然,在兩個混合之間管理互動對內容建立者來說,雖然會維護同步處理,因為指定時間作用中的WASAPI和ISAC實例確實使用相同的緩衝區大小和時鐘進行處理。
  • 針對特定聲音或副混音使用動態音效物件:提供最詳細的/精確的定位,但可能建立混合不透明度,這項技術牽涉到使用 ISpatialAudioClient 動態音效物件。 請注意,元數據加上音頻緩衝區會傳遞至轉譯器,因此這些聲音會不透明到應用程式混合的其餘部分。 此外,由於可用的動態聲音物件數目有限,轉譯器必須考慮實作優先順序技術 – 撲殺、聲音共置、混合至靜態通道床等等。 遊戲經常將這項技術用於個人「英雄」的聲音,例如將四處移動的直升機在接聽程式上方。

轉譯器也可以混合和比對這些方法。

Microsoft Spatial Sound Runtime 資源含意

在 Windows 和 Xbox 上,可用的語音數目會根據使用中的格式而有所不同。 Dolby Atmos 格式支援 32 個作用中對象總計(因此,如果 7.1.4 通道床正在使用中,20 個額外的動態聲音物件可以使用)。 耳機用 Windows Sonic 支援 128 個作用中物件,低頻率效果 (LFE) 信道實際上不會計算為物件 -- 因此當 8.1.4.4 通道床使用時,112 個動態音效物件可以使用。

針對在 Xbox One 遊戲機上執行的 通用 Windows 平台 應用程式,即時編碼(適用於家用劇院的 Dolby Atmos、適用於耳機的 Dolby Atmos、適用於家庭影院的 DTS:X、DTS 耳機:X 和 耳機用 Windows Sonic)會在硬體中執行,無需 CPU 費用。

從 2303 Xbox OS 更新和遊戲開發工具套件 (GDK) 開始,Xbox 上的資源限制會更新為下列值:

格式 最大靜態物件 (通道床) 最大動態物件
Xbox Series X|S、UWP app & >=2303 GDK
最大動態物件
Xbox 系列 X|S、XDK 和 <2303 GDK
最大動態物件
Xbox One
杜比·阿特莫斯家庭劇院 (HDMI) 12 (7.1.4) 20 20 20
DTS:X 家庭劇院 (HDMI) 17 (8.1.4.4) 20 20 16
杜比·阿特莫斯 (耳機) 17 (8.1.4.4) 128 20 16
DTS 耳機:X (耳機) 17 (8.1.4.4) 200 20 16
Windows 音速 (耳機) 17 (8.1.4.4) 220 20 15

從 Windows 組建 22621 的 5 月服務版本開始,Windows 上的資源限制會更新為下列值:

格式 最大靜態物件 (通道床) 最大動態物件
Windows
最大動態物件
HoloLens 2
多爾比·阿特莫斯家庭劇院 (HDMI) 12 (7.1.4) 20 N/A
家庭影院的 DTS:X (HDMI) 17 (8.1.4.4) 32 N/A
杜比·阿特莫斯 (耳機) 17 (8.1.4.4) 128 N/A
Dolby Atmos (內建喇叭) 17 (8.1.4.4) 128 N/A
DTS 耳機:X (耳機) 17 (8.1.4.4) 128 N/A
DTS:X Ultra (內建喇叭) 17 (8.1.4.4) 128 N/A
Windows 音速 (耳機) 17 (8.1.4.4) 128 31

針對先前的 Windows、Xbox 和 HoloLens 版本,適用下列資源限制。

格式 最大靜態物件 (通道床) 最大動態物件
Xbox One
最大動態物件
Windows
最大動態物件
HoloLens 2
杜比·阿特莫斯家庭劇院 (HDMI) 12 (7.1.4) 20 20 N/A
家庭影院的 DTS:X (HDMI) 17 (8.1.4.4) 16 32 N/A
杜比·阿特莫斯 (耳機) 17 (8.1.4.4) 16 16 N/A
Dolby Atmos (內建喇叭) 17 (8.1.4.4) N/A 16 N/A
DTS 耳機:X (耳機) 17 (8.1.4.4) 16 32 N/A
DTS Ultra (內建喇叭) 17 (8.1.4.4) N/A 32 N/A
耳機用 Windows Sonic 17 (8.1.4.4) 15 112 31

應用程式也應該考慮下列資源含意:

  • 儲存體/光盘頻寬:預先撰寫到 7.1.4 的線性內容通常大於 7.1 線性內容(雖然感知編解碼器已經常利用通道相互關聯,使這遠遠低於音頻數據的 50% 實際通道)
  • 其他數位訊號處理成本:某些先前的全球效果現在可能會成為每個動態音效對象的實例。 此外,某些內容建立者可能會想要更新某些 DSP 效果,以支援其他通道,或獨一無二地使用它們。

Microsoft Spatial Sound and Sound Spatialization Cues

Microsoft Spatial Sound 著重於在接聽程式周圍理想化球體上的音效定位模擬。 耳機用 Windows Sonic、DTS 耳機:X 和 Dolby Atmos 會實作喇叭對應和耳機虛擬化,但請注意,聲音空間仿真的許多其他層面,通常以內容建立者啟用的方式實作,都會留給現有的引擎。 內容建立者繼續使用現有的遊戲工具和程式,例如多普勒、距離型衰減和篩選、遮蔽和阻礙,以及環境殘響等空間提示。

其他資源

空間音效介面

介面 描述
ISpatialAudioClient 可讓用戶端建立從 3D 空間中位置發出音訊的音訊串流。
ISpatialAudioObject 表示 物件,提供相對於使用者從 3D 空間中的位置轉譯的音訊數據。
ISpatialAudioObjectRenderStream 提供控制空間音頻物件轉譯數據流的方法,包括啟動、停止和重設數據流。
ISpatialAudioObjectRenderStreamNotify 提供空間音訊客戶端回應 ISpatialAudioObjectRenderStream 狀態變更的通知。

 

注意

在 Xbox One 開發工具包 (XDK) 標題上使用 ISpatialAudioClient 介面時,您必須先呼叫 EnableSpatialAudio,再呼叫 IMMDeviceEnumerator::EnumAudioEndpoints IMMDeviceEnumerator::GetDefaultAudioEndpoint。 若無法這麼做,會導致從呼叫 Activate 傳回E_NOINTERFACE錯誤。 EnableSpatialAudio 僅適用於 XDK 標題,不需要針對在 Xbox One 上執行的 通用 Windows 平台 應用程式呼叫,也不需要針對任何非 Xbox One 裝置呼叫。

 

空間音效結構

結構 描述
SpatialAudioObjectRenderStreamActivationParams 表示空間音訊轉譯數據流的啟用參數。
SpatialAudioClientActivationParams 表示空間音訊轉譯數據流的選擇性啟用參數。

 

空間音效列舉

列舉型別 描述
AudioObjectType 指定 ISpatialAudioObject 的類型。