Sådan fungerer Shazam

Shazam giver dig mulighed for at sende en optagelse af næsten enhver sang, som du har lavet på din telefon, og Shazam fortæller dig sangens navn, kunstnerens navn og andre data om den pågældende sang. Disse andre data omfatter ofte links til steder, hvor du kan købe sangen, samt kommende turnédatoer for den pågældende kunstner. I de seneste år har Shazam udvidet sit bibliotek til også at omfatte reklamer og tv. Du kan f.eks. shazamme en reklamefilm og få yderligere oplysninger om produktet, herunder et link til at købe det pågældende produkt.

Shazam blev grundlagt i 1999 og er dermed ældre end smartphonen. I Shazams tidlige dage ringede brugerne ind på en enhed, der så således ud

En Shazam-søgning er i stand til at finde et match selv i støjende miljøer som barer eller natklubber, så længe sangen allerede findes i Shazams database. En optagelse på mindst fem sekunder vil give de bedste resultater. Du kan begynde at optage på et hvilket som helst tidspunkt i sangen, og Shazam sender dig et match i løbet af få sekunder. For at denne tjeneste kan fungere godt, har Shazam en voksende database med over 8 millioner sange/lydfiler. Hvis man antager, at en gennemsnitlig lydfil er tre minutter lang, ville det tage over 45 år at afspille hver enkelt lydfil igen og igen!

Med en database af denne størrelse har de en stor dækning, men hvordan finder Shazam så hurtigt et match i en så stor database? For det første er det ikke de faktiske lydfiler, der søges efter, når du Shazam en sang. I stedet har Shazam et lydfingeraftryk for hver enkelt lydfil i databasen. Den optagelse, som en Shazam-bruger indsender, bliver også lavet til et lydfingeraftryk, som gør det muligt at foretage sammenligninger præcist og hurtigt. Disse lydfingeraftryk består af samlinger af numeriske data. Hvis du undrer dig over, hvordan denne iørefaldende melodi, som du shazamer, bliver omdannet til tal, er det næste afsnit til dig.

Hvordan lyd fungerer

I sin mest grundlæggende definition er lyd partikler, der vibrerer. Der er tre elementer, der gør hver lyd unik: Amplitude, frekvens og tid. Amplitude er størrelsen af vibrationen, som vi opfatter som lydstyrken af lyden. Frekvens er den hastighed, hvormed vibrationen opstår. En lyds frekvens er det, vi opfatter som tonehøjde. Frekvensen måles i hertz (Hz), som angiver, hvor mange gange en lydbølge gentager sig pr. sekund. Det menneskelige øre kan høre lyde fra 20 Hz til 20.000 Hz. For at give et lidt perspektiv har den laveste tone på et traditionelt klaver med 88 tangenter, A0, en frekvens på 27,5 Hz. Frekvensen af en musikalsk tonehøjde på hver oktav stiger logaritmisk. Med andre ord er frekvensen for hver oktav dobbelt så stor som for oktaven under den. For eksempel er frekvensen for A1 55 Hz, frekvensen for A2 er 110 Hz og frekvensen for A3 er 220 Hz.

I skemaet ovenfor kan du se, at mange instrumenter kan spille de samme toner, men en tone på violin og den samme tone på et klaver vil lyde forskelligt. Denne forskel i tonekvalitet er kendt som klangfarve. En lyds klangfarve skabes af frekvenser i lyden, der er højere (gentages med en hurtigere hastighed) end den opfattede tonehøjde af lyden. Disse frekvenser er kendt som overtoner. Se denne optagelse, der begynder med en tone (C4 261,23 Hz) på et klaver efterfulgt af hver af overtonerne inden for lyden spillet en efter en og slutter med den samme tone, som den begyndte med.

Disse overtoner er de frekvenser, der giver et instrument dets karakteristiske klangfarve.

Tid er vigtig, fordi den ikke kun giver os den tidslængde, som opstår, men også på hvilket tidspunkt en lyd opstår i forhold til andre lyde. En given sang kan bestå af mange instrumenter, der varierer i frekvens og amplitude, efterhånden som de bevæger sig gennem tiden i forhold til hinanden. På grund af kompleksiteten af amplitude, frekvens og tid og muligheden for at måle dem præcist vil to forskellige versioner af den samme sang stadig generere et unikt lydfingeraftryk.

