Wie Shazam funktioniert (2022)
(cameronmacleod.com)- Um einen Song anhand von nur wenigen Sekunden Mikrofonaufnahme zu finden, vergleicht Shazam nicht das gesamte Audio, sondern erstellt einen Audio-Fingerprint und sucht damit in einer Datenbank
- Ein Verfahren, das die Wellenform direkt verschiebt und vergleicht, ist bei 10 Millionen Songs sowie wegen Mikrofonrauschen, Lautstärkeänderungen und Frequenzeffekten praktisch nicht geeignet
- Der Kernablauf besteht darin, Audio in ein Spectrogram umzuwandeln, starke Frequenz-Peaks zu finden und anschließend Peak-Paare als Hashes zu speichern, um sie schnell vergleichen zu können
- Peaks bleiben auch bei Rauschen relativ gut erhalten und reduzieren die gespeicherte Datenmenge; sie müssen jedoch zeitlich und über die Frequenzen gleichmäßig verteilt sein, damit ein Song an jeder beliebigen Stelle erkannt werden kann
- In der Erkennungsphase werden die Differenzen Track time - Sample time übereinstimmender Hashes in einem Histogramm gebündelt; der Song, der in einem Bin die größte Häufung aufweist, wird als Ergebnis gewählt
Das Problem, das Shazam lösen muss
- Shazam ist eine App, die einen in der Umgebung abgespielten Song einige Sekunden lang aufnimmt, ihn in einer Datenbank sucht und das Ergebnis anzeigt
- Bevor Shazam eine App wurde, war es ein telefonnummernbasierter Dienst
- Nutzer riefen eine Nummer an und mussten das Mikrofon ihres Mobiltelefons in Richtung der Musik halten
- Nach 30 Sekunden legte Shazam auf und schickte Informationen zum gehörten Song per SMS
- Die Gesprächsqualität von Mobiltelefonen im Jahr 2002 machte die Song-Erkennung zusätzlich schwieriger
- In einem kleinen Beispiel könnte man ein Audiofragment Schritt für Schritt über den gesamten Track schieben und prüfen, ob es übereinstimmt
- Wenn man aber nicht weiß, um welchen Song es sich handelt, steigt der Aufwand bei der Suche in einer Datenbank mit 10 Millionen Songs stark an
- Reale Mikrofon-Samples können durch Hintergrundgeräusche, Frequenzeffekte und Lautstärkeänderungen eine veränderte Wellenform haben, sodass ein einfacher Sliding-Vergleich nicht gut funktioniert
Gesamtaufbau des Systems
- Der Shazam-Ansatz ist in die Abläufe register und recognise unterteilt
- register ist der Ablauf, bei dem Songs gespeichert werden, damit sie später gefunden werden können
- recognise ist der Ablauf, bei dem ermittelt wird, zu welchem Song ein kurzer Audioausschnitt gehört
- Beide Abläufe durchlaufen dieselben Vorverarbeitungsschritte
- Berechnung des Spectrograms des Audios
- Finden der Peaks, also der stärksten Frequenzanteile im Spectrogram
- Gruppieren der Peaks zu Paaren und Erzeugen von Hashes
- Der register-Ablauf speichert die berechneten Hashes in der Datenbank
- Der recognise-Ablauf vergleicht die aus neuem Audio erzeugten Hashes mit den Hashes in der Datenbank und identifiziert den Song in der Matching-Phase
Berechnung des Spectrograms
- Die Fourier-Transformation zeigt, welche Frequenzen in einem Audiosignal enthalten sind
- Wendet man eine Fourier-Transformation auf eine 20-Hz-Sinuswelle an, erscheint in der Nähe von 20 Hz ein großer Spike
- Da eine Sinuswelle nur eine einzelne Frequenz enthält, wird sie auch als pure tone bezeichnet
- Das Ergebnis der Fourier-Transformation ist ein frequency spectrum
- Eine Darstellung mit Fokus auf der Zeitachse ist die Time Domain
- Eine Darstellung mit Fokus auf der Frequenzachse ist die Frequency Domain
- Die Y-Achse des frequency spectrum zeigt die Stärke der jeweiligen Frequenzanteile; je stärker ein Anteil ist, desto deutlicher ist er im Time-Domain-Signal zu hören
- Addiert man mehrere Sinuswellen, werden die Frequenzanteile der einzelnen Wellen kombiniert
- Addiert man zu einer 20-Hz-Sinuswelle eine 50-Hz-Sinuswelle mit halber Stärke, erscheinen ein 20-Hz-Spike und ein kleinerer 50-Hz-Spike
- Jedes Audiosignal kann aus solchen Wellen rekonstruiert werden
- Die Frequency Domain macht Informationen sichtbar, die in der Time Domain schwer zu erkennen sind
- Selbst wenn durch hinzugefügtes Rauschen die Form in der Time Domain verändert wird, können die wichtigsten Frequenz-Spikes in der Frequency Domain weiterhin deutlich sichtbar sein
- Wendet man die Fourier-Transformation nur einmal auf den gesamten Song an, sieht man lediglich die Frequenzstärken über das gesamte Stück; die Frequenzen eines echten Songs ändern sich jedoch im Zeitverlauf
- Teilt man den Song in kleine Abschnitte auf, wendet auf jeden Abschnitt eine Fourier-Transformation an und setzt die Ergebnisse zusammen, erhält man ein Spectrogram
- Ein Spectrogram stellt Zeit, Frequenz und Stärke gemeinsam dar; die Stärke kann farblich dargestellt werden
- Im beispielhaften Spectrogram von „Like a Stone“ liegen die hellsten Punkte, also die meisten starken Frequenzen, unterhalb von 5000 Hz
- Eine solche Verteilung ist in Musik häufig; der Großteil des Frequenzbereichs eines Klaviers liegt bei 27 Hz bis 4186 Hz
Peak-basierter Fingerprint
- Ein Audio-Fingerprint beginnt damit, im Spectrogram Peaks zu finden
- Ein Peak ist der stärkste Frequenzanteil zu einem bestimmten Zeitpunkt
- In Musik kann etwa ein kräftiger Ton in einem Gitarrensolo zu diesem Zeitpunkt der Peak sein
- Peaks sind gegenüber Rauschen relativ robust
- Um einen Peak unkenntlich zu machen, müsste das Rauschen stärker sein als dieser Peak
- Spectrogram-Peaks sind die stärksten Frequenzanteile im Track
- Speichert man nur Peaks, sinkt die für den Fingerprint benötigte Datenmenge
- Statt alle Frequenzinformationen zu speichern, bleiben nur die größten Frequenzanteile übrig
- Weil weniger Daten durchsucht werden müssen, wird die Fingerprint-Suche schneller
- Peaks müssen sowohl zeitlich als auch über die Frequenzen hinweg gleichmäßig verteilt sein
- Wenn sie zeitlich nur an einer Stelle konzentriert sind, lassen sich Samples aus den übrigen Abschnitten des Songs nicht erkennen
- Wenn sie sich auf ein enges Frequenzband konzentrieren, kann ein lautes Geräusch in einem bestimmten Bereich, etwa eine Autohupe, die Peak-Auswahl verändern und diesen Abschnitt schwer erkennbar machen
Peaks mit einem Maximum Filter finden
- Um Peaks gleichmäßig zu finden, kann man die Maximum Filter-Technik aus der Bildverarbeitung verwenden
- Ein Maximum Filter sucht in der Nachbarschaft jedes Pixels den Maximalwert und ersetzt das betreffende Pixel durch diesen lokalen Maximalwert
- Im Beispiel wird ein 3x3-Bereich um jedes Pixel betrachtet
- Diese Verarbeitung hat den Effekt, lokale Peaks in die umliegende Region auszuweiten
- Ein maximum-gefiltertes Spectrogram wirkt wie eine niedrig aufgelöste Version des ursprünglichen Spectrograms
- Das liegt daran, dass die Peaks des Signals ausgeweitet werden und andere Pixel einnehmen
- Boxen derselben Farbe entsprechen jeweils einem lokalen Peak im Originalbild
- Der Maximum Filter hat einen Parameter für die Boxgröße, in der lokale Maxima gesucht werden
- Mit einer kleinen Box entstehen mehr Peaks
- Mit einer großen Box entstehen weniger Peaks
- Die Peak-Positionen werden rekonstruiert, indem man die Stellen findet, an denen die Werte des ursprünglichen und des gefilterten Spectrograms gleich sind
- Stellen, die keine Peaks sind, werden durch den lokalen Peak-Wert ersetzt und ändern dadurch ihren Wert
- Nur Stellen, deren Wert unverändert bleibt, sind Peaks
- Zeichnet man alle Peaks zusammen auf, entsteht eine Constellation Map
- Der Name kommt daher, dass sie wie ein Bild des Nachthimmels aussieht
- Die Anzahl der Peaks wirkt sich direkt auf die Größe des Fingerprints aus
- Wenn Millionen von Songs gespeichert werden müssen, ist es wichtig, Fingerprints klein zu halten
- Reduziert man die Peaks, sinkt jedoch auch die Genauigkeit, und die Chancen nehmen ab, ein Sample dem richtigen Song zuzuordnen
- Es gibt zwei Arten, die Anzahl der Peaks zu reduzieren
- Man verwendet die Top-N-Peaks, wobei N proportional zur Audiolänge sein sollte, damit kurze Songs nicht überrepräsentiert werden
- Man verwendet alle Peaks oberhalb eines bestimmten Thresholds; das garantiert zwar keine feste Fingerprint-Größe pro Zeiteinheit, kann aber genauer sein
Peak-Paare zu Hashes machen
- Wenn ein Fingerprint nur eine Sammlung einzelner Spectrogram-Peaks wäre, würden Duplikate schnell zunehmen
- Stellt man die Frequenz jedes Peaks mit 10 Bit dar, lassen sich 2^10 = 1024 einzelne Frequenzen darstellen
- Bei Tausenden von Punkten pro Track entstehen viele Wiederholungen
- Für Fingerprints ist Eindeutigkeit wichtig
- Je höher die Eindeutigkeit, desto schneller die Suche
- Sie hilft außerdem dabei, mehr Songs zu erkennen
- Der Shazam-Ansatz erstellt Hashes nicht aus einzelnen Peaks, sondern aus Peak-Paaren
- Ein Hash enthält die Frequenzen fA und fB der beiden Peaks sowie den Zeitabstand ΔT zwischen ihnen
- Wenn jeder Peak 10 Bit Frequenzinformation trägt und auch ΔT mit 10 Bit dargestellt wird, ergibt das insgesamt 30 Bit Information
- 2^30 = 1.073.741.824 Möglichkeiten sind deutlich mehr als die 1024 Möglichkeiten eines einzelnen Points
- Für die Paarbildung werden ein Anchor Point und eine Target Zone verwendet
- Ein Point wird als Anchor Point ausgewählt
- Für diesen Anchor Point wird die Spectrogram-Target-Zone berechnet
- Alle Points innerhalb der Target Zone werden mit dem Anchor Point zu Paaren kombiniert
- Das Shazam-Paper erklärt die Wahl der Target Zone nicht im Detail
- In der Abbildung des Papers beginnt die Target Zone zeitlich etwas nach dem Anchor Point und liegt um die Frequenz des Anchor Points herum
- Die erzeugten Paare werden als Hashes in der Datenbank gespeichert
- Die Bestandteile des Hashes sind fA, fB und ΔT
- Als zusätzliche Informationen werden Point A time und Track ID gespeichert
- Point A time und Track ID werden später im Matching verwendet, um eine bestimmte Stelle in einem bestimmten Song zu finden
- Die Gesamtheit aller Hashes eines bestimmten Tracks bildet den Fingerprint dieses Tracks
Matching-Verfahren
- Der recognise-Ablauf erstellt aus dem Sample einen Fingerprint und vergleicht ihn mit den bereits in der Datenbank gespeicherten Fingerprints
- Der Matching-Algorithmus läuft in vier Schritten ab
- Alle Hashes aus der Datenbank abrufen, die mit dem Sample-Fingerprint übereinstimmen
- Die Hashes nach Song gruppieren
- Für jeden Song prüfen, ob die Hashes zeitlich ausgerichtet sind
- Den Track auswählen, der die meisten ausgerichteten Hashes hat
- abracadabra speichert das 3-Tupel (fA, fB, ΔT) nicht direkt für die Suche, sondern als einzelnen Wert, den
hash(fA, fB, ΔT)zurückgibt- Statt für jeden Hash drei Werte zu suchen, kann ein einzelner Wert gesucht werden
- Jedem Hash in der Datenbank ist eine Track ID zugeordnet, wodurch eine Gruppierung nach Songs möglich ist
- Nach dieser Gruppierung kann jeder Kandidaten-Track bewertet werden
- Wenn ein Sample zu einem Song passt, sollten die Hashes im Sample gut zu einem Abschnitt des Originals ausgerichtet sein
- Rauschen kann im Sample Peaks erzeugen, die wie Peaks zu anderen Zeitpunkten aussehen
- Hashes können auch zu einem falschen Song passen
- Ob die Ausrichtung stimmt, prüft man, indem für jeden matching Hash der Wert Track time - Sample time berechnet wird
- Echte matching Hashes teilen sich denselben Differenzwert
- Im Beispiel sind die Zeilen mit dem Differenzwert 10 true matches, während andere Differenzwerte false matches sind
- Aus den Differenzwerten wird ein Histogramm erstellt, und der größte Bin wird als Score des Songs verwendet
- Bei einem schlechten Match bleiben alle Bin-Werte niedrig
- Bei einem guten Match entsteht in einem Bin ein großer Spike
- Man wählt nicht einfach den Song mit den meisten matching Hashes aus, weil es einen Bias zugunsten langer Songs gibt
- Lange Songs haben mit höherer Wahrscheinlichkeit mehr Matches als kurze Songs
- Auf Spotify gibt es auch Tracks mit über vier Stunden Länge, was die Ergebnisse stark verzerren könnte
abracadabra und weiterführende Materialien
- abracadabra ist ein Open-Source-Projekt, das den Ansatz aus dem Shazam-Paper implementiert
- Im Python-Code kann man die Schritte Spectrogram, Peak-Suche, Hashing und Matching nachvollziehen
- Es kann auch als Library in anderen Projekten verwendet werden
- Verwandte Implementierungen und Materialien
- abracadabra docs: abracadabra-Dokumentation
- dejavu: eine weitere in Python geschriebene Implementierung zur Song-Erkennung
- Computer Vision for Music Identification: ein der dejavu-Methode ähnlicher Ansatz zur Song-Erkennung
- Chromaprint: ein Algorithmus mit einem etwas anderen Ansatz
- Musicbrainz: Erklärung von Audio-Fingerprints in der Open-Source-Musikenzyklopädie
- Playing with Shazam fingerprints: Erfahrungen mit der Implementierung des Shazam-Algorithmus im Jahr 2009
- Alignment of videos of same event using audio fingerprinting: Beispiel für die Nutzung von Audio-Fingerprints zur Ausrichtung von Videos desselben Ereignisses über Musik hinaus
1 Kommentare
Hacker-News-Kommentare
Das Wall Street Journal hat ein gut gemachtes Video, das Shazam erklärt
https://www.wsj.com/video/series/in-depth-features/how-shaza...
Chris, Mitgründer von Shazam
Lawn Love mietete von 2014 bis 2018 die Suite darüber, aber die Entwickler der mobilen Shazam-App in diesem Büro blieben auch nach der Übernahme still, und wir hörten nie das Geräusch von Champagner zum Feiern
Als Shazam 2008 herauskam, war der Hash-basierte Ansatz eine clevere Wahl
Ich hätte zuerst versucht, alle Songs auf möglichst recheneffiziente Weise in Hashes umzuwandeln
Würde man es heute auf den Markt bringen, wäre die grundlegende F&E-Richtung vermutlich das Trainieren eines Modells, was viel weniger effizient und beim Hosting teurer hätte sein können
Es ist zwar ein Problem, bei dem man intuitiv meint, ein Modell würde gut funktionieren, aber da die Anzahl der Songs endlich ist, ist ein Hash-Verfahren wahrscheinlich deutlich performanter
Die Struktur sucht danach, wie viele der aus einem kurzen Sample stammenden Dutzenden, höchstens niedrigen Hunderte Hashes übereinstimmen, und zwar im Großen und Ganzen fortlaufend
Auch heute würde man das vermutlich nicht per Modelltraining machen, weil jeden Tag enorm viele neue Songs hinzukommen und man daher ständig neu trainieren müsste
Hashing wirkt nach wie vor wie der bessere Ansatz, nicht nur bei der Effizienz, sondern auch insgesamt bei der Robustheit
Danach konnte man Songs suchen wie Wörter in einem Wörterbuch, und ich hoffe, diese Idee verschwindet nicht so leicht
[1]: https://en.wikipedia.org/wiki/Parsons_code
Die erste Handy-App war 2006 für BREW
2008 ist nur der Zeitpunkt, zu dem Apple den App Store startete; davor konnten Dritte keine iPhone-Apps entwickeln
Beides sind hervorragende Lösungen für Indexierung und Kompression, nur mit unterschiedlicher Datengröße
Vielleicht gäbe es eine Möglichkeit, ein Embedding-Modell zu bauen, das für jeden neuen Song einen Embedding-Vektor berechnen kann, ohne komplett neu zu trainieren
Shazam ist eines der seltenen Produkte, bei denen das magische Gefühl seit 20 Jahren nicht verschwunden ist
Es kommt dem, worauf Techniker hinarbeiten sollten, wirklich sehr nahe
Anders als Funktionen wie die Erkennung von Tier- oder Objektbildern, die oberflächlich ähnlich wirken, aber meistens eher seltsame Machine-Learning-Magie sind, fällt es in einen seltenen, aber nachvollziehbaren Problembereich
Ich erinnere mich, dass sie auf einem iPhone der vorherigen Generation nicht einmal rechtzeitig lud und ich die App am Ende löschte
Die Funktion Now Playing erkennt Songs kontinuierlich und hält sie im Verlauf fest, und im Google Assistant kann man Songs sogar nur durch Summen suchen
Es funktioniert nicht zuverlässig, trifft aber manchmal genau ins Schwarze
Als ich einen Song finden wollte, den jemand bei America’s Got Talent sang, war ich überrascht, dass das Ergebnis genau auf diesen Sänger aus AGT zurückkam
Ich fragte mich, ob sie sogar TV-Sendungen indexieren
Aber was soll ein Product Manager schon tun, wenn er das Produkt nicht ständig kaputtmacht, um Bonus und Urlaub zu bekommen
Es gibt auch Chromaprint, das etwas anders funktioniert
Es basiert nicht auf Maxima im Spektrum, sondern auf Mustern von Tonhöhenänderungen
Chromaprint wird bei AcoustID verwendet, einer großen öffentlichen Datenbank, die Audio-Fingerprints mit MusicBrainz-Aufnahmen verknüpft
Es ist erstaunlich, wie viel Musik darin enthalten ist, obwohl es längst nicht so viel kommerzielle Unterstützung hat wie Shazam
[1]: https://oxygene.sk/2011/01/how-does-chromaprint-work/
Es ist gut für die Duplikaterkennung, aber Shazams Fingerprint-Design ermöglicht es, kurze Ausschnitte einem ganzen Song zuzuordnen
Ein hervorragender Artikel, der gut erfasst, was ein Spektrogramm leistet, und für alle, die verstehen wollen, wie Audio-Fingerprinting funktioniert, fast Pflichtlektüre ist
Auch bei anderen Medien gibt es ähnliche Näherungsalgorithmen; um Hashing in der realen Welt zu verstehen, lohnt es sich, diesen Artikel in Ruhe zu studieren
Was Shazam getan hat, war, sie kombinatorisch zu hashen, um False Positives zu reduzieren
Es gibt eine hervorragende Website, die nicht Songs, sondern Genre-Klassifizierung und die durch neue Song-Signaturen entstehenden Verzweigungen in Subgenres per algorithmischem Matching behandelt.
Ein erstaunliches Material, das als persönliches Nebenprojekt betrieben wird, aber wegen Dingen wie Hosting-Problemen gefährdet zu sein scheint, zu verschwinden.
Früher gab es Pandoras Music DNA oder ähnliche Funktionen bei LastFM, aber diese Website wirkt wie ein visuelles Beziehungsnetz der gesamten von der Menschheit bis 2023 geschaffenen Musik; würde sie verschwinden, wäre das ein Verlust für das ganze Web.
Every Noise At Once
https://everynoise.com
Every Noise at Once - https://news.ycombinator.com/item?id=26668426 - April 2021, 94 Kommentare
Every Noise at Once - https://news.ycombinator.com/item?id=20585447 - August 2019, 82 Kommentare
Every Noise at Once – an algorithmically-generated scatter-plot of musical genre - https://news.ycombinator.com/item?id=10269685 - September 2015, 23 Kommentare
An algorithmically-generated scatter-plot of musical genres - with samples - https://news.ycombinator.com/item?id=9315499 - April 2015, 3 Kommentare
Bei Spotify war er Genre-Forscher.
Es zeigt ähnliche Songs an und macht das meiner Meinung nach ziemlich gut.
Es ist erstaunlich, wie intuitiv diese Methode ist und wie gut sie zu unserem eigenen Wahrnehmungsprozess passt.
Im Groben identifiziert man Melodiefragmente und versucht dann, sie in der richtigen Reihenfolge abzugleichen.
Ähnlich wie wir schon nach 5, 7 oder 10 Tönen etwas erkennen können.
Ich glaube, ich habe auch über andere Verfahren zur Song-Fingerprinting gelesen, die sich etwa auf Lautstärke-Peaks stützen; auch wenn solche Verfahren genauso gut funktionieren können, entsprechen sie überhaupt nicht dem, was unser Gehirn tut.
Diese Methode ist ziemlich cool, weil sie nicht auf „künstliche Nebenprodukte“ setzt, sondern im Grunde ähnlich funktioniert wie wir.
Technisch gesehen ist es nicht immer eine Melodie, aber in den meisten Fällen dürfte es eine sein.
Ich frage mich, wie Shazam damit umgeht, wenn die Zeitachse nicht linear oder nicht konstant ist.
Etwa bei Kassetten, Wow und Flutter oder Situationen, in denen es ständig schneller und langsamer wird.
Soweit ich weiß, ist Fingerprinting sehr zeitempfindlich, und selbst das Zerschneiden in etwa 50-ms-Stücke löst das nicht vollständig.
Als ich zuletzt nachgesehen habe, war Dynamic Time Warping, die allgemeine Technik für solche Probleme, rechnerisch zu teuer.
Das sind verwandte Beiträge. Falls es noch mehr gibt, wäre ich neugierig.
How Shazam Works (2003 Paper) - https://news.ycombinator.com/item?id=33299853 - Oktober 2022, 1 Kommentar
Creating Shazam in Java (2010) - https://news.ycombinator.com/item?id=32530056 - August 2022, 36 Kommentare
Shazam turns 20 - https://news.ycombinator.com/item?id=32520593 - August 2022, 227 Kommentare
How Shazam Works (2015) - https://news.ycombinator.com/item?id=23806142 - Juli 2020, 7 Kommentare
Designing an audio adblocker - https://news.ycombinator.com/item?id=18855029 - Januar 2019, 186 Kommentare
Show HN: A radio/podcast adblocker featuring ML and Shazam-like fingerprinting - https://news.ycombinator.com/item?id=18459058 - November 2018, 2 Kommentare
Show HN: Shazam-like acoustic fingerprinting of continuous audio streams - https://news.ycombinator.com/item?id=15809291 - November 2017, 76 Kommentare
How Shazam Works (2015) - https://news.ycombinator.com/item?id=15350729 - September 2017, 13 Kommentare
Tell HN: Shazam picks up song from my kitchen light - https://news.ycombinator.com/item?id=11593305 - April 2016, 2 Kommentare
How Shazam works - https://news.ycombinator.com/item?id=9870408 - Juli 2015, 48 Kommentare
Patent infringement claim re: “Creating Shazam in Java” blogpost (2010) - https://news.ycombinator.com/item?id=9594480 - Mai 2015, 18 Kommentare
The Shazam Effect (2014) - https://news.ycombinator.com/item?id=9593429 - Mai 2015, 37 Kommentare
The Shazam Effect - https://news.ycombinator.com/item?id=8634357 - November 2014, 34 Kommentare
Ask HN: Is there an audio search technology that finds exact and similar audio? - https://news.ycombinator.com/item?id=8420141 - Oktober 2014, 3 Kommentare
Source code example of the Shazam algorithm - https://news.ycombinator.com/item?id=5724422 - Mai 2013, 16 Kommentare
Creating Shazam in Java - https://news.ycombinator.com/item?id=5723863 - Mai 2013, 43 Kommentare
An Industrial-Strength Audio Search Algorithm (Shazam) - https://news.ycombinator.com/item?id=2621103 - Juni 2011, 4 Kommentare
Shazam's Search for Songs Creates New Music Jobs - https://news.ycombinator.com/item?id=2215295 - Februar 2011, 1 Kommentar
How does the music-identifying app Shazam work its magic? - https://news.ycombinator.com/item?id=2214992 - Februar 2011, 2 Kommentare
Implementing Shazam with Java in a weekend - https://news.ycombinator.com/item?id=1702975 - September 2010, 23 Kommentare
Shazam: not magic after all - https://news.ycombinator.com/item?id=909263 - Oktober 2009, 28 Kommentare
How does the music-identifying app Shazam work its magic? - https://news.ycombinator.com/item?id=893353 - Oktober 2009, 16 Kommentare