Hoe Shazam werkt

Shazam stelt u in staat om een met uw telefoon gemaakte opname van bijna elk liedje te sturen en Shazam zal u de naam van het liedje, de naam van de artiest en andere gegevens over dat liedje vertellen. Deze andere gegevens bevatten vaak links naar plaatsen waar je het nummer kunt kopen en naar tourdata voor die artiest. In de afgelopen jaren heeft Shazam zijn bibliotheek uitgebreid met advertenties en televisie. Zo kun je bijvoorbeeld een commercial shazammen en extra informatie krijgen over het product, inclusief een link om dat product te kopen.

Opgericht in 1999, is Shazam ouder dan de smartphone. In de begindagen van Shazam belden gebruikers in op een apparaat dat er als volgt uitzag

Een Shazam-zoekopdracht is in staat om zelfs in lawaaierige omgevingen zoals bars of nachtclubs een match te vinden, zolang dat nummer al in de database van Shazam zit. Een opname van ten minste vijf seconden geeft de beste resultaten. Je kunt op elk punt in het nummer beginnen met opnemen en Shazam zal je binnen een paar seconden een match sturen. Om deze dienst goed te laten werken, heeft Shazam een groeiende database van meer dan 8 miljoen liedjes/audiobestanden. Ervan uitgaande dat het gemiddelde audiobestand drie minuten lang is, zou het meer dan 45 jaar duren om ze allemaal af te spelen!

Met een database van deze omvang hebben ze een groot bereik, maar hoe vindt Shazam zo snel een match in zo’n grote database? Ten eerste worden de eigenlijke audiobestanden niet doorzocht als je een liedje shazamt. In plaats daarvan heeft Shazam een audio-vingerafdruk voor elk audiobestand in de database. Van de opname die een Shazam-gebruiker indient, wordt ook een audiovingerafdruk gemaakt, zodat er nauwkeurig en snel vergelijkingen kunnen worden gemaakt. Deze audio fingerprints bestaan uit verzamelingen van numerieke gegevens. Als u zich afvraagt hoe dat aanstekelijke deuntje dat u Shazamt in getallen wordt omgezet, dan is het volgende gedeelte iets voor u.

Hoe geluid werkt

In zijn meest basale definitie is geluid trillende deeltjes. Er zijn drie elementen die elk geluid uniek maken: Amplitude, Frequentie en Tijd. Amplitude is de grootte van de trilling, die wij waarnemen als de luidheid van het geluid. Frequentie is de snelheid waarmee de trilling plaatsvindt. De frequentie van een geluid is wat wij waarnemen als toonhoogte. De frequentie wordt gemeten in Hertz (Hz), het aantal keren dat een geluidsgolf zich per seconde herhaalt. Het menselijk oor kan geluiden horen die variëren van 20 Hz tot 20.000 Hz. Om een idee te geven: de laagste toon op een traditionele piano met 88 toetsen, A0, heeft een frequentie van 27,5 Hz. De frequentie van een muzikale toonhoogte neemt bij elk octaaf logaritmisch toe. Met andere woorden, de frequentie van elk octaaf is twee keer zo hoog als die van het octaaf eronder. Bijvoorbeeld, de frequentie van A1 is 55Hz, de frequentie van A2 is 110Hz, en de frequentie van A3 is 220Hz.

In de bovenstaande grafiek kunt u zien dat veel instrumenten dezelfde noten kunnen spelen, maar dat een noot op de viool en dezelfde noot op een piano verschillend zullen klinken. Dit verschil in toonkwaliteit staat bekend als timbre. Het timbre van een geluid wordt gecreëerd door frequenties in het geluid die hoger zijn (zich sneller herhalen) dan de waargenomen toonhoogte van het geluid. Deze frequenties staan bekend als boventonen. Kijk maar eens naar deze opname die begint met een noot (C4 261,23Hz) op een piano, gevolgd door elk van de boventonen binnen het geluid één voor één gespeeld en afgesloten met dezelfde noot waarmee het begon.

Deze boventoonfrequenties geven een instrument zijn karakteristieke timbre.

Tijd is belangrijk omdat het ons niet alleen de tijdsduur geeft waarin het zich voordoet, maar ook op welk moment een geluid zich voordoet in relatie tot andere geluiden. Een bepaald lied kan bestaan uit vele instrumenten die variëren in frequentie en amplitude naarmate zij zich ten opzichte van elkaar door de tijd bewegen. Vanwege de complexiteit van amplitude, frequentie en tijd, en de mogelijkheid om ze precies te meten, zullen twee verschillende versies van hetzelfde liedje toch een unieke audio fingerprint genereren.

