2009-10-14 8 views
0

J'écris un programme en Java aura à voir avec l'entrée de musique. Je veux utiliser mon clavier d'ordinateur en tant qu'instrument.Pretty beaucoup ce sera comme bouton accordéon que je joue. Je ferai le mapping entre les notes et les notes à travers 2 octaves pour commencer. Je pensais à ce qui serait un bon design en chronométrant combien la touche a été pressée. J'utilise JFugue framework pour générer des chaînes de musique à partir de ce qui a été joué, et ensuite il peut être facilement exporté en midi. Afin de générer ces cordes, je devrai mesurer combien la tonalité a été pressée et ensuite lui donner une certaine longueur de note musicale. Ces informations sur la longueur de la note sont également ajoutées à la chaîne. Si vous pensez que je n'ai même pas besoin de cela s'il vous plaît faites le moi savoir, parce que je suis Java débutant.KeyListener et le calendrier

Répondre

0

Vous pouvez implémenter un KeyListener et compter sur les deux méthodes keyPressed et keyReleased pour chronométrer vos notes.

Votre mise en œuvre KeyListener aurait besoin de maintenir l'état, peut-être sous la forme d'un Map de VK_ codes -> fois les événements. Vous pouvez remplir la carte avec une heure de début dans le traitement keyPressed, en identifiant la clé dans le KeyEvent via getKeyCode(). Vous pouvez ensuite obtenir la durée de la note une fois que l'événement keyReleased se déclenche en extrayant l'heure de début de la carte avec le code clé.

Si vous ne l'avez pas encore trouvé, here is Sun's tutorial on KeyListeners

+0

Hey j'ai réussi à écrire du code. Jusqu'à présent, c'est bon. Je règle la mesure, le tempo et donne au lecteur JFugue la séquence de cordes qu'il doit jouer. Si j'allume le métronome et que je joue avec le même tempo que j'envoie au lecteur, l'échantillonnage des longueurs de ton est très efficace. Mais ... mais .... j'ai un petit problème avec KeyEvents. Si j'appuie sur une touche plus longtemps, il génère un KeyEvent, attend un certain temps et commence à générer de nombreux KeyEvents. Ce comportement peut être dû au système d'exploitation. Si je presse et maintenez la touche, il commence à taper très vite ... Que faire ... – Zec

+0

Cela sonne spécifique au système d'exploitation. Est-ce que les actions 'KeyEvent' répétées viennent toutes dans les paires' keyPressed'/'keyReleased' ou sont-elles simplement en train de répéter' keyPressed'? Si ce dernier, vous avez de l'espoir. Vous pouvez tester si votre collection d'heures de début de clé a déjà une entrée pour la clé en question, et si c'est le cas, n'écrasez pas l'heure de début tenue comme valeur. – akf