Cómo utilizar audio de Android con baja latencia
Problema:
Como habrás escuchado, Android no proporciona API de audio de baja latencia. Lo que quiero decir con audio de baja latencia es que usted debería ser capaz de obtener señales de audio del micrófono y reproducir el sonido sin mucho intervalo de tiempo entre (por ejemplo, 5-7 ms)
- ¿Cuál es la mejor manera de obtener una duración de archivo de audio en Android?
- ¿Cómo obtener sólo frecuencia de audio y decibles del proyecto FFTBasedSpectrumAnalyzer?
- Android OpenAL?
- Mp3 a conversión wav android
- Android: diálogo abierto para seleccionar audio
He intentado viejo java (con AudioRecord y AudioTrack) y "nuevo" OpenSL ES. Son terribles y hacen que la aplicación sea inutilizable. El tema estaba bien documentado aquí. BTW, la API de iOS puede producir latencia de 5-7 ms.
Buscando soluciones:
Pero estoy tratando de hacer el audio de baja latencia de todos modos. Algo como esta respuesta describe.
"Sin embargo, sólo pude lograr esto satisfactoriamente escribiendo mi propio código que hacía la mezcla internamente y accedía a la API de reproducción de audio de bajo nivel sólo para reproducir la salida mixta final. Compact Framework son teóricamente capaces de polifonía, pero en la práctica funcionan horriblemente (muchos problemas, tartamudeo y distorsión) ".
¿Tiene sentido para Android? Una respuesta es desalentadora.
Así que mi pregunta. ¿Realmente no hay manera de lograr una latencia de audio de 10 ms con Android?
Para ser honesto, no estoy esperando una solución en algún tiempo pronto, pero sólo deseo una gran mente tienen respuesta a este problema.
- Obtenga audio wav de frecuencia usando FFT y clase Compleja
- Dificultad para portar el código de salida de PCM sin procesar de Java a Android AudioTrack API
- ¿Cómo puedo instanciar un objeto java utilizando JNI (Delphi)
- Reproducir tono estéreo en Android
- Transferir datos sobre el sonido en Android
- Grabación de audio estéreo con un Motorola Moto G (o Moto X)
- Enrutamiento de audio a auriculares Bluetooth (no A2DP) en Android
- Ruta de audio desde Android Phone a PC a través de USB?
Actualmente no hay forma de obtener audio de baja latencia en los dispositivos Android sin modificar el sistema operativo, e incluso entonces una gran cantidad de la latencia puede venir de la implementación de hardware, por lo que el software no puede arreglarlo. Esto es triste porque el kernel de Linux es muy capaz de <5ms de latencia de audio, y mucho hardware ARM es capaz de latencia decente. Tenía una compilación de Linux personalizada ejecutándose en una antigua TX de Palm y que en realidad tenía una latencia bastante decente.
Android 4.1+ tiene api de audio de baja latencia que debería darle menos de 10ms de latencia. Sin embargo el valor varía según el hardware (bienvenido al rico y diverso mundo de android).
También se puede utilizar descriptor de función de "android.hardware.audio.low_latency" para filtrar dispositivos que carecen de soporte de baja latencia.
Visita http://www.youtube.com/watch?v=Yc8YrVc47TI&feature=player_de%20tailpage#t=1366s
Como seguimiento de la característica de android.hardware.audio.pro
partir de Android 6 promesas <20ms ida y vuelta veces, lo que podemos esperar significa <10ms unidireccional.
- Mantener orden de dependencias específicas para Android Studio
- Error al desplegar código de ejemplo por android, project: android api demos