Page 1 sur 1

[..] Piano

Posté : sam. 12 oct. 2013 14:20
par leoleolth
Bonjour,
Je souhaite créer un piano grâce aux touches l'ordinateur.
Je sais que des scripts existent déjà à ce propos.
J'aimerais que le beep soit joué lorsque l'on appuie sur une touche et qu'il s'arrete quand on le relâche.

Code : Tout sélectionner

#include <Misc.au3>

Local $hDLL = DllOpen("user32.dll")

HotKeySet("{ESC}", "echap")

While 1
   If _IsPressed("41", $hDLL) Then 
      While _IsPressed("41", $hDLL)
         Beep(523, 150)
      WEnd
   EndIF
   If _IsPressed("5A", $hDLL) Then 
      While _IsPressed("5A", $hDLL)
         Beep(587, 150)
      WEnd
   EndIF
   If _IsPressed("45", $hDLL) Then 
      While _IsPressed("45", $hDLL)
         Beep(659, 150)
      WEnd
   EndIF
WEnd

Func echap()
   Exit
EndFunc
 

Re: [..] Piano

Posté : sam. 12 oct. 2013 17:02
par mikell
La question est très intéressante, quoique pour ce que tu cherches il vaut mieux utiliser _Soundplay() ou les fonctions Midi de winmm.dll
En effet Beep est une fonction de bas niveau qui demande une durée initiale en paramètre pour s'exécuter et qui est bloquante
Donc avec une durée courte tu auras une suite de beeps en pointillé (pas top)
Avec une durée longue (pour avoir un beep continu) le seul moyen d'interrompre par exemple un "Beep(523, 4000)" c'est de lancer avec un autre thread un "Beep(..., 1)" , ça marche mais la fonction de départ va continuer à bloquer silencieusement tant que sa durée ne sera pas écoulée ce qui rend le concept à peu près inutilisable dans un script...

Re: [..] Piano

Posté : sam. 12 oct. 2013 19:21
par leoleolth
Merci pour votre réponse rapide.
Comment dois-je utiliser les fonctions midi de wimm.dll ?