Dawn@4: function [EGGData, FrameT] = func_readEGGfile(EGGfile, EGGheaders, EGGtimelabel) Dawn@4: % [EGGData, FrameT] = func_readEGGfile(EGGfile, EGGheaders, EGGtimelabel) Dawn@4: % Input: EGGfile - .egg file name Dawn@4: % EGGheaders - headers to look for in the .egg file Dawn@4: % EGGtimelabel - label representing time Dawn@4: % Output: EGGData Dawn@4: % FrameT - time vector Dawn@4: % Notes: Dawn@4: % Dawn@4: % Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA Dawn@4: % Copyright UCLA SPAPL 2009 Dawn@4: Dawn@4: fid = fopen(EGGfile, 'r'); Dawn@4: tmp = textscan(fid, '%s', 1, 'delimiter', '\n'); Dawn@4: data = textscan(fid, '%s', 'delimiter', '\n'); Dawn@4: fclose(fid); Dawn@4: Dawn@4: EGGheaders = textscan(EGGheaders, '%s', 'delimiter', ','); Dawn@4: EGGheaders = EGGheaders{1}; Dawn@4: Dawn@4: % find the index of the "Entry definition and order" header Dawn@4: headers = textscan(tmp{1}{1}, '%s', 'delimiter', '\t'); Dawn@4: inx = 0; Dawn@4: for k=1:length(headers{1}) Dawn@4: if (strcmp(removeExtraSpace(headers{1}{k}), 'Entry definition and order')) Dawn@4: inx = k; Dawn@4: break; Dawn@4: end Dawn@4: end Dawn@4: Dawn@4: % now extract the entry definition from the next data Dawn@4: defn = textscan(data{1}{1}, '%s', 'delimiter', '\t'); Dawn@4: defn = defn{1}{inx}; Dawn@4: Dawn@4: defn_headers = textscan(defn, '%s', 'delimiter', ':,'); Dawn@4: EGGInx = []; Dawn@4: Dawn@4: for k=1:length(EGGheaders) Dawn@4: for n=1:length(defn_headers{1}) Dawn@4: str = removeExtraSpace(defn_headers{1}{n}); Dawn@4: if (strcmp(EGGheaders{k}, str) == 1) Dawn@4: EGGInx = [EGGInx n]; Dawn@4: break; Dawn@4: end Dawn@4: Dawn@4: if (n==length(defn_headers{1})) Dawn@4: EGGInx = [EGGInx -1]; % header was not found, set err code Dawn@4: end Dawn@4: end Dawn@4: end Dawn@4: Dawn@4: % now extract the time data Dawn@4: for k=1:length(defn_headers{1}) Dawn@4: if (strcmp(EGGtimelabel, defn_headers{1}{k}) == 1) Dawn@4: FrameInx = k; Dawn@4: break; Dawn@4: end Dawn@4: end Dawn@4: Dawn@4: EGGInx = EGGInx + 1; Dawn@4: FrameInx = FrameInx + 1; Dawn@4: Dawn@4: FrameT = zeros(1, length(data{1})); Dawn@4: EGGData = cell(1, length(EGGInx)); Dawn@4: for k=1:length(EGGInx) Dawn@4: EGGData{k} = zeros(1, length(data{1})); Dawn@4: end Dawn@4: Dawn@4: for k=1:length(data{1}) Dawn@4: dat = textscan(data{1}{k}, '%s', 'delimiter', '\t'); Dawn@4: FrameT(k) = str2num(dat{1}{FrameInx}); Dawn@4: Dawn@4: for n=1:length(EGGInx) Dawn@4: if (EGGInx(n) ~= 0) Dawn@4: val = str2double(dat{1}{EGGInx(n)}); Dawn@4: if (isnan(val)) Dawn@4: val = 0; Dawn@4: end Dawn@4: EGGData{n}(k) = val; Dawn@4: end Dawn@4: end Dawn@4: end Dawn@4: Dawn@4: Dawn@4: % removes extra spaces at the start and end of words Dawn@4: function str = removeExtraSpace(s) Dawn@4: str = s; Dawn@4: while (1) Dawn@4: if (str(1) == ' ') Dawn@4: str = str(2:end); Dawn@4: else Dawn@4: break; Dawn@4: end Dawn@4: end Dawn@4: Dawn@4: while(1) Dawn@4: if (str(end) == ' ') Dawn@4: str = str(1:end-1); Dawn@4: else Dawn@4: break; Dawn@4: end Dawn@4: end