@Nabla merci pour l’ami de suggestion est vraiment savoir.
Hello,
Tu pensais :
thanks for the suggestion friend ; it’s really knowladgeable.
En Français :
Merci pour la suggestion (ou proposition) ; c’est vraiment bien trouvé (bien renseigné)
you’re welcome 
Bonjour,
je déterre le sujet qui m’interresse même si c’est pas tout à fait la même utilisation.
sur quelle base de système d’exploitation faut il partir?
merci
Bonjour,
l’OS le plus populaire est Raspbian. Plusieurs versions sont disponibles, mais certaines n’ont plus de mise à jour, de part leur ancienneté.
La version la plus récente est Raspbian Buster, sortie l’été dernier.
Plus orientée bureautique, vous pouvez vous tourner vers Ubuntu Mate. L’OS est une « base » du célèbre Debian. Bon apparement, il n’y a pas de portage de Mate sur la PI4 à ce jour…
@+
Bonjour
merci
j’aimerai lire un fichier mp3 aléatoire dans un dossier à l’appuie d’un bouton.
J’ai un raspi 3 B.
J’arrive à lire l’état de mon bouton sur le gpio.maispas à conditionner la lecture à cet appui.
le but est de mettre ça dans une boite sans écran.
(j’ai pas de niveau de codage ormis des restes de vba, juste savoir copier coller. plus simple sur python pour moi)
merci d’avance
Salut @SAM_DUM120
Mode facile
:
Comme ça, à première vu, on peut faire un script python pour lire un fichier lors de l’appui sur un bouton.
Ensuite, on modifiera le script pour passer un « random » et voilà 
Mode moins facile :
Je te laisse chercher un peu
(en fait, là, je dois déjà repartir)
++
Salut,
Allez, juste une piste 
En Python, on peut écrire une petite boucle while suivi du programme qui se chargera de lire de façon aléatoire les fichiers mp3, avec la fonction random comme précisé par Nabla.
Ensuite, on peut envisager d’utiliser PyGame, avec son module de gestion de son, pygame.mixer. Il faudra juste preciser le chemin du répertoire des fichiers mp3. A noter que si vous avec une ancienne version de Python, PyGame gérera mieux les fichiers OGG que mp3.
@+
Yo,
J’ai mangé seul dans le bureau devant le PC …
Comme tu n’arrives pas à lancer un script, voilà un début = J’ai pondu un script de test (on verra pour le « random » plus tard)
Je ne suis pas fort en Python et je n’ai pas de Rpi sous la main = je te laisse tester
- Tu mets un bouton sur le Rpi.
- Tu dois créer un dossier MES_SONS
- (avec
mkdir /home/pi/MES_SONSpar exemple - Tu télécharges un fichier son ; par exemple ce sifflet en .wav.
- Tu copies le script ci-dessous où tu veux ; par exemple /home/pi/MES_SONS/lecture.py
- Tu lances le script (par exemple
python3 /home/pi/MES_SONS/lecture.py) - Tu appuies sur le bouton
ça doit lire le fichier son
#!/usr/bin/python3
# -*- coding: utf-8 -*
import RPi.GPIO as GPIO
import pygame
from pygame.locals import *
import osGPIO.setmode(GPIO.BCM) #Attention au choix du port ; référez-vous au site https://fr.pinout.xyz/
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)pygame.mixer.init()
son = pygame.mixer.Sound(‹ /home/pi/MES_SONS/son.wav ›)
canal = son.play()while True : #boucle jusqu’a interruption
try:
print (« \n attente boucle »)#on attend que le bouton soit pressé GPIO.wait_for_edge(24, GPIO.FALLING) # on a appuyé sur le bouton... #on joue un son pygame.mixer.init() son = pygame.mixer.Sound('/home/pi/MES_SONS/son.wav') canal = son.play() if (GPIO.input(24) == 0): #si bouton encore enfoncé ... break # ... alors on sort du whileexcept KeyboardInterrupt:
print (‹ sortie du programme ! ›)
raiseGPIO.cleanup() # reinitialisation GPIO lors d’une sortie normale
Redis-moi
P.S. : je pourrai tester seulement ce soir chez moi
Super. Je suis au taf aussi je test ce soir. Merci
Re,
Attention,
Pas de son si pas d’écran HDMI
ou alors, faudra passer par un ampli ; le son du Rpi est juste inexistant avec un simple haut-parleur.
Script corrigé et testé :
#!/usr/bin/python3
-- coding: utf-8 -
import RPi.GPIO as GPIO
import pygame
from pygame.locals import *GPIO.setmode(GPIO.BCM) #Attention ; voir le site https://fr.pinout.xyz/
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)while True : #boucle jusqu’à interruption
try:
print (« \n attente boucle »)#on attend que le bouton soit pressé GPIO.wait_for_edge(24, GPIO.FALLING) # on a appuyé sur le bouton... # ...alors on siffle pygame.mixer.init() son = pygame.mixer.Sound('/home/pi/MES_SONS/son.wav') canal = son.play()except KeyboardInterrupt:
print (‹ sortie du programme! ›)
raiseGPIO.cleanup() # reinitialisation GPIO lors d’une sortie normale
Mais cela ne va pas forcément être facile avec les indentations qui ne passent pas forcément bien sur le forum.
++
Bonjour et merci en tout cas, effectivement il semble y avoir des erreurs de syntaxe que je n’arrive pas à corriger.
j’ai par exemple ligne :
File « lecteur.py », line 3
– coding: utf-8 -
^
peux tu me transmettre un imprime écran, je pourrai vérifier.
merci
Re,
Je t’envoie un MP pour te faire passer le fichier par courriel.
Mais là, le Rpi est arrêté.
Je bosse demain dès 08h donc sans doute que demain soir
Salut,
Pour la fonction random, essayez avec random.choice qui vous sélectionnera un fichier « au hasard »
import RPi.GPIO as GPIO
import pygame
import os, random
from pygame.locals import *
GPIO.setmode(GPIO.BCM) #Attention ; voir le site https://fr.pinout.xyz/
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True : #boucle jusqu’à interruption
try:
print ("\n attente boucle")
#on attend que le bouton soit pressé
GPIO.wait_for_edge(24, GPIO.FALLING)
# on a appuyé sur le bouton...
# ...alors on siffle
pygame.mixer.init()
# c'est la roulettte russe :)
son = pygame.mixer.Sound(random.choice(os.listdir("/home/pi/MES_SONS")))
canal = son.play()
except KeyboardInterrupt:
print (‹ sortie du programme! ›)
raise
GPIO.cleanup() # reinitialisation GPIO lors d’une sortie normale
@+
Yo @stef-k
Je vais implémenter ton bout de code dans mon script ce soir (là, je mange « loin » de mon Rpi) et l’envoyer par courriel à @SAM_DUM120
J’espère que les gens normaux de ma famille me laisseront jouer avec mon Rpi ce soir 
Dis donc, on lui a fait son cadeau de Noël avant l’heure 
++
c’est clair merci les gars (meme si je n’arrive pas à le faire tourner pour l’instant) et c’est pour un cadeau de noel mais qui se fera le 04/01
Le cadeau n’est pas fini, il y aura d’autre surprises après 
Joyeux Noel a tout le fofo 
Yo,
C’est bizarre, ça plante avec la fonction random 
Je ne comprends pas car ça lit le fichier si indiqué en dur.
Mais ça plante en random avec un joli
pygame.error: Unable to open file '/home/pi/Downloads/0452.wav'
Pareil avec tous les fichiers, en wav ou mp3
La suite un autre jour du coup.
Vais pas pouvoir coder ce soir 
Et … Joyeux Noël !!!
Joyeux Noël !!

