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 之间的接口:
图 1. 应用、框架和 HAL 之间的接口。
实现
对于 Android 14,对于 USB 音频,必须实现首选混合器属性(BIT_PERFECT
属性除外)。
首选混音器属性
如需支持首选混音器属性,供应商必须支持将 USB 设备路由到动态混音端口,如下所示:
- 在
usb_audio_policy_configuration.xml
中定义动态混音端口。 - 在音频政策配置或
getAudioPorts
和getAudioRoutes
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.xml
中 AUDIO_OUTPUT_FLAG_BIT_PERFECT
标志的用法:
1 |
|
如果指定了位完美播放属性,HAL 必须确保在不做任何修改的情况下将音频流发送到 USB 设备,也就是说,音频流不得有任何音量调节及采样率转换。或音频处理效果,且不能在 DSP 中混音。 在这种情况下,硬件会控制音量,因为框架不会提供任何软件音量控制。
注意:如果没有位完美位播放属性,应用将无法通过音频框架在线播放高分辨率内容,例如 DSD 和 MQA。
验证
在 PreferredMixerAttributesTestActivity.java
中运行 CTS 测试,验证对 USB 设备首选混音器属性的支持。
如需验证 BIT_PERFECT
属性的实现,请使用支持 MQA 和 DSD 的脉冲编码调制 (PCM) 音频格式的 USB DAC。
转载自Android官网,原文地址: https://source.android.com/docs/core/audio/preferred-mixer-attr?hl=zh-cn