Je zit in een kroeg, hoort een pakkend nummer voorbij komen en wilt per direct weten van wie het is en hoe het ook weer heet. Iedereen weet ondertussen: daar kun je Shazam perfect voor gebruiken. Maar hoe werkt dit ogenschijnlijk zo eenvoudige programma eigenlijk?
Zet Shazam aan en binnen enkele seconden vertelt het programma je welk nummer er gedraaid wordt. Shazam heeft het ook nog eens vrijwel altijd bij het rechte eind. Maar hoe kan dat nou zo snel, en met een hoop achtergrondgeluiden? Gelukkig voor alle nieuwsgierige mensen onder ons schreef een van de makers van Shazam hier een rapport over, in bladerbare versie onderaan te vinden.
Waar het op neerkomt is dat Shazam muziekfragmenten herkent op basis van een zoek-algoritme. Shazam heeft een eigen database met miljoenen nummers. Van al die nummers is een soort vingerafdruk gemaakt, een spectrogram genaamd. Als je je telefoon in de lucht houdt en een fragment opneemt, vergelijkt Shazam dus jouw stukje muziek met alle ‘vingerafdrukken’ uit hun database.
Dat klinkt nog vrij eenvoudig, maar we zijn er nog niet. Zo’n vingerafdruk is een soort schema bestaande uit verschillende assen: tijd, frequentie en intensiteit. Als Shazam er een vingerafdruk van heeft gemaakt, komt een nummer er zo uit te zien:
Shazam heeft vervolgens van deze grafiekjes per spectrogram-gebied een hash (index-getal) gegenereerd. Al deze hashes staan in een database met bijbehorende artiest en titel. Een muziekfragment komt er dan bijvoorbeeld zo uit te zien:
Frequency in Hz | Time in seconds |
823.44 | 1.054 |
1892.31 | 1.321 |
712.84 | 1.703 |
. . . | . . . |
819.71 | 9.943 |
Als je een fragment opneemt, maakt Shazam een aantal hashes (via dezelfde analyse als de nummers in hun database) van het fragment, stuurt ze naar de server, en vergelijkt die met de hashes in de database op elk spectrogram-gebied. Hij vergelijkt bijvoorbeeld de hash van het gebied intensiteit en filtert alle nummers die niet overeen komen. Vervolgens filtert Shazam op het volgende gebied (frequentie), en daarna op tijd. De hashes moeten op ieder gebied overeen komen. Dan pas krijg je met een grote zekerheid de goede naam en uitvoerende artiest van het opgenomen nummer teruggestuurd.