@Nabla, n’étant pas chez moi pour Noël, dépourvu d’une framboise, je ne peut pas tester de mon coté…
Tu as essayé de remplacer pygame.mixer.init() par pygame.init() ?
Peut être qu’en réinitialisant le module complet, ça marchera.

Yo @SAM_DUM120 (et Yo @stef-k)
Bon, je n’y connais rien en python, mais je suis complètement barré.
Donc, j’ai pondu un script qui tourne chez moi 
J’ai listé les fichiers et je leur attribue un numéro puis j’utilise randrange pour tirer un N° au hasard.
Script sans doute largement améliorable compte tenu de mon niveau … 
import RPi.GPIO as GPIO
import time
import pygame
from pygame.locals import *
import os
import random
from random import randrange
GPIO.setmode(GPIO.BCM) #Attention au choix du port ; voir le site https://fr.pinout.xyz/
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
son01 = "/home/pi/MES_SONS/0218.wav"
son02 = "/home/pi/MES_SONS/0477.wav"
son03 = "/home/pi/MES_SONS/1111.wav"
son04 = "/home/pi/MES_SONS/son.wav"
while True : #boucle jusqu'à interruption
try:
print ("\n attente boucle")
#on attend que le bouton soit pressé
GPIO.wait_for_edge(24, GPIO.FALLING)
# on a appuyé sur le bouton...
print ("\n On tire un son au hasard")
#Initialisation du son
pygame.mixer.init()
Fichier_a_lire = randrange(1, 4)
if Fichier_a_lire == 1:
son = son01
if Fichier_a_lire == 2:
son = son02
if Fichier_a_lire == 3:
son = son03
if Fichier_a_lire == 4:
son = son04
print ("\n On joue ce son")
son = pygame.mixer.Sound(son)
canal = son.play()
time.sleep(5)
print ("\n OK ; on est prêt pour une nouvelle aventure")
if (GPIO.input(24) == 0): #si bouton encore enfoncé
print ("Fermeture du programme")
break # alors on casse la boucle
except KeyboardInterrupt:
print ('sortie du programme!')
raise
GPIO.cleanup() # reinitialisation GPIO lors d'une sortie normale
Je t’envoie déjà ça par courriel.
++
Édit :
Test parmi d’autres ; mais test avec notes.
J’ai appuyé 20 fois sur le bouton lors de la même séquence.
Le son01 est sorti 8 fois soit 40%
Le son02 est sorti 4 fois soit 20%
Le son03 est sorti 8 fois soit 40%
Le son04 est sorti 0 fois soit 0%
La séquence réelle est :
1;1;1;3;2;1;3;3;1;1;3;2;1;3;2;2;3;3;1;3