Het zoeken verloopt vervolgens in stappen. Allereerst stuurt het algoritme een query naar de database met alle hashkeys van de probe – in feite diens vingerafdruk. Het resultaat voor elke hashkey is een lijst van nummers en timemarkers waar die hashkey voorkomt. Het algoritme beschikt dan over een lijst van alle nummers in de database die een overeenkomst bevatten.
Of het gezochte nummer ook in de database staat, hangt ervan af of er een nummer tussen zit met timemarkers in de hashkey die dezelfde relatieve afstand hebben als die in de probe. Een dergelijke overeenstemming vind je eenvoudig in een diagram dat de verdeling van de timemarkers weergeeft als een strooiveld van punten, waarvan de coördinaten zich bevinden op de tijdsposities van zowel de probe als het muziekstuk. Een treffer herken je aan een significante ophoping van punten in de vorm van een diagonaal lopende lijn.
Voor een mathematische oplossing van dat probleem worden meestal regressie-methoden gebruikt. Dit vergt echter intensieve berekeningen. Shazam gebruikt daarom een andere aanpak: de corresponderende timemarkers van de probe en het nummer in het diagram kunnen geformuleerd worden als tm = tp + Δtp, waarbij tm de timemarker van het nummer en tp die van de probe is. Daarbij duidt Δtp het verschil aan tussen beide timemarkers. Die kan worden berekend met Δtp = tm – tp. Het algoritme berekent die verschillen voor elk spreidingsvelddiagram, dus alle nummers van de zoekresultaten, en maakt daar telkens een histogram van. De laatste stap onderzoekt de histogrammen dan op afwijkingen. Als één ervan een statistisch significante afwijking van het gemiddelde van alle resultaten heeft, dan is de kans groot dat dit het gezochte nummer is. Dat komt doordat de tijdverschillen bij het juiste nummer veel minder zullen verschillen dan bij de andere nummers, die alleen door toeval enkele overeenkomstige hashkeys hebben.
Efficiënte database
De audiovingerafdrukken vormen de basis van de muziekdatabase. Voor elke hashkey is er een lijst van nummer-ID’s met timemarkers waarop de hashkey betrekking heeft. Om met een probe in de muziekdatabase te gaan zoeken, stelt Shazam allereerst een audiovingerafdruk samen van die probe. De datastructuur verschilt echter iets van die van een muzieknummer en bestaat uit een lijst van de hashkeys die uit de probe zijn gewonnen en hun tijdsposities.
Voor de performance van de beschreven procedure zijn twee factoren bepalend: de hoeveelheid berekeningen die nodig zijn voor het zoeken in de vingerafdruktabel van de muziekdatabase en de berekeningen die nodig zijn voor het analyseren van de lijst met treffers. Bij het zoeken met de hashkeys van een probe gaat het om een veldindex. De vingerafdruktabel kan door zijn compacte formaat voor een groot aantal nummers in het werkgeheugen zitten (in-memory). De audiovingerafdrukken van 50 miljoen nummers met 9000 waarden per nummer en 64 bit per waarde nemen bijvoorbeeld ongeveer 4 TB in beslag (50.000.000 × 9000 × 64/8). Als het werk over meerdere servers wordt verdeeld, levert dat geen problemen op.
De moeite die voor het zoeken gedaan moet worden, hangt af van de duur van de probe. Hoe langer die is, hoe meer bijbehorende hashkeys er zijn. Elke hashkey vergt echter maar één tabeltoegang. Bij de analyse is het van belang om de hoeveelheid data van de kandidaten zo klein mogelijk te houden. Omdat de hashkeys zeer specifiek zijn, zal het aantal potentiële kandidaten te overzien zijn.
Het procedé van Shazam werkt buitengewoon goed, zoals je snel merkt als je de app gebruikt. Ook de vrij beschikbare implementaties op internet laten zien hoe effectief het principe werkt. Het algoritme is snel en vindt het nummer met grote betrouwbaarheid, mits het in de database is opgenomen natuurlijk.
Ten slotte nog een persoonlijke anekdote: Shazam was in staat om bij een optreden de live-versie van een nummer te identificeren. De muzikanten konden het nummer dus op de milliseconde nauwkeurig exact naspelen, of het was in feite helemaal niet live.
(Jürgen Schuck, c’t magazine)
Een vraag, kan ik shazammen én telefoneren te gelijk?
Het algoritme van Shazam kan ruis en bijgeluiden uitfilteren, als je tijdens het bellen even niet praat zou het moeten lukken (5-10 seconden). Deel je ervaringen hier zodat anderen er iets aan hebben!
ik heb een vraag…is het mogelijk om de Shazam bibliotheek over te zetten naar mijn pc