10 Punkte von xguru 2025-04-04 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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.

Noch keine Kommentare.