Предпочтительные атрибуты микшера на USB-устройствах

В 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, когда заданы атрибуты микшера:

preferred-mixer-attr

Рисунок 1. Интерфейс между приложением, фреймворком и HAL.

Реализация

В Android 14 обязательно реализовать атрибуты предпочитаемого микшера, отличные от атрибута BIT_PERFECT, для USB-аудио.

Предпочитаемые атрибуты микшера

Чтобы поддерживать атрибуты предпочитаемого микшера, поставщики должны обеспечить маршрутизацию USB-устройств на динамический порт микшера следующим образом:

  1. Укажите порт динамического микса в usb_audio_policy_configuration.xml.

  2. Задекларируйте возможность перенаправлять 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).