Sådan laves et fingeraftryk

For at lave et lydfingeraftryk konverteres en lydfil til et spektrogram, hvor y-aksen repræsenterer frekvens, x-aksen repræsenterer tid, og tætheden af skraveringen repræsenterer amplitude (fig. 1A).

For hvert afsnit af en lydfil udvælges de stærkeste toppe, og spektrogrammet reduceres til et scatter plot. På dette tidspunkt er amplitude ikke længere nødvendig (Fig 1B).

Nu har vi alle de grundlæggende data til at matche to filer, der har gennemgået fingeraftryksprocessen. Det er dog kun muligt at matche dem, hvis en Shazam-bruger begyndte at optage på det nøjagtige millisekund, hvor en sang begyndte. Da dette næsten aldrig er tilfældet, er der yderligere trin i forbindelse med lydfingerprinting. Ved hjælp af en proces, der kaldes kombinatorisk hashing, udvælges punkter på spredningsdiagrammet til at være ankre, der er forbundet med andre punkter på diagrammet, som opstår efter ankerpunktet i et tidsvindue og en frekvens, der er kendt som en målzone (fig. 1C).

Hvert ankerpunktspar gemmes i en tabel, der indeholder ankerets frekvens, punktets frekvens og tiden mellem ankeret og punktet, kendt som en hash. Disse data er derefter knyttet til en tabel, der indeholder tiden mellem ankeret og begyndelsen af lydfilen. Filer i databasen har også unikke ID’er, der bruges til at hente flere oplysninger om filen, f.eks. sangens titel og kunstnerens navn.

Sådan finder vi et match

Nu, hvor vi har oprettet fingeraftryk for begge lydfiler, sendes hvert af ankerpunktsparrene fra Shazam-brugerens optagelse til Shazams database for at lede efter matchende ankerpunktspar. Denne søgning vil returnere lydfingeraftrykkene for alle sange, der indeholder hash-match. Når vi har alle de mulige matches for Shazam-brugerens optagelse, skal vi finde tidsforskydningen mellem begyndelsen af Shazam-brugerens optagelse og begyndelsen af et af disse mulige matches fra databasen. Denne tidsmæssige forskydning kan beregnes ved at trække tidspunktet for ankerpunktsparrets forekomst i Shazam-brugerens optagelse fra tidspunktet for den matchende hashs forekomst i lydfilen fra Shazams database. Hvis en betydelig mængde matchende hashes har samme tidsforskydning, bestemmes det, at sangen er et match!

Når de matchende hashes afbildes på et scatter plot, hvor y-aksen repræsenterer det tidspunkt, hvor hashen forekommer i Shazam-brugerens optagelse, og x-aksen repræsenterer det tidspunkt, hvor hashen forekommer i lydfilen fra Shazams database, vil de matchende hashes danne en diagonal linje (fig. 3A). I et histogram af de samme data, hvor y-aksen repræsenterer offset-tidspunkterne og x-aksen mængden af matches, vil der være en stor spike på det korrekte offset-tidspunkt (fig. 3B).

Denne lydsøgningsmetode er præcis nok til at finde matches på trods af, at Shazam-brugerens optagelse indeholder støj som f.eks. talende mennesker, vejstøj og endda andre sange. Da antallet af ankerpunktshashes, der oprettes af et lydfingerprint, er meget højere end det antal ankerpunktsmatch, der kræves for at give et positivt søgeresultat, er de ankerpunktshashes, der er maskeret af ekstern støj, ikke nok til at forhindre Shazam i konsekvent at finde et match for en lydfil fra databasen. Da søgealgoritmen er bygget op til at finde match med optaget lyd i Shazams database, er det mest sandsynligt, at kunstneren bruger backing tracks og/eller læbesynkronisering, hvis du er til en koncert og får et positivt match, når du shazamer en sang. En anden sideeffekt er, at Shazam returnerer den originale optagelse, som et sample stammer fra, hvis en kunstner ikke har kombineret sampleet med andre lyde og ikke har ændret sampleet på nogen måde.

Leave a Reply