Android 14 提供開發人員 API,應用程式可使用這些 API 查詢及設定 USB 音訊播放的偏好混音器屬性。這些偏好的混音器屬性可讓應用程式設定音訊格式、聲道遮罩、取樣率和混音器行為,進而提升 USB 音訊播放體驗。在支援的 USB 裝置上使用偏好的混音器 API,使用者就能以較低的音訊播放延遲時間,享受更高解析度的音訊內容。
這項功能也支援 USB 裝置的選用位元完美播放混音器行為。位元完美模式可讓相容的數位類比轉換器 (DAC) 播放經過認證的主帶品質 (MQA) 和直接串流數位 (DSD) 格式。
介面
音訊政策管理工具會處理架構中的混音器屬性。AudioMixerAttributes
類別代表混音器的屬性。AudioMixerAttributes
類別包含 AudioFormat
物件,用於說明混音器的音訊資料格式、聲道遮罩和取樣率。根據預設,架構會決定混音器行為,混音器會混合所有音訊來源,並套用音量控制和效果。
如果混音器行為使用 BIT_PERFECT
模式,系統會透過音訊架構、HAL 和選用的數位訊號處理器 (DSP),將音訊內容從 API 下傳至 USB 裝置,且不會進行修改。BIT_PERFECT
模式支援 MQA 或 DSD 等編碼格式,任何音量縮放或混音作業都可能破壞資料的意義。
應用程式設定混音器屬性時,架構會視需要使用新屬性重新開啟輸出串流。下圖顯示設定混音器屬性時,應用程式、架構和 HAL 之間的介面:
圖 1. 應用程式、架構和 HAL 之間的介面。
實作
除了 BIT_PERFECT
屬性外,Android 14 也強制實作 USB 音訊的偏好混音器屬性。
偏好的混音器屬性
如要支援偏好的混音器屬性,供應商必須支援將 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
,查看動態組合連接埠的範例。
位元完美播放屬性
位元完美播放屬性為選用屬性,且僅支援 Audio 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>
如果指定了位元完美播放屬性,HAL 必須確保音訊串流傳送至 USB 裝置時未經過任何修改,也就是音訊串流不得有任何音量縮放、取樣率轉換或音訊處理效果,且不得在 DSP 中混音。在這種情況下,音量是由硬體控制,因為架構未提供任何軟體音量控制。
驗證
在 PreferredMixerAttributesTestActivity.java
中執行 CTS 測試,驗證 USB 裝置是否支援偏好的混音器屬性。
如要驗證 BIT_PERFECT
屬性的實作方式,請使用支援 MQA 和 DSD 的 USB DAC,透過脈衝編碼調變 (PCM) 音訊格式傳輸。