5 Punkte von fcbayernmuller 2024-01-29 | 5 Kommentare | Auf WhatsApp teilen

vibra

  • Ein Projekt, das einen Client in C++ implementiert, der mit den Servern des Musikerkennungsdiensts Shazam kommuniziert.
  • Es arbeitet etwa doppelt so schnell wie der bestehende Open-Source-Shazam-Client songrec in Rust.
  • Es kann WAV-Dateien einlesen und Daten dazu abrufen, um welchen Song es sich bei der jeweiligen Datei handelt.
  • Durch die Einspeisung von rohen PCM-Daten über stdin ist auch die Erkennung eines Songs während einer Mikrofonaufnahme möglich.
  • Benötigt werden libfftw3 für das Fingerprinting und libcurl für die Kommunikation mit dem Shazam-Server.
  • Es ist schnell, weil es PCM-Daten wie WAV-Datei-Downsampling und Channel-Konvertierung effizient verarbeitet.
  • Dank weniger Abhängigkeitsbibliotheken und einfachem Build eignet es sich für den Einsatz auf Embedded-Geräten.

5 Kommentare

 
mdisprgm 2024-01-29

Gab es einen Grund, warum Sie sich statt für Rust für C++ entschieden haben?

 
cosine20 2024-01-29

Danke fürs Teilen! Ich bin persönlich neugierig, wie Sie die Performance verbessert haben.
Wenn es auf einem Raspberry Pi 4 ungefähr eine Sekunde dauert, ist das wirklich eine sehr praktische Performance.

 
fcbayernmuller 2024-01-29

Tatsächlich war Rust Songrec ziemlich ineffizient, weil es für die empfangenen PCM-Daten das Downsampling, die Umwandlung in Mono und die Umwandlung in 16 Bit alles getrennt durchgeführt hat.

Deshalb habe ich den Teil verbessert, der die PCM-Daten in jedem Schritt jeweils vollständig durchläuft. Natürlich dürfte auch der Unterschied zwischen den Sprachen C++ und Rust groß sein.

 
cosine20 2024-01-29

Ah, im Rust-Code wurden diese drei Prozesse also getrennt behandelt. Das zu verbessern war sicher auch alles andere als einfach — wirklich beeindruckend ' v')b

 
fcbayernmuller 2024-01-29

Vielen Dank~!!!