Android 14 提供了開發者 API,應用程式可使用這些 API 來查詢和配置 USB 音訊播放的首選混音器屬性。這些首選混音器屬性允許應用程式設定音訊格式、通道遮罩、取樣率和混音器行為,從而改善 USB 音訊播放體驗。透過在支援的 USB 裝置上使用首選混音器 API,使用者可以獲得更低延遲的音訊播放和更高解析度的音訊內容。
此功能還為 USB 裝置的選用位元完美播放混音器行為提供支援。 Bit-Perfect 模式支援在相容的數位類比轉換器 (DAC) 上播放經過母帶品質認證 (MQA) 和直接串流數位 (DSD) 格式。
介面
音訊策略管理器處理框架中的混音器屬性。 AudioMixerAttributes
類別表示混音器的屬性。 AudioMixerAttributes
類別包含一個AudioFormat
對象,該對象描述混頻器的音訊資料格式、通道遮罩和取樣率。預設情況下,框架決定混音器行為,混合所有音訊來源並套用音量控制和效果。
如果混音器行為使用BIT_PERFECT
模式,則係統透過音訊框架、HAL 和可選的數位訊號處理器 (DSP) 將不加修改的音訊內容從 API 傳送到 USB 裝置。 BIT_PERFECT
模式支援編碼格式,例如 MQA 或 DSD,在這些格式上任何磁碟區縮放或混合都可能破壞資料的含義。
當應用程式配置混合器屬性時,框架會根據需要使用新屬性重新開啟輸出流。下圖展示了設定mixer屬性時app、framework和HAL之間的介面:
圖 1.應用程式、框架和 HAL 之間的介面。
執行
對於 Android 14,USB 音訊的首選混音器屬性( BIT_PERFECT
屬性除外)的實作是強制的。
首選混合器屬性
為了支援首選混音器屬性,供應商必須支援將 USB 裝置路由到動態混音端口,如下所示:
在
usb_audio_policy_configuration.xml
中定義動態混合連接埠。在音訊策略配置中或在
getAudioPorts
和getAudioRoutes
AIDL 方法中聲明將 USB 裝置路由到動態混合連接埠的能力。
請參閱hardware/libhardware/modules/usbaudio
下 USB 音訊 HAL 的參考實作。請參閱frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml
中的動態混合連接埠範例。
位元完美播放屬性
位元完美播放屬性是可選的,並且僅在音訊 HAL 的 AIDL 實作中支援。為了支援位元完美播放,供應商必須將位元完美輸出標誌AUDIO_OUTPUT_FLAG_BIT_PERFECT
新增至可路由至 USB 裝置的動態混音連接埠。
以下程式碼範例顯示了usb_audio_policy_configuration.xml
中AUDIO_OUTPUT_FLAG_BIT_PERFECT
標誌的使用:
<module name="usb" halVersion="2.0">
<mixPorts>
<mixPort name="hifi_output"
role="source" flags="AUDIO_OUTPUT_FLAG_BIT_PERFECT">
</mixPort>
</mixPorts>
<devicePorts>
<devicePort tagName="USB Device Out"
type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
</devicePort>
</devicePorts>
<routes>
<route type="mix" sink="USB Device Out"
sources="hifi_output"/>
</routes>
</module>
如果指定了bit-perfect的播放屬性,HAL必須保證音訊串流在傳送至USB裝置時不進行任何修改,即音訊串流不能有任何音量縮放、取樣率轉換或音訊處理效果以及不得在 DSP 中混合。在這種情況下,硬體控制音量,因為框架不提供任何軟體音量控制。
驗證
執行PreferredMixerAttributesTestActivity.java
中的 CTS 測試以驗證 USB 裝置的首選混音器屬性的支援。
若要驗證BIT_PERFECT
屬性的實現,請使用支援基於脈衝編碼調變 (PCM) 音訊格式的 MQA 和 DSD 的 USB DAC。