Preferowane atrybuty miksera na urządzeniach USB

Android 14 udostępnia interfejsy API dla deweloperów, których aplikacje mogą używać do wysyłania zapytań i konfigurowania preferowanych atrybutów miksera do odtwarzania dźwięku przez USB. Te preferowane atrybuty miksera poprawiają odtwarzanie dźwięku przez USB, umożliwiając aplikacjom ustawianie formatu dźwięku, maski kanału, częstotliwości próbkowania i zachowania miksera. Dzięki preferowanym interfejsom API miksera na obsługiwanych urządzeniach USB użytkownicy mogą uzyskać odtwarzanie dźwięku z mniejszym opóźnieniem i zawartość audio w wyższej rozdzielczości.

Ta funkcja obsługuje też opcjonalny mikser odtwarzania z zachowaniem bitów na urządzeniach USB. Tryb bit-perfect umożliwia odtwarzanie formatów master quality authenticated (MQA) i direct stream digital (DSD) na zgodnych przetwornikach cyfrowo-analogowych (DAC).

Interfejs

Menedżer zasad dotyczących dźwięku obsługuje atrybuty miksera w ramach platformy. Klasa AudioMixerAttributes reprezentuje atrybuty miksera. Klasa AudioMixerAttributes zawiera obiekt AudioFormat, który opisuje format danych audio, maskę kanału i częstotliwość próbkowania dla miksera. Domyślnie platforma określa działanie miksera, który miksuje wszystkie źródła dźwięku i zachowuje głośność oraz efekty.

Jeśli zachowanie miksera używa trybu BIT_PERFECT, system wysyła zawartość audio bez modyfikacji przez interfejs audio, HAL i opcjonalnie procesor sygnałowy (DSP), od interfejsu API do urządzenia USB. Tryb BIT_PERFECT obsługuje zakodowane formaty, takie jak MQA czy DSD, w przypadku których jakiekolwiek skalowanie lub miksowanie głośności może zniszczyć znaczenie danych.

Gdy aplikacje konfigurują atrybuty miksera, framework ponownie otwiera strumień wyjściowy, w razie potrzeby z nowymi atrybutami. Na rysunku poniżej widać interfejs między aplikacją, frameworkem i HAL, gdy ustawione są atrybuty miksera:

preferred-mixer-attr

Rysunek 1. Interfejs między aplikacją, frameworkem i HAL.

Implementacja

W Androidzie 14 obowiązkowe jest wdrożenie preferowanych atrybutów miksera (z wyjątkiem atrybutu BIT_PERFECT) w przypadku dźwięku USB.

Preferowane atrybuty miksera

Aby obsługiwać preferowane atrybuty miksera, producenci muszą obsługiwać przekierowywanie urządzeń USB do portu dynamicznego miksowania w ten sposób:

  1. Zdefiniuj port dynamicznego miksu w usb_audio_policy_configuration.xml.

  2. Zadeklaruj możliwość kierowania urządzeń USB do portów miksowania dynamicznego w konfiguracji zasad dotyczących dźwięku lub w metodach AIDL getAudioPorts i getAudioRoutes.

Implementację referencyjną interfejsu HAL dźwięku USB znajdziesz w hardware/libhardware/modules/usbaudio. Przykład portu dynamicznego w frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml

Atrybut Bit-perfect playback

Atrybut odtwarzania z zachowaniem bitów jest opcjonalny i obsługiwany tylko w implementacji AIDL interfejsu Audio HAL. Aby obsługiwać odtwarzanie z zachowaniem bitów, dostawcy muszą dodać flagę wyjścia z zachowaniem bitów AUDIO_OUTPUT_FLAG_BIT_PERFECT do dynamicznego portu miksowania, który może być kierowany na urządzenie USB.

Poniższy przykładowy kod pokazuje użycie flagi AUDIO_OUTPUT_FLAG_BIT_PERFECT w funkcji 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>

Jeśli jest określony atrybut odtwarzania z doskonałą jakością bitów, HAL musi zapewnić, aby strumień audio był wysyłany do urządzenia USB bez żadnych modyfikacji, co oznacza, że strumień audio nie może być skalowany pod względem głośności, przekształcany pod kątem częstotliwości próbkowania ani poddawany efektom przetwarzania audio i nie może być miksowany w DSP. W takim przypadku głośność jest kontrolowana przez sprzęt, ponieważ platforma nie zapewnia żadnej kontroli głośności za pomocą oprogramowania.

Weryfikacja

Uruchom testy CTS w PreferredMixerAttributesTestActivity.java, aby sprawdzić obsługę preferowanych atrybutów miksera w przypadku urządzeń USB.

Aby sprawdzić implementację atrybutu BIT_PERFECT, użyj przetworników cyfrowo-analogowych USB, które obsługują formaty dźwięku MQA i DSD zamiast kodowania pulsowego (PCM).