2009-01-22 11 views
18

¿Hay alguna manera de comparar programáticamente dos archivos de sonido para determinar si son idénticos o casi idénticos? Estos no son archivos mp3 y no tienen ningún ID3 u otros metadatos, sino archivos wav. Comparar los valores de la suma de comprobación puede no funcionar ya que pueden no ser completamente idénticos.Comparación de archivos de sonido si no es completamente idéntica

Respuesta

12

El wikipedia article on acoustic fingerprinting menciona una serie de productos, incluido el opensource libfooid. Básicamente, estás buscando entrar en el dominio de la frecuencia, tomando niveles aproximados en un número relativamente pequeño de bandas (digamos 32), para darte una cadena que represente algo así como 25 ms de sonido, haciendo eso para todo el archivo, luego haciendo un comparación fuzzing de esas cadenas para diferentes archivos. Es bastante complejo, pero necesita hacerlo; comparar las muestras reales no te llevará a ninguna parte, ya que algo tan simple como un cambio de volumen en un pequeño porcentaje arrojará la coincidencia completa.

+0

Buen enlace. OQ parecía sugerir que los archivos podían ser idénticos o casi iguales, lo que indicaba que la comparación muestra por muestra podría funcionar. – MusiGenesis

1

Puede comparar los dos archivos WAV muestra por muestra y calcular una diferencia promedio por muestra. Para agilizar las cosas, puede usar el mismo método, pero compare cada décima muestra o cada 100 muestra y obtenga esencialmente el mismo valor (dos archivos que no son iguales o incluso cercanos tendrán una gran diferencia promedio por muestra))

+0

esto no funciona si un archivo tiene 1 segundo de silencio agregado al frente del mismo, pero por lo demás son idénticos. – rmeador

+0

Necesita agregar el reconocimiento de patrones y luego tratar de alinearlos temporalmente antes de verificar las muestras –

+2

Estoy de acuerdo con ambos puntos, pero eso lleva este problema del dominio de lo simple al reino de lo espantosamente complejo. – MusiGenesis

2

Una cosa que podría probar que le daría una huella digital bastante decente del archivo es tomar un Fourier transform y observar la distribución de las diferentes frecuencias presentes en el archivo. Todavía es muy posible crear dos archivos de sonido muy diferentes que tengan la misma transformada de Fourier, pero eso es algo improbable si sus archivos provienen de un origen no artificial ...

+0

Entonces, para comparar archivos encuentro la correlación entre 2 ffts?(suponiendo que esto me dará resultados no tan precisos) – Talha

6

El proceso para comparar un conjunto de sonidos para similitudes se denomina Audio basado en contenido Indexing, Retrieval y Fingerprinting en la investigación en ciencias de la computación.

Un método para hacer esto es:

1) ejecutar varios bits de procesamiento de la señal en cada archivo de audio para extraer características, tales como el tono con el tiempo, el espectro de frecuencia, autocorrelación, rango dinámico, transitorios, etc.

2) Poner todas las características para cada archivo de audio en una matriz multi-dimensional y volcar cada matriz multidimensional en una base de datos

3) Utilizar técnicas de optimización (como gradient descent) para encontrar la mejor combinación para un archivo de audio dado en su base de datos multidimensionales.

El truco para hacer bien este trabajo es el que cuenta con

Hay varios proyectos que hacen este tipo de cosas, incluyendo MusicBrainz y EchoNest.

Echonest tiene una de las simplest APIs que he visto en este espacio. Muy fácil de empezar

P.S. No, no trabajo para Echonest, ni conozco a nadie que trabaje allí.

Cuestiones relacionadas