Piano électrique

Le plus simple est de partir des fichiers clavier.c et son.c avec bien sur le Makefile associé. Vous trouverez ces fichiers dans le répertoire /root/RTAI des machines en TP.

Génération du son

Le son est généré par une tâche de période 1/8192 secondes.

Le ``haut-parleur'' interne du PC ne peut être que dans 2 états 0 ou 1 (il ne peut donc générer que des crénaux et pas de jolies sinusoïdes). Si vous le laissez toujours à 0 ou toujours à 1 vous n'entendrez rien car le son est une vibration. Dans la suite les temps sont exprimés en 1/8192èmes de secondes. Soient :

Pour générer la note de période p, on donne au haut-parleur la valeur (2t)/p & 1. Comme on se limite à des valeurs entières, la fréquence la plus élevée est donc de 4096Hz.

Pour simuler la sortie de plusieurs notes simultanées, on fait un ou exclusif entres les différentes valeurs à donner au haut-parleur : ((2t)/p1 & 1) ^ ((2t)/p2 & 1) ^ ...

Le programme son.c génère une fréquence fixe de 4096Hz.

Lecture de la touche enfoncée

L'appel de fonction inb(0x60) Vous retourne le scancode du clavier.

Les 7 bits de poids faibles représentent le code de la touche. Le bit de poids fort est à 0 si la touche appuyée et à 1 quand elle est relachée.

Si il y a un appui sur la touche 23 puis 18 puis on relache 23 puis 18, on recevra la séquence : 23, 23, ... 23, 23, 18, 18, ... 128+23, 128+23, .... 128+23, 128+18, ...

Réalisation 1 : liste des touches enfoncées.

Commencez par intégrer le fichier clavier.c dans son.c afin que les touches appuyées et relachées soient affichées pendant qu'il y a le son.

Ensuite modifiez le programme afin qu'il garde dans un tableau (variable globale) la liste des scancodes des touches actuellement enfoncées.

Réalisation 2 : Piano électrique

Vous réalisez le piano électrique qui génère un son fonction des touches enfoncées.

Travail à rendre

Vous devez rendre vos sources, vos commentaires sur le fonctionnement du programme et sur les problèmes que vous avez rencontrés au début de la troisième séance de TP.


Thierry EXCOFFIER
Last modified: Wed May 7 10:26:15 CEST 2008