Android 14 bietet Entwickler-APIs, mit denen Apps bevorzugte Mixer-Attribute für die USB-Audiowiedergabe abfragen und konfigurieren können. Diese bevorzugten Mischerattribute verbessern die USB-Audiowiedergabe, da Apps das Audioformat, die Kanalmaske, die Abtastrate und das Mischerverhalten festlegen können. Wenn die bevorzugten Mixer-APIs auf unterstützten USB-Geräten verwendet werden, können Nutzer Audioinhalte mit geringerer Latenz und höherer Auflösung wiedergeben.
Diese Funktion unterstützt auch das optionale Verhalten des bitgenauen Wiedergabemixers für USB-Geräte. Der Bit-perfect-Modus ermöglicht die Wiedergabe von MQA- (Masterqualitäts-Authentifizierung) und Direct Stream Digital (DSD)-Formaten auf kompatiblen Digital-zu-Analog-Konvertern (DACs).
Benutzeroberfläche
Der Audio Policy Manager verwaltet die Mixer-Attribute im Framework. Die Klasse AudioMixerAttributes
stellt die Attribute des Mischers dar. Die AudioMixerAttributes
-Klasse enthält ein AudioFormat
-Objekt, das das Audiodatenformat, die Kanalmaske und die Abtastrate für den Mixer beschreibt. Standardmäßig bestimmt das Framework das Verhalten des Mixers, der alle Audioquellen mischt und Lautstärkeregelung und Effekte anwendet.
Wenn das Mischerverhalten den BIT_PERFECT
-Modus verwendet, sendet das System den Audioinhalt unverändert über das Audio-Framework, HAL und optional über 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 jede Volume-Skalierung oder -Mischung die Bedeutung der Daten zerstören kann.
Wenn Apps Mixer-Attribute konfigurieren, öffnet das Framework den Ausgabestream bei Bedarf mit neuen Attributen wieder. Die folgende Abbildung zeigt die Schnittstelle zwischen App, Framework und HAL, wenn Mixer-Attribute festgelegt sind:
Abbildung 1. Schnittstelle zwischen App, Framework und HAL.
Implementierung
Für Android 14 ist die Implementierung bevorzugter Mixerattribute für USB-Audio obligatorisch, mit Ausnahme des Attributs BIT_PERFECT
.
Bevorzugte Mixer-Attribute
Zur Unterstützung bevorzugter Mixer-Attribute müssen Anbieter das Routing von USB-Geräten an den dynamischen Mix-Port so unterstützen:
Definiere den dynamischen Mix-Port in
usb_audio_policy_configuration.xml
.Deklarieren Sie die Möglichkeit, USB-Geräte zu dynamischen Mix-Ports weiterzuleiten, entweder in der Konfiguration der Audiorichtlinie oder in den AIDL-Methoden
getAudioPorts
undgetAudioRoutes
.
Die Referenzimplementierung für die USB-Audio-HAL finden Sie unter hardware/libhardware/modules/usbaudio
.
Ein Beispiel für einen dynamischen Mix-Port findest du in frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml
.
Attribut „Bitperfekte Wiedergabe“
Das Attribut „Bit-perfect playback“ ist optional und wird nur in der AIDL-Implementierung der Audio HAL unterstützt. Zur Unterstützung der bitgenauen Wiedergabe müssen Anbieter dem dynamischen Mix-Port, der an das USB-Gerät weitergeleitet werden kann, das Bitgenau-Ausgabe-Flag 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 „Bit-perfect Playback“ angegeben ist, muss die HAL dafür sorgen, dass der Audiostream ohne Änderungen an das USB-Gerät gesendet wird. Das bedeutet, dass der Audiostream keine Lautstärkeskalierung, keine Samplerate-Konvertierung und keine Audioverarbeitungseffekte haben darf und nicht im DSP gemischt werden darf. In diesem Fall wird die Lautstärke über die Hardware gesteuert, da das Framework keine Software-Lautstärkeregelung bietet.
Zertifizierungsstufe
Führen Sie die CTS-Tests in PreferredMixerAttributesTestActivity.java
aus, um zu prüfen, ob bevorzugte Mixerattribute für USB-Geräte unterstützt werden.
Verwende zur Validierung der Implementierung des BIT_PERFECT
-Attributs USB-DACs, die MQA und DSD über PCM-Audioformate (Pulse Code Modulation) unterstützen.