Comunicación de voz a una frecuencia de muestreo de 8KHz para todos los dispositivos Android con OpenSL
Necesito crear una aplicación VOIP y estoy usando OpenSL ES. Necesito capturar y reproducir datos de audio pcm a una frecuencia de muestreo de 8KHz para todos los dispositivos android. Pero, cuando captura el audio a una frecuencia de muestreo de 8KHz y lo reproduzco al mismo tiempo (comunicación de voz), produce ruido y el audio está distorsionado para algunos dispositivos como Samsung Galaxy S3, S4, etc. Sé que hay una frecuencia de muestreo específica preferida Para cada dispositivo y quiero saber si hay alguna solución o alguna manera de trabajar con la frecuencia de muestreo de 8KHz sin ninguna distorsión?
Traté de aumentar el tamaño del búfer y muchas otras cosas, pero no pude encontrar una solución óptima y genérica. Necesito datos de audio muestreados a 8KHz para mi codificador y decodificador. Tomé re-sampling de datos de audio antes de que se pasa a mi codificador o decodificador como mi segundo pensamiento, pero no es la solución que estoy buscando.
- RecorderObject en OpenSL no implementa la interfaz para configurar el volumen o configurarlo en Android
- attachAuxEffect y OpenSL ES
- Control del volumen de audio forzado a altavoz
- reproducir un archivo MP3 android NDK utilizando openSL desde la memoria
- Android 2.3.4, OpenSL ES y enorme log-spam por razones desconocidas
Encontré CSipSimple utilizado OpenSL y pasé por algunos de sus códigos también. Pero, sin embargo, no pude encontrar una solución y puede ser que no pude entender dónde concentrarse. ¡Estoy atorado aqui!
- ¿Es posible tener acceso a la señal del altavoz en Android?
- Alternativa de OpenSL ES en Android
- ¿Cuáles deberían ser las razones para usar OpenSL ES en lugar de AudioTrack en Android?
- OpenSL ES en Android con SL_ANDROID_STREAM_VOICE. La entrada de micrófono es extremadamente baja
- Tutoriales para OpenSL ES para Android
- Reproducción de audio de baja latencia en Android
- Android AlertDialog congela la aplicación unos segundos después de mostrarse - la causa parece relacionada con OpenSL
- ¿Biblioteca de sonido nativa en Android que puede cambiar de tono?
He aquí cómo solucioné mi problema:
Estaba trabajando en streaming de audio para Android usando OpenSL ES y este tutorial me ayudó mucho. Seguí las instrucciones aquí y conseguí la cosa que trabajaba. Entonces encontré streaming de audio con este enfoque no funciona muy bien para algunos dispositivos (en su mayoría dispositivos Samsung). He intentado muchas cosas como aumentar el tamaño del búfer, la desactivación de la reverberación ambiental, etc, etc He encontrado esta respuesta muy útil para mejorar el rendimiento de streaming.
Por último, me pareció que el audio está distorsionado debido a theadlocks que tuve que utilizar para sincronizar los conmutadores de búfer. El uso de la estructura de bloqueo libre se sugiere para un mejor rendimiento de audio. Luego me fui con otra aproximación de Victor Lazzarini que es un bloqueo de Audio IO. Este artículo de Lock-free audio IO con OpenSL ES en Android ayudó mucho a implementar una estructura libre de bloqueo junto con un mejor rendimiento de audio.
- HttpGet params que no se envían
- ¿Cuándo debo desconectarme de Google Play Services en mi aplicación de Android?