diff Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/func_readEGGfile.m @ 4:92ca03a8fa99 tip

Update to ICASSP 2013 benchmark
author Dawn Black
date Wed, 13 Feb 2013 11:02:39 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/func_readEGGfile.m	Wed Feb 13 11:02:39 2013 +0000
@@ -0,0 +1,102 @@
+function [EGGData, FrameT] = func_readEGGfile(EGGfile, EGGheaders, EGGtimelabel)
+% [EGGData, FrameT] = func_readEGGfile(EGGfile, EGGheaders, EGGtimelabel)
+% Input:  EGGfile - .egg file name
+%         EGGheaders - headers to look for in the .egg file
+%         EGGtimelabel - label representing time
+% Output: EGGData
+%         FrameT - time vector
+% Notes:  
+%
+% Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA
+% Copyright UCLA SPAPL 2009
+
+fid = fopen(EGGfile, 'r');
+tmp = textscan(fid, '%s', 1, 'delimiter', '\n');
+data = textscan(fid, '%s', 'delimiter', '\n');
+fclose(fid);
+
+EGGheaders = textscan(EGGheaders, '%s', 'delimiter', ',');
+EGGheaders = EGGheaders{1};
+
+% find the index of the "Entry definition and order" header
+headers = textscan(tmp{1}{1}, '%s', 'delimiter', '\t');
+inx = 0;
+for k=1:length(headers{1})
+    if (strcmp(removeExtraSpace(headers{1}{k}), 'Entry definition and order'))
+        inx = k;
+        break;
+    end
+end
+
+% now extract the entry definition from the next data
+defn = textscan(data{1}{1}, '%s', 'delimiter', '\t');
+defn = defn{1}{inx};
+
+defn_headers = textscan(defn, '%s', 'delimiter', ':,');
+EGGInx = [];
+
+for k=1:length(EGGheaders)
+    for n=1:length(defn_headers{1})
+        str = removeExtraSpace(defn_headers{1}{n});
+        if (strcmp(EGGheaders{k}, str) == 1)
+            EGGInx = [EGGInx n];
+            break;
+        end
+        
+        if (n==length(defn_headers{1}))
+            EGGInx = [EGGInx -1];  % header was not found, set err code
+        end
+    end
+end
+
+% now extract the time data
+for k=1:length(defn_headers{1})
+    if (strcmp(EGGtimelabel, defn_headers{1}{k}) == 1)
+        FrameInx = k;
+        break;
+    end
+end
+
+EGGInx = EGGInx + 1;
+FrameInx = FrameInx + 1;
+
+FrameT = zeros(1, length(data{1}));
+EGGData = cell(1, length(EGGInx));
+for k=1:length(EGGInx)
+    EGGData{k} = zeros(1, length(data{1}));
+end
+
+for k=1:length(data{1})
+    dat = textscan(data{1}{k}, '%s', 'delimiter', '\t');
+    FrameT(k) = str2num(dat{1}{FrameInx});
+    
+    for n=1:length(EGGInx)
+        if (EGGInx(n) ~= 0)
+            val = str2double(dat{1}{EGGInx(n)});
+            if (isnan(val))
+                val = 0;
+            end
+            EGGData{n}(k) = val;
+        end
+    end
+end
+
+
+% removes extra spaces at the start and end of words
+function str = removeExtraSpace(s)
+str = s;
+while (1)
+    if (str(1) == ' ')
+        str = str(2:end);
+    else
+        break;
+    end
+end
+
+while(1)
+    if (str(end) == ' ')
+        str = str(1:end-1);
+    else
+        break;
+    end
+end
\ No newline at end of file