Ofrezca una experiencia de sonido envolvente con Spatial Audio

Publicado por Nevin Mital, ingeniero de relaciones con los desarrolladores, Android Media

En Android 13 (nivel de API 33), presentamos una nueva arquitectura de plataforma estandarizada para audio espacial, una experiencia de sonido superior y más inmersiva. Con audio espacial, su contenido suena más realista para los espectadores al hacer que suene como si estuvieran en medio de la acción. Los instrumentos individuales en una banda podrían separarse y “posicionarse” alrededor del usuario, o el sonido de una ballena podría aumentar a medida que se acerca por detrás y disminuir a medida que se aleja nadando. Siga leyendo para obtener más información sobre la compatibilidad de Android con el audio espacial y cómo implementar la función en su aplicación.

Audio espacial en Android

Hay dos distinciones principales de audio espacial:

  • Con estático audio espacial, los sonidos se anclan al usuario y se mueven con él. Un pájaro bebé que canta a su izquierda siempre estará a su izquierda, sin importar cómo gire o asienta con la cabeza.
  • Con sonido espacial con seguimiento de la cabeza, los sonidos se colocan en el entorno que rodea al usuario. Al girar la cabeza hacia la izquierda, el usuario ahora escuchará el canto del pájaro frente a él.
TEXTO ALTERNATIVO

En Android, solo audio multicanal configurado con la derecha Atributos de audio y formato de audio está espacializado de forma predeterminada, aunque los OEM pueden personalizar este comportamiento. En los dispositivos en los que el OEM ha integrado un efecto espacializador, el audio espacial estático funcionará cuando cualquier auricular esté conectado al dispositivo, aunque el audio espacial de seguimiento de cabeza requiere un auricular con sensores de seguimiento de cabeza compatibles. OEM como Pixel, OnePlus y Xiaomi ya han puesto estas experiencias a disposición de sus usuarios.

Implementación y prueba de audio espacial

La forma más fácil de integrar esta característica es usar ExoPlayer! Si usa ExoPlayer de Jetpack Media3 1.0.0 o posterior, ExoPlayer configurará el decodificador para evitar que el audio multicanal se mezcle a estéreo, y el comportamiento de selección de pista predeterminado tendrá en cuenta si la espacialización es posible o no. Esto significa que su contenido solo necesita incluir una pista de audio multicanal que ExoPlayer pueda seleccionar. ExoPlayer controlará el estado del dispositivo y seleccionará una pista multicanal cuando sea posible la espacialización; de lo contrario, cambiará a una pista estéreo.

Android 12L (API nivel 32) agregó el nuevo Espaciador class para permitirle consultar las capacidades de espacialización del dispositivo. Hay cuatro condiciones que deben cumplirse para que el dispositivo emita audio espacializado:

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager val espacializador = audioManager.spatializer if (espacializador.immersiveAudioLevel != Espacializador.SPATIALIZER_IMMERSIVE_LEVEL_NONE && espacializador.isEnabled && espacializador.isAvailable && espacializador.canBeSpatialized(audioAttributes, audioFormat) ) { } else { }

ExoPlayer llevar a cabo estos controles al decidir qué pista de audio seleccionar. Para verificar aún más si el seguimiento de la cabeza está disponible, puede llamar al isHeadTrackerDisponible() método. La clase Spatializer también incluye los siguientes oyentes para poder reaccionar ante cambios en el estado del dispositivo:

OnSpatializerStateChangedListener

Para cambios en si el espaciador es calificado O disponible.

OnHeadTrackerAvailableListener

Por los cambios en sí seguimiento de la cabeza esta disponible.

Con estas señales, puede ajustar manualmente la reproducción del audio espacial. Tenga en cuenta que si no está utilizando ExoPlayer, debe asegurarse de configurar su decodificador para emitir audio multicanal siempre que sea posible estableciendo la cantidad máxima de canales en un número grande con MediaFormat.setInteger(MediaFormat.KEY_MAX_OUTPUT_CHANNEL_COUNT, ##). Vea cómo ExoPlayer hace esto en GitHub. Hay dos formas de evitar la espacialización según su caso de uso. Si su audio ya está espacializado, llame setIsContentSpatialized(true) al configurar AudioAttributes para la transmisión de audio para evitar el doble procesamiento de audio. En todos los demás casos, puede llamar en su lugar setSpatializationBehavior(AudioAttributes.SPATIALIZATION_BEHAVIOR_NEVER) deshabilite la espacialización por completo.

Como se mencionó anteriormente, el uso de audio espacial requiere un dispositivo compatible (es decir, obtenerNivelAudioInmersivo() hace No devolver SPATIALIZER_IMMERSIVE_LEVEL_NONE) y un auricular conectado. Para probar el audio espacial, comience por asegurarse de que la función esté habilitada en su configuración:

  • Para auriculares con cable, vaya a Configuración del sistema > Sonido y vibración > Audio espacial.
  • Para auriculares inalámbricos, vaya a Configuración del sistema > Dispositivos conectados > Ícono de engranaje para dispositivo inalámbrico > Audio espacial.

Tenga en cuenta que para el audio espacial con seguimiento de la cabeza, los auriculares deben tener sensores de seguimiento de la cabeza compatibles con el dispositivo, como Pixel Buds Pro con un teléfono Pixel, y el seguimiento de la cabeza también debe estar habilitado en la configuración.

Próximos pasos

¡Oír es creer, por lo que le recomendamos encarecidamente que experimente el audio espacial por sí mismo! Puede ver una implementación de muestra en nuestra aplicación de muestra, reproductor de musica android universal. Y para obtener más detalles sobre todo lo discutido aquí, consulte el nuestro guía del desarrollador de audio espacial.

Compruebe también

en vivo desde Droidcon, incluida la mayor actualización de Gemini en Android Studio y más lanzamientos del SDK de Android.

Acabamos de lanzar nuestro episodio de otoño de #TheAndroidShow en YouTube etcétera desarrollador.android.comy esta vez …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *