reconocimiento de voz basado en el nivel de intensidad de la voz (ruido)?

Quiero crear una aplicación para Android que reconozca mi voz, la convierta en texto y muestre lo que acabo de decir en un brindis. Puedo hacer esto usando un botón que iniciará el reconocimiento de voz para mí. Pero ahora quiero que funcione solo sobre la base de mi voz.

La aplicación debe activar el reconocimiento de voz y comenzar a escucharme solo cuando empiezo a hablar y debe dejar de escuchar cuando detecta silencio. Al igual que el funcionamiento de la aplicación Talking Tom. Allí graba la voz pero quiero reconocerla usando el reconocedor de voz. Algo como esto:

if(no silense)
   Launch Recognizer
else if(silence)
   Stop Recognizer
Show toast

El principal problema es cómo puedo sentir si el usuario está hablando algo o no antes de iniciar el reconocimiento de voz. ¿Hay alguna forma de detectar la intensidad del ruido...?

En segundo lugar, ¿hay alguna forma de iniciar el reconocimiento de voz en segundo plano...?

¿Es posible si puedo detectar una señal de audio (alguien comienza a hablar) en un servicio en segundo plano, que luego iniciará inmediatamente el reconocedor de voz para reconocer el habla?

preguntado el 12 de junio de 12 a las 19:06

Talking Tom también cambia otros sonidos, no solo la voz, por lo que probablemente siga grabando el audio, aplicando el filtro y reproduciendo el sonido continuamente. -

@nininho Sé que graba el sonido. Eso es lo que también mencioné en la pregunta. Solo quiero saber cómo responde solo cuando hay algún espacio de silencio. Debe haber sentido el silencio cuando responde. La idea principal es que solo quiero saber cómo detectar las brechas silenciosas para poder disparar algunas intenciones en esas brechas. -

Bueno, tu voz tiene un cierto rango de frecuencia llamado Voice Band. Esto varía de 300 Hz a 3400 Hz. Podría usar un filtro digital para escuchar algo dentro de ese rango. Aparte de eso, no estoy muy seguro. -

@baudday En ese caso, tendré que hacer que el reconocedor siga escuchando continuamente, incluso si hay un silencio total. para que pueda filtrar los comandos de voz sobre la base de las lagunas silenciosas. Pero por lo que sé, no podemos controlar cuánto tiempo aparecerá la ventana del reconocedor. ¿Cómo puedo hacer que el reconocedor siga escuchando continuamente... ??? -

Lamentablemente, no puedo ayudarte en eso. Estaba presentando una forma posible de comenzar a abordar su problema. Es por eso que lo envié como un comentario y no como una respuesta. -

2 Respuestas

La mayoría de los reconocedores de voz ya tienen un indicador final para detectar el inicio y el final del discurso. Los endpointers generalmente intentan leer el nivel de ruido ambiental para determinar una línea de base para el silencio y adaptar la relación señal-ruido. Pero, si el nivel de ruido de entrada cambia, podría activar el inicio del habla del puntero final. Si escucha todo el tiempo, con un micrófono sensible, el dispositivo de punto final también podría detectar a alguien que habla a su lado, en lugar de usted.

Como tal, usar un botón de voz es una buena práctica para anunciar cuándo desea hablar. Intentar que el reconocedor escuche todo el tiempo probablemente no sea lo que desea hacer, o debería dejarse en manos de los investigadores.

Respondido el 15 de junio de 12 a las 20:06

Ok, lo he descubierto. He usado mediaRecorder clase para esto. Cuando se inicia la aplicación, empiezo a grabar el audio usando mediaRecoder (o puede proporcionar un botón para iniciar y detener todo el proceso). Compruebo la amplitud del audio que está grabando el mediaRecorder. Si la amplitud supera un umbral predefinido, detengo la grabación y lanzo el Voice Recognition activity. En OnActivityResult Vuelvo a reanudar la grabadora.

if(mRecorder != null){
        int i= mRecorder.getMaxAmplitude();   // Getting amplitude 
        Log.d("AMPL : ", String.valueOf(i));

        if(i>20000){      // If amplitude is more than 20000
            onRecord(false);    //Stop recording before launching recognizer
            Intent intent=new Intent(this,VoiceRecognizer.class);   //Launch recognizer activity
            startActivityForResult(intent, 12112);
        }

Alternativamente: también puede utilizar Reconocimiento oyente interfaz como se menciona en este Publicación SO.

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.