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

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

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 中的动态混音端口示例。

位完美播放属性

位完美播放属性是可选的,仅在 Audio 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 属性的实现,请使用支持通过脉冲编码调制 (PCM) 音频格式的 MQA 和 DSD 的 USB DAC。