Android 13 bietet OEMs eine standardmäßige Möglichkeit, 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 Klangfeld um den Hörer herum erzeugt wird. Mit Spatial Audio können Nutzer Kanäle und einzelne Töne an Positionen wahrnehmen, die sich von den physischen Positionen der Wandler des für die Wiedergabe verwendeten Audiogeräts unterscheiden. So können Nutzer mit Spatial Audio beispielsweise einen Mehrkanal-Soundtrack über Kopfhörer hören. Mithilfe von räumlichem Audio können Nutzer mit Kopfhörern Dialoge vor sich und Surround-Effekte hinter sich wahrnehmen, obwohl nur zwei Wandler für die Wiedergabe verwendet werden.
Die Erkennung von Kopfbewegungen hilft Nutzern, die Art der simulierten räumlichen Klangbühne um ihren Kopf herum zu verstehen. Diese Funktion ist nur dann effektiv, wenn die Latenz niedrig ist. Die Latenz wird als Zeit gemessen, die zwischen der Kopfbewegung des Nutzers und dem Zeitpunkt vergeht, zu dem er die entsprechende Bewegung der virtuellen Lautsprecherposition hört.
Android 13 ist für Spatial Audio und die Kopferkennung optimiert. Die Spatial Audio-Verarbeitung erfolgt auf der niedrigsten Ebene der Audiopipeline, um die Latenz so gering wie möglich zu halten.
Architektur
Das geänderte Android-Audio-Framework und die API in Android 13 erleichtern die Einführung der Spatial Audio-Technologie im gesamten System.
Die folgende Abbildung zeigt die Änderungen an der Audiopipeline-Architektur in Android 13, die sich auf den Raumklang beziehen:
Abbildung 1. Audiopipelinearchitektur 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 unterschiedliche Anbieter für den Decoder und den Spatializer auswählen und die gewünschte Round-Trip-Latenz für die Kopfverfolgung erreichen. Dieses neue Modell enthält auch Hooks für das Sensor-Framework zur Kopfverfolgung.
Die folgende Abbildung zeigt die Systemarchitektur des Audio-Frameworks für den Spatializer und den Head-Tracking-Effekt:
Abbildung 2. Systemarchitektur mit Spatializer und Kopf-Tracking
Alle räumlichen Audio-APIs sind auf App-Ebene in der öffentlichen Klasse Spatializer
gruppiert. Die Klasse SpatializerHelper
in Audiodienstoberflächen interagiert mit den System-UI-Komponenten, um räumliche Funktionen basierend auf den Funktionen der Plattform und des verbundenen Geräts zu verwalten. Die neue Klasse Spatializer
im Audiorichtliniendienst erstellt und steuert den räumlichen Audiographen, der für die Mehrkanalmischung und die räumliche Darstellung erforderlich ist. Dabei werden die vom OEM angegebenen Funktionen, die verbundenen Geräte und die aktiven Anwendungsfälle berücksichtigt. Eine neue Mixerklasse SpatializerThread
mischt Mehrkanal-Tracks und leitet den resultierenden Mix an eine Post-Processing-FX-Engine weiter, die eine Stereoausgabe an die Audio HAL rendert. Für die Kopfverfolgung gruppiert die Klasse SpatializerPoseController
Funktionen, die sich auf die Kopfverfolgung beziehen, um eine Schnittstelle zum Sensorstack bereitzustellen und Sensorsignale zu kombinieren und zu filtern, die an die Effekte-Engine gesendet werden. Die Daten der Kopf-Tracking-Sensoren werden vom Bluetooth-Treiber über das HID-Protokoll übertragen.
Durch die Änderungen an der Audiopipeline-Architektur von Android 13 werden folgende Aspekte verbessert:
- Verringerung der Latenz zwischen dem Spatializer und den Kopfhörern.
- Einheitliche APIs für App-Entwickler bereitstellen
- Steuert den Status der Kopfverfolgung über System-APIs.
- Erkennen von Sensoren für die Kopfverfolgung und Verknüpfen mit aktiven Audiogeräten
- Signale von verschiedenen Sensoren werden zusammengeführt und die Kopfposition berechnet, die von der Spatializer-Effekt-Engine verwendet werden kann.
Funktionen wie Voreinstellbare Neigung, Bewegungserkennung und Ratenbegrenzung können mit der Head-Tracking-Dienstprogrammbibliothek implementiert werden.
Spatial Audio APIs
Android 13 bietet ein System für räumliches Audio und APIs für Entwickler.
OEMs können das App-Verhalten anhand der Verfügbarkeit und des aktivierten Status von Funktionen anpassen, die über System-APIs festgelegt werden. Apps können Audioattribute auch so konfigurieren, dass Spatial Audio ausgeschaltet wird, um es aus ästhetischen Gründen zu deaktivieren, 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 Töne und Bluetooth zu implementieren. So können Nutzer den Status des räumlichen Audios und die Kopf-Tracking-Funktion für ihr Gerät steuern. Der Nutzer kann Spatial Audio für den Lautsprecher und kabelgebundene Kopfhörer in den Einstellungen für „Ton“ aktivieren oder deaktivieren. Die Einstellung für den Raumklang für den Lautsprecher ist nur verfügbar, wenn die Implementierung des Spatializer-Effekts den Transaural-Modus unterstützt.
Der Nutzer kann Spatial Audio und die Kopferkennung 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 entsprechenden Sensor hat.
Die Standardeinstellungen für Spatial Audio sind immer aktiviert, wenn die Funktion unterstützt wird. Unter Spatializer.java
finden Sie eine vollständige Liste der System-APIs.
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
Für die Integration von Spatial Audio müssen die folgenden Anforderungen erfüllt sein:
- Die Audio-HAL und der Audio-DSP müssen einen speziellen Ausgabepfad für Spatial Audio unterstützen.
- Für Spatial Audio mit Erfassung von Kopfbewegungen müssen Kopfhörer integrierte Sensoren für die Erfassung von Kopfbewegungen haben.
- Die Implementierung muss dem vorgeschlagenen Standard für die Kopferfassung ü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äumlichen Audio:
Deklariere die Unterstützung von Spatial Audio in deiner
device.mk
-Datei so:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
Dadurch wird die Unterstützung des Spatializers in
AudioService
initialisiert.Deklariere eine spezielle Ausgabe für den Spatial Audio-Mix in der
audio_policy_configuration.xml
:<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"/>
Deklariere die Bibliothek für den Spatializer-Effekt 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:
- Grundlegende Konfiguration und Steuerung identisch mit anderen Effekten in Effect HAL.
Spezifische Parameter, die das Framework benötigt, um unterstützte Funktionen und Konfigurationen zu ermitteln, 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 Rücklauflatenz von der Sensorbewegungserkennung bis zum Audiosignal, das von den Kopfhörern empfangen wird, muss für eine gute Nutzererfahrung unter 150 ms liegen.
- Für Bluetooth (BT) Classic mit Advanced Audio Distribution Profile (A2DP):
Zertifizierungsstufe
Verwenden Sie die CTS-Tests unter SpatializerTest.java
, um die Funktionsweise der Funktion „Spatial Audio“ zu prüfen.
Eine schlechte Implementierung der Algorithmen für die Raumklangwiedergabe oder die Kopfverfolgung kann dazu führen, dass die in den Empfehlungen aufgeführte Empfehlung für die Round-Trip-Latenz nicht eingehalten wird.