- Open-Source-Implementierung eines von Shazam inspirierten schnellen Audio-Erkennungs- und Identifikationssystems in Rust
- Entwickelt mit Fokus auf Geschwindigkeit, Effizienz und Einfachheit; über die CLI sind Indexierung und Suche von Audiodateien möglich
Hauptmerkmale und Vorteile
- Schnelle Indexierungs- und Suchgeschwindigkeit: schnelle Verarbeitung von Hunderten von Audiodateien möglich
- Einfache CLI-Befehle: intuitive Nutzung über die Befehle
index und search
- Leistungsstarke Implementierung auf Rust-Basis: nutzt Systemressourcen effizient
- Verwendet ein Shazam-ähnliches Audio-Fingerprinting-Verfahren
Interne Funktionsweise
Vorverarbeitung (Preprocessing)
- Umwandlung von Stereo zu Mono (Mittelwert aus linkem/rechtem Kanal)
- Downsampling zur Reduzierung des Rechenaufwands: 44.1kHz → 11.025kHz
- Vor dem Downsampling wird ein IIR-Tiefpassfilter angewendet, um Frequenzen oberhalb der Nyquist-Frequenz zu entfernen
Spektrogramm-Umwandlung
- Verwendung der Short-Time Fourier Transform (STFT)
- Hamming-Fenster mit 1024 Samples
- 50 % Überlappung
- Umwandlung in den Zeit-Frequenz-Bereich zur Extraktion von Peaks
- Jedes Zeitfenster wird in Frequenzbänder aufgeteilt, wobei pro Band nur die höchste Amplitude erhalten bleibt
- Amplituden unterhalb des Durchschnitts werden entfernt, sodass nur charakteristische Peaks erhalten bleiben
Speicherung der Fingerprint-Daten
- Peaks werden als Hashes aufgebaut und gespeichert
- Ausgehend von einem Anchor-Peak werden die relativen Positionen zu benachbarten Peaks als Tupel gespeichert
- Zusammengesetzt in der Form
(anchor freq, peak freq, delta time)
- Kann in 32-Bit- oder 64-Bit-Ganzzahlen umgewandelt werden
Such- und Sortieralgorithmus
- Erzeugung eines Fingerprints aus dem Eingabesample
- Abfrage potenzieller Fingerprints aus der Datenbank und Sortierung in zeitlicher Reihenfolge
- Analyse der zeitlichen Kontinuität auf Basis der Longest Increasing Subsequence (LIS)
- Suche nach dem dichtesten Bereich übereinstimmender Peaks mit einem Sliding Window
- Berechnung eines Matching-Scores und Sortierung der Ergebnisse nach absteigendem Score
Noch keine Kommentare.