Räumliches Audio und Head-Tracking

Android 13 bietet OEMs eine Standardmethode zur Unterstützung von räumlichem Audio und Head-Tracking, ohne dass herstellerspezifische Anpassungen oder SDKs erforderlich sind.

Spatial Audio ist eine Technologie, mit der ein Klangfeld um den Zuhörer herum erzeugt wird. Spatial Audio ermöglicht es Benutzern, Kanäle und einzelne Töne an Positionen wahrzunehmen, die sich von den physischen Positionen der Wandler des für die Wiedergabe verwendeten Audiogeräts unterscheiden. Spatial Audio bietet dem Benutzer beispielsweise die Möglichkeit, einen Mehrkanal-Soundtrack über Kopfhörer anzuhören. Mithilfe von räumlichem Audio können Kopfhörerbenutzer Dialoge vor sich und Surround-Effekte hinter sich wahrnehmen, obwohl sie nur zwei Wandler für die Wiedergabe haben.

Head Tracking hilft dem Benutzer, die Natur der räumlichen Klangbühne zu verstehen, die um seinen Kopf herum simuliert wird. Dieses Erlebnis ist nur dann effektiv, wenn die Latenz niedrig ist. Die Latenz wird als die Zeit zwischen der Kopfbewegung des Benutzers und dem Zeitpunkt gemessen, an dem er hört, wie sich die Position des virtuellen Lautsprechers entsprechend bewegt.

Android 13 optimiert räumliches Audio und Head-Tracking, indem es räumliche Audioverarbeitung auf der niedrigstmöglichen Ebene in der Audio-Pipeline bietet, um die geringstmögliche Latenz zu erreichen.

Die Architektur

Das modifizierte Android-Audio-Framework und die API in Android 13 erleichtern die Einführung räumlicher Audiotechnologie im gesamten Ökosystem.

Die folgende Abbildung veranschaulicht die Änderungen im Zusammenhang mit räumlichem Audio, die mit Android 13 an der Audio-Pipeline-Architektur vorgenommen wurden:

spatial-audio

Abbildung 1. Audio-Pipeline-Architektur 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 den 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 Head-Tracking erreichen. Dieses neue Modell verfügt außerdem über Haken am Sensorrahmen für die Kopfverfolgung.

Die folgende Abbildung veranschaulicht die Systemarchitektur des Audio-Frameworks für den Spatializer- und Head-Tracking-Effekt:

spatial-sys-arch

Abbildung 2. Systemarchitektur mit Spatializer und Head-Tracking

Alle räumlichen Audio-APIs sind auf App-Ebene in der öffentlichen Spatializer Klasse gruppiert. Die SpatializerHelper -Klasse im Audiodienst ist mit den System-UI-Komponenten verbunden, um Spatializer-bezogene Funktionen basierend auf der Plattform und den Funktionen des verbundenen Geräts zu verwalten. Die neue Spatializer Klasse im Audio-Richtliniendienst erstellt und steuert den räumlichen Audiographen, der für die Mehrkanalmischung und -räumlichkeit erforderlich ist, basierend auf den vom OEM ausgedrückten Fähigkeiten , den angeschlossenen Geräten und aktiven Anwendungsfällen. Eine neue Mixer-Klasse SpatializerThread mischt Mehrkanalspuren und leitet den resultierenden Mix an eine Nachbearbeitungs-FX-Engine weiter, die eine Stereoausgabe an den Audio-HAL rendert. Für die Kopfverfolgung gruppiert die SpatializerPoseController Klasse Funktionen im Zusammenhang mit der Kopfverfolgung, zur Schnittstelle zum Sensorstapel und zum Zusammenführen und Filtern von Sensorsignalen, die der Effekt-Engine zugeführt werden. Die Daten des Head-Tracking-Sensors werden über das HID-Protokoll vom Bluetooth-Treiber übertragen.

Änderungen an der Audio-Pipeline-Architektur von Android 13 verbessern Folgendes:

  • Verringern der Latenz zwischen Spatializer und Kopfhörern.
  • Bereitstellung einheitlicher APIs für App-Entwickler.
  • Steuern des Head-Tracking-Status über System-APIs.
  • Erkennen von Head-Tracking-Sensoren und deren Zuordnung zu aktiven Audiogeräten.
  • Zusammenführen von Signalen verschiedener Sensoren und Berechnen der Kopfhaltung, die von der Spatializer-Effekt-Engine verarbeitet werden kann.

Funktionen wie Bias-Kompensation, Standerkennung und Geschwindigkeitsbegrenzung können mithilfe der Head-Tracking-Utility-Bibliothek implementiert werden.

Räumliche Audio-APIs

Android 13 bietet räumliches Audiosystem und Entwickler-APIs.

