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 ! peux-tu préciser si ça marche sur tous les PC, quelle que soit la marque et le modèle de la carte son ? et ça marche aussi si au lieu de la carte son, c'est une puce son intégrée à la carte mère ?

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 ! ça f'ra pas un disque d'or, mais c'est quand même pas mal !

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).

Rechercher des sujets similaires à "jeu simon"