5 points par fcbayernmuller 2024-01-29 | 5 commentaires | Partager sur WhatsApp

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, et libcurl, 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

 
mdisprgm 2024-01-29

Y a-t-il une raison particulière pour laquelle vous avez choisi le C++ plutôt que Rust ?

 
cosine20 2024-01-29

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.

 
fcbayernmuller 2024-01-29

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.

 
cosine20 2024-01-29

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')b

 
fcbayernmuller 2024-01-29

Merci~!!!