Android 13 presenta una forma estándar para que los OEM admitan el audio espacial y el monitoreo de 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 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 monitoreo de 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 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 audio espacial y el seguimiento de la cabeza, ya que ofrece procesamiento de audio 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 el 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 monitoreo de cabeza. Este nuevo modelo también incluye enlaces al framework del sensor para el monitoreo de cabeza.
En la siguiente figura, se ilustra la arquitectura del sistema del framework de audio para el efecto de espacialización y monitoreo de 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ítica 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 monitoreo de cabeza, la clase SpatializerPoseController agrupa las funciones relacionadas con el monitoreo de cabeza, para interactuar con la pila de sensores y para combinar y filtrar las señales de los sensores que se envían al motor de efectos. Los datos del sensor de monitoreo 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 monitoreo de cabeza a través de las APIs del sistema
- Descubrir los sensores de monitoreo de 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 frecuencia se pueden implementar con la biblioteca de utilidades de monitoreo de cabeza.
APIs de audio espacial
Android 13 ofrece APIs del sistema de audio espacial y para desarrolladores.
Los OEM pueden adaptar el comportamiento de la app 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 la transmisión 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 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 monitoreo de cabeza en la configuración del dispositivo Bluetooth para cada dispositivo. El parámetro de configuración de monitoreo de cabeza solo está disponible si los auriculares Bluetooth exponen un sensor de monitoreo 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 monitoreo de cabeza Sensor.TYPE_HEAD_TRACKER se agrega 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 del espacializador, 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 el audio espacial con monitoreo de cabeza, los auriculares deben tener sensores de monitoreo de cabeza integrados.
- La implementación debe cumplir con el estándar propuesto para el monitoreo 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.mkde la siguiente manera:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=trueEsto hace que
AudioServiceinicialice la compatibilidad con el espacializador.Declara la salida dedicada para la mezcla de audio espacial en
audio_policy_configuration.xmlde 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.xmlde 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 admitidas, como los siguientes:
SPATIALIZER_PARAM_SUPPORTED_LEVELSSPATIALIZER_PARAM_LEVELSPATIALIZER_PARAM_HEADTRACKING_SUPPORTEDSPATIALIZER_PARAM_HEADTRACKING_MODESPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKSSPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODESSPATIALIZER_PARAM_HEAD_TO_STAGE
Consulta
effect_spatializer.hpara obtener más información.
Recomendaciones
Recomendamos que los OEM sigan 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 monitoreo de cabeza está desactivado, y también inhabilitar el monitoreo de cabeza en condiciones no óptimas.
Validación
Para validar la funcionalidad de la característica de audio espacial, usa las pruebas de CTS disponibles en SpatializerTest.java.
La implementación deficiente de los algoritmos de espacialización o monitoreo de cabeza puede provocar que no se cumpla la recomendación de latencia de ida y vuelta que se indica en las Recomendaciones.