Audio espacial y seguimiento de la cabeza.

Android 13 presenta una forma estándar para que los OEM admitan audio espacial y seguimiento de la cabeza sin la necesidad de personalizaciones o SDK específicos del proveedor.

El audio espacial es una tecnología que se utiliza para crear un campo sonoro que rodea al oyente. El audio espacial permite a los usuarios percibir canales y sonidos individuales en posiciones que difieren de las posiciones físicas de los transductores del dispositivo de audio utilizado para la reproducción. Por ejemplo, el audio espacial ofrece al usuario la posibilidad de escuchar una banda sonora multicanal a través de auriculares. Usando audio espacial, los usuarios de auriculares pueden percibir el diálogo frente a ellos y los efectos envolventes detrás de ellos, a pesar de tener solo dos transductores para la reproducción.

El seguimiento de la cabeza ayuda al usuario a comprender la naturaleza del escenario sonoro espacializado que se simula alrededor de su cabeza. Esta experiencia es efectiva solo cuando la latencia es baja, donde la latencia se mide como el tiempo entre el momento en que el usuario mueve la cabeza y el momento en que escucha que la posición del altavoz virtual se mueve en consecuencia.

Android 13 optimiza el audio espacial y el seguimiento de la cabeza al ofrecer procesamiento de audio espacial al nivel más bajo posible en la canalización de audio para obtener la latencia más baja posible.

Arquitectura

El marco de audio de Android y la API modificados en Android 13 facilitan la adopción de tecnología de audio espacial en todo el ecosistema.

La siguiente figura ilustra los cambios relacionados con el audio espacial realizados en la arquitectura de canalización de audio con Android 13:

spatial-audio

Figura 1. Arquitectura de canalización de audio con espacializador

En el nuevo modelo, el espacializador es parte del marco de audio y está desacoplado del decodificador. El espacializador toma contenido de audio mezclado y genera una transmisión estéreo al Audio HAL. Desacoplar el espacializador del decodificador permite a los OEM elegir diferentes proveedores para el decodificador y el espacializador y lograr la latencia de ida y vuelta deseada para el seguimiento de la cabeza. Este nuevo modelo también incluye ganchos al marco del sensor para el seguimiento de la cabeza.

La siguiente figura ilustra la arquitectura del sistema del marco de audio para el espacializador y el efecto de seguimiento de la cabeza:

spatial-sys-arch

Figura 2. Arquitectura del sistema con espacializador y seguimiento de la cabeza.

Todas las API de audio espacial están agrupadas en la clase pública Spatializer a nivel de aplicación. La clase SpatializerHelper en el servicio de audio interactúa con los componentes de la interfaz de usuario del sistema para administrar la funcionalidad relacionada con el espacializador según la plataforma y las capacidades del dispositivo conectado. La nueva clase Spatializer en el servicio de política de audio crea y controla el gráfico de audio espacial necesario para la mezcla y espacialización multicanal en función de las capacidades expresadas por el OEM , los dispositivos conectados y los casos de uso activos. Una nueva clase de mezclador, SpatializerThread mezcla pistas multicanal y envía la mezcla resultante a un motor de efectos de posprocesamiento que genera una salida estéreo al Audio HAL. Para el seguimiento de la cabeza, la clase SpatializerPoseController agrupa funciones relacionadas con el seguimiento de la cabeza, para interactuar con la pila de sensores y para fusionar y filtrar las señales de los sensores que se envían al motor de efectos. Los datos del sensor de seguimiento de la cabeza se transmiten a través del protocolo HID desde el controlador Bluetooth.

Los cambios en la arquitectura de canalización de audio de Android 13 mejoran lo siguiente:

  • Reducir la latencia entre el espacializador y los auriculares.
  • Proporcionar API unificadas para servir a los desarrolladores de aplicaciones.
  • Controlar el estado de seguimiento de la cabeza a través de las API del sistema.
  • Descubrir sensores de seguimiento de la cabeza y asociarlos con dispositivos de audio activos.
  • Fusionar señales de varios sensores y calcular la postura de la cabeza que puede consumir el motor de efecto espacializador.

Funciones como compensación de sesgo, detección de quietud y limitación de velocidad se pueden implementar utilizando la biblioteca de utilidades de seguimiento de cabeza .

