]]>

jeudi 15 mars 2007

Faire de la musique avec Excel

Je suis sûr que vous ne me croyez pas, alors démonstration, suivez bien les étapes

1 Ouvrez Excel
2 Appuyer sur ALT+F11
3 Dans le menu cliquez sur Insertion->Module
4 Copier-Coller le programme suivant

Private Declare Function midiOutClose Lib "winmm.dll" _
(ByVal hMidiOut As Long) As Long

Private Declare Function midiOutOpen Lib "winmm.dll" _
(lphMidiOut As Long, _
ByVal uDeviceID As Long, _
ByVal dwCallback As Long, _
ByVal dwInstance As Long, _
ByVal dwFlags As Long) As Long
Private Declare Function midiOutShortMsg Lib "winmm.dll" _
(ByVal hMidiOut As Long, _
ByVal dwMsg As Long) As Long
Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Dim hMidiOut As Long
Public lanote As Integer
Public Const durée As Integer = 250 ' millisecondes'

Sub Au_clair_de_la_lune()
numéro = 0
notes_a_jouer = Array(51, 51, 51, 53, 55, 53, 51, 55, 53, 53, 51, _
51, 51, 51, 53, 55, 53, 51, 55, 53, 53, 51, _
53, 53, 53, 53, 48, 48, 53, 51, 50, 48, 46, _
51, 51, 51, 53, 55, 53, 51, 55, 53, 53, 51)
For Each noteG In notes_a_jouer
numéro = numéro + 1
dur_n = Array(300, 300, 300, 300, 600, 600, 300, 300, 300, 300, 600, _
300, 300, 300, 300, 600, 600, 300, 300, 300, 300, 600, _
300, 300, 300, 300, 600, 600, 300, 300, 300, 300, 600, _
300, 300, 300, 300, 600, 600, 300, 300, 300, 300, 600)
Temps = dur_n(numéro - 1)
On Error GoTo fin
midiOutClose hMidiOut '------------- ferme le port midi pour arreter la note précédente
midiOutOpen hMidiOut, 0, 0, 0, 0 ' ----------------ouvre le port pour la nouvelle note
midiOutShortMsg hMidiOut, RGB(192, 54 - 1, 127) 'ici, le nombre 51 peut être changé
'par un nombre de 1 à 128
lanote = 12 + CInt(noteG) ' -----on calcule la note / l'octave
note = RGB(144, lanote, 127) '-----------------------astuce pour generer un entier long
midiOutShortMsg hMidiOut, note ' --------------------on envoie la note sur le port MIDI
Sleep (Temps)
fin:
midiOutClose hMidiOut
Next
End Sub


5 Appuyer sur F5

Merci à Excel Labo pour cette astuce

A bientôt
Thomas

Aucun commentaire: