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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
|
function melos
persistent reponsejuste essais F_echan duree_note duree_ISI repet retard diodicho F_ref semitones transpo suffixe duree_sequence chaine handles compteur reponse nb_hits nb_FA...
nb_miss nb_RC nb_essais rep
initialisation
synthese
interface_melos8
function interface_melos8
% Initialise et cache l'interface tant qu'elle est en construction.
f = figure('Visible','off','Position',[360,150,900,560], 'Color', [0.7,0.85,1],'Menubar', 'none', 'Toolbar', 'none');
% Construction des composants
BoutonCommencer = uicontrol('Style','pushbutton',...
'Position',[325,390,250,100],...
'Fontname','Arial',...
'String','Commencer',...
'Fontsize', 24,...
'Userdata',1,...
'tag','commencer',...
'BackgroundColor',[1 1 1],...
'ForegroundColor',[0.2,0,0.4],...
'Callback',{@BoutonCommencer_Callback});
Bouton1 = uicontrol('Style','pushbutton',...
'Position',[100,150,250,125],...
'String','Pareil',...
'Fontname','Arial',...
'Fontsize', 24,...
'Userdata',2,...
'tag','bouton1',...
'BackgroundColor',[1 1 1],...
'ForegroundColor',[0.2,0,0.4],...
'Callback',{@Bouton1_Callback});
Bouton2 = uicontrol('Style','pushbutton',...
'Position',[550,150,250,125],...
'String','Différent',...
'Fontname','Arial',...
'Fontsize', 24,...
'Userdata',3,...
'tag','bouton2',...
'BackgroundColor',[1 1 1],...
'ForegroundColor',[0.2,0,0.4],...
'Callback',{@Bouton2_Callback});
Rebours = uicontrol('Style','text',...
'unit','normalized', ...
'Fontname','Arial',...
'Fontsize', 24,...
'position',[.3725 .55 .25 .07],...
'Userdata',4,...
'BackgroundColor',[1 1 1],...
'tag','tx1',...
'string','2.8');
%Construction de la fenêtre
set([f,BoutonCommencer,Bouton1,Bouton2],'Units','normalized'); % Initialise l'interface.
set(f,'Name','Melos8')% Donne un nom à l'interface (apparait dans le titre de la fenetre.
movegui(f,'center')% Déplace l'interface au centre de l'écran
set(f,'Visible','on')%Rend l'interface visible.
handles = guihandles(f);
%Attribution des fonctions aux boutons
function BoutonCommencer_Callback(hObject, eventdata)%s'exécute à la pression sur le bouton "commencer"
set (handles.commencer,'Enable','Inactive');
lancement;
end
function Bouton1_Callback(hObject, eventdata, handles)%s'exécute à la pression sur le bouton "Paire1"
reponse_1;
end
function Bouton2_Callback(hObject, eventdata, handles)%s'exécute à la pression sur le bouton "Paire2"
reponse_2;
end
end
function initialisation %initialise les paramètres du test
compteur = [];
rand('state', sum(100*clock)); % initialisation générateur nbs aléatoires
nom_sujet = input('votre nom : ','s');
diodicho = input('dio (1), dicho grave à gauche (2), ou dicho grave à droite (3) : ');
retard = input('délai de la mélodie aigue, en nombre de notes (1 ou 3) : ');
duree_ISI = input('durée de l''ISI en secondes (.02 ou 0) : ');
essais = 4;
duree_note = 0.02; % durée d'une note en secondes (non compris l'ISI qui suit)
duree_sequence = 2.8; % c'est la durée des intervalles d'écoute/réponse, et aussi des intervalles de repos
F_echan = 44100;
F_ref = 700; % fréquence moyenne dans la mélodie grave
semitones = 2; % pas de fréquence en demi-tons
transpo = 15; % transposition en demi-tons
if retard < 2
suffixe = 1;
else
suffixe = 0;
end
repet = duree_sequence / (2*(duree_note + duree_ISI)) - suffixe;
calib = input('Voulez-vous calibrer ? Entrez 1 si oui, 0 sinon : ');
if calib==1
t = 5; % le son va durer 5 secondes
temps = (0:1/F_echan:t)';
F_calib = F_ref * 2^(transpo/24); % calibration à la fréquence moyenne des sons des séquences
signal_sinus = 0.1 * sin(2*pi*F_calib*temps); % 0.1 est l'amplitude de chaque note
son_pur = audioplayer(signal_sinus, F_echan, 24);
drapeau = 1;
while drapeau==1
playblocking(son_pur);
drapeau = input('Entrez 1 pour recommencer, 0 sinon : ');
end
end % fin de la calibration
nb_hits = 0;
nb_FA = 0;
nb_miss = 0;
nb_RC = 0;
nb_essais = 0;
compteur(1) = timer('timerfcn',@comptearebours,'executionmode','fixedrate','Period',5.6,'StartDelay',2.8,'TasksToExecute',essais);
compteur(2) = timer('timerfcn',@creation, 'executionmode','fixedrate');
end
function synthese
reponsejuste = [ ];
for i = 1:essais
if rand < 0.5
correlation = 0;
else
correlation = 1;
end
reponsejuste = [reponsejuste correlation]; %création du vecteur contenant les corrélation de la séquence
end
chaine = [ ; ];
for i = 1:essais
correl = 0;
musiquebizarre = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe);
chaine = [chaine musiquebizarre];
correl = reponsejuste(i);
musiquebizarre = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe);
chaine = [chaine musiquebizarre];
end
end
function creation(obj,event)
silence_pour_windows7 = [zeros(1, F_echan/5) ; zeros(1, F_echan/5)];
chaine = [chaine silence_pour_windows7]'; % passage en colonnes
duson = audioplayer(chaine, F_echan, 24);
playblocking(duson);
stop(timerfind);
delete(timerfind);
end
function lancement
start(compteur);
end
function comptearebours(obj,event)
boutonoff;
boutonorange;
boutonon;
analyse;
nb_essais = nb_essais+1;
rep = reponsejuste(nb_essais);
function boutonoff
set(handles.tx1,'string',2.8);
set(handles.tx1,'BackgroundColor',[1 0 0]);%le bouton est rouge
set(handles.bouton1,'Enable','Inactive');
set(handles.bouton2,'Enable','Inactive');
pause(2);
end
function boutonorange
set(handles.tx1,'BackgroundColor',[1 0.5 0.2]);%le bouton est orange
pause(0.8);
end
function boutonon
set(handles.tx1,'BackgroundColor',[0 1 0]);%le bouton est vert
set(handles.bouton1,'Enable','On');
set(handles.bouton2,'Enable','On');
m = 100*(str2num(get(handles.tx1,'string')));
for i = 0:0.01:m
n = get(handles.tx1,'string');
n = str2double(n)-0.01;
set(handles.tx1,'string',num2str(n));
drawnow;
end
set(handles.tx1,'BackgroundColor',[1 0 0]);%le bouton est rouge
end
end
function reponse_1
if rep ==1
set(handles.bouton1,'BackgroundColor', [0 1 0]); %si la réponse est correcte le bouton est colorié en vert
nb_hits = nb_hits + 1
set(handles.bouton1,'Enable','inactive');
set(handles.bouton2,'Enable','inactive');
else
set(handles.bouton1,'BackgroundColor', [1 0 0]); %si la réponse est incorrecte le bouton est colorié en rouge
nb_FA = nb_FA + 1
set(handles.bouton1,'Enable','inactive');
set(handles.bouton2,'Enable','inactive');
end
set(handles.bouton1, 'BackgroundColor', [1 1 1]); % blanc
drawnow;
end
function reponse_2
if rep ==1
set(handles.bouton2,'BackgroundColor', [0 1 0]); %si la réponse est correcte le bouton est colorié en vert
nb_miss = nb_miss + 1
set(handles.bouton1,'Enable','inactive');
set(handles.bouton2,'Enable','inactive');
else
set(handles.bouton2,'BackgroundColor', [1 0 0]); %si la réponse est incorrecte le bouton est colorié en rouge
nb_RC = nb_RC + 1
set(handles.bouton1,'Enable','inactive');
set(handles.bouton2,'Enable','inactive');
end
set(handles.bouton2, 'BackgroundColor', [1 1 1]); % blanc
drawnow;
end
function analyse
nb_hits
nb_FA
nb_RC
nb_miss
end
function [musiquebizarre] = sequence(F_echan, duree_note, duree_ISI, repet, retard, diodicho, F_ref, semitones, transpo, correl, suffixe)
function [vecteur_note] = note(F_echan, nb_echan_son, nb_echan_ISI, F) % fabrique une note suivie d'un ISI
end |
Partager