====== Construire un Juke-box avec un Raspberry Pi ====== * Porteur du projet : Damien MUTI DESGROUAS, * Date : Juillet 2018 * Contexte : Apprentissage libre - Outil de développement de projet * Référence : ouvrage "[[https://www.raspberrypi.org/blog/carrie-anne-philbins-adventures-in-raspberry-pi/|Adventures in Raspberry Pi]]" {{ :wiki:tutoriels:couverture_livre_adventures_in_raspberry_pi.png?200 |}} ===== Présentation du projet ===== Ce projet est tiré du chapitre 9 de l'ouvrage (en anglais) intitulé "Adventures in Raspberry Pi" disponible sur le [[https://www.raspberrypi.org/blog/carrie-anne-philbins-adventures-in-raspberry-pi/|lien suivant]]. Il s'agit d'un recueil de 10 projets permettant de se familiariser avec certains fonctionnalités de programmation et de traitement d'image de Raspberry Pi. Ce projet permet de réaliser un Juke-box miniature à l'aide d'un Rasberry Pi. Il est composé d'une interface permettant de lire le titre des morceaux ainsi que le nom de l'artiste, via un écran LCD. L'interactivité s'effectue grâce à 4 boutons permettant de jouer ou mettre en pause (Play/Pause), stopper (Stop), avancer ou reculer dans la liste des morceaux à jouer. ===== Schéma du montage ===== Le schéma (fritzing) du montage est le suivant : {{ :wiki:tutoriels:montage_fritzing_1.png?600 |}} Les connections entre le Raspberry et les différents éléments (écran LCD, boutons, potentiomètre) sont les suivants (voir livre p201, 202, 212, 213): * A compléter... ===== Programme en Python ===== Le programme final permettant de contrôler la lecture des morceaux mp3 est le suivant : #librairies import glob, random, sys, vlc, time import RPi.GPIO as GPIO from Adafruit_CharLCD import * #variables globales # début du programme #vérification des dossiers contenant de la musique .mp3 if (len(sys.argv)) <=1: print("Merci de préciser un dossier contenant des fichiers .mp3") sys.exit(1) folder = sys.argv[1] files = glob.glob(folder+"/*.mp3") print(files) if (len(files) == 0): print("Il n'y a pas de fichiers .mp3 dans le dossier ", folder) sys.exit(1) # setup des pattes GPIO du raspbery GPIO.setmode(GPIO.BCM) PLAY_BUTTON = 11 STOP_BUTTON = 7 BACK_BUTTON = 4 FORWARD_BUTTON = 10 GPIO.setup(PLAY_BUTTON,GPIO.IN) GPIO.setup(STOP_BUTTON,GPIO.IN) GPIO.setup(BACK_BUTTON,GPIO.IN) GPIO.setup(FORWARD_BUTTON,GPIO.IN) # gestion de l'afficheur LCD lcd = Adafruit_CharLCD() lcd.clear lcd.message("lancement de la musique !!") print("lancement de la musique !!") # mode shuffle : met dans un ordre aléatoire tous les fichiers .mp3 contenu dans le tableau "files" random.shuffle(files) #chargement des fichiers dans vlc player = vlc.MediaPlayer() medialist = vlc.MediaList(files) mlPlayer = vlc.MediaListPlayer() mlPlayer.set_media_player(player) mlPlayer.set_media_list(medialist) def handle_changed_track(event, player): media = player.get_media() media.parse() artist = media.get_meta(vlc.Meta.Artist) or "Artiste inconnu" title = media.get_meta(vlc.Meta.Title) or "Titre de la chanson inconnu" album = media.get_meta(vlc.Meta.Album) or "Album de la chanson inconnu" lcd.clear() lcd.message(title + "\n" + artist + " - " + album) playerem = player.event_manager() playerem.event_attach(vlc.EventType.MediaPlayerMediaChanged, handle_changed_track, player) # boucle infinie while True: #button = input("Appuyer sur la touche : 1, 2, 3, ou 4 ___ ") if GPIO.input(PLAY_BUTTON): #bouton Play/Pause print("Le bouton Play a été pressé") #print(title) if mlPlayer.is_playing(): mlPlayer.pause() else : mlPlayer.play(); elif GPIO.input(STOP_BUTTON): #bouton pause print("Le bouton Stop a été pressé") mlPlayer.stop() #arrêter la musique random.shuffle(files) #met dans un ordre aléatoire tous les fichiers .mp3 contenu dans le tableau "files" medialist = vlc.MediaList(files) mlPlayer.set_media_list(medialist) elif GPIO.input(BACK_BUTTON): print("Le bouton Back a été pressé") mlPlayer.previous() elif GPIO.input(FORWARD_BUTTON): print("Le bouton Forward a été pressé") mlPlayer.next() time.sleep(0.3) lcd.scrollDisplayLeft() Le fichier fichier python peut être directement téléchargé sur le lien suivant : * {{ :wiki:tutoriels:jukebox_4.py.zip |python4.py}} Il est nécessaire de placer les morceaux de musique au format .mp3 dans un dossier "Musique" situé dans le dossier contenant le programme "jukebox4.py". Pour lancer le programme, il faut ouvrir un terminal et se placer dans le dossier contenant le programme "Jukebox4.py" : {{ :wiki:tutoriels:terminal_1.png?600 |}} il faut ensuite lancer le code python dans le terminal : sudo pyhton3 Jukebox4.py {{ :wiki:tutoriels:terminal_2.png?600 |}}