musicgames
Nombre de messages : 55 Date d'inscription : 21/01/2008
| Sujet: gammes Mar 3 Fév 2009 - 9:52 | |
| J' ai fait ce petit programme pour illustrer la toute nouvelle commande MIDI_PLAY de Panoramic. On peut contruire des gammes en cliquant sur un clavier de piano, ou essayer de reconstruire une gamme aléatoire que le proramme nous propose. - Code:
-
DIM I,K,Gammes%(5,8),GammeAlea%(8),NoteSel%,NotesX%(13),NotesNatX%(8),NotesNat%(8),GammeChr%(13) DIM NotesXY%(2,13),ActionGamme%
LABEL NvGamme,JouerGammeAlea,FaireGamme,JouerMaGamme LABEL AjouterNote,SupprimerNote,SupprimerToutes
WIDTH 0,800 : HEIGHT 0,600 : CAPTION 0,"gammes musicales" COLOR 0,200,200,255 : FONT_NAME 0,verdana : FONT_SIZE 0,9
BUTTON 1 : WIDTH 1,150 : HEIGHT 1,30 : CAPTION 1,"nouvelle gamme" LEFT 1,240 : TOP 1,30 : ON_CLICK 1,NvGamme
BUTTON 2 : WIDTH 2,150 : HEIGHT 2,30 : CAPTION 2,"rejouer" LEFT 2,410 : TOP 2,30 : ON_CLICK 2,JouerGammeAlea
PICTURE 3 : WIDTH 3,640 : HEIGHT 3,200 : TOP 3,200 : LEFT 3,80 ON_CLICK 3,FaireGamme
BUTTON 4 : WIDTH 4,150 : HEIGHT 4,30 : CAPTION 4,"jouer ma gamme" LEFT 4,325 : TOP 4,480 : ON_CLICK 4,JouerMaGamme
BUTTON 5 : WIDTH 5,200 : HEIGHT 5,30 : CAPTION 5,"ajouter une note" LEFT 5,85 : TOP 5,430 : ON_CLICK 5,AjouterNote
BUTTON 6 : WIDTH 6,200 : HEIGHT 6,30 : CAPTION 6,"supprimer une note" LEFT 6,295 : TOP 6,430 : ON_CLICK 6,SupprimerNote
BUTTON 7 : WIDTH 7,200 : HEIGHT 7,30 : CAPTION 7,"supprimer toutes les notes" LEFT 7,505 : TOP 7,430 : ON_CLICK 7,SupprimerToutes
PRINT_LOCATE 100,100 PRINT "une gamme est une série de notes qui montent ou descendent" PRINT_LOCATE 100,130 PRINT "écoute la gamme aléatoire et essaye de la reconstruire, en faisant la tienne" PRINT_LOCATE 100,160 PRINT "ou fais simplement ta propre gamme"
DATA 0,2,4,5,7,9,11,12 DATA 0,2,3,5,7,8,10,12 DATA 0,2,4,5,7,9,10,12 DATA 0,2,3,5,7,8,11,12 DATA 0,1,3,5,7,8,10,12
FOR I=1 TO 5 FOR K=1 TO 8 READ Gammes%(I,K) NEXT K NEXT I
DATA 0,55,105,135,185,240,295,345,375,425,455,505,560,640 FOR I=0 TO 13 READ NotesX%(I) NEXT I
DATA 0,80,160,240,320,400,480,560,640 FOR I=0 TO 8 READ NotesNatX%(I) NEXT I
DATA 1,3,5,6,8,10,12,13 FOR I=1 TO 8 READ NotesNat%(I) NEXT I
DATA 40,80,120,160,200,280,320,360,400,440,480,520,600 DATA 160,80,160,80,160,160,80,160,80,160,80,160,160
FOR I=1 TO 2 FOR K=1 TO 13 READ NotesXY%(I,K) NEXT K NEXT I
MIDI_ON
2D_TARGET_IS 3
2D_RECTANGLE 0,0,640,200 FOR I=1 TO 12 2D_LINE 80*I,0,80*I,200 NEXT I 2D_FILL_COLOR 0,0,0 2D_RECTANGLE 55,0,105,120 2D_RECTANGLE 135,0,185,120 2D_RECTANGLE 295,0,345,120 2D_RECTANGLE 375,0,425,120 2D_RECTANGLE 455,0,505,120
2D_PEN_COLOR 255,128,0 2D_FILL_COLOR 255,128,0
INACTIVE 2
ActionGamme% = 1
END
NvGamme:
ACTIVE 2
GammeAlea%(0) = RND(4) + 1
FOR I=1 TO 8 GammeAlea%(I) = Gammes%(GammeAlea%(0),I) + 60 NEXT I GOTO JouerGammeAlea
JouerGammeAlea:
FOR I=1 TO 8 MIDI_PLAY GammeAlea%(I),4 NEXT I
RETURN
FaireGamme:
IF (MOUSE_Y_LEFT_DOWN(3) <= 120) FOR I=1 TO 13 IF (MOUSE_X_LEFT_DOWN(3) > NotesX%(I-1)) AND (MOUSE_X_LEFT_DOWN(3) <= NotesX%(I)) NoteSel% = I END_IF NEXT I ELSE FOR I=1 TO 8 IF (MOUSE_X_LEFT_DOWN(3) > NotesNatX%(I-1)) AND (MOUSE_X_LEFT_DOWN(3) <= NotesNatX%(I)) NoteSel% = NotesNat%(I) END_IF NEXT I END_IF IF (ActionGamme% = 1) GammeChr%(NoteSel%) = 1 2D_PEN_COLOR 255,128,0 2D_FILL_COLOR 255,128,0 END_IF IF (ActionGamme% = 2) GammeChr%(NoteSel%) = 0 2D_PEN_COLOR 0,0,0 2D_FILL_COLOR 0,0,0 FOR I=1 TO 8 IF NoteSel% = NotesNat%(I) 2D_PEN_COLOR 255,255,255 2D_FILL_COLOR 255,255,255 END_IF NEXT I END_IF 2D_CIRCLE NotesXY%(1,NoteSel%),NotesXY%(2,NoteSel%),20
MIDI_PLAY 59 + NoteSel%,8 RETURN
JouerMaGamme:
FOR I=1 TO 13 IF (GammeChr%(I) = 1) THEN MIDI_PLAY 59+I,6 NEXT I
RETURN
AjouterNote:
ActionGamme% = 1
RETURN
SupprimerNote:
ActionGamme% = 2
RETURN
SupprimerToutes:
2D_PEN_COLOR 0,0,0 2D_FILL_COLOR 255,255,255 2D_RECTANGLE 0,0,640,200 FOR I=1 TO 12 2D_LINE 80*I,0,80*I,200 NEXT I 2D_FILL_COLOR 0,0,0 2D_RECTANGLE 55,0,105,120 2D_RECTANGLE 135,0,185,120 2D_RECTANGLE 295,0,345,120 2D_RECTANGLE 375,0,425,120 2D_RECTANGLE 455,0,505,120 FOR I=1 TO 13 GammeChr%(I) = 0 NEXT I
RETURN
| |
|