[Rasbperry Pi] Sampler / BeatBox ou comment faire de la musique avec sa framboise ?

Salut !

Aujourd’hui nous allons voir comment intéragir avec le raspberry Pi par l’intermédiaire de boutons poussoirs.

Cela va se traduire par un petit exercice permettant de mettre en œuvre une petite batterie électronique, alors let’s go !!

J’ai été très inspiré par cette dernière vidéo :

http://vimeo.com/55658574

Il faut savoir que les GPIOs du Raspberry Pi peuvent fonctionner aussi bien en Entrée qu’en Sortie.

Voyons ce dont nous avons besoin pour qu’une broche se comporte comme une Entrée :

#on importe le module GPIO
import RPI.GPIO as GPIO

#on sélectionne une cartographie des GPIOs
GPIO.setmode(GPIO.BCM)

#on déclare la broche utilisée comme une entrée
GPIO.setup(23, GPIO.IN)

#on peut à présent utiliser notre broche pour afficher un message à l'écran par exemple
if (GPIO.input(23) == True):
    print("Button pressed !!")

#ou encore
myButton = GPIO.input(23)
if (myButton == True):
    print("J'ai pressé mon Bouton !!")

Voilà pour le code. Voyons à présent comment cela se passe au niveau du circuit électronique.
Le circuit utilisé va nous permettre d’avoir 3 boutons qui vont permettre de donner 3 instructions différentes au Raspberry Pi.
BoutonGPIO

La résistance permet de réduire le courant envoyé sur la broche du Raspberry Pi (cela évite de court-circuiter les GPIOs qui risquent de ne plus fonctionner correctement).

Donc nous y voilà. Je souhaitais réaliser une batterie électronique. Aujourd’hui il n’y aura que 3 percussions mais le code est prêt à en accueillir d’autres. Et pourquoi pas dans un futur plus ou moins proche réaliser une « vraie » batterie électronique ?
[#drum – #piezo sensor – #i/o expander]

Pour lire les fichiers audio reproduisant le son d’une batterie, nous allons utiliser la librairie PYGAME et son module MIXER (pour plus d’information je vous invite à consulter la documentation).
Voyons donc ce petit bout de code :

#on importe les modules nécessaires
import pygame.mixer
from time import sleep
import RPi.GPIO as GPIO
from sys import exit

#nous allons utiliser les pins 23, 24 et 25
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN)
GPIO.setup(24, GPIO.IN)
GPIO.setup(25, GPIO.IN)

#on initialise le lecteur audio
# les paramètres correspondent à (fréquency of bitrate, size (how many bits for
#  each audio sample, channel (mono or stereo), size of the buffer)
pygame.mixer.pre_init(44100, -16, 1, 512)
pygame.init()

#on déclare tous les sons utilisés pour notre batterie
#les fichiers sont dans un dossier "samples" placé dans le dossier courant
kick = pygame.mixer.Sound('samples/kick.wav')
kick.set_volume(.65);
snare = pygame.mixer.Sound('samples/snare.wav')
snare.set_volume(.65);
openhh = pygame.mixer.Sound('samples/open.wav')
openhh.set_volume(.65);
closedhh = pygame.mixer.Sound('samples/closed.wav')
closedhh.set_volume(.65);
clap = pygame.mixer.Sound('samples/clap.wav')
clap.set_volume(.65);
cymbal = pygame.mixer.Sound('samples/cymbal.wav')
cymbal.set_volume(.65);

#le message permettant d'avertir que le programme est prêt
print "Soundboard Ready."

while True:
        #on teste les broches pour détecter quand il y a appui sur une touche
	try:
		if (GPIO.input(23) == True):
                #quand le bouton est enclenché, on lance le son de la grosse caisse
			kick.play()
		if (GPIO.input(24) == True):
			snare.play()
		if (GPIO.input(25) == True):
			openhh.play()
		sleep(.1)

#permet d’arrêter le programme (ctrl + c)
except KeyboardInterrupt:
		exit()

Voilà pour le code. Il y a 6 sons chargés, il ne manque que 3 broches à relier à votre Raspberry Pi pour avoir une batterie complète !

Les sons sont disponibles sur la page du projet BeatBox de scottgarner
Voilà ce à quoi cela peut ressembler avec des capteurs capacitifs :
Vidéos

Bon amusement !

Publicités

3 réflexions sur “[Rasbperry Pi] Sampler / BeatBox ou comment faire de la musique avec sa framboise ?

  1. bonjour j’ai un petit problème au niveau de (except KeybordInterrupt: ) sa me marque unexpected unindent

    • Hello !
      Dans ce cas, il faut que vous controlliez votre script python. Il doit y avoir une erreur d’indentation. Cela peut également venir du fait que votre éditeur remplace les tabulations par des espaces ou inversement. Dans ce cas, il vous faut controller la configuration de votre éditeur de texte.
      Cordialement,

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s