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 ,


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
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é.

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 !