Linux Fu : nommez cette mélodie

Si vous n’êtes pas assez vieux pour vous en souvenir, le titre de cet article fait référence à un ancien jeu télévisé dans lequel les participants essayaient de nommer une mélodie en utilisant le moins de notes possible. Que pouvons-nous dire ? Les options de divertissement étaient rares avant Internet. Cependant, grâce aux empreintes audio, les ordinateurs sont très efficaces pour y parvenir. Le vrai problème est de disposer d’une bibliothèque substantielle d’empreintes digitales avec laquelle comparer. Vous pouvez probablement déjà le faire avec votre téléphone, et maintenant vous pouvez le faire avec votre ordinateur Linux.

En toute honnêteté, votre ordinateur ne fait pas le travail réel. En fait, SongRec — le programme en question — n’est qu’un client de Shazam, un service capable d’identifier de nombreuses chansons. Bien que cela soit légèrement intéressant si vous utilisez un bureau Linux, nous pourrions également envisager d’utiliser la même technique avec un Raspberry Pi pour obtenir des projets intéressants. Par exemple, imaginez identifier une chanson en cours de lecture et ajuster l’éclairage d’ambiance en conséquence. Un robot capable d’afficher des informations sur les chansons pourrait être le succès d’une soirée ringard.

Le code

Si vous regardez dans le référentiel, il existe une version Python assez simple qui ne reconnaît que les chansons des fichiers audio. Le programme principal est plus récent, propose plus d’options pour gérer l’audio et utilise Rust. Cependant, si vous essayiez de le greffer dans votre propre programme, il pourrait être plus facile de commencer avec l’ancien code. À moins, bien sûr, que vous n’utilisiez également Rust.

Sous les couvertures

Shazam sous-échantillonne l’audio à 16 kHz et produit quatre spectrogrammes. Chaque spectrogramme mesure une bande différente : 250-520 Hz, 520-1 450 Hz, 1 450-3 500 Hz et 3 500-5 500 Hz. Les pics des spectrogrammes doivent correspondre à la même chanson. Le client envoie des informations sur les pics à différents moments à la base de données Shazam, qui renvoie des informations sur la chanson. Vous pouvez voir une vidéo explicative sur son fonctionnement ci-dessous.

Selon un article sur Shazam, s’ils peuvent détecter une performance live, il y a fort à parier que l’interprète synchronise les lèvres sur une piste préenregistrée, car l’algorithme n’est pas assez intelligent pour obtenir des pistes similaires.

Utilisé

Si vous utilisez l’exécutable principal SongRec, vous pouvez sélectionner des fichiers ou le programme surveillera en permanence le périphérique audio de votre choix (y compris vos haut-parleurs). Lorsqu’il trouve une chanson, il vous montre la pochette de l’album, le nom et l’album. Vous pouvez même exporter les résultats vers un fichier CSV.

Retour au code

Si vous regardez le code Python dans signature_format.py, vous y verrez les bandes de fréquences. Cependant, une grande partie du travail se déroule également dans algorithm.py. La majeure partie du reste du code Python consiste à effectuer une requête API ou à coller des éléments ensemble.

Le code Rust a une structure similaire mais comporte de nombreux éléments supplémentaires, comme on peut s’y attendre. Mais dans l’ensemble, ce n’est pas si difficile à comprendre.

Si vous craignez que vos données audio soient expédiées sur le réseau, détendez-vous. Le code envoie uniquement les informations de fréquence, ce qui ne permettra à personne de reconstruire quoi que ce soit. Si vous voulez voir à quoi cela pourrait ressembler, utilisez le bouton « Jouer un leurre Shazam ». Ce bouton produira un son que Shazam reconnaîtra comme la chanson. Si vous reconnaissez la chanson du leurre, vous pouvez probablement aussi comprendre R2D2.

Nous avons vu des empreintes audio utilisées à différentes fins. Ou encore, vous pouvez confectionner une robe qui s’illumine lorsqu’elle entend la bonne chanson.

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.