Un Mundo Loco ●

Cómo Shazam reconoce una canción en segundos: el algoritmo que cambió la música

Cómo Shazam reconoce una canción en segundos: el algoritmo que cambió la música

Shazam escucha cinco segundos de audio en un ambiente ruidoso y en menos de tres segundos te dice qué canción es, en qué álbum está y quién la canta. Lo hace comparando la grabación contra una base de datos de más de 100 millones de canciones. Y funciona aunque haya gente hablando al fondo, el sonido sea de mala calidad y la canción esté reproducida desde parlantes baratos.

El algoritmo detrás de esto fue publicado en 2003 por Avery Wang, uno de los fundadores de Shazam, en una conferencia de recuperación de información musical. Explicarlo requiere entender qué es una huella digital de audio.

El problema que resuelve

Comparar dos archivos de audio directamente es inútil para identificación. La grabación de Shazam capta el sonido del ambiente con el micrófono del celular: tiene ruido de fondo, distorsión, cambios de volumen. El archivo original de la canción en la base de datos es una grabación perfecta de estudio. Son completamente distintos a nivel de señal, aunque el contenido musical sea el mismo.

Necesitás una representación del audio que capture lo que es musicalmente esencial y descarte todo lo demás.

Las huellas de frecuencia

El primer paso es convertir el audio en un espectrograma: una representación visual del sonido donde el eje horizontal es el tiempo, el eje vertical es la frecuencia (los tonos, de grave a agudo) y el brillo de cada punto indica cuánta energía hay en esa frecuencia en ese momento.

Un espectrograma de música tiene picos de energía en las frecuencias donde están los instrumentos y la voz. En una nota de piano, hay un pico en la frecuencia fundamental y picos más pequeños en los armónicos. En una nota de guitarra, lo mismo pero con un perfil de armónicos diferente.

Shazam no usa todos los puntos del espectrograma — eso serían millones de datos por canción. En cambio, identifica los puntos de máxima energía local: los picos del espectrograma. Son los momentos más "sonoros" en cada región del espectrograma. Una canción de cuatro minutos se reduce a algunos miles de puntos de pico.

Los pares de puntos y el hash

Aquí está la parte más elegante del algoritmo. Shazam no indexa los picos individuales — los indexa en pares. Para cada pico, busca otros picos que ocurren poco después y en frecuencias cercanas. Cada par (frecuencia del pico 1, frecuencia del pico 2, diferencia de tiempo entre ellos) se convierte en un hash: un número de identificación compacto.

Una canción genera millones de estos hashes. Cada hash es muy específico — para que dos canciones tengan el mismo hash en el mismo momento, tendrían que tener picos de energía idénticos en las mismas frecuencias con el mismo intervalo temporal entre ellos.

La base de datos de Shazam almacena estos hashes para cada canción con la información de en qué segundo de la canción ocurren.

La búsqueda

Cuando grabás con Shazam, el algoritmo extrae los picos del espectrograma de esos cinco segundos de audio grabado y genera sus propios hashes, igual que hizo con todas las canciones de la base de datos.

Después busca esos hashes en la base de datos. Inevitablemente va a encontrar muchos, porque algunas frecuencias son comunes entre canciones. La clave está en el tiempo: si los hashes de la grabación corresponden a una canción específica, y esos hashes ocurren en el orden temporal correcto — es decir, el hash del segundo 0.5 de la grabación corresponde al segundo 1:23 de la canción, el hash del segundo 1.2 corresponde al segundo 1:24 de la canción, etc. — entonces hay una correspondencia lineal y consistente en el tiempo. Eso es una coincidencia real, no aleatoria.

El sistema busca esa consistencia temporal. Si 20 o 30 hashes de la grabación cortos corresponden a la misma canción con el mismo desplazamiento temporal, la probabilidad de que sea una coincidencia accidental es astronomicamente baja.

Por qué funciona con ruido

El ruido de fondo no tiene los mismos picos de energía que la música. En el espectrograma, el ruido aparece como energía distribuida de manera relativamente uniforme en todas las frecuencias. Los picos musicales son localmente los más intensos de su zona del espectrograma.

Al tomar solo los máximos locales, Shazam ignora automáticamente el ruido de fondo: en la región de frecuencias donde hay ruido, el ruido simplemente no llega a ser el pico más alto porque la música sigue siendo más prominente en esa región del espectrograma.

Cuando el ruido es tan fuerte que tapa completamente la música, Shazam falla. Pero en condiciones normales de escucha — bar, transporte público, televisión encendida — la música sigue siendo la señal dominante.

Los números

La base de datos de Shazam tiene más de 100 millones de canciones. Una canción promedio genera entre 2 y 3 millones de hashes. Multiplicado por 100 millones de canciones, son entre 200 y 300 billones de entradas en la base de datos.

Para que la búsqueda sea instantánea en esa escala, el índice está optimizado para búsqueda por hash en tiempo O(1): buscar un hash específico en 300 billones de entradas tarda el mismo tiempo que en 300.

La primera versión de Shazam corría en un servidor con suficiente capacidad para unos millones de canciones. En 2002, el servicio empezó como una línea de teléfono fija en el Reino Unido: marcabas un número, acercabas el teléfono a la música, colgabas, y recibías un SMS con el nombre de la canción. Apple lo compró en 2018 por 400 millones de dólares.

Fuente original: Ver fuente

Fuente: Wang, A. (2003). An Industrial Strength Audio Search Algorithm. ISMIR 2003