Bonjour,
J'ai un problème de synchronisation d'un thread que je n'arrive pas à résoudre pour mon logiciel Jalmus.
J'ai tout d'abord une séquence MIDI avec la partition correspondante qui s'affiche à l'écran. L'utilisateur utilise le clavier pour donner le rythme : pour cela un curseur parcourt la partition à la même vitesse que la musique et si l'utilisateur tape et que le curseur est au même niveau que le rythme c'est qu'il a bien répondu.
Voici ce que cela donne pratiquement :
J'utilise un thread pour le déplacement du curseur avec le booléen cursorstart pour le départ et dans le run :
Et pour lancer le curseur j'ai ajouté un marqueur sur le quatrième temps de ma séquence MIDI que je contrôle par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if (selectedGame == 2 && cursorstart) { cursorspeed = (float) tempo/ (float) 55.520; if (rhythmCursor < 714) rhythmCursor = rhythmCursor + cursorspeed; else { if (rhythmAnswerDportee < dportee +200) { rhythmAnswerDportee = rhythmAnswerDportee + 100; rhythmCursor = (float) (72.0 + cursorspeed); } }
Comme vous pouvez le voir sur l'image il y a un retard sur le démarrage du curseur (si l'on tient compte du décalage du premier temps cela semble bien fonctionner). Le curseur ne démarre pas immédiatement après avoir passé cursorstart à true.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 sm_sequencer.addMetaEventListener(new MetaEventListener() { public void meta(MetaMessage meta) { byte[] abData=meta.getData(); String strText=new String(abData); if ("departthread".equals(strText)) { cursorstart = true; }
Je ne maitrise pas très bien les thread. Y-a-t-il une solution pour le curseur démarre exactement sur le quatrième temps de ma séquence ?
Partager