¿Cómo funcionan las aplicaciones de identificación de música como Shazam, SoundHound y musiXmatch (huellas digitales acústicas)?

Primero generan un espectrograma para la canción. El espectrograma es un gráfico de 3 dimensiones: en el eje horizontal (X), tiene el tiempo, en el eje vertical (Y) tiene la frecuencia y la tercera dimensión está representada por la intensidad del color y representa la amplitud de una determinada frecuencia . Básicamente, un punto en el gráfico representará el volumen de un sonido determinado en un momento determinado de la canción. Un punto más oscuro significa que el sonido específico (frecuencia) es más fuerte que un punto más claro.
Almacenar la canción completa en la base de datos ocupará una enorme cantidad de espacio, teniendo en cuenta que la base de datos Shazam tiene más de 8 millones de canciones. Entonces, en cambio, almacenarán solo los sonidos intensos en la canción, el momento en que aparecen en la canción y a qué frecuencia.
Entonces un espectrograma para una canción se transformará a partir de esto:
El espectrograma inicial
dentro de esto:
El espectrograma simplificado
Observe que los puntos más oscuros en la primera imagen (el espectrograma) coinciden con los cruces en la segunda imagen.
Para almacenar esto en la base de datos de manera que sea eficiente buscar una coincidencia (fácil de indexar), eligen algunos de los puntos dentro del espectrograma simplificado (llamados “puntos de anclaje”) y zonas cercanas a ellos ( llamada “zona objetivo”).
Emparejar el punto de anclaje con puntos en una zona objetivo
Ahora, para cada punto en la zona objetivo, crearán un hash que será la agregación de lo siguiente: la frecuencia en la que se encuentra el punto de anclaje (f1) + la frecuencia en la que se encuentra el punto en la zona objetivo ( f2) + la diferencia de tiempo entre el momento en que el punto en la zona objetivo se encuentra en la canción (t2) y el momento en que el punto de anclaje se encuentra en la canción (t1) + t1. Para simplificar: hash = (f1 + f2 + (t2-t1)) + t1
Cómo se calcula el hash
Después de esto, almacenarán cada hash generado de esta manera en la base de datos.
Entonces, ¿cómo encuentran la canción basada en la muestra grabada ?
Bueno, primero repiten las mismas huellas digitales también en la muestra grabada. Se buscará una coincidencia en la base de datos en cada hash generado a partir del sonido de muestra.
Si se encuentra una coincidencia, tendrá el tiempo del hash de la muestra ( th1 ), el tiempo del hash de la canción en la base de datos ( th2 ) e implícitamente el ID de la canción para la cual el hash coincidió. Básicamente, th1 es el tiempo desde el comienzo de la muestra hasta el momento del hash de la muestra y th2 es el tiempo desde el comienzo de la canción y el tiempo del hash de la canción.
Ahora, dibujarán un nuevo gráfico llamado gráfico de dispersión. El gráfico tendrá en el eje horizontal (X) el tiempo de la canción en la base de datos y en el eje vertical (Y) el tiempo de la muestra grabada. En el eje X marcaremos th2 y en el eje Y marcaremos th1 . El punto de intersección de los dos tiempos de ocurrencia ( th1 y th2 ) se marcará con un pequeño círculo. La magia ocurre ahora: si el gráfico contendrá muchos pares de th1 y th2 de la misma canción, se formará una línea diagonal. La idea detrás de la formación de esa línea es simple: la velocidad a la que aparecen los picos (las pequeñas cruces del espectrograma simplificado) en la canción de la base de datos será la misma velocidad a la que aparecen los picos en la muestra grabada, por lo que si empareja En estos momentos, las coordenadas en el gráfico de dispersión crecerán constantemente (en la parte superior derecha del gráfico) a medida que pasa el tiempo en ambos ejes.
Gráfico de dispersión de una ejecución no coincidente
.
Gráfico de dispersión de una ejecución coincidente
Finalmente, calcularán una diferencia entre th2 y th1 ( dth) y la trazarán en un histograma . Si hay una coincidencia en el gráfico trazado, habrá muchas dths con el mismo valor, porque, básicamente, restando el th2 de th1 dará el desplazamiento desde donde se registró la muestra (la diferencia entre un punto en el canción original y el mismo punto en la muestra grabada). Esto dará como resultado un pico dentro del histograma, que confirmará una coincidencia.
Histograma de una ejecución no coincidente
.
Histograma de una corrida correspondiente
Entonces, espero que esto les haya ayudado a todos a entender cómo funciona una aplicación maravillosa como esta. Si tiene alguna pregunta, cree que he omitido algo o hay algo mal en este artículo, deje un comentario e iremos desde allí.

Fuente / Créditos: ¿Cómo trabaja Shazam para reconocer una canción?