Android 13 推出了標準方式,讓原始設備製造商 (OEM) 支援空間音訊和頭部追蹤功能,而無需使用特定供應商的客製化或 SDK。
空間音訊是一種用於創造環繞聽眾的音場技術。空間音訊可讓使用者在不同的位置感知頻道和個別聲音,而這些位置與用於播放的音訊裝置轉換器的實體位置不同。舉例來說,空間音訊可讓使用者透過耳機聆聽多聲道音軌。使用空間音訊時,即使只有兩個換能器可播放音訊,耳機使用者仍可感受到前方對話和後方環繞效果。
頭部追蹤功能可協助使用者瞭解頭部周圍模擬空間化音訊的本質。這項體驗只有在延遲時間低時才有效,延遲時間是指使用者移動頭部到聽到虛擬喇叭位置移動的時間。
Android 13 會在音訊管道中提供空間音效處理功能,盡可能降低延遲時間,以便為空間音效和頭部追蹤功能進行最佳化。
建築
Android 13 中經過修改的 Android 音訊架構和 API,可在整個生態系統中採用空間音訊技術。
下圖說明在 Android 13 中,音訊管道架構的空間音訊相關變更:
圖 1. 含有空間處理器的音訊管道架構
在新模型中,空間化器是音訊架構的一部分,並與解碼器解耦。空間化器會接收混合音訊內容,並將立體聲串流算繪至 Audio HAL。將空間化器與解碼器分離後,原始設備製造商 (OEM) 就能為解碼器和空間化器選擇不同的供應商,並達到所需的頭部追蹤來回延遲時間。這個新模型也包含用於頭部追蹤的感應器架構掛鉤。
下圖說明空間化器和頭部追蹤效果的音訊架構系統架構:
圖 2. 內含空間處理器和頭部追蹤功能的系統架構
所有空間音訊 API 都會在應用程式層級的公開 Spatializer
類別中分組。音訊服務中的 SpatializerHelper
類別會與系統 UI 元件介接,根據平台和連接裝置的功能管理空間化器相關功能。音訊政策服務中的新 Spatializer
類別會根據原始設備製造商 (OEM) 表示的功能、已連結的裝置和有效用途,建立及控制多聲道混音和空間化所需的空間音訊圖表。新的混音器類別 SpatializerThread
會混合多聲道音軌,並將混合後的結果提供給後置處理 FX 引擎,以便將立體聲輸出內容轉換為 Audio HAL。針對頭部追蹤,SpatializerPoseController
類別會將與頭部追蹤相關的函式分組,以便與感應器堆疊介面,並合併及篩選提供給效果引擎的感應器信號。頭部追蹤感應器資料會透過藍牙驅動程式的 HID 通訊協定傳送。
對 Android 13 音訊管道架構所做的變更,可改善下列項目:
- 降低空間化器和耳機之間的延遲時間。
- 提供統合 API,為應用程式開發人員提供服務。
- 透過系統 API 控制頭部追蹤狀態。
- 探索頭部追蹤感應器,並將其與使用中的音訊裝置建立關聯。
- 合併來自不同感應器的信號,並計算空間化效果引擎可使用的頭部姿勢。
您可以使用頭部追蹤公用程式庫實作偏差補償、靜止偵測和速率限制等功能。
空間音訊 API
Android 13 提供空間音訊系統和開發人員 API。
原始設備製造商 (OEM) 可根據系統 API 設定的功能可用性和啟用狀態,調整應用程式行為。應用程式也可以設定音訊屬性,停用空間音訊,以便為美觀效果或表示音訊串流已處理為空間音訊。
如需瞭解開發人員專用 API,請參閱 Spatializer
。
原始設備製造商 (OEM) 可以使用系統 API 實作「聲音」和「藍牙」設定 UI,讓使用者控制空間音訊的狀態,以及裝置的頭部追蹤功能。使用者可以在「聲音」設定 UI 中,為揚聲器和有線耳機啟用或停用空間音訊。只有在空間化器效果實作支援穿耳模式時,才能使用喇叭的空間音訊設定。
使用者也可以在每部裝置的藍牙裝置設定中,啟用或停用空間音訊和頭部追蹤功能。只有在藍牙耳機提供頭部追蹤感應器時,才能使用頭部追蹤設定。
如果裝置支援空間音效功能,系統會一律開啟空間音效的預設設定。如需系統 API 的完整清單,請參閱 Spatializer.java
。
新的頭部追蹤感應器類型 Sensor.TYPE_HEAD_TRACKER
已新增至 Sensor 架構,並由 Sensor HAL 公開為透過藍牙或 USB 的動態感應器。
整合空間音訊
除了實作空間化效果引擎外,原始設備製造商 (OEM) 還必須設定平台,以便支援空間音訊。
需求條件
如要整合空間音效,必須符合下列條件:
- Audio HAL 和音訊 DSP 必須支援空間音訊專用輸出路徑。
- 如要使用頭部追蹤空間音訊,耳機必須內建頭部追蹤感應器。
- 實作方式必須符合頭部追蹤的建議標準,透過 HID 通訊協定從藍牙耳機傳送至手機。
- 如要支援空間音訊,必須使用 Audio HAL 7.1。
請按照下列步驟整合空間音訊:
請在
device.mk
檔案中宣告空間音效支援功能,如下所示:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
這會導致
AudioService
初始化空間化器支援功能。在
audio_policy_configuration.xml
中宣告空間音訊混音的專屬輸出,如下所示:<audioPolicyConfiguration> <modules> <module> <mixPorts> <mixPort name="spatializer" role="source" flags="AUDIO_OUTPUT_FLAG_SPATIALIZER"> <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
在
audio_effects.xml
中宣告空間化效果程式庫,如下所示:<audio_effects_conf> <libraries> <library name="spatializer_lib" path="libMySpatializer.so"/> … </libraries> <effects> <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
實作空間化效果的供應商必須遵循下列規定:
- 基本設定和控制項與 Effect HAL 中的其他效果相同。
架構需要的特定參數,用於探索支援的功能和設定,例如:
SPATIALIZER_PARAM_SUPPORTED_LEVELS
SPATIALIZER_PARAM_LEVEL
SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
SPATIALIZER_PARAM_HEADTRACKING_MODE
SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
SPATIALIZER_PARAM_HEAD_TO_STAGE
詳情請參閱
effect_spatializer.h
。
建議
我們建議原始設備製造商在導入時遵循下列指南:
- 在可用時使用低功耗音訊,以便輕鬆實現互通性和延遲目標。
- 為了提供良好的使用者體驗,從感應器偵測到耳機接收音訊的往返延遲時間必須低於 150 毫秒。
- 適用於採用進階音訊散布設定檔 (A2DP) 的藍牙 (BT) 傳統裝置:
驗證
如要驗證空間音訊功能的功能,請使用 SpatializerTest.java
提供的 CTS 測試。
如果空間化或頭部追蹤演算法實作不佳,可能無法達到最佳化建議中列出的往返延遲最佳化建議。