Mercurial > hg > ape
diff listeningTest/multiComp/readMultiComp.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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/listeningTest/multiComp/readMultiComp.m Thu Apr 24 23:53:31 2014 +0100 @@ -0,0 +1,146 @@ +function tstDat=readMultiComp(testFile) + +% multiple comparison 1D specifications +% +% NAME: +% multicomp test #1 +% +% nbSCALES: 1 +% nbSOUNDS: 3 +% +% COMBINATIONS +% 1 (random position) +% 2 reference position 1 +% 3 position 3 +% +% SCALES +% +% SCALE: +% 1st scale +% MIN: 0 no amount +% MAX: 10 max amount +% STEP: 1 in between +% +% COMMENTS? 1 % ask if a comment field should be displayed (1=yes 0=no) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Initialization +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +tstDat.sndRef=[]; +tstDat.posComb=[]; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% file parsing +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +fid=fopen(testFile,'r'); +while ~feof(fid) + lin=fgetl(fid); + + [word1,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1); + + if (~COUNT | ~strcmp(word1,'%')) + switch upper(word1) + case 'NAME' + tstDat.name=fgetl(fid); + + case 'NBSOUNDS:' + [nbComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); + tstDat.nbComb=nbComb; + + case 'NBSCALES:' + [nbScale,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); + tstDat.nbScale=nbScale; + + case 'COMBINATIONS' + for noComb=1:nbComb + lin=fgetl(fid); + if ~isempty(lin) + if lin(1)~='%' + [comb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%d',1); + tstDat.comb(noComb,:)=comb; + % Read the reference DATA + lin=lin(NEXTINDEX:end); + [stri,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1); + if findstr(lower(stri),'ref') + tstDat.sndRef(end+1)=comb(1); + lin=lin(NEXTINDEX:end); + [stri,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1); + end + % read the sounds default position + if findstr(lower(stri),'pos') + lin=lin(NEXTINDEX:end); + end + [posComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%f',inf); + if ~isempty(posComb) % if it IS empty: set randomly! + tstDat.posComb(noComb,:)=posComb; + else + tstDat.posComb(noComb,:)=100*rand(1, tstDat.nbScale); % added by Brecht to allow for random placing + + end + end + end + end + %eol(fid); %BDM??? + case 'SCALES' + % check posRef length + nbRef=length(tstDat.sndRef); + for noRef=1:nbRef + if (length(tstDat.posComb(tstDat.sndRef(noRef),:))~=nbScale) + fprintf(1,'Watch out, the position of reference %d are not specified for all scale',noRef); + end + end + for noScale=1:nbScale + + while ~feof(fid) + lin=fgetl(fid); + [header,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1); + switch firstWord(header) + case 'SCALE:' + name=fgetl(fid); + case 'min' + lin=lin(NEXTINDEX:end); + [minn,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %% + level{1}=lin(NEXTINDEX:end); %% + case 'max' + lin=lin(NEXTINDEX:end); + [maxx,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %% + level{3}=lin(NEXTINDEX:end); %% + case 'step' + lin=lin(NEXTINDEX:end); + [stepp,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %% + level{2}=lin(NEXTINDEX:end); %% + break + end + + end + tstDat.scale(noScale).name=name; + tstDat.scale(noScale).maxx=maxx; + tstDat.scale(noScale).minn=minn; + tstDat.scale(noScale).stepp=stepp; + tstDat.scale(noScale).level=level; + end + case 'COMMENTS?:' + [COM,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); + tstDat.COM=COM; + end + end +end + +fclose(fid); + + +function word=firstWord(word) + +if ~isempty(word) + if word(1)=='%' + word=''; + end +else + word=''; +end