Mercurial > hg > emotion-detection-top-level
diff Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/func_readTextgrid.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_readTextgrid.m Wed Feb 13 11:02:39 2013 +0000 @@ -0,0 +1,118 @@ +function [labels, start, stop] = func_readTextgrid(filename) +% [labels, start, stop] = func_readTextgrid(filename) +% Input: filename - textgrid file +% Output: labels, start, stop - vectors containing textgrid data +% Notes: Functions seeks out the "xmin", "xmax", and "text" labels within +% a textgrid file. +% +% Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA +% Copyright UCLA SPAPL 2009 + +POINT_BUFFER = 0.025; % 25 ms buffer on either side of the point + +if (exist(filename, 'file') == 0) + fprintf('Error: %s not found\n', filename); + labels = NaN; start = NaN; stop = NaN; + return; +end + +fid = fopen(filename, 'rt'); +C = textscan(fid, '%s', 'delimiter', '\n'); +fclose(fid); + +C = C{1}; +tiers = 0; +proceed_int = 0; % proceed with intervals +proceed_pnt = 0; % proceed with point-sources +xmin = 0; +xmax = 1; + +for k=1:length(C) + % try to read a string in the format: %s = %s + if (isempty(C{k})) + continue; + end + + A = textscan(C{k}, '%[^=] = %s', 'delimiter', '\n'); + + if (~isempty(A{1}{1})) + switch A{1}{1} + % intervals + case {'intervals: size '} % we found the start of a new tier, now allocate mem + tiers = tiers + 1; + tier_len = str2num(A{2}{1}); + labels{tiers} = cell(tier_len, 1); + start{tiers} = zeros(tier_len, 1); + stop{tiers} = zeros(tier_len, 1); + cnt = 1; + proceed_int = 1; + case {'xmin '} + if (proceed_int) + start{tiers}(cnt) = str2num(A{2}{1}); + else + xmin = str2num(A{2}{1}); + end + case {'xmax '} + if (proceed_int) + stop{tiers}(cnt) = str2num(A{2}{1}); + else + xmax = str2num(A{2}{1}); + end + case {'text '} + if (proceed_int) + lab = A{2}{1}; + if (lab(end) ~= '"') + lab = lab(1:end-1); + end + + labels{tiers}{cnt} = lab; + cnt = cnt + 1; + if (cnt > tier_len) + proceed_int = 0; + end + end + % point-sources + case {'points: size '} % we found the start of a new tier, now allocate mem + tiers = tiers + 1; + tier_len = str2num(A{2}{1}); + labels{tiers} = cell(tier_len, 1); + start{tiers} = zeros(tier_len, 1); + stop{tiers} = zeros(tier_len, 1); + cnt = 1; + proceed_pnt = 1; + case {'time '} + if (proceed_pnt) + start{tiers}(cnt) = str2num(A{2}{1}) - POINT_BUFFER; + stop{tiers}(cnt) = str2num(A{2}{1}) + POINT_BUFFER; + + if (start{tiers}(cnt) < xmin) + start{tiers}(cnt) = xmin; + end + + if (stop{tiers}(cnt) > xmax) + stop{tiers}(cnt) = xmas; + end + end + case {'mark '} + if (proceed_pnt) + lab = A{2}{1}; + if (lab(end) ~= '"') + lab = lab(1:end-1); + end + + labels{tiers}{cnt} = lab; + cnt = cnt + 1; + if (cnt > tier_len) + proceed_pnt = 0; + end + end + + + end + end + +end + + + +