USB 设备上的首选混音器属性

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 之间的接口:

preferred-mixer-attr

图 1. 应用、框架和 HAL 之间的接口。

实现

对于 Android 14,对于 USB 音频,必须实现首选混合器属性(BIT_PERFECT 属性除外)。

首选混音器属性

如需支持首选混音器属性,供应商必须支持将 USB 设备路由到动态混音端口,如下所示:

  1. usb_audio_policy_configuration.xml 中定义动态混音端口。

  2. 音频政策配置getAudioPortsgetAudioRoutes 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.xmlAUDIO_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。