Android 14 предоставляет API-интерфейсы разработчика , которые приложения могут использовать для запроса и настройки предпочтительных атрибутов микшера для воспроизведения звука через USB. Эти предпочтительные атрибуты микшера улучшают качество воспроизведения звука через USB, позволяя приложениям устанавливать формат аудио, маску канала, частоту дискретизации и поведение микшера. Используя предпочтительные API-интерфейсы микшера на поддерживаемых USB-устройствах, пользователи могут получить воспроизведение звука с меньшей задержкой и аудиоконтент с более высоким разрешением.
Эта функция также обеспечивает поддержку опционального поведения микшера воспроизведения bit-perfect для USB-устройств. Режим bit-perfect позволяет воспроизводить форматы master quality authenticated (MQA) и direct stream digital (DSD) на совместимых цифро-аналоговых преобразователях (ЦАП).
Интерфейс
Audio Policy Manager обрабатывает атрибуты микшера в фреймворке. Класс AudioMixerAttributes
представляет атрибуты микшера. Класс AudioMixerAttributes
включает объект AudioFormat
, который описывает формат аудиоданных, маску канала и частоту дискретизации для микшера. По умолчанию фреймворк определяет поведение микшера, который микширует все аудиоисточники и применяет управление громкостью и эффекты.
Если поведение микшера использует режим BIT_PERFECT
, система отправляет аудиоконтент без изменений через аудиофреймворк, HAL и опционально цифровой сигнальный процессор (DSP) из API на USB-устройство. Режим BIT_PERFECT
поддерживает закодированные форматы, такие как MQA или DSD, в которых любое масштабирование громкости или микширование может разрушить смысл данных.
Когда приложения настраивают атрибуты микшера, фреймворк повторно открывает выходной поток с новыми атрибутами, если это необходимо. На следующем рисунке показан интерфейс между приложением, фреймворком и HAL, когда атрибуты микшера установлены:
Рисунок 1. Интерфейс между приложением, фреймворком и HAL.
Выполнение
Реализация предпочтительных атрибутов микшера, отличных от атрибута BIT_PERFECT
, для USB-аудио является обязательной для Android 14.
Предпочтительные атрибуты микшера
Для поддержки предпочтительных атрибутов микшера поставщики должны поддерживать маршрутизацию USB-устройств к порту динамического микширования следующим образом:
Определите порт динамического микширования в
usb_audio_policy_configuration.xml
.Объявите возможность маршрутизации USB-устройств к портам динамического микширования либо в конфигурации политики звука , либо в методах AIDL
getAudioPorts
иgetAudioRoutes
.
См. эталонную реализацию для USB audio HAL в hardware/libhardware/modules/usbaudio
. См. пример порта динамического микширования в frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml
.
Атрибут идеального воспроизведения битов
Атрибут bit-perfect playback является необязательным и поддерживается только в реализации AIDL Audio HAL. Для поддержки bit-perfect playback поставщики должны добавить bit-perfect output flag AUDIO_OUTPUT_FLAG_BIT_PERFECT
к порту динамического микширования, который может быть направлен на USB-устройство.
Следующий пример кода демонстрирует использование флага AUDIO_OUTPUT_FLAG_BIT_PERFECT
в usb_audio_policy_configuration.xml
:
<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>
Если указан атрибут воспроизведения bit-perfect, HAL должен гарантировать, что аудиопоток отправляется на USB-устройство без каких-либо изменений, то есть аудиопоток не должен иметь никаких масштабирований громкости, преобразований частоты дискретизации или эффектов обработки звука и не должен быть микширован в DSP. В этом случае аппаратное обеспечение управляет громкостью, поскольку фреймворк не предоставляет никакого программного управления громкостью.
Проверка
Запустите тесты CTS в PreferredMixerAttributesTestActivity.java
, чтобы проверить поддержку предпочтительных атрибутов микшера для USB-устройств.
Для проверки реализации атрибута BIT_PERFECT
используйте USB-ЦАП, поддерживающие аудиоформаты MQA и DSD поверх импульсно-кодовой модуляции (PCM).