Raspberry Pi + Lecteur code barre USB = Jukebox

Par Sylvain - Catégories: Contenu numérique, Matériel, Multimedia, Musique
Léger...Bof !Pas mal !Bien !Top ! (4 votes, average: 4,75 out of 5)
Loading...
Ajouter un commentaire
EDIT de octobre 2015 : publication du code

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 Virgin Megsatores notamment), à la maison.

 

jukeboxpi

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).

telecomande

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.

41 commentaires to “Raspberry Pi + Lecteur code barre USB = Jukebox”

  1. manu a écrit:

    Bonjour,
    en recherchant sur le web des idées pour faire mon projet je suis tombé sur votre article.
    Je suis intéressé par vos scripts. Pouvez-vous me les faire suivre svp.
    Mon projet consiste à gerer une cave à vin. avec un raspberry + une douchette je voudrais gerer mon stock : entrée des nouvelles bouteilles et sortie des bouteilles pour ma consommation. votre projet s’apparente bcp à ce que je voudrais faire. Merci pour votre aide

  2. Sylvain a écrit:

    Merci du commentaire. Je vous réponds en message privé.

  3. JP a écrit:

    Bonjour,
    je fais mes premiers pas sur Raspberry et mon premier projet est un peu similaire: lecture de code barre pour intégrer dans une base Mysql.
    Je pense que votre code me permettrait de démarrer mon projet sur des bases intéressantes étant donné que Python est un langage que je n’ai pas encore expérimenté. Merci de votre aide. Et bravo pour votre idée de Jukebox

  4. Arthur a écrit:

    Bonjour,
    Je m’appelle Arthur,
    Bravo pour votre réalisation, je voudrais tenter de faire quelque chose de semblable,mais je ne sais pas par ou commencer et je débute en programmation, Pouvez vous me montrer votre programme python?
    pouvez vous m’aider?

    D’avance merci

    Je n’ai que 14 ans

  5. Yaug a écrit:

    Bonjour,

    Est-il possible d’avoir la référence du scanner ?
    Merci

  6. Sylvain a écrit:

    Oui c’est celui-là: http://www.amazon.fr/gp/product/B009IF1DYK?psc=1&redirect=true&ref_=oh_aui_detailpage_o00_s00

  7. sebastien a écrit:

    bonjour

    votre projet est super

    j’aimerai faire pareil est-il difficile à le réaliser ?

    je ne connais rien en programmation existe-t-il des tutos pas à pas ?

    une douchette code barre bluetooth est-elle adaptable a votre système ?

    d’avance merci pour votre réponse

  8. Charles a écrit:

    Bonjour,
    Je suis nouveau dans l’univers de Raspberry et j’aime vraiment ton projet. J’aimerais pouvoir voir les sources pour bien comprend comment tu a réalisé ceci. Pense tu pourvoir m’envoyer par courriel tes sources :

    charlesdesrochers@live.ca

    Merci de ton aide
    Charles

  9. tanguy a écrit:

    Bonjour Sylvain,

    Chouette projet 🙂
    Je dois faire un projet de fin d’études et je pensai utiliser un code barre pour faire une gestion de stocks.
    Es-ce que ce serait possible que tu m’envoie ce que tu as fait pour voir un peu comment ca marche 🙂
    Tanguy.spt@gmail.com
    merci,

    Tanguy

  10. kt a écrit:

    Bonjour,

    Avez-vous eu besoin d’installer un driver pour la douchette/lecteur de code-barre ?
    J’aimerais utiliser un lecteur de barre qui lit en continu et celui que j’ai nécessite un driver (qui n’existe pas pour Linux !).

    Serait-il possible d’avoir les codes python que vous avez développés ? Cela m’intéresse pour démarrer mon application.

    Merci.

  11. Sylvain a écrit:

    Pas besoin de driver particulier, le Raspberry détecte le lecteur sans difficulté et lorsqu’on « flash » un code barre il envoie via USB la chaîne de caractère décodée, comme si c’était une entrée claver par exemple.
    Je vous ai envoyé les scripts python par message privé.

  12. Sylvain a écrit:

    Code envoyé en MP

  13. Nydein a écrit:

    Bonjour,

    Je viens vers toi car j’ai un projet actuellement qui utilisera la lecture de code barre avec un Raspberry Pi. Je voulais savoir si il fallai du matériel spécifique pour réaliser cette opération et est-ce qu’un programme en C++ correspondrait au besoin (car tout le reste de mon projet est en C++).

    Merci d’avance.
    Cordialement.

  14. Sylvain a écrit:

    Bonjour
    Je ne vois pas de contrindication à le faire en C++.
    La « douchette USB » est comme une sorte de clavier, elle envoie en entrée le code barre lu, comme s’il avait été saisi sur un pavé numérique…
    Sylvain

  15. Imhotep a écrit:

    ☥hello je peut avoir le code, je bosse sur un projet pareil.
    email : hotep12@gmail.com
    merci d’avance

  16. Fred a écrit:

    Bonjour,
    Je suis aussi intéressé par un test de tes scripts. Peux-tu me les transférer par mail?
    Merci par avance,
    Fred

  17. Sylvain a écrit:

    C’est fait, en MP.

  18. Sylvain a écrit:

    C’est fait, en MP.

  19. Romain a écrit:

    Très intéressant et super ce sujet de jukebox!!Est il possible d’avoir le script?
    Merci d’avance
    Rom

  20. Sylvain a écrit:

    Oui comme on me le demande régulièrement jai updaté l’article en postant le code. Il est la

  21. Romain a écrit:

    Salut! Tu as installé quelle distrib? car le lecteur n’est pas reconnu.Comment as tu procéder pour l’installer? Merci encore.

  22. Sylvain a écrit:

    Raspbian de base sur Raspberry, mais le script tourne sur un HP mini avec Lubuntu aussi. En fait je n’ai eu absolument aucun driver à installer. La douchette est vue comme un périphérique de saisie classique, et dès qu’on l’utilise elle envoit dans l’entrée standard le résultat de sa lecture.

  23. Graphi a écrit:

    Bonjour Sylvain, je suis plus jeune (retraité) mais électronicien des premières heures je continu à me former. Je cherche à développer ce style d’utilisation mais au lieu de jouer du son je voudrais sortir une étiquette imprimée avec le nom date et heure. Si c’est encore possible j’aimerai voir votre code en inspiration. J’ai le hard reste à mettre au point le soft. Merci de votre aide.
    Graphi

  24. Graphi a écrit:

    Oui j’ai vu où il est merci

  25. Louismggt a écrit:

    Salut Sylvain,

    En cherchant de quoi faire un projet dans le même style, je suis tombé sur ton site. Déjà merci pour le partage de ce projet, c’est top! Penses-tu qu’il est possible de lancer par le même principe une vidéo enregistrée sur le raspberry avec ton système? (Je suis débutant complet sur tout ce qui est electro / Linux…)
    Si tu as des conseils ou des bons sites pour débuter aussi je suis preneur!
    Louis

  26. Sylvain a écrit:

    Oui absolument on peut déclencher une lecture video de la même façon, en scannant par exemple un dvd

  27. Djack a écrit:

    Bonjour Sylvain,
    Ton projet correspond exactement à ce que je cherchais! Sauf que je cherchais du côté des QR codes, en espérant trouver une solution de pointage direct vers un fichier mp3 de mon ordi, sans passer par internet. J’ai ensuite pensé aux codes barres, mais ne savais pas comment interfaces leur lecture avec le lancement d’une action. Je ne suis ni électronicien ni programmeur.
    Tu commences donc par te faire ta base de données de CD en scanant le code barre des « vrais » boîtiers CD, et ensuite tu fais un programme d’interface de la lecture du code barre vers l’exécution du fichier mp3. Comment intégres-tu tes astucieuses commandes de pause, arret, où rewind?? Peux-tu me passer tes scripts en MP stp? Et au jour d’aujourd’hui tu utiliserais les mêmes composants (arduino et douchette)? Bravo en tous cas pour cette idée géniale et plus simple et moins onéreuse qu’un jukebox arduino – NFC.

  28. Sylvain a écrit:

    Merci du commentaire, le code des scripts est disponible dans la page de l’article, dans un lien.

  29. emeric a écrit:

    bonjour
    j’ai un projet de terminal ou je dois repertorier les cartes de cantine des eleves de mon lycee grace a une douchette et un raspberry serais t’il possible de voir votre programme pour comprendre un peut mieux le principe
    Si vous accepetez envoyé le par mail à emerictranchant@hotmail.com
    cordialement

  30. Sylvain a écrit:

    Le script EST téléchargeable dans l’article, Emeric.

  31. Saï a écrit:

    Yo !
    Vôtre projet est assez proche de celui que je dois réaliser, je vous remercie donc pour votre aide ^-^
    De plus, si je comprend bien, vous chercher un moyen de continuer à scanner pendant que les musiques jouent ?
    Si c’est bien ça, je vous conseille de regarder le « multi-threading »
    Je ne me suis pas encore amusé avec en python, donc je ne peux pas trop vous aider, mais comme ça vous pouvez y jeter un oeil

    Cordialement,

  32. Laulau a écrit:

    Salut,
    une question, est c’est pas d’avoir tes sources! J’ai un truc qui m’échappe un peu, quel est l’OS que tu as installé sur ton Rasp?
    Merci

  33. Sylvain a écrit:

    Les sources sont dans l’article, et il s’agit d’un script donc il n’y a rien à compiler ou installer, juste le script à lancer au démarrage du raspberry. Sur un OS de base (distribution raspian par défaut, typiquement).

  34. Roulin a écrit:

    Bonjour, j’aime beaucoup l’idée, ça fait quelques années que je cherche à faire ceci, j’ai les idées mais malheureusement pas les compétences niveau programmation pour y arriver.. cependant je l’imaginais plus grand, avec lecture de dvd cd et jeux avec la fourre originale car étant collectionneur il est rare que j’ouvre mes boîtiers. J’ai cherché le gestionnaire multimedia qui me permettais de pouvoir gérer ma collection en numérique et ainsi de pouvoir le lancer sur les divers périphériques de la maison. Pour la musique, films et séries j’ai choisi Plex. Celui-ci est maintenant à jour, bien que j’aie mis deux ans pour y intégrer ma collection il marche parfaitement bien. La deuxième partie de mon projet est donc maintenant de pouvoir lire le code EAN du média pour le lancer sur le HTPC du salon dans un premier temps, chaque client plex à une ID visible et l’API qu’ils fournissent devrait permettre dans un deuxième temps de choisir sur quel périphérique le média doit être joué.
    Je pense que ce projet pourrais changer pas mal de choses, comme vous l’avez indiqué le retour au palpable est nécessaire. 🙂 Seriez-vous intéressé pour aller dans ce sens? Ou quelqu’un qui maîtrise le code serait intéressé? J’ai encore pas mal d’idée aussi en ce qui concerne le retro-gaming que je gère via launchpad. Merci de m’avoir lu, je reste disponible.
    niluor@hotmail.com

  35. Sylvain a écrit:

    Bonjour et merci de ce commentaire. J’ajoute un lien vers un projet complémentaire utilisant un Raspberry: Vinyle, Raspberry et leds…

  36. chafiaa a écrit:

    bonjour
    d’abord Bravo pour votre réalisation,Je dois faire un projet de fin d’études et je pensais d’utiliser un code barre pour faire une gestion de stocks avec un raspberry + une douchette .alors que Vôtre projet est assez proche de celui que je dois réaliser.
    Serait-il possible d’avoir les codes python que vous avez développés ? Cela m’intéresse pour démarrer mon application.merci d’avance

  37. Sylvain a écrit:

    Merci de votre commentaire. Les codes python sont proposés dans le corps de l’article, sous la forme d’un lien.

  38. Cyril a écrit:

    Bonjour, ce projet est très intéressant.
    Faut-il attendre la fin de la chanson pour pouvoir scanner un autre code barre ? Ou peut-on interrompre une chanson en scannant un autre code barre et passer à une autre chanson ?
    Merci.
    Cyril.

  39. Sylvain a écrit:

    Merci pour le commentaire. Et en effet, le code mériterait d’être amélioré aujourd’hui il ne gère pas les interceptions pour lancer un autre code barre en cours de lecture.

  40. sarah a écrit:

    super !!
    je suis interessée par le script !! pouvez vous me l »envoyer svp 🙂

  41. Sylvain a écrit:

    Le lien est dans l’article, promis 🙂 !

Laissez un commentaire

WP Theme & Icons par N.Design Studio. Hébérgé par Norjane 5
RSS (articles) RSS (commentaires) Connexion