В Android 14 есть API для разработчиков, которые позволяют приложениям запрашивать и настраивать предпочтительные атрибуты микшера для воспроизведения аудио через USB. Эти предпочтительные атрибуты микшера позволяют приложениям задавать формат аудио, маску каналов, частоту дискретизации и поведение микшера, чтобы улучшить воспроизведение аудио через USB. Используя предпочтительные API микшера на поддерживаемых USB-устройствах, пользователи могут получить более низкую задержку воспроизведения звука и более высокое разрешение аудиоконтента.
Эта функция также поддерживает дополнительный режим микшера для побитового воспроизведения на USB-устройствах. Режим точного воспроизведения позволяет воспроизводить файлы в форматах Master Quality Authenticated (MQA) и Direct Stream Digital (DSD) на совместимых цифро-аналоговых преобразователях (ЦАП).
Интерфейс
Атрибуты микшера в структуре обрабатываются Менеджером аудиополитик. Класс AudioMixerAttributes
представляет атрибуты микшера. Класс AudioMixerAttributes включает объект AudioFormat, который описывает формат аудиоданных, маску канала и частоту дискретизации для микшера. По умолчанию поведение микшера определяется фреймворком. Микшер смешивает все источники звука и применяет к ним эффекты и регулировку громкости.
Если микшер работает в режиме BIT_PERFECT, система отправляет аудиоконтент без изменений через аудиофреймворк, HAL и, при необходимости, цифровой сигнальный процессор (DSP) от API до USB-устройства. Режим BIT_PERFECT поддерживает закодированные форматы, такие как MQA или DSD, в которых любое масштабирование громкости или микширование может исказить данные.
Когда приложения настраивают атрибуты микшера, фреймворк при необходимости повторно открывает выходной поток с новыми атрибутами. На следующем рисунке показан интерфейс между приложением, фреймворком и HAL, когда заданы атрибуты микшера:
Рисунок 1. Интерфейс между приложением, фреймворком и HAL.
Реализация
В Android 14 обязательно реализовать атрибуты предпочитаемого микшера, отличные от атрибута BIT_PERFECT, для USB-аудио.
Предпочитаемые атрибуты микшера
Чтобы поддерживать атрибуты предпочитаемого микшера, поставщики должны обеспечить маршрутизацию USB-устройств на динамический порт микшера следующим образом:
Укажите порт динамического микса в
usb_audio_policy_configuration.xml.Задекларируйте возможность перенаправлять USB-устройства на порты динамического микширования в конфигурации аудиоправил или в методах AIDL
getAudioPortsиgetAudioRoutes.
Справочную реализацию HAL для USB-аудио можно найти в разделе hardware/libhardware/modules/usbaudio.
Пример динамического порта для микширования можно найти в frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml.
Атрибут воспроизведения без потерь
Атрибут bit-perfect playback является необязательным и поддерживается только в реализации Audio HAL на основе AIDL. Чтобы поддерживать воспроизведение без потерь, поставщики должны добавить флаг 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).