Preferowane atrybuty miksera na urządzeniach USB

Android 14 udostępnia deweloperom interfejsy API 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ą jakość odtwarzania dźwięku przez USB, ponieważ umożliwiają aplikacjom ustawianie formatu dźwięku, maski kanałów, częstotliwości próbkowania i zachowania miksera. Dzięki użyciu preferowanych interfejsów API miksera na obsługiwanych urządzeniach USB użytkownicy mogą uzyskać odtwarzanie dźwięku z mniejszym opóźnieniem i treści audio o wyższej rozdzielczości.

Ta funkcja obsługuje też opcjonalne zachowanie miksera odtwarzania bit-perfect na urządzeniach USB. Tryb bit-perfect umożliwia odtwarzanie formatów MQA (Master Quality Authenticated) i DSD (Direct Stream Digital) na zgodnych przetwornikach cyfrowo-analogowych (DAC).

Interfejs

Atrybutami miksera w frameworku zarządza menedżer zasad audio. Klasa AudioMixerAttributes reprezentuje atrybuty miksera. Klasa AudioMixerAttributes zawiera obiekt AudioFormat, który opisuje format danych audio, maskę kanałów i częstotliwość próbkowania miksera. Domyślnie framework określa zachowanie miksera, który miksuje wszystkie źródła dźwięku oraz stosuje regulację głośności i efekty.

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

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

preferred-mixer-attr

Rysunek 1. Interfejs między aplikacją, frameworkiem a HAL.

Implementacja

Implementacja preferowanych atrybutów miksera innych niż atrybut BIT_PERFECT w przypadku dźwięku przez USB jest obowiązkowa w Androidzie 14.

Preferowane atrybuty miksera

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

  1. Zdefiniuj port miksowania dynamicznego w usb_audio_policy_configuration.xml.

  2. Zadeklaruj możliwość kierowania urządzeń USB do portów miksowania dynamicznego w konfiguracji zasad audio lub w metodach AIDL getAudioPorts i getAudioRoutes.

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

Atrybut odtwarzania bit-perfect

Atrybut odtwarzania bit-perfect jest opcjonalny i obsługiwany tylko w implementacji AIDL HAL audio. Aby obsługiwać odtwarzanie bit-perfect, dostawcy muszą dodać flagę wyjściową bit-perfect AUDIO_OUTPUT_FLAG_BIT_PERFECT do portu miksowania dynamicznego, który można kierować do urządzenia USB.

Poniższy przykład kodu pokazuje użycie flagi AUDIO_OUTPUT_FLAG_BIT_PERFECT w pliku 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 określony jest atrybut odtwarzania bit-perfect, HAL musi zapewnić, że strumień audio jest wysyłany do urządzenia USB bez żadnych modyfikacji, czyli nie może być skalowany, konwertowany na inną częstotliwość próbkowania ani przetwarzany przez efekty audio, a także nie może być miksowany w DSP. W takim przypadku głośność jest sterowana przez sprzęt, ponieważ framework nie zapewnia żadnej programowej regulacji głośności.

Weryfikacja

Aby sprawdzić obsługę preferowanych atrybutów miksera na urządzeniach USB, uruchom testy CTS w PreferredMixerAttributesTestActivity.java.

Aby sprawdzić implementację atrybutu BIT_PERFECT, użyj przetworników cyfrowo-analogowych USB, które obsługują formaty audio MQA i DSD przez modulację impulsowo-kodową (PCM).