Android 13 bietet OEMs eine Standardmethode zur Unterstützung von Spatial Audio und der Erfassung von Kopfbewegungen, ohne dass anbieterspezifische Anpassungen oder SDKs erforderlich sind.
Spatial Audio ist eine Technologie, mit der ein Klangfeld um den Zuhörer herum erzeugt wird. Mit Spatial Audio können Nutzer Kanäle und einzelne Klänge an Positionen wahrnehmen, die sich von den physischen Positionen der Wandler des für die Wiedergabe verwendeten Audiogeräts unterscheiden. So bietet Spatial Audio dem Nutzer beispielsweise die Möglichkeit, einen Mehrkanal-Soundtrack über Kopfhörer zu hören. Mit Spatial Audio können Kopfhörernutzer Dialoge vor sich und Surround-Effekte hinter sich wahrnehmen, obwohl sie nur zwei Wandler für die Wiedergabe haben.
Die Erfassung von Kopfbewegungen hilft dem Nutzer, die Art der räumlichen Klangbühne zu verstehen, die um seinen Kopf herum simuliert wird. Diese Funktion ist nur effektiv, wenn die Latenz niedrig ist. Die Latenz wird als die Zeit zwischen der Kopfbewegung des Nutzers und dem Zeitpunkt gemessen, an dem er hört, dass sich die virtuelle Lautsprecherposition entsprechend bewegt.
Android 13 optimiert Spatial Audio und die Erfassung von Kopfbewegungen, indem die Spatial Audio-Verarbeitung auf der niedrigsten möglichen Ebene in der Audio-Pipeline erfolgt, um die niedrigstmögliche Latenz zu erzielen.
Architektur
Das geänderte Android-Audio-Framework und die API in Android 13 erleichtern die Einführung der Spatial Audio-Technologie im gesamten Ökosystem.
Die folgende Abbildung zeigt die Änderungen an der Architektur der Audio-Pipeline, die mit Android 13 im Zusammenhang mit Spatial Audio vorgenommen wurden:
Abbildung 1 : Architektur der Audio-Pipeline mit Spatializer
Im neuen Modell ist der Spatializer Teil des Audio-Frameworks und vom Decoder entkoppelt. Der Spatializer nimmt gemischte Audioinhalte auf und rendert einen Stereostream an die Audio HAL. Durch die Entkopplung des Spatializers vom Decoder können OEMs verschiedene Anbieter für den Decoder und den Spatializer auswählen und die gewünschte Umlauflatenz für die Erfassung von Kopfbewegungen erzielen. Dieses neue Modell enthält auch Hooks zum Sensor-Framework für die Erfassung von Kopfbewegungen.
Die folgende Abbildung zeigt die Systemarchitektur des Audio-Frameworks für den Spatializer und den Effekt der Erfassung von Kopfbewegungen:
Abbildung 2 : Systemarchitektur mit Spatializer und Erfassung von Kopfbewegungen
Alle Spatial Audio-APIs sind auf App-Ebene in der öffentlichen
Spatializer Klasse gruppiert. Die SpatializerHelper
Klasse in den Audio-Dienstschnittstellen interagiert mit den System UI-Komponenten, um die
Spatializer-bezogene Funktionalität basierend auf den Plattform- und verbundenen Geräte
Funktionen zu verwalten. Die neue Spatializer Klasse im Audio-Richtliniendienst erstellt und steuert das Spatial
Audio-Diagramm, das für die Mehrkanalmischung und die räumliche Wiedergabe erforderlich ist. Dabei werden die
Funktionen berücksichtigt, die vom OEM,
den verbundenen Geräten und den aktiven Anwendungsfällen angegeben werden. Eine neue Mixer-Klasse SpatializerThread mischt Mehrkanal-Tracks und leitet die resultierende Mischung an eine Post-Processing-FX
Engine weiter, die eine Stereoausgabe an die Audio HAL rendert. Für die Erfassung von Kopfbewegungen gruppiert die
SpatializerPoseController Klasse Funktionen im Zusammenhang mit der Erfassung von Kopfbewegungen, um
mit dem Sensor-Stack zu interagieren und Sensorsignale zusammenzuführen und zu filtern, die an die Effekt-Engine weitergeleitet werden. Die Sensordaten für die Erfassung von Kopfbewegungen werden über das HID-Protokoll
vom Bluetooth-Treiber übertragen.
Änderungen an der Architektur der Audio-Pipeline in Android 13 verbessern Folgendes:
- Verringern der Latenz zwischen dem Spatializer und den Kopfhörern.
- Bereitstellen einheitlicher APIs für App-Entwickler.
- Steuern des Status der Erfassung von Kopfbewegungen über System-APIs.
- Erkennen von Sensoren für die Erfassung von Kopfbewegungen und Zuordnen zu aktiven Audiogeräten.
- Zusammenführen von Signalen von verschiedenen Sensoren und Berechnen der Kopfposition, die von der Effekt-Engine des Spatializers verwendet werden kann.
Funktionen wie die Bias-Kompensation, die Erkennung von Stille und die Ratenbegrenzung können mit der Utility-Bibliothek für die Erfassung von Kopfbewegungen implementiert werden.
Spatial Audio-APIs
Android 13 bietet System- und Entwickler-APIs für Spatial Audio.
OEMs können das App-Verhalten basierend auf der Verfügbarkeit und dem aktivierten Status von Funktionen anpassen, die von System-APIs festgelegt werden. Apps können auch Audioattribute konfigurieren, um Spatial Audio zu deaktivieren aus ästhetischen Gründen oder anzugeben, dass der Audiostream bereits für Spatial Audio verarbeitet wurde.
Informationen zu APIs für Entwickler finden Sie unter Spatializer.
OEMs können System-APIs verwenden, um die UI für die Einstellungen für Töne und Bluetooth zu implementieren. So können Nutzer den Status von Spatial Audio und der Funktion zur Erfassung von Kopfbewegungen für ihr Gerät steuern. Nutzer können Spatial Audio für den Lautsprecher und Kopfhörer mit Kabel in der UI für die Toneinstellungen aktivieren oder deaktivieren. Die Spatial Audio-Einstellung für den Lautsprecher ist nur verfügbar, wenn die Implementierung des Spatializer-Effekts den transauralen Modus unterstützt.
Nutzer können Spatial Audio und die Erfassung von Kopfbewegungen auch in den Bluetooth-Geräteeinstellungen für jedes Gerät aktivieren oder deaktivieren. Die Einstellung für die Erfassung von Kopfbewegungen ist nur verfügbar, wenn das Bluetooth-Headset einen Sensor für die Erfassung von Kopfbewegungen enthält.
Die Standardeinstellungen für Spatial Audio sind immer aktiviert, wenn die Funktion unterstützt wird. Eine vollständige Liste der System-APIs finden Sie unter Spatializer.java.
Der neue Sensortyp für die Erfassung von Kopfbewegungen Sensor.TYPE_HEAD_TRACKER wird dem Sensor-Framework hinzugefügt und von der Sensor HAL als dynamischer Sensor über Bluetooth oder USB bereitgestellt.
Spatial Audio einbinden
Neben der Implementierung der Effekt-Engine des Spatializers müssen OEMs ihre Plattform für die Unterstützung von Spatial Audio konfigurieren.
Voraussetzungen
Die folgenden Anforderungen müssen erfüllt sein, um Spatial Audio einzubinden:
- Die Audio HAL und der Audio-DSP müssen einen dedizierten Ausgabepfad für Spatial Audio unterstützen.
- Für Spatial Audio mit Erfassung von Kopfbewegungen müssen Kopfhörer über integrierte Sensoren für die Erfassung von Kopfbewegungen verfügen.
- Die Implementierung muss dem vorgeschlagenen Standard für die Erfassung von Kopfbewegungen über das HID Protokoll von einem Bluetooth-Headset zu einem Smartphone entsprechen.
- Für die Unterstützung von Spatial Audio ist Audio HAL v7.1 erforderlich.
So binden Sie Spatial Audio ein:
Deklarieren Sie die Unterstützung von Spatial Audio in der Datei
device.mkso:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=trueDadurch wird die Spatializer-Unterstützung von
AudioServiceinitialisiert.Deklarieren Sie die dedizierte Ausgabe für die Spatial Audio-Mischung in der Datei
audio_policy_configuration.xmlso:<audioPolicyConfiguration> <modules> <module> <mixPorts> <mixPort name="spatializer" role="source" flags="AUDIO_OUTPUT_FLAG_SPATIALIZER"> <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>Deklarieren Sie die Spatializer-Effektbibliothek in
audio_effects.xmlso:<audio_effects_conf> <libraries> <library name="spatializer_lib" path="libMySpatializer.so"/> … </libraries> <effects> <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>Anbieter, die den Spatializer-Effekt implementieren, müssen Folgendes beachten:
- Grundlegende Konfiguration und Steuerung sind mit anderen Effekten in der Effekt-HAL identisch.
Spezifische Parameter, die für das Framework erforderlich sind, um unterstützte Funktionen und Konfigurationen zu erkennen, z. B.:
SPATIALIZER_PARAM_SUPPORTED_LEVELSSPATIALIZER_PARAM_LEVELSPATIALIZER_PARAM_HEADTRACKING_SUPPORTEDSPATIALIZER_PARAM_HEADTRACKING_MODESPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKSSPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODESSPATIALIZER_PARAM_HEAD_TO_STAGE
Weitere Informationen finden Sie unter
effect_spatializer.h.
Empfehlungen
Wir empfehlen OEMs, bei der Implementierung die folgenden Richtlinien zu beachten:
- Verwenden Sie LE Audio, wenn verfügbar, um die Interoperabilität zu erleichtern und die Latenzziele zu erreichen.
- Die Umlauflatenz von der Erkennung der Sensorbewegung bis zum Audio, das von den Kopfhörern empfangen wird, muss für eine gute Nutzererfahrung weniger als 150 ms betragen.
- Für Bluetooth (BT) Classic mit Advanced Audio Distribution Profile (A2DP):
- Verwenden Sie einen Codec mit niedriger Latenz, z. B. Opus.
- Implementieren Sie Funktionen zur Latenzsteuerung in der Audio HAL. So können Sie die Leistung und den Energieverbrauch optimieren, wenn die Erfassung von Kopfbewegungen deaktiviert ist, und die Erfassung von Kopfbewegungen unter nicht optimalen Bedingungen deaktivieren.
Validierung
Verwenden Sie die CTS-Tests
in SpatializerTest.java, um die Funktionalität der Spatial Audio-Funktion zu validieren.
Eine schlechte Implementierung der Algorithmen für die räumliche Wiedergabe oder die Erfassung von Kopfbewegungen kann dazu führen, dass die Empfehlung für die Umlauflatenz nicht erfüllt wird, wie in den Empfehlungenaufgeführt.