Code : Tout sélectionner
EnableExplicit
; Nom des instruments GENERAL MIDI : un changement d'instrument SUR UN CANAL
; AUTRE QUE LE 10, fera jouer ce son sur la canal pour les notes suivantes.
Global Dim MIDI_Instrument$(129)
MIDI_Instrument$ (0) = "Acoustic Grand Piano"
MIDI_Instrument$ (1) = "Bright Acoustic Piano"
MIDI_Instrument$ (2) = "Electric Grand Piano"
MIDI_Instrument$ (3) = "Honky-tonk Piano"
MIDI_Instrument$ (4) = "Electric Piano 1"
MIDI_Instrument$ (5) = "Electric Piano 2"
MIDI_Instrument$ (6) = "Harpsichord"
MIDI_Instrument$ (7) = "Clavi"
MIDI_Instrument$ (8) = "Celesta"
MIDI_Instrument$ (9) = "Glockenspiel"
MIDI_Instrument$ (10) = "Music Box"
MIDI_Instrument$ (11) = "Vibraphone"
MIDI_Instrument$ (12) = "Marimba"
MIDI_Instrument$ (13) = "Xylophone"
MIDI_Instrument$ (14) = "Tubular Bells"
MIDI_Instrument$ (15) = "Dulcimer"
MIDI_Instrument$ (16) = "Drawbar Organ"
MIDI_Instrument$ (17) = "Percussive Organ"
MIDI_Instrument$ (18) = "Rock Organ"
MIDI_Instrument$ (19) = "Church Organ"
MIDI_Instrument$ (20) = "Reed Organ"
MIDI_Instrument$ (21) = "Accordion"
MIDI_Instrument$ (22) = "Harmonica"
MIDI_Instrument$ (23) = "Tango Accordion"
MIDI_Instrument$ (24) = "Acoustic Guitar (nylon)"
MIDI_Instrument$ (25) = "Acoustic Guitar (steel)"
MIDI_Instrument$ (26) = "Electric Guitar (jazz)"
MIDI_Instrument$ (27) = "Electric Guitar (clean)"
MIDI_Instrument$ (28) = "Electric Guitar (muted)"
MIDI_Instrument$ (29) = "Overdriven Guitar"
MIDI_Instrument$ (30) = "Distortion Guitar"
MIDI_Instrument$ (31) = "Guitar harmonics"
MIDI_Instrument$ (32) = "Acoustic Bass"
MIDI_Instrument$ (33) = "Electric Bass (finger)"
MIDI_Instrument$ (34) = "Electric Bass (pick)"
MIDI_Instrument$ (35) = "Fretless Bass"
MIDI_Instrument$ (36) = "Slap Bass 1"
MIDI_Instrument$ (37) = "Slap Bass 2"
MIDI_Instrument$ (38) = "Synth Bass 1"
MIDI_Instrument$ (39) = "Synth Bass 2"
MIDI_Instrument$ (40) = "Violin"
MIDI_Instrument$ (41) = "Viola"
MIDI_Instrument$ (42) = "Cello"
MIDI_Instrument$ (43) = "Contrabass"
MIDI_Instrument$ (44) = "Tremolo Strings"
MIDI_Instrument$ (45) = "Pizzicato Strings"
MIDI_Instrument$ (46) = "Orchestral Harp"
MIDI_Instrument$ (47) = "Timpani"
MIDI_Instrument$ (48) = "String Ensemble 1"
MIDI_Instrument$ (49) = "String Ensemble 2"
MIDI_Instrument$ (50) = "SynthStrings 1"
MIDI_Instrument$ (51) = "SynthStrings 2"
MIDI_Instrument$ (52) = "Choir Aahs"
MIDI_Instrument$ (53) = "Voice Oohs"
MIDI_Instrument$ (54) = "Synth Voice"
MIDI_Instrument$ (55) = "Orchestra Hit"
MIDI_Instrument$ (56) = "Trumpet"
MIDI_Instrument$ (57) = "Trombone"
MIDI_Instrument$ (58) = "Tuba"
MIDI_Instrument$ (59) = "Muted Trumpet"
MIDI_Instrument$ (60) = "French Horn"
MIDI_Instrument$ (61) = "Brass Section"
MIDI_Instrument$ (62) = "SynthBrass 1"
MIDI_Instrument$ (63) = "SynthBrass 2"
MIDI_Instrument$ (64) = "Soprano Sax"
MIDI_Instrument$ (65) = "Alto Sax"
MIDI_Instrument$ (66) = "Tenor Sax"
MIDI_Instrument$ (67) = "Baritone Sax"
MIDI_Instrument$ (68) = "Oboe"
MIDI_Instrument$ (69) = "English Horn"
MIDI_Instrument$ (70) = "Bassoon"
MIDI_Instrument$ (71) = "Clarinet"
MIDI_Instrument$ (72) = "Piccolo"
MIDI_Instrument$ (73) = "Flute"
MIDI_Instrument$ (74) = "Recorder"
MIDI_Instrument$ (75) = "Pan Flute"
MIDI_Instrument$ (76) = "Blown Bottle"
MIDI_Instrument$ (77) = "Shakuhachi"
MIDI_Instrument$ (78) = "Whistle"
MIDI_Instrument$ (79) = "Ocarina"
MIDI_Instrument$ (80) = "Lead 1 (square)"
MIDI_Instrument$ (81) = "Lead 2 (sawtooth)"
MIDI_Instrument$ (82) = "Lead 3 (calliope)"
MIDI_Instrument$ (83) = "Lead 4 (chiff)"
MIDI_Instrument$ (84) = "Lead 5 (charang)"
MIDI_Instrument$ (85) = "Lead 6 (voice)"
MIDI_Instrument$ (86) = "Lead 7 (fifths)"
MIDI_Instrument$ (87) = "Lead 8 (bass + lead)"
MIDI_Instrument$ (88) = "Pad 1 (new age)"
MIDI_Instrument$ (89) = "Pad 2 (warm)"
MIDI_Instrument$ (90) = "Pad 3 (polysynth)"
MIDI_Instrument$ (91) = "Pad 4 (choir)"
MIDI_Instrument$ (92) = "Pad 5 (bowed)"
MIDI_Instrument$ (93) = "Pad 6 (metallic)"
MIDI_Instrument$ (94) = "Pad 7 (halo)"
MIDI_Instrument$ (95) = "Pad 8 (sweep)"
MIDI_Instrument$ (96) = "FX 1 (rain)"
MIDI_Instrument$ (97) = "FX 2 (soundtrack)"
MIDI_Instrument$ (98) = "FX 3 (crystal)"
MIDI_Instrument$ (99) = "FX 4 (atmosphere)"
MIDI_Instrument$ (100) = "FX 5 (brightness)"
MIDI_Instrument$ (101) = "FX 6 (goblins)"
MIDI_Instrument$ (102) = "FX 7 (echoes)"
MIDI_Instrument$ (103) = "FX 8 (sci-fi)"
MIDI_Instrument$ (104) = "Sitar"
MIDI_Instrument$ (105) = "Banjo"
MIDI_Instrument$ (106) = "Shamisen"
MIDI_Instrument$ (107) = "Koto"
MIDI_Instrument$ (108) = "Kalimba"
MIDI_Instrument$ (109) = "Bag pipe"
MIDI_Instrument$ (110) = "Fiddle"
MIDI_Instrument$ (111) = "Shanai"
MIDI_Instrument$ (112) = "Tinkle Bell"
MIDI_Instrument$ (113) = "Agogo"
MIDI_Instrument$ (114) = "Steel Drums"
MIDI_Instrument$ (115) = "Woodblock"
MIDI_Instrument$ (116) = "Taiko Drum"
MIDI_Instrument$ (117) = "Melodic Tom"
MIDI_Instrument$ (118) = "Synth Drum"
MIDI_Instrument$ (119) = "Reverse Cymbal"
MIDI_Instrument$ (120) = "Guitar Fret Noise"
MIDI_Instrument$ (121) = "Breath Noise"
MIDI_Instrument$ (122) = "Seashore"
MIDI_Instrument$ (123) = "Bird Tweet"
MIDI_Instrument$ (124) = "Telephone Ring"
MIDI_Instrument$ (125) = "Helicopter"
MIDI_Instrument$ (126) = "Applause"
MIDI_Instrument$ (127) = "Gunshot"
; Percussions MIDI : la c'est différent : jouer SUR LE CANAL 10 la note 35 :
; fera entendre un coup d'Acoustic Bass Drum, la note 36 un coup de Bass Drum 1, etc.
; enfin ça devrait, parce que ça ne marche pas...
Global Dim MIDI_PERCU$(82)
MIDI_PERCU$ (35) = "Acoustic Bass Drum"
MIDI_PERCU$ (36) = "Bass Drum 1"
MIDI_PERCU$ (37) = "Side Stick"
MIDI_PERCU$ (38) = "Acoustic Snare"
MIDI_PERCU$ (39) = "Hand Clap"
MIDI_PERCU$ (40) = "Electric Snare"
MIDI_PERCU$ (41) = "Low Floor Tom"
MIDI_PERCU$ (42) = "Closed Hi Hat"
MIDI_PERCU$ (43) = "High Floor Tom"
MIDI_PERCU$ (44) = "Pedal Hi-Hat"
MIDI_PERCU$ (45) = "Low Tom"
MIDI_PERCU$ (46) = "Open Hi-Hat"
MIDI_PERCU$ (47) = "Low-Mid Tom"
MIDI_PERCU$ (48) = "Hi-Mid Tom"
MIDI_PERCU$ (49) = "Crash Cymbal 1"
MIDI_PERCU$ (50) = "High Tom"
MIDI_PERCU$ (51) = "Ride Cymbal 1"
MIDI_PERCU$ (52) = "Chinese Cymbal"
MIDI_PERCU$ (53) = "Ride Bell"
MIDI_PERCU$ (54) = "Tambourine"
MIDI_PERCU$ (55) = "Splash Cymbal"
MIDI_PERCU$ (56) = "Cowbell"
MIDI_PERCU$ (57) = "Crash Cymbal 2"
MIDI_PERCU$ (58) = "Vibraslap"
MIDI_PERCU$ (59) = "Ride Cymbal 2"
MIDI_PERCU$ (60) = "Hi Bongo"
MIDI_PERCU$ (61) = "Low Bongo"
MIDI_PERCU$ (62) = "Mute Hi Conga"
MIDI_PERCU$ (63) = "Open Hi Conga"
MIDI_PERCU$ (64) = "Low Conga"
MIDI_PERCU$ (65) = "High Timbale"
MIDI_PERCU$ (66) = "Low Timbale"
MIDI_PERCU$ (67) = "High Agogo"
MIDI_PERCU$ (68) = "Low Agogo"
MIDI_PERCU$ (69) = "Cabasa"
MIDI_PERCU$ (70) = "Maracas"
MIDI_PERCU$ (71) = "Short Whistle"
MIDI_PERCU$ (72) = "Long Whistle"
MIDI_PERCU$ (73) = "Short Guiro"
MIDI_PERCU$ (74) = "Long Guiro"
MIDI_PERCU$ (75) = "Claves"
MIDI_PERCU$ (76) = "Hi Wood Block"
MIDI_PERCU$ (77) = "Low Wood Block"
MIDI_PERCU$ (78) = "Mute Cuica"
MIDI_PERCU$ (79) = "Open Cuica"
MIDI_PERCU$ (80) = "Mute Triangle"
MIDI_PERCU$ (81) = "Open Triangle"
; Percussions MIDI : la même chose avec un tableau plus petit jouer sur le canal 10 la note 35+0 :
; fera entendre un coup d'Acoustic Bass Drum,
; la note 35+1 un coup de Bass Drum 1, etc.
; Global Dim MIDI_PERCU_OFFSET$(47)
; MIDI_PERCU_OFFSET$ (0) = "Acoustic Bass Drum"
; MIDI_PERCU_OFFSET$ (1) = "Bass Drum 1"
; MIDI_PERCU_OFFSET$ (2) = "Side Stick"
; MIDI_PERCU_OFFSET$ (3) = "Acoustic Snare"
; MIDI_PERCU_OFFSET$ (4) = "Hand Clap"
; MIDI_PERCU_OFFSET$ (5) = "Electric Snare"
; MIDI_PERCU_OFFSET$ (6) = "Low Floor Tom"
; MIDI_PERCU_OFFSET$ (7) = "Closed Hi Hat"
; MIDI_PERCU_OFFSET$ (8) = "High Floor Tom"
; MIDI_PERCU_OFFSET$ (9) = "Pedal Hi-Hat"
; MIDI_PERCU_OFFSET$ (10) = "Low Tom"
; MIDI_PERCU_OFFSET$ (11) = "Open Hi-Hat"
; MIDI_PERCU_OFFSET$ (12) = "Low-Mid Tom"
; MIDI_PERCU_OFFSET$ (13) = "Hi-Mid Tom"
; MIDI_PERCU_OFFSET$ (14) = "Crash Cymbal 1"
; MIDI_PERCU_OFFSET$ (15) = "High Tom"
; MIDI_PERCU_OFFSET$ (16) = "Ride Cymbal 1"
; MIDI_PERCU_OFFSET$ (17) = "Chinese Cymbal"
; MIDI_PERCU_OFFSET$ (18) = "Ride Bell"
; MIDI_PERCU_OFFSET$ (19) = "Tambourine"
; MIDI_PERCU_OFFSET$ (20) = "Splash Cymbal"
; MIDI_PERCU_OFFSET$ (21) = "Cowbell"
; MIDI_PERCU_OFFSET$ (22) = "Crash Cymbal 2"
; MIDI_PERCU_OFFSET$ (23) = "Vibraslap"
; MIDI_PERCU_OFFSET$ (24) = "Ride Cymbal 2"
; MIDI_PERCU_OFFSET$ (25) = "Hi Bongo"
; MIDI_PERCU_OFFSET$ (26) = "Low Bongo"
; MIDI_PERCU_OFFSET$ (27) = "Mute Hi Conga"
; MIDI_PERCU_OFFSET$ (28) = "Open Hi Conga"
; MIDI_PERCU_OFFSET$ (29) = "Low Conga"
; MIDI_PERCU_OFFSET$ (30) = "High Timbale"
; MIDI_PERCU_OFFSET$ (31) = "Low Timbale"
; MIDI_PERCU_OFFSET$ (32) = "High Agogo"
; MIDI_PERCU_OFFSET$ (33) = "Low Agogo"
; MIDI_PERCU_OFFSET$ (34) = "Cabasa"
; MIDI_PERCU_OFFSET$ (35) = "Maracas"
; MIDI_PERCU_OFFSET$ (36) = "Short Whistle"
; MIDI_PERCU_OFFSET$ (37) = "Long Whistle"
; MIDI_PERCU_OFFSET$ (38) = "Short Guiro"
; MIDI_PERCU_OFFSET$ (39) = "Long Guiro"
; MIDI_PERCU_OFFSET$ (40) = "Claves"
; MIDI_PERCU_OFFSET$ (41) = "Hi Wood Block"
; MIDI_PERCU_OFFSET$ (42) = "Low Wood Block"
; MIDI_PERCU_OFFSET$ (43) = "Mute Cuica"
; MIDI_PERCU_OFFSET$ (44) = "Open Cuica"
; MIDI_PERCU_OFFSET$ (45) = "Mute Triangle"
; MIDI_PERCU_OFFSET$ (46) = "Open Triangle"
;{ DEÉCLARATIONS
; ************ ÉNUMÉRATIONS *************
Enumeration Window
#mf
#mf2
#mf3
#BLANK
EndEnumeration
Global Areset, B_WID, bien, Bout_al, Bout_fr, Bout_uk, comp_fin = 0, chaos = 0, CUR_DIR$, drapeauAI, drapeauAO, drapeauFI,
drapeauFO, drapeauFR, drapeauFR, drapeauUI, drapeauUK, drapeauUO, drapeauUSdrapeauAL, Event, gr, grmax, grmin, Igr,
igr, ijn, index.b, ix, iy, jn, Lang, on, police, Rst, Rst_w, T_Not$, Te_Ga, TX_HA, TX_LEN, XF, Xg, t_gm$, xx, yy,
event, Ty_ton, timer_val
Global m_hMidiOut.l ; handle du périphérique de sortie MIDI
Global m_MIDIOpen.b ; 1 = périphérique de sortie MIDI ouvert 0 = non ouvert
Global VelocityDown = 127
Global VelocityUp = 100
Global index, instrument, Index
Global Chann.l = 0
Global Inst.b = 80
Global Index_gam.b = 0
Global Index_Ton.b = 0
Global IDX_LAN = 0, IDX_TON = 0, IDX_GAM = 0, IDX_INS = 0, A$
CUR_DIR$ = GetCurrentDirectory()
;}
;/// INTERFACE UTILISATEUR (FENETRE, MENU, ETC ...)
#LA_FEN = 800
#HA_FEN = 600
#CA_SIZE = 20
#GD_SIZE = 16 * (#CA_SIZE + 2) + 2
#GD_YST = (#HA_FEN-#GD_SIZE) / 2
#GD_XST = (#LA_FEN-#GD_SIZE) / 2
#TXT_X = #GD_XST + #GD_SIZE / 2
#TXT_Y = #GD_YST + #GD_SIZE + 10
#CLEAR = "RESET"
Global ButtonImageBC
Global GA_SAV
;/// Déclaration des procédures
Declare DrawGrid()
Declare Exit()
Declare Midi_ChargeInstrument(Canal.b,Instrument.b)
Declare Midi_Mk_Gam()
Declare Midi_Open()
Declare Midi_PlayNote(Canal.b,Note.b,VelociteDown.b,VelociteUp.b)
Declare Midi_SendMessage(nStatus.l,nCanal.l,nData1.l,nData2.l)
Global RD_G = 0, RD_T= 0, RD_V=0, RD_I = 0
Global fontid
Global i.b
;/////// Ca commence ici
; Ouverture de la fenetre
If OpenWindow(#mf, 0, 0, #LA_FEN, #HA_FEN, "GRID_ZIK", #PB_Window_ScreenCentered | #PB_Window_TitleBar | #PB_Window_SystemMenu)
LoadFont(0,"arial.ttf", 24)
SetGadgetFont(#PB_Default, FontID(0))
SetWindowColor(#mf, RGB(70, 70, 70))
Te_Ga = TextGadget(#PB_Any, 25, 25, 500, 38, "") ;) ;, Y, Largeur, Hauteur,
SetGadgetColor(Te_Ga, #PB_Gadget_FrontColor , RGB(70, 70, 0))
SetGadgetFont(Te_Ga, FontID(0))
SetGadgetColor(Te_Ga, #PB_Gadget_FrontColor , RGB(255, 217, 0))
SetGadgetColor(Te_Ga, #PB_Gadget_BackColor , RGB(70, 70, 70))
Midi_Open()
Midi_ChargeInstrument(Chann,0)
Midi_SendMessage($B0 ,0, 7, 127) ; Volume Max !
; NOTES
For i = 48 To 60 ; (gamme chromatique de Do)
SetGadgetText(Te_Ga, "Note : "+Str(i))
Midi_PlayNote(Chann, i, VelocityDown,VelocityUp)
Delay(500)
Midi_SendMessage($B0 ,0,123,0) ; All notes off
Delay(100)
Next
;
; Volume joue un Do puis un accord de Do Majeur
For i= 50 To 125 Step 5
SetGadgetText(Te_Ga, "Volume : "+Str(i))
Midi_SendMessage($B0 ,0, 7, i)
Midi_PlayNote(Chann, 48, VelocityDown,VelocityUp)
Delay(250)
Midi_PlayNote(Chann, 48, VelocityDown,VelocityUp)
Midi_PlayNote(Chann, 52, VelocityDown,VelocityUp)
Midi_PlayNote(Chann, 55, VelocityDown,VelocityUp)
Delay(500)
Midi_SendMessage($B0 ,0,123,0) ; All notes off
Delay(100)
Next
; Instruments normaux, mais il y a des problèmes d'affichage de certains instruments ????
; joue un Do puis un accord de Do Majeur
For i= 0 To 127
SetGadgetText(Te_Ga, "Instrument : "+ Str(i) + " [" + MIDI_Instrument$(i) + "]")
Midi_ChargeInstrument(Chann, i)
Midi_PlayNote(Chann, 48, VelocityDown,VelocityUp)
Delay(250)
Midi_PlayNote(Chann, 48, VelocityDown,VelocityUp)
Midi_PlayNote(Chann, 52, VelocityDown,VelocityUp)
Midi_PlayNote(Chann, 55, VelocityDown,VelocityUp)
Delay(1000)
Midi_SendMessage($B0 ,0,123,0) ; All notes off
Delay(100)
Next
; Percussions... Ne marche pas ??? Joue des notes normales
; Chann.l = 10
; Midi_SendMessage($BA ,0, 7, 127)
;
; For i= 35 To 81
; SetGadgetText(Te_Ga, "Note : "+ Str(i) + " [" + MIDI_PERCU$(i) + "]")
;
;
; Midi_PlayNote(Chann, i, VelocityDown,VelocityUp)
;
; Delay(500)
; Midi_SendMessage($BA ,0,123,0) ; All notes off
; Next
EndIf
;- Procédures
Procedure Midi_SendMessage(nStatus.l,nCanal.l,nData1.l,nData2.l)
Protected dwFlags.l = nStatus | nCanal | (nData1 << 8) | (nData2 << 16)
Protected temp.l = midiOutShortMsg_(m_hMidiOut,dwFlags);
dwFlags.l = nStatus | nCanal | (nData1 << 8) | (nData2 << 16)
temp.l = midiOutShortMsg_(m_hMidiOut,dwFlags);
If temp<>0
;MessageRequester("Problème", "Erreur dans l'envoi du message MIDI",0)
EndIf
EndProcedure
Procedure Midi_Open()
If m_MIDIOpen = 0
If midiOutOpen_(@m_hMidiOut,0,0,0,0) <> 0
;MessageRequester("Problème", "Impossible d'ouvrir le périphérique MIDI",0)
Else
; Midi_SendMessage($c0,0,0,0)
; Midi_SendMessage($B1 ,0,75,0)
m_MIDIOpen = 1
EndIf
EndIf
EndProcedure
Procedure Midi_PlayNote(Canal.b,Note.b,VelociteDown.b,VelociteUp.b)
If m_MIDIOpen = 0
Midi_Open()
EndIf
If m_MIDIOpen = 1
Midi_SendMessage($80 | Canal,0,Note,VelociteDown)
Midi_SendMessage($90 | Canal,0,Note,VelociteUp)
EndIf
EndProcedure
Procedure Midi_ChargeInstrument(Canal.b,Instrument.b)
If m_MIDIOpen = 0
Midi_Open()
EndIf
If m_MIDIOpen = 1
Midi_SendMessage($c0 | Canal,0,Instrument,0)
EndIf
EndProcedure
"Accessoirement" comment transformer un entier long en une chaine de caractère hexa ?
.