Mercurial > hg > ape
diff listeningTest/launch.m @ 0:4fd284285159
Adding listening test plus some helpful functions and scripts.
author | Brecht <b.deman@qmul.ac.uk> |
---|---|
date | Thu, 24 Apr 2014 23:53:31 +0100 |
parents | |
children | ee22af6610a3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/listeningTest/launch.m Thu Apr 24 23:53:31 2014 +0100 @@ -0,0 +1,129 @@ +function launch(sesScript,noTst) +% launch a session script composed of a succession of single tests +% sesScript: session script name if recalling old script (optional) +% noTst: start from specified test (optional) +% +% by Brecht De Man at Centre for Digital Music, 12 January 2014 + +% make sure you are in listening test folder +cdFolder = which('launch'); +cdFolder = cdFolder(1:end-8); % remove 'launch.m' from string +cd(cdFolder); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Interface +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +cd0=cd; % save path + +% Choose Session +if ~exist('sesScript', 'file') % if sesScript was not provided or doesn't exist + [sesScript,cdScript]=uigetfile('*.txt','Please enter a session script'); + if ~sesScript % if still not provided + return % exit + end +else + cdScript=cd0; % folder of script is same as folder of listening test +end + + +% Enter name and check ID is not already used... +ASK=1; +reREAD=0; +while ASK + prompt={'Please enter your name or any ID : '}; + def={'myID'}; + title='ID'; + lineNo=1; + answer=inputdlg(prompt,title,lineNo,def); + if isempty(answer) + return + end + id=answer{1}; % from cell to string + + % if name already present, return to former test + d=dir('responses'); + ASK=0; + for noF=1:length(d) + name=strtok(d(noF).name,'.'); + if strcmp(name,answer) + switch lower(questdlg('This ID is already used. Do you wish to re-use it?')) + case 'yes' + cd('responses'); + ASK=0; + expre=sprintf('load %s',id); + eval(expre); + expre=sprintf('tstDat=%s.tstDat;',id); % read mat-file + eval(expre); + reREAD=1; + cd('../'); + break; + case {'no','cancel'} + ASK=1; + break; + end + end + end +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Read the script and create tstdat +% IF THE TEST WAS DONE ALREADY ONCE, THE .MAT FILE IS USED INSTEAD (see above) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if ~reREAD + cd(cdScript); + tstDat=[]; + fid=fopen(sesScript,'r'); + while ~feof(fid) % read until end of session file + lin=fgetl(fid); + [fil1,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1); + if COUNT + if ~strcmp(fil1(1),'%') % if not a comment + [fil2,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%s',1); + tstDat{end+1}.tstType=fil1; % what type of test? + tstDat{end}.tstFile=fil2; % test file? + end + end + end + fclose(fid); + + % ensure even length (sound list for every test) + if mod(length(tstDat),2) + warning('Uneven number of lines in session script. '); + % randomise order of tests + else + testPerm = randperm(length(tstDat)/2); + tstDatCopy = tstDat; + for t = 1:length(tstDat)/2 + tstDat{2*t-1} = tstDatCopy{2*testPerm(t)-1}; + tstDat{2*t} = tstDatCopy{2*testPerm(t)}; + end + end +end + +cd(cd0); % back to listening test folder + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Set session variables +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +sesDat.sesScript=sesScript; +sesDat.id=id; +sesDat.tstDat=tstDat; +sesDat.reREAD=reREAD; +sesDat.noTst=1; +sesDat.nbTst=length(tstDat); +sesDat.date=datestr(now); +sesDat.cuSndListFile=[]; +sesDat.cuSndList=[]; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Start test +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% load the sndlist +if sesDat.noTst>1 % where were we? + sesDat.noTst=noTst-1; % IS THIS RIGHT? + sndList(sesDat); +else % always start with first test (allow changing earlier stuff if desired) + expr=sprintf('%s(sesDat);',tstDat{1}.tstType); + eval(expr); +end \ No newline at end of file