Retour Suite
sylvainmahe.site LE SITE de Sylvain Mahé contact@sylvainmahe.site
Article : Sylvain Mahé contact@sylvainmahe.site Jouer des sons avec SoundWrite.h Lorsque l'on développe un projet demandant une interface entre l'homme et la machine, il est généralement indispensable de pouvoir communiquer des informations à l'utilisateur à l'aide d'une interface sonore via un buzzer ou un haut-parleur, c'est ce que permet d'effectuer la classe SoundWrite.h. Avec SoundWrite.h il est possible très simplement de générer des sons de la fréquence et de la durée souhaitée, ainsi que de créer des mélodies grâce au principe d'ajout séquentiel de notes dans ce qui s'apparente à une partition. Exemple pour jouer un son avec SoundWrite.h : #include "../module/1284p/SoundWrite.h" int main() { SoundWrite::pin (1); SoundWrite::play (440, 1000); while (true) { } return 0; } Dans l'exemple ci-dessus, l'instance de la classe SoundWrite.h appelle la fonction statique pin, qui prend en paramètre 1, le numéro du port (ou broche) de l'automate sur lequel est connecté un périphérique audio (buzzer, haut-parleur, etc...). À la suite la fonction statique play est appelée, elle prend un 1er paramètre 440 qui est le choix de la fréquence en Hertz du son qui va être joué (ici un "la" conventionnel à 440Hz), et un 2ème paramètre 1000 qui défini la durée de lecture de cette sonorité exprimée en millisecondes. Même si vous n'avez pas besoin d'exécuter des instructions dans la boucle while, cette dernière reste importante car elle permet au microcontrôleur de continuer l'exécution du code (qui met en fonction l'oscillateur piloté par la classe SoundWrite.h). Dans le cas contraire, l'exécution terminerait après return 0;, et le microcontrôleur s'arrêterait là de sorte qu'aucun son n'aurait le temps d'être entendu ! Ports des automates programmables concernés par la génération de sons : Automate programmable MODULABLE M20 :
- Port 1 (PD0)
- Port 2 (PD1)
- Port 3 (PD2)
- Port 4 (PD3)
- Port 5 (PD4)
- Port 6 (PD5)
- Port 7 (PD6)
- Port 8 (PD7)
- Port 9 (PB0)
- Port 10 (PB1)
- Port 11 (PB2)
- Port 12 (PB3)
- Port 13 (PB4)
- Port 14 (PB5)
- Port 15 (PC0)
- Port 16 (PC1)
- Port 17 (PC2)
- Port 18 (PC3)
- Port 19 (PC4)
- Port 20 (PC5)

Automate programmable MODULABLE M32 :
- Port 1 (PB0)
- Port 2 (PB1)
- Port 3 (PB2)
- Port 4 (PB3)
- Port 5 (PB4)
- Port 6 (PB5)
- Port 7 (PB6)
- Port 8 (PB7)
- Port 9 (PD0)
- Port 10 (PD1)
- Port 11 (PD2)
- Port 12 (PD3)
- Port 13 (PD4)
- Port 14 (PD5)
- Port 15 (PD6)
- Port 16 (PD7)
- Port 17 (PC0)
- Port 18 (PC1)
- Port 19 (PC2)
- Port 20 (PC3)
- Port 21 (PC4)
- Port 22 (PC5)
- Port 23 (PC6)
- Port 24 (PC7)
- Port 25 (PA7)
- Port 26 (PA6)
- Port 27 (PA5)
- Port 28 (PA4)
- Port 29 (PA3)
- Port 30 (PA2)
- Port 31 (PA1)
- Port 32 (PA0)
Jouer une mélodie : Comme évoqué plus haut, il est possible avec la classe SoundWrite.h de jouer une suite séquentielle de sonorités par le simple ajout de notes à une partition virtuelle. Exemple pour créer et jouer une mélodie avec SoundWrite.h : #include "../module/1284p/SoundWrite.h" int main() { SoundWrite::pin (1); SoundWrite::add (200, 250); SoundWrite::add (400, 250); SoundWrite::add (800, 250); SoundWrite::add (1200, 250); SoundWrite::add (0, 500); SoundWrite::add (800, 500); SoundWrite::add (400, 500); SoundWrite::play (0, 0); while (true) { } return 0; } Dans la même logique que l'exemple précédent, après avoir défini le numéro du port (à l'aide de la fonction pin) qui sera utilisé pour générer des sons, une fonction add est appelée autant de fois qu'il est nécessaire d'ajouter des sons (ou notes), et prend les mêmes paramètres que la fonction play (fréquence et durée), seul la finalité est différente. En effet avec play le son est immédiatement joué, alors qu'avec add les sons sont stockés les uns à la suite des autres, après quoi la partition ainsi créée sera jouée en appelant la fonction play avec en paramètres une fréquence et une durée égales à 0. À noter qu'un maximum de 64 notes consécutives (avant l'appel à la fonction play) peuvent être créées, ce qui pourra répondre au besoin de la majorité des projets. Il est possible de créer des blancs (temps morts), c'est-à-dire des moments dans la mélodie où aucune sonorité n'est jouée. Pour se faire il suffit simplement d'indiquer une fréquence égale à 0 lors de l'appel à la fonction add. Il existe également une fonction modulate, permettant de moduler la fréquence du son en cours de lecture (pour créer un son d'une durée non définie avec la fonction play, indiquez une durée égale à 0), et également une fonction stop, qui a pour but d'arrêter la lecture des sons immédiatement et de vider la partition virtuelle. Récapitulatif des fonctions de cette classe : static void pin (const unsigned char PIN); static void play (const unsigned int FREQUENCY, const unsigned int DURATION); static void add (const unsigned int FREQUENCY, const unsigned int DURATION); static void modulate (const unsigned int FREQUENCY); static void stop();