Android 13 presenta una forma estándar para que los OEM admitan el audio espacial y el seguimiento de la cabeza sin necesidad de personalizaciones o SDK específicos del proveedor.
El audio espacial es una tecnología que se usa para crear un campo de sonido 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 que se usa para la reproducción. Por ejemplo, el audio espacial ofrece al usuario la capacidad de escuchar una banda sonora multicanal con auriculares. Con el 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 de sonido espacializado que se simula alrededor de su cabeza. Esta experiencia solo es eficaz cuando la latencia es baja, donde la latencia se mide como el tiempo que transcurre 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 se optimiza para el sonido espacial y el seguimiento de la cabeza, ya que ofrece procesamiento de sonido espacial en el nivel más bajo posible de la canalización de audio para obtener la latencia más baja posible.
Arquitectura
El framework y la API de audio de Android modificados en Android 13 facilitan la adopción de la tecnología de audio espacial en todo el ecosistema.
En la siguiente figura, se ilustran los cambios relacionados con el audio espacial que se realizaron en la arquitectura de la canalización de audio con Android 13:
Figura 1: Arquitectura de canalización de audio con espacializador
En el nuevo modelo, el espacializador forma parte del framework de audio y está desacoplado del decodificador. El espacializador toma contenido de audio combinado y renderiza una transmisión estéreo en la HAL de audio. Desacoplar el espacializador del decodificador permite que los OEM elijan diferentes proveedores para el decodificador y el espacializador, y que logren la latencia de ida y vuelta deseada para el seguimiento de la cabeza. Este nuevo modelo también incluye enlaces al framework del sensor para el seguimiento de la cabeza.
En la siguiente figura, se ilustra la arquitectura del sistema del framework de audio para el efecto de espacialización y seguimiento de la cabeza:
Figura 2: Arquitectura del sistema con espacializador y monitoreo de cabeza
Todas las APIs de audio espacial se agrupan en la clase pública Spatializer
a nivel de la app. La clase SpatializerHelper
en las interfaces del servicio de audio interactúa con los componentes de la IU del sistema para administrar la funcionalidad relacionada con el espacializador según las capacidades de la plataforma y el dispositivo conectado. La nueva clase Spatializer
en el servicio de políticas de audio crea y controla el gráfico de audio espacial necesario para la mezcla y la 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 alimenta la mezcla resultante a un motor de FX de posprocesamiento que renderiza una salida estéreo a la HAL de audio. Para el seguimiento de la cabeza, la clase SpatializerPoseController
agrupa las funciones relacionadas con el seguimiento de la cabeza, la interfaz con la pila de sensores y la combinación y el filtrado de los indicadores de los sensores que se envían al motor de efectos. Los datos del sensor de seguimiento de cabeza se transfieren a través del protocolo HID desde el controlador de Bluetooth.
Los cambios en la arquitectura de la canalización de audio de Android 13 mejoran lo siguiente:
- Se redujo la latencia entre el espacializador y los auriculares.
- Proporcionar APIs unificadas para atender a los desarrolladores de apps
- Controlar el estado del seguimiento de cabeza a través de las APIs del sistema
- Descubrir los sensores de seguimiento de la cabeza y asociarlos con los dispositivos de audio activos
- Combina los indicadores de varios sensores y calcula la postura de la cabeza que puede utilizar el motor de efectos de espacialización.
Las funciones como la compensación de sesgo, la detección de quietud y la limitación de velocidad se pueden implementar con la biblioteca de utilidades de seguimiento de la cabeza.
APIs de audio espacial
Android 13 ofrece APIs del sistema de audio espacial y para desarrolladores.
Los OEMs pueden adaptar el comportamiento de las apps según la disponibilidad de las funciones y el estado habilitado, que se establece a través de las APIs del sistema. Las apps también pueden configurar atributos de audio para inhabilitar el audio espacial por razones estéticas o para indicar que el flujo de audio ya se procesó para el audio espacial.
Para las APIs orientadas a desarrolladores, consulta Spatializer
.
Los OEM pueden usar APIs del sistema para implementar la IU de configuración de Sonidos y Bluetooth, lo 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 inhabilitar el audio espacial para la bocina y los auriculares con cable en la IU de configuración de Sonidos. El parámetro de configuración de audio espacial para la bocina solo está disponible si la implementación del efecto de espacialización admite el modo transaural.
El usuario también puede habilitar o inhabilitar el audio espacial y el seguimiento de la cabeza en la configuración del dispositivo Bluetooth para cada dispositivo. El parámetro de configuración de seguimiento de cabeza solo está disponible si los auriculares Bluetooth exponen un sensor de seguimiento de cabeza.
La configuración predeterminada del audio espacial siempre está ACTIVADA si se admite la función. Consulta Spatializer.java
para obtener una lista completa de las APIs del sistema.
El nuevo tipo de sensor de seguimiento de cabeza Sensor.TYPE_HEAD_TRACKER
se agregó al framework de Sensor y la HAL de Sensor 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 de espacialización, los OEM deben configurar su plataforma para que admita el audio espacial.
Requisitos
Para integrar el audio espacial, se deben cumplir los siguientes requisitos:
- La HAL de audio y el DSP de audio deben admitir una ruta de salida dedicada para el audio espacial.
- Para usar el audio espacial con monitoreo de cabeza, los auriculares deben tener sensores de monitoreo de cabeza integrados.
- La implementación debe satisfacer el estándar propuesto para el seguimiento de cabeza a través del protocolo HID desde unos auriculares Bluetooth hasta un teléfono.
- Se necesita el HAL de audio v7.1 para admitir el audio espacial.
Para integrar el audio espacial, sigue estos pasos:
Declara la compatibilidad con el audio espacial en tu 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.Declara 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"/>
Declara la biblioteca de efectos de espacialización 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"/>
Los proveedores que implementen el efecto de espacialización deben cumplir con lo siguiente:
- La configuración y el control básicos son idénticos a los de otros efectos en el HAL de Effect.
Parámetros específicos necesarios para que el framework descubra las capacidades y la configuración compatibles, como los siguientes:
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
Consulta
effect_spatializer.h
para obtener más información.
Recomendaciones
Recomendamos que los OEM usen los siguientes lineamientos durante la implementación:
- Usa LE Audio cuando esté disponible para facilitar la interoperabilidad y alcanzar los objetivos de latencia.
- Para una buena UX, la latencia de ida y vuelta, desde la detección del movimiento del sensor hasta el audio que reciben los auriculares, debe ser inferior a 150 ms.
- Para Bluetooth (BT) clásico con perfil de distribución de audio avanzado (A2DP):
- Usa un códec de latencia baja, como Opus.
- Implementa funciones de control de latencia en el HAL de audio. Esto permite optimizar la potencia y el rendimiento cuando el seguimiento de la cabeza está desactivado, y también inhabilitar el seguimiento de la cabeza en condiciones no óptimas.
Validación
Para validar la funcionalidad de la función de audio espacial, usa las pruebas de CTS disponibles en SpatializerTest.java
.
La 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 indica en las Recomendaciones.