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 :
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);
              }
 
 }
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
 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;     
                }
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.

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 ?