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

本文最后更新于 2024年4月26日 晚上

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 设备路由到动态混音端口的功能。

注意:如果将 USB 音频功能迁移到主要 HAL,请在主 HAL 的音频政策配置文件中定义动态混音端口和 USB 音频路由。

请参阅 hardware/libhardware/modules/usbaudio 下的 USB 音频 HAL 的参考实现。 查看 frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml 中的动态组合端口示例。

注意:只有 USB 设备才能设置首选的混音器属性。

位完美播放属性

位完美播放属性是可选的,仅在音频 HAL 的 AIDL 实现中受支持。如需支持位完美播放功能,供应商必须将位完美输出标记 AUDIO_OUTPUT_FLAG_BIT_PERFECT 添加到可路由到 USB 设备的动态混音端口。

以下代码示例展示了 usb_audio_policy_configuration.xmlAUDIO_OUTPUT_FLAG_BIT_PERFECT 标志的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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 中混音。 在这种情况下,硬件会控制音量,因为框架不会提供任何软件音量控制。

注意:如果没有位完美位播放属性,应用将无法通过音频框架在线播放高分辨率内容,例如 DSD 和 MQA。

验证

PreferredMixerAttributesTestActivity.java 中运行 CTS 测试,验证对 USB 设备首选混音器属性的支持。

如需验证 BIT_PERFECT 属性的实现,请使用支持 MQA 和 DSD 的脉冲编码调制 (PCM) 音频格式的 USB DAC。


USB 设备上的首选混音器属性
https://www.shangyexin.com/2024/09/08/audio-usb-preferred-mixer-attr/
作者
Yasin
发布于
2024年9月8日
许可协议