diff listeningTest/readTestFile.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/readTestFile.m	Thu Apr 24 23:53:31 2014 +0100
@@ -0,0 +1,128 @@
+function testDat=readTestFile(testFile)
+fid=fopen(testFile,'r');
+testDat.sndRef=[];
+
+
+while ~feof(fid)
+   lin=fgetl(fid);
+   [word1,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
+   
+   if (~COUNT | ~strcmp(word1,'%'))
+      
+      switch upper(word1)
+         
+      case 'NAME'
+         testDat.name=fgetl(fid);
+         
+      case 'COMBINATIONS:'
+         [nbComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1);
+         testDat.nbComb=nbComb;	%%
+         testDat.posComb=[];
+         
+         for noComb=1:nbComb
+            lin=fgetl(fid);
+            if ~isempty(lin) 
+               if lin(1)~='%'
+                  [comb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%d',2);
+                  testDat.comb(noComb,:)=comb;	%%
+                  
+                  % Read the reference DATAS
+                  if COUNT==1
+                     lin=lin(NEXTINDEX:end);
+                     [stri,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
+                     
+                     if findstr(lower(stri),'ref')								
+                        testDat.sndRef(end+1)=comb(1);
+                        lin=lin(NEXTINDEX:end);
+                        [stri,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
+                     end
+                     
+                     if findstr(lower(stri),'pos')
+                        lin=lin(NEXTINDEX:end);
+                     end
+                     
+                     % read the sounds default position
+                     [posComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%f',inf);	% position must be specified for each scale!!
+                     if ~isempty(posComb)
+                        testDat.posComb(noComb,:)=posComb';
+                     end	
+                  end     
+               end               
+            end			
+         end
+         % tricky here! try to satisfy both comp1d and 2d 
+         % requirements of default position of icons
+         % may be should decompose each case...
+         
+         posComb=testDat.posComb;
+         [nbComb1,nbPos]=size(posComb);
+         if isempty(nbComb1)
+            nbComb1=1;
+         end
+         if exist('nbScale')
+            nbPos=nbScale;
+         end        
+         if nbComb1<nbComb
+            testDat.posComb(nbComb,nbPos)=0;
+         end
+         indx=find(testDat.posComb==0);
+         testDat.posComb(indx)=nan;   % mark the combinations with unknown position
+
+      case 'NBSCALES:'
+         [nbScale,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1);
+         testDat.nbScale=nbScale;
+         % check posRef length
+         nbRef=length(testDat.sndRef);
+         
+         for noRef=1:nbRef	
+            if length(testDat.posComb(:,testDat.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:'
+                  lin=lin(NEXTINDEX:end);
+                  name=lin; %%						
+               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
+            testDat.scale(noScale).name=name;
+            testDat.scale(noScale).maxx=maxx;
+            testDat.scale(noScale).minn=minn;
+            testDat.scale(noScale).stepp=stepp;
+            testDat.scale(noScale).level=level;
+         end
+      end
+   end
+end
+fclose(fid);
+
+function word=firstWord(word)
+
+if ~isempty(word) 
+   if word(1)=='%'
+      word=[];
+   end
+else
+   word=[];
+end