telechargeable ici :
http://michel.dobro.free.fr/download.php?view.18
cette librairie , permet d'utiliser de façon plus 'clair' le Midi
partant du constat que la majorité des cartes sons , gèrent le Midi
et que j'aime bien sonoriser les applications (ouverture/fermeture des fenêtres etc ...)
je me suis mis en quette de créer quelques fonctions qui permettent la mise en oeuvre du Midi
la doc est fourni , ainsi que l'installateur/désinstallateur
je vais mettre ici quelques exemples :
sonorisation de l'ouverture/fermeture d'une fenetre :
; ******** initialisation obligatoire ***********
Declare son_ouverture()
Declare son_fermeture()
Enumeration 35
#Acoustic_Bass_Drum
#Bass_Drum_1
#Side_Stick
#Acoustic_Snare
#Hand_Clap
#Electric_Snare
#Low_Floor_Tom
#Closed_Hi_Hat
#High_Floor_Tom
#Pedal_Hi_Hat
#Low_Tom
#Open_Hi_Hat
#Low_Mid_Tom
#Hi_Mid_Tom
#Crash_Cymbal_1
#High_Tom
#Ride_Cymbal_1
#Chinese_Cymbal
#Ride_Bell
#Tambourine
#Splash_Cymbal
#Cowbell
#Crash_Cymbal_2
#Vibraslap
#Ride_Cymbal_2
#Hi_Bongo
#Low_Bongo
#Mute_Hi_Conga
#Open_Hi_Conga
#Low_Conga
#High_Timbale
#Low_Timbale
#High_Agogo
#Low_Agogo
#Cabasa
#Maracas
#Short_Whistle
#Long_Whistle
#Short_Guiro
#Long_Guiro
#Claves
#Hi_Wood_Block
#Low_Wood_Block
#Mute_Cuica
#Open_Cuica
#Mute_Triangle
#Open_Triangle
EndEnumeration
MIDIOpen() ; ouvre le midi
; *****************************************
son_ouverture()
If openwindow (0, 100, 200, 320, 200, "PureBasic Window" , #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget )
Repeat
Event = waitwindowevent ()
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
son_fermeture()
End ; All the opened windows are closed automatically by PureBasic
Procedure son_ouverture()
vitesse=250
For i=1 To 2 ; utilisation d'une boucle
Midi_batterie( #Side_Stick , "double_croche" ,127,127,vitesse)
Midi_batterie( #Closed_Hi_Hat , "double_croche" ,127,127,vitesse)
Next i
Midi_batterie( #Crash_Cymbal_1 , "noire" ,127,127,vitesse)
EndProcedure
Procedure son_fermeture()
vitesse=250
For i=1 To 2 ; utilisation d'une boucle
Midi_batterie( #Closed_Hi_Hat , "double_croche" ,127,127,vitesse)
Midi_batterie( #Acoustic_Snare , "double_croche" ,127,127,vitesse)
Next i
Midi_batterie( #Long_Whistle , "blanche" ,127,127,vitesse)
EndProcedure
exemple d'utilisation basique , avec revue de ce qu'on peut faire
; info le canal 10 est reserve a la batterie
; en fait on part de zero, donc il sagit du canal 9 ici !! : D
; les notes vont de 15 a 108 !!! : D
; pour infos les canaux : Famille d'instruments
; **********************************************
; 1-8 Piano
; 9-16 Percussions chromatiques
; 17-24 Orgues
; 25-32 Guitares
; 33-40 Basses
; 41-48 Cordes
; 49-56 Orchestre
; 57-64 Cuivres
; 65-72 Instruments à anches
; 73-80 flûtes
; 81-88 Synthétiseur solo
; 89-96 Nappes de Synthétiseur
; 97-104 Effets de Synthétiseur
; 105-112 Instruments ethniques
; 113-120 Percussions
; 121-128 Effets sonores
; **********************************************
Enumeration
#Acoustic_Grand_Piano
#Bright_Acoustic_Piano
#Electric_Grand_Piano
#Honky_tonk_Piano
#Electric_Piano_1
#Electric_Piano_2
#Harpsichord
#Clavinette
#celesta
#glockenspiel
#music_box
#vibraphone
#marimba
#xylophone
#Tubular_Bells
#dulcimer
#Drawbar_Organ
#Percussive_Organ
#rock_organ
#church_organ
#reed_organ
#Accordion
#harmonica
#Tango_Accordion
#Acoustic_Guitar_nylon
#Acoustic_Guitar_steel
#Electric_Guitar_jazz
#Electric_Guitar_clean
#Electric_Guitar_muted
#Overdriven_Guitar
#Distortion_Guitar
#Guitar_harmonics
#Acoustic_bass
#Electric_Bass_finger
#Electric_Bass_pick
#fretless_bass
#Slap_bass_1
#Slap_bass_2
#Synth_bass_1
#Synth_bass_2
#violin
#viola
#cello
#Contrabass
#Tremolo_Strings
#Pizzicato_Strings
#Orchestral_Harp
#timpani
#String_Ensemble_1
#String_Ensemble_2
#SynthStrings_1
#SynthStrings_2
#choir_Aahs
#voice_Oohs
#Synth_voice
#orchestra_hit
#Trumpet
#trombone
#tuba
#muted_Trumpet
#french_horn
#Brass_Section
#SynthBrass_1
#SynthBrass_2
#Soprano_Sax
#Alto_Sax
#Tenor_Sax
#Baritone_Sax
#oboe
#english_horn
#Bassoon
#Clarinet
#piccolo
#flute
#recorder
#Pan_Flute
#blown_bottle
#shakuhachi
#whistle
#ocarina
#Lead_1_square
#Lead_2_sawtooth
#Lead_3_calliope
#Lead_4_chiff
#Lead_5_charang
#Lead_6_voice
#Lead_7_fifths
#Lead_8_bass_Lead
#Pad_1_newage
#Pad_2_warm
#Pad_3_polysynth
#Pad_4_choir
#Pad_5_bowed
#Pad_6_metallic
#Pad_7_halo
#Pad_8_sweep
#FX_1_rain
#FX_2_soundtrack
#FX_3_crystal
#FX_4_atmosphere
#FX_5_brightnes
#FX_6_goblins
#FX_7_echoes
#FX_8_scifi
#sitar
#banjo
#Shamisens
#koto
#Kalimba
#bag_pipe
#fiddle
#shanai
#tinkle_bell
#agogo
#steel_drums
#Wood_block
#taiko_Drum
#Melodic_Tom
#Synth_Drumer
#Reverse_Cymbal
#Guitar_Fret_noise
#breath_noise
#seashore
#bird_Tweet
#Telephone_Ring
#Helicopt
#applause
#Gunshot
EndEnumeration
; ******** initialisation obligatoire ***********
MIDIOpen() ; ouvre le midi
; *****************************************************************************
Canal_melodie=0
Charge_Instrument_melodie(Canal_melodie, #flute ) ; defini le canal, et l'instrument utilisé pour la mélodie
Canal_accord=1
Charge_Instrument_accord(Canal_accord, #Acoustic_Grand_Piano ) ; defini le canal, et l'instrument utilisé pour des accord
; *****************************************************************************
vitesse=60
; *******************************************
messagerequester ( "jouons" , "on va jouer 4 noires" )
; ************ voici comment jouer des notes séparé (mélodie)*************************
Midi_play(Canal_melodie, "C" , "noire" ,4,127,127,vitesse) ; joue la note pendant la valeur d'une noire
Midi_play(Canal_melodie, "d" , "noire" ,4,127,127,vitesse) ; soit une par seconde si vitesse=60
Midi_play(Canal_melodie, "e" , "noire" ,4,127,127,vitesse) ; joue la note pendant la valeur d'une noire
Midi_play(Canal_melodie, "f" , "noire" ,4,127,127,vitesse) ; soit une par seconde si vitesse=60
messagerequester ( "jouons" , "on va jouer differentes valeur de temp d'une note" )
Midi_play(Canal_melodie, "C" , "ronde" ,4,127,127,vitesse) ; joue une ronde
Midi_play(Canal_melodie, "d" , "blanche" ,4,127,127,vitesse) ; joue une blanche
Midi_play(Canal_melodie, "e" , "noire" ,4,127,127,vitesse) ; joue une noire (moitié d'une blanche)
Midi_play(Canal_melodie, "f" , "croche" ,4,127,127,vitesse) ; joue une croche (moitié d'une noire)
Midi_play(Canal_melodie, "g" , "double_croche" ,4,127,127,vitesse) ; joue une double croche (moitié d'une croche)
Midi_play(Canal_melodie, "a" , "triple_croche" ,4,127,127,vitesse) ; joue une triple croche (moitié d'une double_croche)
Midi_play(Canal_melodie, "b" , "quadruple_croche" ,4,127,127,vitesse) ; joue une quadruple croche (moitié d'une triple_croche)
; ******************* les accords methode Multi****************************************
; et joue un accord de C (do) en utilisant les note 'multi' c'est la capacité a jouer plusieurs notes en meme temps
; note ce mode permet toutes les fantaisies accords 3 sons,4 sons, et plus
; mais faut gerer l'extinction des notes jouées en respectant l'octave, la note exacte !!
; on utilise pour ça la fonction Midi_stop_Note()
; si un C (do) est joué , il faudra eteindre ce C (do) , sous risque de le voir continuer a jouer
; ce peut etre utile pour les bourdons ... : o)
messagerequester ( "jouons" , "on va jouer un accord de C majeur avec la methode multi" + chr (10)+ "le son du metro parisien : o) " )
Midi_play_multi(Canal_melodie, "G" , "blanche" ,5,127,127,vitesse) ; fondamentale
Midi_play_multi(Canal_melodie, "B" , "blanche" ,5,127,127,vitesse) ; tierce
Midi_play_multi(Canal_melodie, "D" , "blanche" ,5,127,127,vitesse) ; quinte
delay (Midi_tempo(vitesse, "ronde" ) ) ; pendant une ronde
Midi_stop_Note(Canal_melodie, "G" ,5) ; stop son
Midi_stop_Note(Canal_melodie, "B" ,5) ; stop son
Midi_stop_Note(Canal_melodie, "D" ,5) ;stop son
; **********************************************************************************
; ************* OU BIEN *****************************************
; jouer un accord en utilisant la fonction Playchord
octave.b=4
messagerequester ( "jouons" , "on va jouer 2 accord de C majeur et mineur avec ma methode 2 de valeur banche" )
; ********* 2 accords simple de la valeur d'une blanche****************
Midi_play_chord(Canal_accord, "c_maj" , "noire" ,octave.b,0,127,127,vitesse) ;
delay (Midi_tempo(vitesse, "ronde" )) ; petite pause
Midi_play_chord(Canal_accord, "c_min" , "noire" ,octave.b,0,127,127,vitesse) ;
delay (Midi_tempo(vitesse, "ronde" )) ; petite pause
; *********************************************************
; *******************une susccession d'accords Arpegés de differente valeurs de tempo************
;tempo(180) ; tempo 120
vitesse=80
messagerequester ( "jouons" , "on va jouer plusieurs accords de C majeur arpegés valeur d'une ronde octave 4" )
octave.b=4
Midi_play_chord(Canal_accord, "c_maj" , "ronde" ,octave.b,1,127,127,vitesse) ; arpege de ronde
messagerequester ( "jouons" , "on va jouer un accords de C mineure arpegés valeur d'une blanche octave 4" )
Midi_play_chord(Canal_accord, "c_min" , "blanche" ,octave.b,1,127,127,vitesse) ; arpege de blanche
messagerequester ( "jouons" , "on va jouer un accords de C majeur arpegés valeur d'une noire octave 4" )
Midi_play_chord(Canal_accord, "c_maj" , "noire" ,octave.b,1,127,127,vitesse) ; arpege de noire
messagerequester ( "jouons" , "on va jouer un accords de C mineure arpegés valeur d'une croche octave 5" )
octave.b=5
Midi_play_chord(Canal_accord, "c_min" , "croche" ,octave.b,1,127,127,vitesse) ; arpege de croche
messagerequester ( "jouons" , "on va jouer un accords de C majeur arpegés valeur d'une double croche octave 5" )
Midi_play_chord(Canal_accord, "c_maj" , "double_croche" ,octave.b,1,127,127,vitesse) ; arpege double croche
messagerequester ( "jouons" , "on va jouer un accords de C majeur arpegés valeur d'une triple croche octave 3" )
octave.b=3
Midi_play_chord(Canal_accord, "c_maj" , "triple_croche" ,octave.b,1,127,127,vitesse) ; arpege de triple croche
messagerequester ( "jouons" , "on va jouer un accords de C majeur arpegés valeur d'une quadruple croche octave 3" )
Midi_play_chord(Canal_accord, "c_maj" , "quadruple_croche" ,octave.b,1,127,127,vitesse) ; arpege de quadruple_croche
messagerequester ( "jouons" , "on va jouer un accords de C majeur arpegés valeur d'une noire pointé octave 3" )
Midi_play_chord(Canal_accord, "c_maj" , "noire_p" ,octave.b,1,127,127,vitesse) ; arpege de noire pointées
messagerequester ( "jouons" , "on va jouer un accords de C majeur arpegés valeur d'un triolet de noires octave 3" )
Midi_play_chord(Canal_accord, "c_maj" , "noire_3" ,octave.b,1,127,127,vitesse) ; arpege de noire triolet
delay (Midi_tempo(vitesse, "noire_3" ))
; *************************************************************************************
messagerequester ( "jouons" , "fin" )
End
;
Les Accords Arpegés
; ***********************************************************************************************************
Enumeration
#Acoustic_Grand_Piano
#Bright_Acoustic_Piano
#Electric_Grand_Piano
#Honky_tonk_Piano
#Electric_Piano_1
#Electric_Piano_2
#Harpsichord
#Clavinette
#celesta
#glockenspiel
#music_box
#vibraphone
#marimba
#xylophone
#Tubular_Bells
#dulcimer
#Drawbar_Organ
#Percussive_Organ
#rock_organ
#church_organ
#reed_organ
#Accordion
#harmonica
#Tango_Accordion
#Acoustic_Guitar_nylon
#Acoustic_Guitar_steel
#Electric_Guitar_jazz
#Electric_Guitar_clean
#Electric_Guitar_muted
#Overdriven_Guitar
#Distortion_Guitar
#Guitar_harmonics
#Acoustic_bass
#Electric_Bass_finger
#Electric_Bass_pick
#fretless_bass
#Slap_bass_1
#Slap_bass_2
#Synth_bass_1
#Synth_bass_2
#violin
#viola
#cello
#Contrabass
#Tremolo_Strings
#Pizzicato_Strings
#Orchestral_Harp
#timpani
#String_Ensemble_1
#String_Ensemble_2
#SynthStrings_1
#SynthStrings_2
#choir_Aahs
#voice_Oohs
#Synth_voice
#orchestra_hit
#Trumpet
#trombone
#tuba
#muted_Trumpet
#french_horn
#Brass_Section
#SynthBrass_1
#SynthBrass_2
#Soprano_Sax
#Alto_Sax
#Tenor_Sax
#Baritone_Sax
#oboe
#english_horn
#Bassoon
#Clarinet
#piccolo
#flute
#recorder
#Pan_Flute
#blown_bottle
#shakuhachi
#whistle
#ocarina
#Lead_1_square
#Lead_2_sawtooth
#Lead_3_calliope
#Lead_4_chiff
#Lead_5_charang
#Lead_6_voice
#Lead_7_fifths
#Lead_8_bass_Lead
#Pad_1_newage
#Pad_2_warm
#Pad_3_polysynth
#Pad_4_choir
#Pad_5_bowed
#Pad_6_metallic
#Pad_7_halo
#Pad_8_sweep
#FX_1_rain
#FX_2_soundtrack
#FX_3_crystal
#FX_4_atmosphere
#FX_5_brightnes
#FX_6_goblins
#FX_7_echoes
#FX_8_scifi
#sitar
#banjo
#Shamisens
#koto
#Kalimba
#bag_pipe
#fiddle
#shanai
#tinkle_bell
#agogo
#steel_drums
#Wood_block
#taiko_Drum
#Melodic_Tom
#Synth_Drumer
#Reverse_Cymbal
#Guitar_Fret_noise
#breath_noise
#seashore
#bird_Tweet
#Telephone_Ring
#Helicopt
#applause
#Gunshot
EndEnumeration
; ******** initialisation obligatoire ***********
MIDIOpen() ; ouvre le midi
Charge_Instrument_accord(2, #banjo ) : #bbanjo =2 ; defini le canal, et l'instrument utilisé
vitesse=120 ; tempo general du morceau (60 a la noire)
;*******************************************
; the aphrodites child (Rain And Tears)
;********************************************
;For i=1 To 2
; en accord arpeger , il faut mettre une attente double du temps de l'arpege !!
; sinon l'arpege n'est simplement pas effectué en entier (mais ça peut etre un effet recherché)
Midi_play_chord( #bbanjo , "c_maj" , "noire" ,4,1,127,127,vitesse) ;C
delay (Midi_tempo(vitesse, "blanche" ))
Midi_play_chord( #bbanjo , "g_maj" , "noire" ,4,1,127,127,vitesse)
delay (Midi_tempo(vitesse, "blanche" ))
Midi_play_chord( #bbanjo , "a_min" , "noire" ,4,1,127,127,vitesse)
delay (Midi_tempo(vitesse, "blanche" ))
;
Midi_play_chord( #bbanjo , "e_min" , "noire" ,4,1,127,127,vitesse)
delay (Midi_tempo(vitesse, "blanche" ))
;
Midi_play_chord( #bbanjo , "f_maj" , "noire" ,4,1,127,127,vitesse)
delay (Midi_tempo(vitesse, "blanche" ))
Midi_play_chord( #bbanjo , "c_maj" , "noire" ,4,1,127,127,vitesse)
delay (Midi_tempo(vitesse, "blanche" ))
Midi_play_chord( #bbanjo , "f_maj" , "noire" ,4,1,127,127,vitesse)
delay (Midi_tempo(vitesse, "blanche" ))
Midi_play_chord( #bbanjo , "g_maj" , "noire" ,4,1,127,127,vitesse)
delay (Midi_tempo(vitesse, "blanche" ))
;Next i
;Delay(Midi_tempo(vitesse,"blanche"))