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:
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:
Definieren Sie den dynamischen Mix-Port in
usb_audio_policy_configuration.xml.Deklarieren Sie die Möglichkeit, USB-Geräte an dynamische Mix-Ports weiterzuleiten, entweder in der Audiokonfiguration oder in den AIDL-Methoden
getAudioPortsundgetAudioRoutes.
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.