Bonjour,
Mon programme est une tache question/réponse est le suivant :
-Le participant doit appuyer sur espace pour entendre un son
-le participant doit appuyer via la souris sur un des deux boutons du GUI pour dire si c'est un son de piano ou de flute
-Le participant doit appuyer à nouveau sur espace pour un nouveau son
Le problème que, je voudrais permettre seulement un seul appuie sur espace et n'en permettre un nouveua que si un click sur un des deux boutons du GUI est fait.
Ce n'est pas très élégant comme moyen, j'ai donc tenté de bloquer la fonction KeyPressFCN avec un flag qui sera mis à 0 une fois le case 'space' est lu ,
Le principe fonctionne partiellement, dans la mesure ou mon sound s'exécute sur 1000ms, sur cet intervalle là, l'appuie sur la barre espace et encore prise en compte, une fois le son est fini, j'ai bien le listener du keyboard qui est verouillé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 function figure1_KeyPressFcn(hObject, eventdata, handles) if (handles.etat==0) disp('ne rien faire') else switch eventdata.Key case 'space' %% processing x task %playing sounds 1000 ms handles.etat=0 soundsc(y,Fs); guidata(hObject, handles); %%// Save handles data otherwise disp('error'); end end end function pushbutton1_Callback(hObject, eventdata, handles) %processing task handles.etat=1 % deverouiller la fonction guidata(hObject, handles); %%// Save the handles data end function pushbutton2_Callback(hObject, eventdata, handles) %processing task handles.etat=1 guidata(hObject, handles); %%// Save the handles data end
C'est ces 1000ms qui me pose probleme. Je voudrais pouvoir verouiller l'action keyboard dès le premier appuie sur la barre espace, puis jouer mon son, attendre une réponse souris et débloquer le listener keyboard.
Une autre manière de procéder ? Est-ce une question de thread ? ou est-ce plus simple que je ne le pense ? Des idées ?
Merci !
Partager