API de audio espacial

Android 13 ofrece sistema de audio espacial y API para desarrolladores.

Los OEM pueden adaptar el comportamiento de las aplicaciones según la disponibilidad de las funciones y el estado habilitado, que lo establecen las API del sistema. Las aplicaciones también pueden configurar atributos de audio para desactivar el audio espacial por razones estéticas o para indicar que la transmisión de audio ya está procesada para audio espacial .

Para las API orientadas al desarrollador, consulte Spatializer .

Los OEM pueden usar las API del sistema para implementar la interfaz de usuario de configuración de Sonidos y Bluetooth, que permite al usuario controlar el estado del audio espacial y la función de seguimiento de la cabeza de su dispositivo. El usuario puede habilitar o deshabilitar el audio espacial para el altavoz y los auriculares con cable en la interfaz de usuario de configuración de Sonidos. La configuración de audio espacial para el altavoz solo está disponible si la implementación del efecto espacializador admite el modo transaural.

El usuario también puede habilitar o deshabilitar el audio espacial y el seguimiento de la cabeza en la configuración del dispositivo Bluetooth para cada dispositivo. La configuración de seguimiento de la cabeza solo está disponible si los auriculares Bluetooth exponen un sensor de seguimiento de la cabeza.

La configuración predeterminada para audio espacial siempre está activada si la función es compatible. Consulte Spatializer.java para obtener una lista completa de las API del sistema.

El nuevo tipo de sensor de seguimiento de cabeza Sensor.TYPE_HEAD_TRACKER se agrega al marco del sensor y el sensor HAL lo expone como un sensor dinámico a través de Bluetooth o USB.

Integra audio espacial

Además de implementar el motor de efectos espacializador, los OEM deben configurar su plataforma para soporte de audio espacial.

Requisitos

Se deben cumplir los siguientes requisitos para poder integrar audio espacial:

  • Audio HAL y DSP de audio deben admitir una ruta de salida dedicada para audio espacial.
  • Para audio espacial con seguimiento de la cabeza, los auriculares deben tener sensores de seguimiento de la cabeza integrados.
  • La implementación debe cumplir con el estándar propuesto para el seguimiento de la cabeza a través del protocolo HID desde un auricular Bluetooth a un teléfono.
  • Se necesita Audio HAL v7.1 para compatibilidad con audio espacial.

Integre el audio espacial siguiendo los siguientes pasos:

  1. Declare compatibilidad con audio espacial en su archivo device.mk , de la siguiente manera:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Esto hace que AudioService inicialice la compatibilidad con el espacializador.

  2. Declare una salida dedicada para la mezcla de audio espacial en audio_policy_configuration.xml , de la siguiente manera:

    <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. Declare la biblioteca de efectos espacializadores en audio_effects.xml , de la siguiente manera:

    <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. Los proveedores que implementen el efecto espacializador deben cumplir con lo siguiente:

    • Configuración básica y control idéntico a otros efectos en Effect HAL.
    • Parámetros específicos necesarios para que el marco descubra las capacidades y la configuración admitidas, como por ejemplo:

      • 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

    Consulte effect_spatializer.h para obtener más información.

Recomendaciones

Recomendamos que los OEM utilicen las siguientes pautas durante la implementación:

  • Utilice audio LE cuando esté disponible para facilitar la interoperabilidad y lograr objetivos de latencia.
  • La latencia de ida y vuelta, desde la detección de movimiento del sensor hasta el audio recibido por los auriculares, debe ser inferior a 150 ms para una buena experiencia de usuario.
  • Para Bluetooth (BT) Classic con perfil de distribución de audio avanzado (A2DP):
    • Utilice un códec de baja latencia, como Opus .
    • Implementar funciones de control de latencia en el Audio HAL . Esto permite optimizar la potencia y el rendimiento cuando el seguimiento de la cabeza está desactivado y desactivar el seguimiento de la cabeza en condiciones no óptimas.

Validación

Para validar la funcionalidad de la función de audio espacial, utilice las pruebas CTS disponibles en SpatializerTest.java .

Una implementación deficiente de los algoritmos de espacialización o seguimiento de la cabeza puede provocar que no se cumpla la recomendación de latencia de ida y vuelta que se enumera en las Recomendaciones .