vibra, client Shazam de reconnaissance musicale en C++
(github.com/BayernMuller)vibra
- Il s’agit d’un projet qui implémente en C++ un client communiquant avec les serveurs de Shazam, le service de reconnaissance musicale.
- Il fonctionne environ deux fois plus vite que SongRec, le client Shazam open source existant en Rust.
- Il peut lire un fichier wav et récupérer les données indiquant de quel morceau il s’agit.
- Il peut aussi reconnaître une chanson en cours d’enregistrement au micro en lui fournissant des données PCM brutes via
stdin. libfftw3, nécessaire au fingerprinting, etlibcurl, nécessaire à la communication avec les serveurs de Shazam, sont requis.- Il est rapide, car il traite efficacement les données PCM, notamment le downsampling des fichiers wav et la conversion de canaux.
- Avec peu de bibliothèques de dépendance et une compilation simple, il peut être utilisé sur des appareils embarqués.
5 commentaires
Y a-t-il une raison particulière pour laquelle vous avez choisi le C++ plutôt que Rust ?
Merci pour le partage ! Je suis personnellement curieux de savoir comment vous avez amélioré les performances.
Si cela prend autour d’une seconde sur un Raspberry Pi 4, c’est vraiment une performance très pratique.
En fait, Rust Songrec était bien trop inefficace : pour les données PCM reçues en entrée, il effectuait séparément le downsampling, la conversion en mono et la conversion en 16 bits.
J’ai donc amélioré la partie qui parcourait à chaque fois toutes les données PCM à chaque étape. Bien sûr, la différence entre les langages C++ et Rust joue sans doute aussi beaucoup.
Ah, donc dans le code Rust, ces trois étapes étaient traitées séparément. Rien que d’améliorer ça n’a pas dû être une mince affaire, c’est impressionnant
' v')bMerci~!!!