logo admiroutes Les automates intelligents
robotique, vie artificielle, réalité virtuelle


information, réflexion, discussion
logo automate © Anne Bedel
Jean-Paul Baquiast Jean-Paul.Baquiast@wanadoo.fr
Christophe Jacquemin christophe.jacquemin@admiroutes.asso.fr

32
Retour au sommaire
Programmer en legOS
(n°6)
La rubrique des passionnés Lego Mindstorms
Brique RCX
par Nanobapt nanobapt@nordnet.fr
http://home.nordnet.fr/%7Emdenayer/
(avec les conseils de Christophe Jacquemin)
30/05/02

NDLR : il est conseillé au lecteur un minimum de base en programmation et langage C. Sinon, il existe de bons bouquins en la matière ou des sites web traitant de la question - par exemple http://www.inf.enst.fr/~charon/CFacile/.

Voyons ici l'utilisation du son sous legOS. Bien que non vraiment nécessaire, il peut être cependant amusant de l'utiliser. De plus, il est assez simple de le mettre en pratique : alors pourquoi s'en priver ?

Voici un petit exemple qui vous permettra de mieux comprendre. Celui-ci permet de jouer le générique de James Bond, pas très ressemblant, admettons-le :

/*sound.h*/

#include <dsound.h>

static const note_t James_Bond[ ] = {

{PITCH_E1, HALF},
{PITCH_Fm1, WHOLE},
{PITCH_Fm1, WHOLE},
{PITCH_Fm1, HALF},
{PITCH_Fm1, QUARTER},
{PITCH_E1, HALF},
{PITCH_E1, HALF},
{PITCH_E1, HALF},
{PITCH_G1, HALF},
{PITCH_G1, WHOLE},
{PITCH_G1, WHOLE},
{PITCH_G1, HALF},
{PITCH_G1, QUARTER},
{PITCH_Fm1, HALF},
{PITCH_Fm1, HALF},
{PITCH_Fm1, HALF},
{PITCH_E1, HALF},
{PITCH_Fm1, WHOLE},
{PITCH_Fm1, WHOLE},
{PITCH_Fm1, HALF},
{PITCH_Fm1, QUARTER},
{PITCH_E1, HALF},
{PITCH_E1, HALF},
{PITCH_E1, HALF},
{PITCH_G1, HALF},
{PITCH_G1, WHOLE},
{PITCH_G1, WHOLE},
{PITCH_G1, HALF},
{PITCH_G1, QUARTER},
{PITCH_Fm1, HALF},
{PITCH_Fm1, HALF},
{PITCH_Fm1, HALF,
{PITCH_END, 0}


};


int main()

{
dsound_set_duration(20);

dsound_play(James_Bond);
wait_event(dsound_finished, 0);

return 0;
}

Notons tout d'abord que tout ce qui concerne le son se trouve dans la bibliothèque dsound.h (On rajoutera les information que l'on peut trouver dans la bibliothèque dsound.h qui seront utiles à tous les compositeur de RCX's music).

Les notes de musique doit être déclarées dans un tableau de type note_t. Remarquons ici que la déclaration de la musique James_Bond[ ] n'a pas de valeur entre les crochets : ceci évite de donner la taille du tableau.
Après avoir déclaré votre tableau de notes*, il faut le jouer ; mais avant cela il faut déclarer la durée d'une noire pour en déduire la durée des autres notes (rappelons que la noire est au solfège ce que le beurre est aux épinards..)
Pour jouer la musique, il faut donc appeler la fonction dsound_play(le_nom_de_votre_musique).
Pour continuer le programme, il est conseillé de mettre la fonction wait_event(dsound_finished, 0) ce qui aura pour effet d'attendre la fin de la musique.

*L'écriture employée est ici l'écriture américaine : A=la, B= si, C=do, D=ré, E=mi, F=F, G=sol
Le 1 après les lettres donne la hauteur du son considéré (voir tableau ci-dessous, ou le chiffre peut aller de 0 à 8, c'est à dire du plus grave vers le plus aigu) : Ex : PITCH_F1 : il s'agit du fa grave ; PITCH_F8 : il s'agit d'un fa super aigu...

Definition diverses :

#define PITCH_PAUSE
#define PITCH_MAX
#define PITCH_END
97
98
255

Definitions de la durée
de chaque note
Note possible
#define WHOLE
#define HALF
#define QUARTER
#define EIGHTH
16
8
4
2

#define PITCH_A0
#define PITCH_Am0
#define PITCH_H0
#define PITCH_C1
#define PITCH_Cm1
#define PITCH_D1
#define PITCH_Dm1
#define PITCH_E1
define PITCH_F1
define PITCH_Fm1
#define PITCH_G1
#define PITCH_Gm1
#define PITCH_A1
#define PITCH_Am1
#define PITCH_H1
#define PITCH_C2
define PITCH_Cm2
#define PITCH_D2
#define PITCH_Dm2
#define PITCH_E2

.....etc, etc, etc, jusqu'à

#define PITCH_A8

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19



96


NB : le m après le nom de la note, désigne la note dièse : PITCH_Am0 : il s'agit du la dièse (la # en notation musicale)

Suite au prochain numéro où nous commencerons à aborder la communication RCX <-> RCX et RCX <-> PC


Tous les cours "Programmer en legOS"
Retour au sommaire général