OEMs können das App-Verhalten basierend auf der Funktionsverfügbarkeit und dem aktivierten Status anpassen, der durch System-APIs festgelegt wird. Apps können auch Audioattribute konfigurieren, um räumliches Audio aus ästhetischen Gründen zu deaktivieren oder um anzuzeigen, dass der Audiostream bereits für räumliches 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 Sounds und Bluetooth-Einstellungen zu implementieren, die es dem Benutzer ermöglicht, den Status des räumlichen Audios und der Head-Tracking-Funktion für sein Gerät zu steuern. Der Benutzer kann räumliches Audio für den Lautsprecher und die kabelgebundenen Kopfhörer in der Benutzeroberfläche der Soundeinstellungen aktivieren oder deaktivieren. Die räumliche Audioeinstellung für den Lautsprecher ist nur verfügbar, wenn die Implementierung des Spatializer-Effekts den transauralen Modus unterstützt.

Der Benutzer kann auch räumliches Audio und Head-Tracking in den Bluetooth-Geräteeinstellungen für jedes Gerät aktivieren oder deaktivieren. Die Head-Tracking-Einstellung ist nur verfügbar, wenn das Bluetooth-Headset über einen Head-Tracking-Sensor verfügt.

Die Standardeinstellungen für räumliches Audio sind immer aktiviert, wenn die Funktion unterstützt wird. Eine vollständige Liste der System-APIs finden Sie unter Spatializer.java .

Der neue Head-Tracking-Sensortyp Sensor.TYPE_HEAD_TRACKER wird dem Sensor-Framework hinzugefügt und vom Sensor-HAL als dynamischer Sensor über Bluetooth oder USB bereitgestellt.

Integrieren Sie räumliches Audio

Neben der Implementierung der Spatializer-Effekt-Engine müssen OEMs ihre Plattform für die räumliche Audiounterstützung konfigurieren.

Anforderungen

Für die Integration von räumlichem Audio müssen folgende Voraussetzungen erfüllt sein:

  • Der Audio-HAL und der Audio-DSP müssen einen dedizierten Ausgabepfad für räumliches Audio unterstützen.
  • Für räumliches Audio mit Head-Tracking müssen Kopfhörer über integrierte Head-Tracker-Sensoren verfügen.
  • Die Implementierung muss dem vorgeschlagenen Standard für die Kopfverfolgung über das HID- Protokoll von einem Bluetooth-Headset zu einem Telefon entsprechen.
  • Für die räumliche Audiounterstützung ist Audio HAL v7.1 erforderlich.

Integrieren Sie räumliches Audio mit den folgenden Schritten:

  1. Deklarieren Sie die räumliche Audiounterstützung in Ihrer Datei device.mk wie folgt:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Dies führt dazu, dass AudioService die Spatializer-Unterstützung initialisiert.

  2. Deklarieren Sie eine dedizierte Ausgabe für den räumlichen Audiomix in audio_policy_configuration.xml wie folgt:

    <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"/>
    
  3. Deklarieren Sie die Spatializer-Effektbibliothek in audio_effects.xml wie folgt:

    <audio_effects_conf>
          <libraries>
             <library name="spatializer_lib" path="libMySpatializer.so"/>
              …
             </libraries>
          <effects>
           <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
    
  4. Anbieter, die den Spatializer-Effekt implementieren, müssen Folgendes einhalten:

    • 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, wie zum Beispiel:

      • 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 verwenden:

  • Verwenden Sie LE-Audio, sofern verfügbar, um die Interoperabilität zu erleichtern und Latenzziele zu erreichen.
  • Für eine gute UX muss die Hin- und Rücklaufzeit von der Bewegungserkennung des Sensors bis zum Audioempfang durch die Kopfhörer weniger als 150 ms betragen.
  • Für Bluetooth (BT) Classic mit Advanced Audio Distribution Profile (A2DP):
    • Verwenden Sie einen Codec mit geringer Latenz, z. B. Opus .
    • Implementieren Sie Latenzkontrollfunktionen am Audio-HAL . Dies ermöglicht eine Leistungs- und Leistungsoptimierung, wenn die Kopfverfolgung ausgeschaltet ist, und die Deaktivierung der Kopfverfolgung bei nicht optimalen Bedingungen.

Validierung

Um die Funktionalität der räumlichen Audiofunktion zu überprüfen, verwenden Sie die in SpatializerTest.java verfügbaren CTS-Tests.

Eine schlechte Implementierung der Spatialisierungs- oder Head-Tracking-Algorithmen kann dazu führen, dass die in den Empfehlungen aufgeführte Empfehlung zur Round-Trip-Latenz nicht eingehalten wird.