Jouer un son sur raspberry pi 3B en utilisant des haut-parleurs

Bonjour tout le monde.
Comme je suis débutant dans le domaine, je veux vraiment votre assistance et merci d’avance.
Je veux faire jouer un son préféré à télécharger depuis le site : Free Sound Effects | SoundBible.com en utilisant un haut-parleur branché au Pi.
Merci de me préciser la méthode à suivre pour le téléchargement du son sur le Pi,
Me proposer un code sous GPIOZERO qui fait jouer le son toutes les 30 minutes (boucle) et pendant 1 minute (durée de chaque diffusion de son).
Dans l’attente de vous lire en temps opportun, veuillez recevoir mes meilleures salutations.

Salut,

Tu cliques sur le fichier mp3 du fichier que tu veux obtenir.
ça te propose de le lire ou de le télécharger.
Et voilà le fichier sur ton Raspberry Pi.
Sinon, tu le télécharge par la technique du wget en faisant
sudo wget http://site.truc/son.mp3

Ensuite, tu fais un appel cron qui lancera un script toutes les 30 minutes

En somme, tu va créer un dossier « son » pour y mettre le fichier téléchargé.
Puis réaliser un script jouer.sh

Détails :

On va créer le dossier son en mode graphique (nouveau dossier)
ou en ligne de commande
sudo mkdir son

on va dans le dossier :
cd /home/pi/son

on créé le fichier
sudo nano jouer.sh

puis on inscrit dedans :
#!/bin/sh
# Script pour jouer un son
mplayer /home/pi/son/truc.mp3

Tu installes mplayer
sudo apt-get install mplayer

On édite le fichier crontab :
sudo nano /etc/crontab

Ensuite, il faut noter :
*/30 * * * * cd/home/pi/son && bash jouer.sh

Après, tu recharges :
/etc/init.d/cron reload

Là, je t’écris ça « comme ça » sans le faire en vrai pour tester tout en écoutant les infos.
J’espère ne pas faire d’erreurs car je ne suis pas informaticien.

Mais attention, si tu as juste un haut parleur sans ampli = tu ne vas RIEN entendre !!!

Edit :
Avec * * * * * pi cd /home/pi/son && bash jouer.sh je suis en train de faire jouer un son toutes les minutes.
Donc, ça fonctionne.
Mais, le son est extrêmement faible ; pourtant, tout le monde est couché et il n’y a pas de bruit (j’entends les secondes de l’horloge qui défilent).
Manipulations réalisées en SSH depuis un PC Linux sur un Raspbian Lite installé pour tester un autre truc pour le forum donc un Raspbian tout nouveau tout chaud.

++

1 « J'aime »

Merci beaucoup pour votre réponse.
Je vais suivre les étapes indiquées par vos soins
Meilleures salutations

@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 :wink:

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 :wink: :
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à :slight_smile:

Mode moins facile :
Je te laisse chercher un peu :smiley: (en fait, là, je dois déjà repartir)

++

Salut,

Allez, juste une piste :grinning:

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_SONS par 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 os

GPIO.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 while 

except KeyboardInterrupt:
print (‹ sortie du programme ! ›)
raise

GPIO.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! ›)
raise

GPIO.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 :wink:

Dis donc, on lui a fait son cadeau de Noël avant l’heure :stuck_out_tongue_winking_eye:

++

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 :grinning:

Joyeux Noel a tout le fofo :slightly_smiling_face: