Android 14 提供了开发者 API,应用可以使用这些 API 查询和配置 USB 音频播放的首选混音器属性。这些首选混音器属性通过允许应用设置音频格式、声道掩码、采样率和混音器行为,从而改善 USB 音频播放体验。通过在支持的 USB 设备上使用首选混音器 API,用户可以获得更低延迟的音频播放和更高分辨率的音频内容。
此功能还为 USB 设备的可选的位完美播放混音器行为提供支持。位完美模式支持兼容的数模转换器 (DAC) 上的主带品质认证 (MQA) 和直接数字流 (DSD) 格式的播放。
接口
Audio Policy Manager 在框架中处理混音器属性。AudioMixerAttributes
类代表混音器的属性。AudioMixerAttributes
类包含一个 AudioFormat
对象,该对象描述了混音器的音频数据格式、声道掩码和采样率。默认情况下,框架确定混音器行为,该行为混合所有音频源并应用音量控制和效果。
如果混音器行为使用 BIT_PERFECT
模式,系统会将音频内容从 API 一直到 USB 设备,在不经过音频框架、HAL 以及可选的数字信号处理器 (DSP) 修改的情况下发送。BIT_PERFECT
模式支持编码格式,例如 MQA 或 DSD,在这些格式上,任何音量缩放或混合都可能破坏数据的意义。
当应用配置混音器属性时,如果需要,框架会使用新属性重新打开输出流。下图显示了当设置混音器属性时,应用、框架和 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
中的动态混音端口示例。
位完美播放属性
位完美播放属性是可选的,仅在 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
属性的实现,请使用支持通过脉冲编码调制 (PCM) 音频格式的 MQA 和 DSD 的 USB DAC。