Para obtener la latencia de audio más baja posible, le recomendamos que use audio nativo de Android basado en OpenSL ES 1.0.1.
Lista de verificación de implementación
Para usar el audio nativo de Android:
- Descargue e instale el NDK de Android . En el resto de este documento, asumiremos que
NDKroot
es el directorio donde instaló NDK. - Lea la documentación de apoyo.
- Verifique el nivel de API 9 o superior.
- Compruebe la función android.hardware.audio.low_latency.
- Use el tamaño de búfer nativo recomendado y la frecuencia de muestreo devuelta por android.media.AudioManager.getProperty(java.lang.String)
Nota : también se debe usar el mismo tamaño de búfer y frecuencia de muestreo para la entrada.
- Por lo general, un recuento de búfer de OpenSL ES de 1 es suficiente.
- Mantenga sus controladores de devolución de llamada breves, sin un uso excesivo de la CPU o un bloqueo ilimitado. Evite la inversión de prioridad.
- Considere usar algoritmos sin bloqueo para comunicarse entre los controladores de devolución de llamada de entrada y salida, y entre los controladores de devolución de llamada y el resto de su aplicación.
Documentación de apoyo
OpenSL ES 1.0.1
Utilice un visor de PDF para revisar la especificación OpenSL 1.0.1. Esta es una referencia bastante larga, y no toda será relevante para usted; pero deberá consultarlo para obtener detalles sobre la API.
Nota : este documento describe OpenSL ES 1.0.1 completo, pero el audio nativo de Android en realidad se basa en un subconjunto de OpenSL ES 1.0.1 con algunas extensiones específicas de Android.
Los documentos que describen versiones posteriores de OpenSL ES, como 1.1, no son relevantes para Android.
OpenSL ES para Android
El documento "OpenSL ES para Android" se proporciona en la instalación del NDK y actualmente no está disponible en línea. Abra este enlace en un navegador:
NDKroot/docs/Additional_library_docs/opensles/index.html
Querrá hojear todo el documento, pero preste especial atención a la subsección "Rendimiento" de la sección "Notas de programación".
La sección "Funciones compatibles de OpenSL ES 1.0.1" describe el subconjunto compatible con Android.
La sección "Extensiones de Android" describe las extensiones específicas de Android que no están incluidas en OpenSL ES 1.0.1 base.
Relación con OpenSL ES 1.0.1
Este diagrama de Venn muestra la relación entre el audio nativo de Android y OpenSL ES 1.0.1.
Otros recursos
fuente.android.com
El sitio source.android.com está diseñado principalmente para los OEM que fabrican dispositivos Android y los proveedores de SoC que suministran componentes a estos OEM.
Sin embargo, hay una gran cantidad de información útil sobre la latencia en este sitio, por lo que es posible que desee revisarla. Consulte los artículos en Latencia de audio.
android-ndk
Si tiene preguntas sobre cómo usar el audio nativo de Android, puede preguntar en el grupo de discusión android-ndk.
Vídeos
- Audio de alto rendimiento en Android (Google I/O 2013)
- Todo el video trata sobre la latencia.
- Creación de excelentes experiencias multimedia en Android (Google I/O 2014)
- Los primeros 14 minutos tratan sobre el audio en general y la latencia de entrada en particular.
- Latencia de audio: tamaños de búfer (100 días de Google Dev)
- Describe la relación entre la latencia de audio, los tamaños de búfer y la programación de tareas.