Outils pour utilisateurs

Outils du site


issue124:python

Ceci est une ancienne révision du document !


Python dans le monde réel

Le mois dernier, je vous ai donné des informations de base sur la bibliothèque GPIOZERO en préparation du programme de boîte à musique qui utilise le RPi, le MCP3008 du mois dernier, trois potentiomètres et un certain nombre d'interrupteurs pour faire un lecteur de musique simple. Le cœur du projet est le programme Fluidsynth. Michaël Horne a été très aimable de me laisser parler de son projet. Le projet original peut être trouvé à http://www.recantha.co.uk/blog/?p=14818 et son code est sur https://github.com/recantha/musicbox.

Le projet de Michaël comprend un boîtier, un amplificateur et un haut-parleur, mais je ne m'en suis pas préoccupé, car il s'agit d'un présentation du RPi. Je vous laisserai traiter ces sujets. J'utilise la sortie audio HDMI et tout marche bien, à l'exception d'être attachée à l'écran par le câble HDMI.

La première chose que vous devez faire est d'installer Fluidsynth à partir du programme Ajouter/Supprimer du RPi. Ensuite, vous avez besoin d'ajouter la bibliothèque Python pyfluidsynth. Vous pouvez le faire en utilisant pip dans un terminal.

pip install pyfluidsynth

Je pars du principe que vous avez installé la bibliothèque GPIOZERO le mois dernier.

J'espère que vous avez toujours le convertisseur analogique/numérique MCP3008 câblé comme pour le projet de potentiomètre du mois précédent. Sinon, tout n'est pas perdu. Vous pouvez utiliser le schéma Fritzing ci-contre.

Liste de pièces

Pour ce projet, vous avez besoin :

• du Raspberry Pi • d'une plaque d'essai • de cavaliers • du MCP3008 • d'une LED • d'une résistance de 220 Ω • de 3 potentiomètres de 10 kΩ • de 9 boutons-poussoirs

Les potentiomètres ont tous une patte reliée à la masse, une au 3,3 Vdc et le curseur connecté aux bornes 1, 2, 3 du MCP3008. Les poussoirs ont tous une sortie branchée à la masse, et les autres connectées aux picots 5, 23, 13, 6, 12, 16, 19, 20 et 21 du GPIO (bornes physiques 29, 16, 33, 31, 32, 36, 35, 38 et 40) . La cathode de la LED est connectée à la masse et l'anode à une des extrémités de la résistance de 220 Ω, tandis que l'autre bout de la résistance est relié à la borne 24 du GPIO (Picot physique 18).

Le code

Le code est assez long ; aussi, je ne vais pas l'inclure ici. Cependant, je mettrai divers extraits pour présenter certains des segments les moins usuels. Je me baladerai aussi dans le code pour mettre en avant certains points. Je suggère fortement que vous récupériez le code de la page github de Michaël. Il comprend aussi des polices sonores pour le tester.

Bien sûr, la première chose que fait Michaël, ce sont les imports …

from future import division

from gpiozero import Button, MCP3008, LED

import glob import os import re import time import fluidsynth

La seule bibliothèque qui pourrait ne pas vous être connue est celle de « glob ». Cette bibliothèque vous permet de faire correspondre les noms de fichiers à un modèle. C'est simple mais très puissant.

Ensuite, il charge FluidSynth.

# Démarrage de Synth et chargement de la police sonore

fs = fluidsynth.Synth() fs.start(driver='alsa')

Maintenant, voici la section de définition du poussoir. Souvenez-vous que les numéros de picots correspondent aux picots du GPIO, et pas aux numéros des picots physiques.

# Paramétrage des poussoirs pour la remise à zéro et l'arrêt

button_reset = Button(5) button_shutdown = Button(23)

# Paramétrage des poussoirs du clavier

thumb_bottom = Button(13) thumb_top = Button(6) thumb_right = Button(12) index_finger = Button(16) middle_finger = Button(19) ring_finger = Button(20) pinky_finger = Button(21)

Maintenant, il définit quel potentiomètre est actif sur quel canal du MCP3008. (J'ai ajouté les commentaires de cette partie.)

# Définition des potentiomètres

pot0 = MCP3008(channel=2) # Contrôle du volume

pot1 = MCP3008(channel=1) # Sélection de l'instrument

pot2 = MCP3008(channel=0) # Changement d'octave (« Additor »)

La routine load_soundfonts() (en haut à droite) va traverser la bibliothèque soundfonts, en récupérant les noms des fichiers de polices sonores dans un liste utilisable. Les fichiers source de Michaël comprennent 15 échantillons de polices sonores.

La routine suivante (page précédente, en bas à droite) paramétrera l'instrument pour la synthèse sur la base de la valeur du potentiomètre n°1 qui, comme nous le voyons plus haut, est le canal n°1 du MCP3008.

Voici là où Michaël paramètre les actions pour chacun des poussoirs musicaux. De base, il y a les actions « when-pressed » (si appuyé) et « when-released » (si relâché) qui appellent une routine quand l'action est effectuée.

# Assignation des actions quand un des poussoirs est appuyé

thumb_bottom.when_pressed = thumb_bottom_start thumb_bottom.when_released = thumb_bottom_stop thumb_right.when_pressed = thumb_right_start thumb_right.when_released = thumb_right_stop thumb_top.when_pressed = thumb_top_start thumb_top.when_released = thumb_top_stop index_finger.when_pressed = index_finger_start index_finger.when_released = index_finger_stop middle_finger.when_pressed = middle_finger_start middle_finger.when_released = middle_finger_stop ring_finger.when_pressed = ring_finger_start ring_finger.when_released =ring_finger_stop pinky_finger.when_pressed = pinky_finger_start pinky_finger.when_released = pinky_finger_stop

En examinant ce que fait la routine d'action du poussoir de l'index, nous voyons ce qui est montré en haut à droite…

La façon dont les choses fonctionnent sur un synthétiseur est que, quand une touche est appuyée, un événement noteon est appelé et quand elle est relâchée, un événement noteoff est appelé. (c'est pourquoi, parfois, quand vous écoutez un fichier midi sur un ordinateur, vous avez des notes qui semblent être accidentellement en appui permanent, les laissant jouer sans fin) !l'événement noteoff n'est jamais lu par le synthétiseur logiciel.) En faisant cela, vous pouvez jouer des cordes. Elles sont généralement répétées pour chacun des poussoirs qui contrôlent les notes à jouer. Notez aussi que la valeur de l'« additor » est ajoutée à la note elle-même. Ceci vous permet de disposer des sept notes sur plusieurs octaves.

Dans les lignes suivantes, Michaël définit la note de chaque poussoir.

thumb_bottom_note = 54 thumb_right_note = 56 thumb_top_note = 58 index_finger_note = 60 middle_finger_note = 62 ring_finger_note = 64 pinky_finger_note = 66

Je pense que ceci vous donne une compréhension de base de ce que fais le code ; aussi, vous pouvez poursuivre et jouer avec le projet.

Une fois encore, merci à Michaël pour ce projet.

Jusqu'à la prochaine fois, amusez-vous bien.

issue124/python.1503904782.txt.gz · Dernière modification : 2017/08/28 09:19 de d52fr