Android 13 presenta una forma estándar para que los OEM admitan audio espacial y seguimiento de la cabeza sin necesidad de personalizaciones o SDKs específicos del proveedor.
El audio espacial es una tecnología que se usa para crear un campo de sonido que rodea al usuario. El audio espacial permite que los usuarios perciban 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 le ofrece al usuario la posibilidad 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, y esta se mide como el tiempo que transcurre entre el momento en que el usuario mueve la cabeza y el momento en que escucha la posición del altavoz virtual moverse según corresponda.
Android 13 ofrece procesamiento de audio espacial en el nivel más bajo posible en el embudo de audio para obtener la latencia más baja posible, lo que optimiza el audio espacial y el seguimiento de la cabeza.
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 imagen, 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 la canalización de audio con espacializador
En el nuevo modelo, el espacializador forma parte del framework de audio y está desvinculado del decodificador. El espacializador recibe contenido de audio mixto y renderiza una transmisión estéreo a la HAL de audio. La desvinculación del espacializador del decoder permite a los OEMs elegir diferentes proveedores para el decoder y el espacializador, y lograr la latencia de ida y vuelta deseada para el seguimiento de la cabeza. Este nuevo modelo también incluye hooks 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 espacializador y el efecto de seguimiento de la cabeza:
Figura 2: Arquitectura del sistema con espacializador y seguimiento de la cabeza
Todas las APIs de audio espacial se agrupan en la clase pública Spatializer
a nivel de la app. La clase SpatializerHelper
en el servicio de audio se comunica 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ítica de audio crea y controla el grafo de audio espacial necesario para la mezcla y la espacialización multicanal en función de las funciones que expresa el OEM, los dispositivos conectados y los casos de uso activos. Una nueva clase de mezclador SpatializerThread
mezcla pistas multicanal y envía la combinación resultante a un motor de efectos de posprocesamiento que renderiza una salida estéreo en el HAL de audio. 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 combinar y filtrar los indicadores de los sensores que se alimentan al motor de efectos. Los datos del sensor de seguimiento de cabeza se transmiten a través del protocolo HID desde el controlador Bluetooth.
Los cambios en la arquitectura de la canalización de audio de Android 13 mejoran lo siguiente:
- Disminuye la latencia entre el espacializador y los auriculares.
- Proporcionar APIs unificadas para los desarrolladores de apps
- Controla el estado del seguimiento de la cabeza a través de las APIs del sistema.
- Detecta sensores de seguimiento de la cabeza y asócialos con dispositivos de audio activos.
- Combinar indicadores de varios sensores y calcular la postura de la cabeza que puede consumir el motor de efectos de espacialización
Las funciones como la compensación de sesgo, la detección de inactividad y la limitación de frecuencia se pueden implementar con la biblioteca de utilidad de seguimiento de cabeza.
APIs de audio espacial
Android 13 ofrece un sistema de audio espacial y APIs para desarrolladores.
Los OEMs pueden adaptar el comportamiento de la app según la disponibilidad de funciones y el estado habilitado, que establecen 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 la transmisión de audio ya se procesó para el audio espacial.
Para ver las APIs para desarrolladores, consulta Spatializer
.
Los OEMs pueden usar las 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 para su dispositivo. El usuario puede habilitar o inhabilitar el audio espacial para la bocina y los auriculares con cable en la IU de la configuración de sonidos. La configuración de audio espacial para la bocina solo está disponible si la implementación del efecto de espacializador 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 de cada dispositivo. La 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 la función es compatible. 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 agrega al framework de sensores y el HAL de sensores lo expone como un sensor dinámico a través de Bluetooth o USB.
Cómo integrar el audio espacial
Además de implementar el motor de efectos de espacialización, los OEMs deben configurar su plataforma para admitir el audio espacial.
Requisitos
Para integrar el audio espacial, se deben cumplir los siguientes requisitos:
- El HAL de audio y el DSP de audio deben admitir una ruta de salida dedicada para el audio espacial.
- Para el audio espacial con seguimiento de cabeza, los auriculares deben tener sensores de seguimiento de 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 auriculares Bluetooth a un teléfono.
- Se necesita Audio HAL v7.1 para admitir audio espacial.
Sigue estos pasos para integrar el audio espacial:
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 espacializador deben cumplir con lo siguiente:
- Configuración y control básicos idénticos a otros efectos en el HAL de efectos.
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 OEMs usen los siguientes lineamientos durante la implementación:
- Usa audio LE cuando esté disponible para facilitar la interoperabilidad y lograr los objetivos de latencia.
- 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 obtener una buena UX.
- Para Bluetooth (BT) clásico con perfil de distribución de audio avanzada (A2DP):
- Usa un códec de baja latencia, como Opus.
- Implementa funciones de control de latencia en el HAL de audio. Esto permite la optimización de la energía y el rendimiento cuando el seguimiento de la cabeza está apagado y lo inhabilita durante 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
.
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 indica en las Recomendaciones.