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 等編碼格式,其中任何磁碟區縮放或混合作業都會毀損資料的意義。
應用程式設定混合器屬性時,如果需要,架構會使用新的屬性重新開啟輸出串流。下圖顯示在設定 Mixer 屬性時,應用程式、架構和 HAL 之間的介面:
圖 1. 應用程式、架構和 HAL 之間的介面。
實作
在 Android 14 中,除了 BIT_PERFECT
屬性以外,實作 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 的脈衝編碼調變 (PCM) 音訊格式的 USB DAC。