Raspberry Pi + Lecteur code barre USB = Jukebox
Raspberry Pi + Lecteur code barre USB = Jukebox
Comme pas mal de gens de ma génération, je dispose d'une jolie collection de CD, sauf que j'écoute de plus en plus leur version "numérisée" via un iPod ou un media center. Si ma platine CD venait à tomber en panne, se poserait la question de son (non) remplacement.
Et pourtant, le plaisir de choisir un disque à écouter dans un rayonnage est un geste autrement plus agréable que de "scroller" dans des menus informatiques (c'est ce qui fait une partie du succès du "revival" du vinyl, d'ailleurs).
Je suis parti de ce constat pour réaliser un petit "jukebox" numérique équipé d'un lecteur code-barre. Ma discothèque est entièrement numérisée dans ce jukebox: en pratique, il s'agit du mini-ordinateur autonome "raspberry pi" avec une carte SD remplie de musique. Le raspberry est branché à un lecteur code barre USB.
Ainsi lorsque je veux écouter un disque, je le choisis sur son étagère, je le "douche" avec le lecteur code barre, et sa lecture commence immédiatement. C'est le principe de la pré-écoute proposée dans certains magasins (feu les Virgin Megastores notamment), à la maison.
Le raspberry pi dans sa coque blanche, il est branché sur la gauche au lecteur code barre en USB, en bas en jack vers la chaîne hifi, et sur la droite on voit la carte SD et le câble d’alimentation. Enfin une solution pour écouter de la musique dans un media center sans avoir à allumer sa télé
Concrètement, il faut :
coté matériel
- un raspberry pi (une trentaine d’euros)
- un lecteur code-barre USB (idem)
- une carte SD pour installer l’OS du raspberry, le script qui va bien, et pour stocker la musique numérisée
- un ampli auquel est raccordé le raspberry pi (en audio jack ou hdmi)
coté logiciel
- 1 script python pour construire la base de données qui associe codes barre et répertoires musicaux
- 1 script python qui se lance au démarrage du raspberry et qui sert de jukebox.
La version que j’ai mise en oeuvre est une version » locale » , c’est à dire que le jukebox n’a pas besoin d’être connecté à Internet. Il lit localement le code barre d’un CD, le traduit en « Artiste + Album », et joue la version mp3 stockée sur la carte SD. Mais une version « on line » serait imagineable, en effet la lecture code barre d’un CD renvoit le code EAN 13 qui est directement exploitable via Google ou Amazon pour trouver l’album qui se cache derrière un code barre, et l’écouter en ligne avec un service comme deezer ou spotify. Dans un premier temps, j’ai un script qui me permet de « doucher » les CD les uns après les autres, en saisissant le nom de l’artiste et de l’album.
Sous python la lecture d’un code barre depuis une « douchette USB » est simplissime :
lecturecodebarre = raw_input('Saisir le code barre')
if lecturecodebarre == '602537039852' :
print('Ceci est l album Places de Lou Doillon')
Note : il existe quelques bases de données en ligne des codes EAN13, vous pouvez par exemple cliquer ici et saisir 602537039852 pour vérifier le code précédent.
Ma base est créée sous la forme d’un fichier CSV :
code,artist,album
5099930684027,Kings of convenience,Declaration of dependance
5413356574029,Mogwai,Hawk
602537039852,Lou Doillon,Places
Une fois cette base constituée, avec les répertoires musicaux sous la forme Artiste/Album installés sur le rapsberry, le deuxième script python est installé. C’est un script qui est lancé au démarrage du raspberry, et qui n’a pas pas besoin d’écran (je fais jouer une petite musique -la musique de boot de windows95 😉 – en début de script pour vérifier qu’il s’est bien lancé avant de se servir de la douchette). L’algorithme général de ce script est le suivant :
- Lit Codebarre
- Si Codebarre est dans FICHIER_BASE, lit l'album correspondant
- Sinon joue un fichier son qui dit "l'album n'est pas enregistré dans la base !"
On me réclame régulièrement le code du script principal python, le voilà dans une version la plus commentée possible. Suggestions d’améliorations bienvenues (notamment j’aimerais pouvoir intervenir en cours de lecture par d’autres événements que la fin des chansons). Une petite amélioration est apportable au script général, notamment pour mettre le lecteur en pause ou revenir en arrière: j’ai généré des codes barres spéciaux pour envoyer des ordres tels que pause, rewind, ou shutdown. En « douchant » ces codes barres particuliers on transforme ainsi le lecteur de code barre en télécommande. Il suffit de générer un code barre en ligne avec un code EAN dont on est sûr qu’il ne correspond pas à un « vrai » CD (bourrage de ‘0’ ou de ‘1’ par exemple).
exemple de 4 codes barres lisibles qui permettent de piloter des événements depuis la « douchette »: j’ai généré des codes barres bidons qui sont interprétés par le script pour revenir à la chanson précédente, faire pause/lecture, pour éteindre le raspberry, ou pour réinitialiser la douchette code barre quand elle est capricieuse.