Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Detectar la voz humana de la entrada de archivos de audio

Estoy tratando de implementar la funcionalidad de grabación automática de voz, similar a la aplicación Talking Tom. Utilizo el siguiente código para leer la entrada de la grabadora de audio y analizar el búfer:

float totalAbsValue = 0.0f; short sample = 0; numberOfReadBytes = audioRecorder.read( audioBuffer, 0, bufferSizeInBytes); // Analyze Sound. for( int i=0; i<bufferSizeInBytes; i+=2 ) { sample = (short)( (audioBuffer[i]) | audioBuffer[i + 1] << 8 ); totalAbsValue += Math.abs( sample ) / (numberOfReadBytes/2); } // Analyze temp buffer. tempFloatBuffer[tempIndex%3] = totalAbsValue; float temp = 0.0f; for( int i=0; i<3; ++i ) temp += tempFloatBuffer[i]; 

Ahora soy capaz de detectar la entrada de voz procedente de la grabadora de audio y puedo analizar el buffer de audio.

  • Resultados inesperados implementando desenfoque de movimiento simple en Libgdx
  • Cómo agregar textos de intervalos en un buscador
  • Cómo obtener la lista de todos los accesos directos instalados que se encuentran en el inicio de pantalla de inicio en android
  • Activa la aceleración de hardware si está disponible (como Android 3+) con Android APK 2.2
  • Eventos de captura de Android en la notificación (prensa larga)
  • Android RecyclerView Adapter El número de artículos está devolviendo 0 en la prueba de unidad
  • El búfer se convierte en un valor flotante y si aumenta en una cantidad determinada, se supone que hay algún sonido en el fondo y se inicia la grabación. Pero el problema es que la aplicación comienza a grabar todo el ruido de fondo, incluidos los sonidos del conducto de ventilador / AC.

    ¿Puede alguien ayudarme con el análisis de la memoria intermedia para detectar la voz humana sólo? ¿O hay otras formas alternativas para detectar la voz humana de la entrada del grabador de audio?

    Gracias por adelantado,

  • Dispositivos móviles compatibles con Nvidia Tegra profiler 2.0
  • Mantener el estado de la aplicación android utilizando alwaysRetainTaskState y lauchMode
  • Cómo ejecutar la acción después de pulsar el botón positivo de DialogFragment
  • El error import org.apache.http.client no puede resolverse cuando actualizo sdk a M
  • Recursos de referencia en javadoc
  • Solicitud de revisión HTTP desde Android
  • 9 Solutions collect form web for “Detectar la voz humana de la entrada de archivos de audio”

    La detección de voz no es tan simple. Hay varios algoritmos, algunos de ellos se publican, por ejemplo GSM VAD . Varias bibliotecas de VAD de código abierto están disponibles, algunas de ellas se discuten aquí

    Si desea tener una grabación limpia, puede

    1. Filtra el ruido de la voz, puedes usar FFT para eso y aplicar filtros como filtros paso bajo, paso alto y paso de banda Filtrado usando FFT y Filtros

    2.After Filtración el ruido se reduciría y puede utilizar el reconocimiento de voz API

    API

    Cuanto más Filtro, mejor menos ruido Más reconocimiento, pero tenga cuidado al filtrar porque también puede eliminar la Voz junto con el ruido.

    Leer más sobre FFt

    Transformada Rápida de Fourier de la Voz Humana

    Espero que esto ayude 🙂

    La forma de procesar la entrada es utilizar una biblioteca especializada que elimina el ruido.

    Por ejemplo, http://audacity.sourceforge.net , hace la eliminación de ruido.

    Siempre y cuando haya caracterizado los principales tipos de ruido, debe tener sólo la palabra restante.

    Sería conveniente recopilar datos de muestreo antes de la captura del usuario, y después de que el usuario terminara la captura, ya que esto proporcionaría muestras de ruido en el ambiente. Esto es útil si cada usuario enfrenta desafíos únicos de ruido de fondo.

    ¿Que es exactamente lo que está buscando? ¿Usted apenas desea filtrar hacia fuera el discurso humano en el audio o usted desea realmente saber lo que la persona ha dicho?

    Filtrado de la voz humana se realiza por casi todos los Smartphone mediante la grabación del ruido de fondo con un segundo micrófono en la parte posterior del dispositivo y restar las dos señales. Pero para ser honesto, no he visto ninguna API de Android que se puede acceder directamente a las dos señales.

    Si desea hacer conversación de texto a texto, entonces eche un vistazo a Sphinx4 y Praat. Ambos hacen este trabajo, pero de nuevo, no he visto una implementación para Android. Sphinx4 afirma estar completamente escrito en Java, por lo que debería ser posible incrustarlo en una aplicación para Android.

    Para la detección de voz, pruebe el algoritmo ftt.

    Para el ruido, pruebe la biblioteca de speex.

    ¿Ha considerado utilizar el API de reconocimiento de voz de Microsoft? Usted puede utilizar un enunciado de voz clave para comenzar la grabación, como la forma en que dicen "equipo" antes de preguntarle algo a la computadora en Star Trek. Utilice ISpRecognizer :: CreateRecoContext para cargar su gramática de reconocimiento e iniciar el reconocimiento. A continuación, implemente una comprobación con ISpPhrase para ver si debe comenzar a grabar o no.

    En el caso completamente general, este es un problema sin resolver. En el sentido práctico …

    El primer paso es conseguir una grabación lo más silenciosa posible. Como otros han señalado, que comienza con un micrófono direccional centrado en el sonido que desea mantener como sea posible.

    El segundo paso es el filtrado. Como se señaló anteriormente, la compañía telefónica hizo un montón de trabajo en que los rangos de frecuencia son realmente necesarios por los seres humanos para la comprensión del habla. El filtrado de frecuencias fuera de ese rango hará que la voz suene como … bueno, un teléfono … pero se deshará de más del ruido de fondo.

    Si quieres ir más allá de eso, las cosas pueden ser realmente complicadas. Hay algunos algoritmos que, si se les puede mostrar una muestra de lo que se considera el ruido en esa grabación en particular, se analizará y tratar de restarlo sin dañar el sonido que desea mantener demasiado. Esto no es simple programación; Si yo fuera tú, consideraría seriamente comprarlo a alguien que ya lo había hecho bien en lugar de tratar de reinventarlo / reimplementarlo. No sé si alguno de ellos está disponible para Android o si la típica caja de Android tiene suficiente poder de computación para ejecutarlos en algo como en tiempo real. (He utilizado SoundSoap en el estudio para eliminar el ruido de A / C, y funciona muy bien.)

    De hecho, mi propia inclinación sería simplificar el problema a uno resuelto: usar el mike más direccional y más cercano que podría conseguir, dejar que Android haga la grabación … pero luego hacer el procesamiento de señal para limpiarlo más tarde, usando off – las herramientas del estante. Pero admito que estoy sesgado porque ya he invertido en este último.

    He intentado resolver un problema similar en Windows. Una cosa que aprendí rápido – análisis de frecuencia simple con una rápida transformada de Fourier no es suficiente. Son muchos los ruidos que afectan a las frecuencias humanas, desde los simples golpes en el micrófono hasta las palmas. Incluso algún nivel de filtrado sofisticado no lo hará. He encontrado la manera más fácil es llevar el ruido a una API de nube y pedirle que transcriba el discurso. Si la API de nube puede transcribir a una cadena de longitud razonable, entonces puedo continuar la grabación – de lo contrario, detener la grabación. Esto requiere que pruebe algo de ruido y lo envíe a un proveedor de la nube.

    La mayoría de ellos han malinterpretado la pregunta y sus respuestas resuelven problemas diferentes de los suyos.

    Debe analizar el audio en su búfer buscando frecuencias en el rango de voz humana. En cuanto los detecte, significa que alguien ha empezado a hablar, y puede empezar a grabar (no olvide incluir el búfer también, ya que contiene la primera parte del discurso).

    Buscar rutinas que impriman la lista de frecuencias en un flujo de audio en bruto

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.