Mit Android 13 wird eine Standardmethode für OEMs eingeführt, um Spatial Audio und die Erfassung von Kopfbewegungen zu unterstützen, ohne dass anbieterspezifische Anpassungen oder SDKs erforderlich sind.
Spatial Audio ist eine Technologie, mit der ein Schallfeld um den Zuhörer herum erzeugt wird. Mit Spatial Audio können Nutzer Kanäle und einzelne Sounds an Positionen wahrnehmen, die sich von den physischen Positionen der Wandler des für die Wiedergabe verwendeten Audiogeräts unterscheiden. Mit Spatial Audio können Nutzer beispielsweise einen Mehrkanal-Soundtrack über Kopfhörer hören. Mit Spatial Audio können Nutzer von Kopfhörern Dialoge vor sich und Surround-Effekte hinter sich wahrnehmen, obwohl nur zwei Schallwandler für die Wiedergabe vorhanden sind.
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 dem Zeitpunkt, an dem der Nutzer den Kopf bewegt, und dem Zeitpunkt gemessen, an dem er hört, dass sich die Position des virtuellen Lautsprechers entsprechend ändert.
Android 13 ist für Spatial Audio und Headtracking optimiert. Dazu wird die Spatial Audio-Verarbeitung auf der niedrigstmöglichen Ebene in der Audio-Pipeline ausgeführt, um die niedrigstmögliche Latenz zu erzielen.
Architektur
Das modifizierte 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 in Android 13 im Zusammenhang mit räumlichem Audio:
Abbildung 1: Architektur der Audio-Pipeline mit Spatializer
Im neuen Modell ist der Spatializer Teil des Audio-Frameworks und vom Decoder entkoppelt. Der Spatializer empfängt gemischte Audioinhalte und rendert einen Stereostream für das Audio-HAL. Durch die Entkopplung des Spatializers vom Decoder können OEMs verschiedene Anbieter für Decoder und Spatializer auswählen und die gewünschte Round-Trip-Latenz für das Headtracking erreichen. Dieses neue Modell enthält auch Hooks für das Sensorkonzept für Head-Tracking.
Die folgende Abbildung veranschaulicht die Systemarchitektur des Audio-Frameworks für den Spatializer- und Head-Tracking-Effekt:
Abbildung 2: Systemarchitektur mit Spatializer und Erfassung von Kopfbewegungen
Alle Spatial Audio-APIs sind auf App-Ebene in der öffentlichen Klasse Spatializer
gruppiert. Die Klasse SpatializerHelper
in Audiodienstschnittstellen kommuniziert mit den System-UI-Komponenten, um Spatializer-bezogene Funktionen basierend auf den Funktionen der Plattform und des verbundenen Geräts zu verwalten. Die neue Klasse Spatializer
im Audio Policy Service erstellt und steuert den Spatial-Audio-Graphen, der für das Mischen und die Räumlichkeit von Mehrkanal-Audio basierend auf den vom OEM angegebenen Funktionen, den verbundenen Geräten und den aktiven Anwendungsfällen erforderlich ist. Eine neue Mixer-Klasse SpatializerThread
mischt Mehrkanal-Tracks und leitet den resultierenden Mix an eine Postprocessing-FX-Engine weiter, die eine Stereoausgabe für das Audio-HAL rendert. Für das Head-Tracking gruppiert die Klasse SpatializerPoseController
Funktionen, die sich auf das Head-Tracking beziehen, um eine Schnittstelle zum Sensor-Stack zu schaffen und Sensorsignale zusammenzuführen und zu filtern, die an die Effekt-Engine gesendet werden. Die Sensordaten für die Kopf-Tracker werden über das HID-Protokoll vom Bluetooth-Treiber übertragen.
Durch Änderungen an der Architektur der Audio-Pipeline unter Android 13 werden folgende Aspekte verbessert:
- Die Latenz zwischen dem Spatializer und den Kopfhörern wird verringert.
- Bereitstellung einheitlicher APIs für App-Entwickler
- Steuern des Head-Tracking-Status über System-APIs.
- Kopfbewegungssensoren werden erkannt und mit aktiven Audiogeräten verknüpft.
- Signale von verschiedenen Sensoren werden zusammengeführt und die Kopfhaltung wird berechnet, die von der Spatializer-Effekt-Engine verwendet werden kann.
Funktionen wie die Bias-Korrektur, die Erkennung von Stillstand und die Ratenbegrenzung können mit der Utility-Bibliothek für Head-Tracking implementiert werden.
Spatial Audio-APIs
Android 13 bietet ein Spatial-Audio-System und Entwickler-APIs.
OEMs können das App-Verhalten an die Verfügbarkeit und den aktivierten Status von Funktionen anpassen, der von System-APIs festgelegt wird. Apps können auch Audioattribute konfigurieren, um Spatial Audio zu deaktivieren, z. B. aus ästhetischen Gründen, oder um 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 Benutzeroberfläche für die Einstellungen für Ton und Bluetooth zu implementieren. So können Nutzer den Status von Spatial Audio und der Funktion zur Kopf-Tracker-Funktion für ihr Gerät steuern. Der Nutzer kann Spatial Audio für den Lautsprecher und kabelgebundene Kopfhörer in den 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.
Der Nutzer kann Spatial Audio und die Kopf-Tracker-Funktion 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 hat.
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 Kopfverfolgung 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 Spatializer-Effekt-Engine 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 zu integrieren:
- Das 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 zur Erfassung von Kopfbewegungen verfügen.
- Die Implementierung muss dem vorgeschlagenen Standard für die Kopfbewegungserkennung ü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 integrierst du räumliches Audio:
Deklarieren Sie die Unterstützung von Spatial Audio in Ihrer
device.mk
-Datei so:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
Dadurch wird die Spatializer-Unterstützung in
AudioService
initialisiert.Deklarieren Sie im
audio_policy_configuration.xml
eine dedizierte Ausgabe für den Spatial Audio-Mix:<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.xml
so:<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:
- Die grundlegende Konfiguration und Steuerung sind identisch mit anderen Effekten im Effect HAL.
Spezifische Parameter, die das Framework benötigt, um unterstützte Funktionen und Konfigurationen zu erkennen, z. B.:
SPATIALIZER_PARAM_SUPPORTED_LEVELS
SPATIALIZER_PARAM_LEVEL
SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
SPATIALIZER_PARAM_HEADTRACKING_MODE
SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
SPATIALIZER_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 verbessern und die Latenzziele zu erreichen.
- Die Umlauflatenz von der Erkennung der Sensorbewegung bis zum Empfang des Audiosignals durch die Kopfhörer muss für eine gute Nutzerfreundlichkeit unter 150 ms liegen.
- Für Bluetooth Classic mit Advanced Audio Distribution Profile (A2DP):
- Verwenden Sie einen Codec mit niedriger Latenz, z. B. Opus.
- Implementieren Sie Funktionen zur Latenzsteuerung im Audio HAL. So können Stromverbrauch und Leistung optimiert werden, wenn die Kopfverfolgung deaktiviert ist, und die Kopfverfolgung kann bei nicht optimalen Bedingungen deaktiviert werden.
Zertifizierungsstufe
Verwenden Sie die CTS-Tests in SpatializerTest.java
, um die Funktionalität der Spatial Audio-Funktion zu prüfen.
Eine schlechte Implementierung der Algorithmen für die Räumlichkeit oder das Head-Tracking kann dazu führen, dass die Empfehlung für die Round-Trip-Latenz, die in den Empfehlungen aufgeführt ist, nicht eingehalten wird.