Jeu Simon
Bonjour,
Je voudrais m'inspirer du jeu Simon pour des cours musicaux. Il s'agit d'appuyer sur une touche pour obtenir un son. L'adversaire appuie sur la même touche pour montrer qu'il a retenue la série puis appuie sur une autre touche, etc. Je voudrais donc savoir s'il y a moyenne d'utiliser un command bouton pour obtenir un son quasi tout de suite parce que s'il faut attendre qu'un son se charge à chaque fois…
Si j'ai la solution pour un je pense que j'arrricerai à m'en sortir pour combiner le reste donc merci d'avance.
Bonjour,
Voici un exemple pour jouer les notes,
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(600, 600, 600, 600, 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
midiOutClose hMidiOut
End Sub
Salut Isabelle,
il m'a l'air vraiment très bien, ton code VBA !
si les instructions d'interface MIDI sont suffisamment standard pour être comprises par tout matériel, je crois que ça devrait passer.
dhany
Salut dhany,
je peux juste dire que ça fonctionne sur pc de xl2002 à xl2010, et peut être plus si tu exécute la macro et tu me dit si ça fonctionne ?
si, ça marche bien : j'entends la musique de « Au clair de la lune » ; j'me rappelle même plus si mon PC a une carte son ou non, et j'veux pas ouvrir le boîtier d'la tour pour vérifier ; comme le son est un peu faible, c'est p't'être plutôt une puce son intégrée à la carte mère.
merci quand même pour la jolie mélodie !
dhany
re,
c'est p't'être plutôt une puce son intégrée à la carte mère.
j'saurais pas dire si ça fonctionne via une puce ou autre,
c'est trop loin pour que je m'en souvienne (2002), désolé pour l’auteur, peut être L.L. ou Sabatier à cette époque.
tirer de mes archives:
Merci je vais voir ce que je peux tirer de ça mais ça me parait compliqué pour un débutant comme moi. En fait tout ce que ej voulais c'est cliquer sur un command bouton pour avoir juste un do par exemple. (je suis sur Excel 2010).