Delphi - HB9BZA

Transcription

Delphi - HB9BZA
Delphi : Projet Musique
Objectif de ce projet, réaliser un programme qui va permettre de jouer des sons soit
à l’aide de la souris, soit à l’aide du clavier.
Voici la première interface à réaliser
A l'aide des fiches précédentes, toutes présentes dans ton cahier, réalise tout ce
que tu peux de cette interface, dépose et personnalise les composants que tu
connais déjà.
Laisse libre court à ton imagination pour donner à l’interface l’aspect qui te convient
(couleurs, police, etc…), mais respecte les lettres en dessous des notes, cela
t'évitera passablement de travail plus tard. N'oublie pas d'enregistrer régulièrement
ton projet.
Une fois que tu es arrivé au bout de tes connaissances, lis attentivement la suite de
ce document et essaye de réaliser tes premiers boutons musicaux.
Une fois n’est pas coutume, nous allons modifier la propriété « Name » des boutons,
afin de les retrouver plus facilement.
Tout comme pour le « Caption », cliquer sur la propriété Name et nommer le
bouton de manière claire (par exemple : Button3Si pour le bouton du Si de la
troisième octave)
La partie la plus facile de l’interface est maintenant réalisée.
Réfléchi maintenant à ce qu’il faut faire pour que le programme puisse jouer de la
musique !
Delphi Projet Sons page 1
GE / 04_Projet_Gestion_Son.doc
Imprimé, le 13 janvier 2004
Le son dans Windows et donc dans Delphi
Il faut se souvenir que chaque son est en fait une fréquence (vibration), plus cette
fréquence est élevée, plus le son est aigu. Une deuxième composante fait que le son
est court ou long, c’est la durée.
Windows possède une fonction qui permet de reproduire des sons en fonction de ces
deux composantes, elle a cette « forme » :
Windows.Beep(fréquence en Hz, durée en milliseconde)
C'est cette fonction que nous allons utiliser dans notre programme.
Une des solutions pour attribuer le son à un bouton est de :
1
double cliquer sur le bouton concerné
2
écrire cette commande dans la procédure en indiquant la bonne
fréquence et la bonne durée.
Par exemple pour le premier Do : Windows.Beep(262,500) ;
La durée standard est de 500 millisecondes
Le tableau des fréquences est le suivant :
Octave
Do
Do#
Ré
Ré#
Mi
Fa
Fa#
Sol Sol#
La
La#
Si
1ère
65
69
73
78
83
87
92
98
104
110
117
123
2ème
131
139
147
156
165
175
185
196
208
220
233
247
3ème
262
277
294
311
330
349
370
392
415
440
466
494
4ème
523
554
587
622
659
698
740
784
831
880
932
988
5ème
1047
1109
1175
1245
1319
1397
1480
1568
1661
1760
1865
1976
6ème
2093
2217
2349
2489
2637
2794
1960
3136
3322
3520
3729
3951
7ème
4186
4435
4699
4978
5274
5588
5920
6272
6645
7040
7459
7902
8ème
8372
8870
9397
9956
10548 11175 11840 12544 13290 14080 17917 15804
Réalise ce travail pour la troisième octave (cadre noir, les premières notes de Do à
Si) de notre interface.
Si tu as le temps et surtout afin que ton programme soit presque conforme à un
piano, rajoute les notes intermédiaires (celle dans les colonnes en gris).
N'est-ce pas un peu fastidieux ? Ne pourrait-il pas y avoir une solution plus simple ?
Essaye également de réfléchir comment associer les sons que tu viens de définir à
une touche du clavier et comment associer une mélodie à un bouton !
Note toutes tes idées sur une feuille de papier !
Delphi Projet Sons page 2
GE / 04_Projet_Gestion_Son.doc
Imprimé, le 13 janvier 2004
Si tu as eu le temps, voici ce à quoi pourrait ressembler ton interface à ce point du
développement
Réponses aux questions de la page 2
Il serait en effet plus simple de créer des procédures pour chaque note de musique,
cela permettrait de les associer à un bouton, à une touche et de composer plus
facilement une procédure.
Voici comment faire :
1)
Il faut tout d'abord indiquer à Delphi qu'il va pouvoir utiliser une nouvelle
procédure "personnelle".
Cela se fait dans la zone entre var et Implementation
Pour chaque procédure que tu vas créer, il te faut rajouter une ligne
semblable à celle ci-dessous (de la même manière que nous avions
déclaré des variables lors du précédent projet
var
Form1: TForm1;
procedure do4;
procedure re4;
procedure mi4;
procedure fa4;
procedure sol4;
procedure la4;
procedure si4;
Exemples pouvant être utilisés, où :
procedure indique que l'on va créer
un petit programme
utilisable
do4
est le nom de ce
programme, ici il se référe
à la note do de la
quatrième octave
implementation
2)
Il faut ensuite créer cette procédure
Cela se fait dans la zone comprise entre {$R *.dfm} et end.
Il faut retaper les phrases ci-dessous pour chaque procédure déclarée au
point 1
procedure do4;
begin
windows.Beep(523, 500);
end;
Delphi Projet Sons page 3
GE / 04_Projet_Gestion_Son.doc
Imprimé, le 13 janvier 2004
3)
Associer une note à un bouton
Dès lors il suffit de rajouter dans la procédure associée au bouton
d'indiquer le nom de la procédure à exécuter. Par exemple pour le Do de la
quatrième octave, cela pourrait ressembler à cela :
procedure TForm1.Button4doClick(Sender: TObject);
begin
do4;
end;
4)
Associer une mélodie à un bouton
Dès lors il suffit de rajouter un composant bouton,
de lui associer une procédure et de noter dans la procédure toutes les
notes en suivant qui composent cette mélodie
Pour le début de Frère Jacques
Do3;Re3;Mi3;Do3;Do3;Re3;Mi3;Do3;Mi3;Fa3;Sol3;Mi3;Fa3;Sol3;……
5)
Associer une procédure à l'appui sur une touche du clavier
Il faut indiquer à Delphi que l'appui sur une touche va devoir exécuter une
procédure. Mais avant cela il indiquer à la fiche que l'on veut tester le
clavier.
a. Cliquer n'importe où dans la fiche
b. Affecter la valeur True à la propriété KeyPreview
c. Sélectionner l'onglet Evénements dans l'inspecteur d'objet
d. Double-cliquer dans la case à coté du choix OnKeyPress
e. Recopier la procédure suivante en l'adaptant à votre situation
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key ='a' then windows.Beep(262, 500);
if Key = 'A' then windows.Beep(262, 500);
if (Key = 'd') or (Key = 'D') then Windows.Beep(294,500);
end;
C'est tout ce que tu as besoin de savoir pour terminer ton interface et essayer de
créer ta, tes premières mélodies.
Bon courage, et n'oublie pas : une note sera mise sur la qualité (aspect visuel,
disposition des éléments) de ton interface, sur son fonctionnement, ainsi que sur la
qualité de la page de code (Unit.pas).
Delphi Projet Sons page 4
GE / 04_Projet_Gestion_Son.doc
Imprimé, le 13 janvier 2004
Pour les plus rapides
Voici ce qu'il faut faire pour rajouter une image dans notre interface et rendre les
touches réactives.
Ajouter une image :
1) Rajouter un composant Image de l'onglet Supplément
2) Le déposer sur l'interface en lui donnant une
certaine dimension, celle-ci pourra être
adaptée par la suite à l'aide des poignées
3) Pour associer une image à ce composant, double cliquer sur la propriété
Image de ce composant, puis dans la nouvelle fenêtre qui s'est ouverte,
cliquer sur le bouton
4) Choisir dans votre dossier le fichier clavier.jpg
5) Adapter la taille du composant à celui de l'image (562x151)
Pour pouvoir rendre les touches réactives
On va créer cette illusion en utilisant des composant label que l'on rendra
transparents.
1) Ajouter un label par touche en prenant soin de le dimensionner avec le plus
de précision possible (utiliser la touche Alt en même temps que vous
dimensionnez le Label)
2) Mettre la valeur True à la propriété Transparent
la valeur False à la propriété AutoSize
et une couleur de votre choix à la propriété Color
(cette couleur ne s'affichera pas dans un premier temps)
3) Effacer son Caption,
changer son nom (propriété Name) pour pouvoir l'identifier plus facilement
(par exemple Label3Fa pour touche correspondante au Fa de la 3ème octave)
Pour associer une note à cette touche
1) Double cliquer sur le Label
dans la procédure qui s'ouvre donner le nom de la procédure jouant la bonne
note (dans notre exemple Fa3;)
Delphi Projet Sons page 5
GE / 04_Projet_Gestion_Son.doc
Imprimé, le 13 janvier 2004
Pour rendre la touche colorée et que le nom de la note s'affiche au
passage de la souris
Pour cela il faut modifier différentes propriétés à la volée, tout cela se fait dans deux
procédures (la première lorsque la souris arrive sur la touche (OnMouseEnter), la
seconde lorsque la souris quitte la touche (OnMouseLeave). Pour atteindre ces
procédures on passera par l'onglet Evénements de l'Inspecteur d'Objets.
1) double cliquer sur la case à droite de l'événement OnMouseEnter
2) Dans la procédure qui s'ouvre taper la ligne suivante :
label3Fa.Transparent := false;label3Fa.Caption := 'Fa3';
La première partie rend le label "opaque" et la deuxième partie donne la
valeur 'Fa3' à la propriété Caption que nous avons effacée plus tôt.
3) double cliquer sur la case à droite de l'événement OnMouseLeave
4) Dans la procédure qui s'ouvre taper la ligne suivante :
label3Fa.Transparent := true;label3Fa.Caption := '';
La première partie rend le label "transparent" et la deuxième partie redonne
une valeur "vide" '' (2 apostrophes sans espaces) à la propriété Caption.
Et voilà il ne vous reste qu'à répéter toutes ces opérations (depuis le sous titre Pour
pouvoir rendre les touches réactives) pour chaque touche, c'est un travail long et
fastidieux, mais le résultat en vaut la peine !!
Version terminée de l'interface proposée
Delphi Projet Sons page 6
GE / 04_Projet_Gestion_Son.doc
Imprimé, le 13 janvier 2004