vibra, ein C++-Client für den Musikerkennungsdienst Shazam
(github.com/BayernMuller)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
stdinist auch die Erkennung eines Songs während einer Mikrofonaufnahme möglich. - Benötigt werden
libfftw3für das Fingerprinting undlibcurlfü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
Gab es einen Grund, warum Sie sich statt für Rust für C++ entschieden haben?
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.
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.
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
Vielen Dank~!!!