Spatial Audio und Erfassung von Kopfbewegungen

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 erzeugt wird, das den Listener umgibt. Mit Spatial Audio können Nutzer Kanäle und einzelne Töne an Positionen wahrnehmen, die sich von den physischen Positionen der Transducer des für die Wiedergabe verwendeten Audiogeräts unterscheiden. Spatial Audio bietet Nutzern beispielsweise die Möglichkeit, einen Mehrkanal-Soundtrack über Kopfhörer anzuhören. Mithilfe von Spatial Audio können Nutzer von Kopfhörern den Dialog direkt vor ihnen wahrnehmen und die Surround-Effekte dahinter wahrnehmen, obwohl sie nur zwei Inducer für die Wiedergabe haben.

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 vergeht, zwischen dem Bewegen des Kopfes des Nutzers und dem Hören der entsprechenden Bewegung der virtuellen Lautsprecherposition.

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:

Spatial Audio

Abbildung 1. Audiopipeline-Architektur mit Spatializer

Im neuen Modell ist der Spatializer Teil des Audio-Frameworks und vom Decoder entkoppelt. Der Spatializer nimmt gemischte Audioinhalte auf und gibt einen Stereo-Stream an den Audio-HAL aus. 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:

Spatial Sys Arch

Abbildung 2. Systemarchitektur mit Spatializer und Kopf-Tracking

Alle räumlichen Audio-APIs sind auf App-Ebene in der öffentlichen Klasse Spatializer gruppiert. Die SpatializerHelper-Klasse 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 werden in der Klasse SpatializerPoseController Funktionen für die Kopfverfolgung gruppiert, um die Schnittstelle zum Sensorstack zu bilden 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:

  • Die Latenz zwischen dem Spatializer und den Kopfhörern wird verringert.
  • 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 aus ästhetischen Gründen Spatial Audio deaktiviert wird oder um anzugeben, dass der Audiostream bereits für Spatial Audio verarbeitet wird.

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 der 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 räumlichen Audioeffekt 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 Sensor zur Erfassung von Kopfbewegungen 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 Spatial Audio-Unterstützung 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 Erfassung von Kopfbewegungen über das HID-Protokoll von einem Bluetooth-Headset zu einem Smartphone entsprechen.
  • Zur Unterstützung von Spatial Audio wird Audio HAL v7.1 benötigt.

So integrierst du räumlichen Audio:

  1. Deklariere die Unterstützung für 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.

  2. 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"/>
    
  3. 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"/>
    
  4. Anbieter, die den Spatializer-Effekt implementieren, müssen folgende Anforderungen erfüllen:

    • Grundlegende Konfiguration und Steuerung sind mit anderen Effekten in Effect HAL identisch.
    • 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, sofern verfügbar, um die Interoperabilität zu erleichtern und 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):
    • Verwenden Sie einen Codec mit niedriger Latenz, z. B. Opus.
    • Implementieren Sie Funktionen zur Latenzkontrolle in der Audio HAL. So wird die Energie- und Leistungsoptimierung bei deaktivierter Kopferfassung ermöglicht und die Kopferfassung bei nicht optimalen Bedingungen deaktiviert.

Zertifizierungsstufe

Verwenden Sie die CTS-Tests in SpatializerTest.java, um die Funktionsweise der Funktion „Raumklang“ zu prüfen.

Eine schlechte Implementierung der Algorithmen für die Raumklangwiedergabe oder die Kopfverfolgung kann dazu führen, dass die in den Empfehlungen angegebene Empfehlung für die Round-Trip-Latenz nicht eingehalten wird.