Hoe een fingerprint wordt gemaakt

Om een audio fingerprint te maken, wordt een audiobestand omgezet in een spectrogram waarbij de y-as de frequentie weergeeft, de x-as de tijd en de dichtheid van de arcering de amplitude (Fig 1A).

Voor elk gedeelte van een audiobestand worden de sterkste pieken gekozen en wordt het spectrogram gereduceerd tot een scatter plot. Op dit punt is amplitude niet langer nodig (Fig 1B).

Nu beschikken we over alle basisgegevens om twee bestanden die het fingerprinting-proces hebben ondergaan, te matchen. Het is echter alleen mogelijk om ze te matchen als een Shazam-gebruiker begon op te nemen op de exacte milliseconde dat een nummer begon. Omdat dit bijna nooit het geval is, zijn er extra stappen bij het fingerprinten van audio. Via een proces dat combinatorische hashing wordt genoemd, worden punten op de scatter plot gekozen om ankers te zijn die worden gekoppeld aan andere punten op de plot die na het ankerpunt voorkomen gedurende een venster van tijd en frequentie dat bekend staat als een doelzone (Fig 1C).

Elk anker-puntpaar wordt opgeslagen in een tabel met de frequentie van het anker, de frequentie van het punt en de tijd tussen het anker en het punt, een zogenaamde hash. Deze gegevens worden vervolgens gekoppeld aan een tabel die de tijd tussen het anker en het begin van het audiobestand bevat. Bestanden in de database hebben ook unieke ID’s die worden gebruikt om meer informatie over het bestand op te halen, zoals de titel van het nummer en de naam van de artiest.

Hoe vind ik een match

Nu we vingerafdrukken hebben gemaakt voor beide audiobestanden, worden alle ankerpuntparen van de opname van de Shazam-gebruiker naar de database van Shazam verzonden om te zoeken naar overeenkomende ankerpuntparen. Deze zoektocht zal de audio vingerafdrukken teruggeven van alle nummers die een hash overeenkomst bevatten. Zodra we alle mogelijke overeenkomsten hebben voor de opname van de Shazam-gebruiker, moeten we het tijdsverschil vinden tussen het begin van de opname van de Shazam-gebruiker en het begin van een van deze mogelijke overeenkomsten uit de database. Dit verschil in timing kan worden berekend door het tijdstip waarop het ankerpuntpaar voorkomt in de opname van de Shazam-gebruiker af te trekken van het tijdstip waarop de overeenkomende hash voorkomt in het audiobestand uit de database van Shazam. Als een significant aantal overeenkomende hashes hetzelfde tijdsverschil heeft, wordt bepaald dat het nummer een match is!

Wanneer in kaart gebracht op een spreidingsdiagram waarbij de y-as de tijd weergeeft waarop de hash voorkomt in de opname van de Shazam-gebruiker en de x-as de tijd weergeeft waarop de hash voorkomt in het audiobestand uit de database van Shazam, zullen de overeenkomende hashes een diagonale lijn vormen (Fig 3A). In een histogram van dezelfde gegevens waarbij de y-as de offset-tijden weergeeft en de x-as het aantal matches, zal er een grote piek zijn bij de juiste offset-tijd (Fig 3B).

Deze audio-zoekmethode is nauwkeurig genoeg om matches te vinden, ondanks het feit dat de opname van de Shazam-gebruiker ruis bevat, zoals pratende mensen, weggeluiden en zelfs andere nummers. Omdat het aantal ankerpunt-hashes dat door een audio-vingerafdruk wordt gecreëerd veel hoger is dan het aantal ankerpunt-matches dat nodig is om een positief zoekresultaat te krijgen, zijn de ankerpunt-hashes die door ruis van buitenaf worden gemaskeerd niet voldoende om te voorkomen dat Shazam consequent een match vindt voor een audiobestand uit de database. Aangezien het zoekalgoritme is gebouwd om overeenkomsten te vinden met opgenomen audio in de database van Shazam, als je bij een concert bent en je krijgt een positieve overeenkomst bij het shazamen van een nummer, is het zeer waarschijnlijk dat de artiest achtergrondtracks gebruikt en/of lip-synchronisatie. Een ander neveneffect is dat Shazam de originele opname zal retourneren waar een sample vandaan komt als een artiest de sample niet heeft gecombineerd met andere geluiden en de sample op geen enkele manier heeft veranderd.

Leave a Reply