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.

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!

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.

  • Redirigir audio / crear rutas de sonido alternativas en Android
  • Android con Nexus 6 - ¿cómo evitar la disminución de la prioridad de audio de OpenSL en relación con el enfoque de la aplicación?
  • Transmisión de audio MP3 mediante comunicación de socket mediante OpenSL ES en Android
  • ¿Es necesario liberar un buffer final de un reproductor de audio OpenSL ES?
  • Vinculación con la biblioteca actualizada en Android
  • Cómo convertir voz humana a nota musical en Android?
  • ¿Qué es SLDataLocator_AndroidSimpleBufferQueue (Android 4.3)?
  • Descodificador AES OpenSL ES de Android
  • Cómo medir la latencia de audio con OpenSL en Android?
  • ¿Es posible obtener un búfer de bytes directamente desde un activo de audio en OpenSL ES (para Android)?
  • Precisamente Sync Looped Audio con animación en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.