comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:4fd284285159
1 function tstDat=readMultiComp(testFile)
2
3 % multiple comparison 1D specifications
4 %
5 % NAME:
6 % multicomp test #1
7 %
8 % nbSCALES: 1
9 % nbSOUNDS: 3
10 %
11 % COMBINATIONS
12 % 1 (random position)
13 % 2 reference position 1
14 % 3 position 3
15 %
16 % SCALES
17 %
18 % SCALE:
19 % 1st scale
20 % MIN: 0 no amount
21 % MAX: 10 max amount
22 % STEP: 1 in between
23 %
24 % COMMENTS? 1 % ask if a comment field should be displayed (1=yes 0=no)
25
26 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27 %
28 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
29
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31 %Initialization
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33
34 tstDat.sndRef=[];
35 tstDat.posComb=[];
36
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 % file parsing
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40
41 fid=fopen(testFile,'r');
42 while ~feof(fid)
43 lin=fgetl(fid);
44
45 [word1,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
46
47 if (~COUNT | ~strcmp(word1,'%'))
48 switch upper(word1)
49 case 'NAME'
50 tstDat.name=fgetl(fid);
51
52 case 'NBSOUNDS:'
53 [nbComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1);
54 tstDat.nbComb=nbComb;
55
56 case 'NBSCALES:'
57 [nbScale,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1);
58 tstDat.nbScale=nbScale;
59
60 case 'COMBINATIONS'
61 for noComb=1:nbComb
62 lin=fgetl(fid);
63 if ~isempty(lin)
64 if lin(1)~='%'
65 [comb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%d',1);
66 tstDat.comb(noComb,:)=comb;
67 % Read the reference DATA
68 lin=lin(NEXTINDEX:end);
69 [stri,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
70 if findstr(lower(stri),'ref')
71 tstDat.sndRef(end+1)=comb(1);
72 lin=lin(NEXTINDEX:end);
73 [stri,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
74 end
75 % read the sounds default position
76 if findstr(lower(stri),'pos')
77 lin=lin(NEXTINDEX:end);
78 end
79 [posComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%f',inf);
80 if ~isempty(posComb) % if it IS empty: set randomly!
81 tstDat.posComb(noComb,:)=posComb;
82 else
83 tstDat.posComb(noComb,:)=100*rand(1, tstDat.nbScale); % added by Brecht to allow for random placing
84
85 end
86 end
87 end
88 end
89 %eol(fid); %BDM???
90 case 'SCALES'
91 % check posRef length
92 nbRef=length(tstDat.sndRef);
93 for noRef=1:nbRef
94 if (length(tstDat.posComb(tstDat.sndRef(noRef),:))~=nbScale)
95 fprintf(1,'Watch out, the position of reference %d are not specified for all scale',noRef);
96 end
97 end
98 for noScale=1:nbScale
99
100 while ~feof(fid)
101 lin=fgetl(fid);
102 [header,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
103 switch firstWord(header)
104 case 'SCALE:'
105 name=fgetl(fid);
106 case 'min'
107 lin=lin(NEXTINDEX:end);
108 [minn,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %%
109 level{1}=lin(NEXTINDEX:end); %%
110 case 'max'
111 lin=lin(NEXTINDEX:end);
112 [maxx,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %%
113 level{3}=lin(NEXTINDEX:end); %%
114 case 'step'
115 lin=lin(NEXTINDEX:end);
116 [stepp,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %%
117 level{2}=lin(NEXTINDEX:end); %%
118 break
119 end
120
121 end
122 tstDat.scale(noScale).name=name;
123 tstDat.scale(noScale).maxx=maxx;
124 tstDat.scale(noScale).minn=minn;
125 tstDat.scale(noScale).stepp=stepp;
126 tstDat.scale(noScale).level=level;
127 end
128 case 'COMMENTS?:'
129 [COM,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1);
130 tstDat.COM=COM;
131 end
132 end
133 end
134
135 fclose(fid);
136
137
138 function word=firstWord(word)
139
140 if ~isempty(word)
141 if word(1)=='%'
142 word='';
143 end
144 else
145 word='';
146 end