2011-02-08 8 views
6

Estoy desarrollando una aplicación y necesito alguna forma de comparar 2 voces si coinciden o no, sé que Voice Recognizer es una forma de hacerlo, pero ya que (creo) necesita traducir primero la voz a una cadena, no será tan adecuado para otro idioma aparte del idioma soportado por el reconocedor de voz ... ¿alguna idea? Al igual que el teléfono viejo días solía hacer, la etiqueta de voz en el que acaba de comparar la entrada de voz con la voz que grabó anteriormente durante la configuraciónComparar voz wav en Android o etiqueta de voz (comandos de voz) API

+0

¿Está tratando de reconocer que ambas grabaciones fueron del mismo altavoz (autenticación de voz o identificación del hablante) o está tratando de determinar si se pronunciaron las mismas palabras? ¿A qué estás emparejando? la identidad del hablante o las palabras que habló? –

+0

Hola. ¿Cómo resuelves esto? –

Respuesta

5

Un relativamente manera sencilla de hacerlo es utilizar la FFT (Fast Fourier Transform) convertir los datos de dominio de tiempo del archivo WAV original en datos de dominio de frecuencia (en los que cada valor en su matriz transformada representa la magnitud/intensidad relativa de una banda de frecuencia particular).

Si la misma persona habla la misma palabra dos veces, los datos de dominio de tiempo resultantes seguirán siendo muy diferentes numéricamente en los dos archivos WAV. La conversión de ambos archivos WAV al dominio de frecuencia (usando el mismo tamaño de ventana FFT para ambos, incluso si los dos archivos son de longitudes ligeramente diferentes) producirá matrices de frecuencia que son mucho más similares entre sí que los archivos WAV originales.

Desafortunadamente, no he podido encontrar ninguna biblioteca FFT específicamente para Android. He aquí una pregunta que hace referencia a algunas bibliotecas basadas en Java:

Signal processing library in Java?

+0

Gracias, pero estoy realmente sorprendido, ¿por qué mi viejo teléfono moto puede hacerlo y este nuevo androide estúpido no puede, sólo quiero grabar mi voz y luego decirlo nuevamente y sabrá si está cerca del original! No quiero hacer esto complicado, quiero decir, si serán exactamente iguales, no hay problema, pero hay muchos algoritmos para decidir si está cerca del original o no, ¡no quiero reinventar la rueda! – rami

+0

Sí, parece que las cosas de reconocimiento de voz introducidas en Android no funcionan como tú quieres. Creo que los fabricantes se han estado alejando de cómo su moto reconocía el habla, ya que esa forma más antigua dependía de "entrenar" a su teléfono para reconocer su voz particular. Esto es lo que quieres, por supuesto, pero se consideró una debilidad seria y es presumiblemente por qué nadie lo hace así nunca más. – MusiGenesis

+0

MusiGenesis tiene razón. La antigua forma de hacer reconocimiento de voz era que el teléfono tenía todas las bibliotecas y el software de procesamiento en el dispositivo. Los androides abren una transmisión a Google y en realidad estás 'hablando' con los servidores de Google, no con tu teléfono. Los servidores luego envían la interpretación al teléfono. Es más preciso, admite más funciones y ahorra espacio en el teléfono de esta manera. Pero, es perjudicial para lo que estás tratando de hacer, lo cual es desafortunado. :( – Brandon

1

Una idea es comparar la similitud de las voces en sus spectograms. Las características del espectrograma son robustas y resisten al ruido, que es una buena referencia para analizar dos voces. Si toma este enfoque, primero debe averiguar las características de las voces y debe saber cómo comparar las características en dos espectrogramas, se refiere al reconocimiento de patrones.

Esta api http://code.google.com/p/musicg-sound-api/ está escrito en Java y se puede utilizar en Android. Captura el espectrograma de onda.