¿Qué contiene un cuadro de audio?

Estoy haciendo algunas investigaciones sobre cómo comparar archivos de sonido (ola). Básicamente quiero comparar los archivos de sonido almacenados (wav) con el sonido de un micrófono. Así que al final me gustaría almacenar previamente algunos comandos de voz y luego, cuando ejecuto mi aplicación, me gustaría comparar los archivos almacenados previamente con la entrada del micrófono.

Mi pensamiento era poner algo de margen al comparar porque supongo que decir algo dos veces seguidas de la misma manera sería difícil.

Así que después de buscar en Google, veo que Python tiene este módulo llamado wave y el objeto Wave_read. Ese objeto tiene una función llamada readframes (n):

Lee y devuelve a lo sumo n cuadros de audio, como una cadena de bytes.

¿Qué contienen estos bytes? Estoy pensando en hacer un bucle a través de los archivos wave un fotogtwig a la vez, comparándolos fotogtwig a fotogtwig.

Un cuadro de audio, o muestra, contiene información de amplitud (volumen) en ese momento en particular. Para producir sonido, decenas de miles de cuadros se reproducen en secuencia para producir frecuencias.

En el caso de audio de calidad de CD o audio de onda sin comprimir, hay alrededor de 44.100 cuadros / muestras por segundo. Cada uno de esos cuadros contiene 16 bits de resolución, lo que permite representaciones bastante precisas de los niveles de sonido. Además, dado que el CD de audio es estéreo, en realidad hay el doble de información, 16 bits para el canal izquierdo, 16 bits para el derecho.

Cuando utilice el módulo de sonido en python para obtener un fotogtwig, se devolverá como una serie de caracteres hexadecimales:

  • Un carácter para una señal mono de 8 bits.
  • Dos personajes para estéreo de 8 bits.
  • Dos personajes para mono de 16 bits.
  • Cuatro caracteres para estéreo de 16 bits.

Para convertir y comparar estos valores, primero tendrá que usar las funciones del módulo de onda de Python para verificar la profundidad de bits y el número de canales. De lo contrario, estarás comparando configuraciones de calidad que no coinciden.

Una simple comparación byte por byte no tiene casi ninguna posibilidad de una coincidencia exitosa, incluso con cierta tolerancia. El reconocimiento del patrón de voz es un problema muy complejo y sutil que aún es objeto de mucha investigación.

Lo primero que debe hacer es una transformación de Fourier para transformar los datos en sus frecuencias. Sin embargo, es bastante complejo. No usaría bibliotecas de reconocimiento de voz aquí, ya que parece que no grabas voces solamente. Luego, intente diferentes turnos de tiempo (en caso de que los sonidos no estén exactamente alineados) y use el que le ofrezca la mejor similitud, donde debe definir una función de similitud. Ah, y deberías normalizar ambas señales (la máxima sonoridad máxima).

Creo que la descripción aceptada es un poco incorrecta.

Un fotogtwig parece ser algo así como zancada en formatos gráficos. Para el estéreo intercalado a 16 bits / muestra, el tamaño del cuadro es 2*sizeof(short) = 4 bytes. Para el estéreo no intercalado a 16 bits / muestra, las muestras del canal izquierdo están todas una detrás de otra, por lo que el tamaño del cuadro es solo sizeof(short) .