Bevorzugte Mixerattribute auf USB-Geräten

Android 14 bietet Entwickler-APIs, mit denen Apps bevorzugte Mixer-Attribute für die USB-Audioausgabe abfragen und konfigurieren können. Diese bevorzugten Mixer-Attribute verbessern die USB-Audioausgabe, da Apps das Audioformat, die Channel-Maske, die Abtastrate und das Mixer-Verhalten festlegen können. Durch die Verwendung der bevorzugten Mixer-APIs auf unterstützten USB-Geräten können Nutzer eine Audiowiedergabe mit geringerer Latenz und Audioinhalte mit höherer Auflösung erhalten.

Diese Funktion bietet auch Unterstützung für das optionale Bit-Perfect-Wiedergabe-Mixerverhalten für USB-Geräte. Im Bit-Perfect-Modus können Master Quality Authenticated- (MQA-) und Direct Stream Digital- (DSD-)Formate auf kompatiblen Digital-Analog-Wandlern (DACs) wiedergegeben werden.

Schnittstelle

Der Audio Policy Manager verarbeitet die Mixer-Attribute im Framework. Die Klasse AudioMixerAttributes stellt die Attribute des Mixers dar. Die Klasse AudioMixerAttributes enthält ein AudioFormat-Objekt, das das Audioformat, die Channelmaske und die Abtastrate für den Mixer beschreibt. Standardmäßig bestimmt das Framework das Mixer-Verhalten, bei dem alle Audioquellen gemischt und Lautstärkeregelung und Effekte angewendet werden.

Wenn für das Mixer-Verhalten der Modus BIT_PERFECT verwendet wird, sendet das System den Audioinhalt ohne Änderungen über das Audio-Framework, die HAL und optional den digitalen Signalprozessor (DSP) von der API zum USB-Gerät. Der Modus BIT_PERFECT unterstützt codierte Formate wie MQA oder DSD, bei denen eine Lautstärkeanpassung oder ein Mixing die Bedeutung der Daten zerstören kann.

Wenn Apps Mixer-Attribute konfigurieren, öffnet das Framework den Ausgabestream bei Bedarf mit neuen Attributen. Die folgende Abbildung zeigt die Schnittstelle zwischen der App, dem Framework und dem HAL, wenn Mixer-Attribute festgelegt werden:

preferred-mixer-attr

Abbildung 1. Schnittstelle zwischen App, Framework und HAL.

Implementierung

Die Implementierung bevorzugter Mixer-Attribute, mit Ausnahme des Attributs BIT_PERFECT, für USB-Audio ist für Android 14 obligatorisch.

Bevorzugte Mixer-Attribute

Zur Unterstützung bevorzugter Mixer-Attribute müssen Anbieter das Weiterleiten von USB-Geräten an den dynamischen Mix-Port unterstützen. Das funktioniert so:

  1. Definieren Sie den dynamischen Mix-Port in usb_audio_policy_configuration.xml.

  2. Deklarieren Sie die Möglichkeit, USB-Geräte an dynamische Mix-Ports weiterzuleiten, entweder in der Audiokonfiguration oder in den AIDL-Methoden getAudioPorts und getAudioRoutes.

Die Referenzimplementierung für den USB-Audio-HAL finden Sie unter hardware/libhardware/modules/usbaudio. Ein Beispiel für einen dynamischen Mix-Port finden Sie unter frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml.

Attribut für die bitgenaue Wiedergabe

Das Attribut für die bitgenaue Wiedergabe ist optional und wird nur in der AIDL-Implementierung des Audio-HAL unterstützt. Um die bitgenaue Wiedergabe zu unterstützen, müssen Anbieter dem dynamischen Mix-Port, der an das USB-Gerät weitergeleitet werden kann, das Flag für die bitgenaue Ausgabe AUDIO_OUTPUT_FLAG_BIT_PERFECT hinzufügen.

Das folgende Codebeispiel zeigt die Verwendung des Flags AUDIO_OUTPUT_FLAG_BIT_PERFECT in 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>

Wenn das Attribut für die bitgenaue Wiedergabe angegeben ist, muss die HAL dafür sorgen, dass der Audio-Stream ohne Änderungen an das USB-Gerät gesendet wird. Das bedeutet, dass der Audio-Stream keine Lautstärkeskalierung, keine Sample-Rate-Konvertierung und keine Audioverarbeitungseffekte aufweisen darf und nicht im DSP gemischt werden darf. In diesem Fall steuert die Hardware die Lautstärke, da das Framework keine Software-Lautstärkeregelung bietet.

Validierung

Führen Sie die CTS-Tests in PreferredMixerAttributesTestActivity.java aus, um die Unterstützung für bevorzugte Mixer-Attribute für USB-Geräte zu validieren.

Verwenden Sie zur Validierung der Implementierung des Attributs BIT_PERFECT USB-DACs, die MQA- und DSD-Audioformate über PCM (Pulse-Code Modulation) unterstützen.