annotate 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
rev   line source
Dawn@4 1 function [labels, start, stop] = func_readTextgrid(filename)
Dawn@4 2 % [labels, start, stop] = func_readTextgrid(filename)
Dawn@4 3 % Input: filename - textgrid file
Dawn@4 4 % Output: labels, start, stop - vectors containing textgrid data
Dawn@4 5 % Notes: Functions seeks out the "xmin", "xmax", and "text" labels within
Dawn@4 6 % a textgrid file.
Dawn@4 7 %
Dawn@4 8 % Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA
Dawn@4 9 % Copyright UCLA SPAPL 2009
Dawn@4 10
Dawn@4 11 POINT_BUFFER = 0.025; % 25 ms buffer on either side of the point
Dawn@4 12
Dawn@4 13 if (exist(filename, 'file') == 0)
Dawn@4 14 fprintf('Error: %s not found\n', filename);
Dawn@4 15 labels = NaN; start = NaN; stop = NaN;
Dawn@4 16 return;
Dawn@4 17 end
Dawn@4 18
Dawn@4 19 fid = fopen(filename, 'rt');
Dawn@4 20 C = textscan(fid, '%s', 'delimiter', '\n');
Dawn@4 21 fclose(fid);
Dawn@4 22
Dawn@4 23 C = C{1};
Dawn@4 24 tiers = 0;
Dawn@4 25 proceed_int = 0; % proceed with intervals
Dawn@4 26 proceed_pnt = 0; % proceed with point-sources
Dawn@4 27 xmin = 0;
Dawn@4 28 xmax = 1;
Dawn@4 29
Dawn@4 30 for k=1:length(C)
Dawn@4 31 % try to read a string in the format: %s = %s
Dawn@4 32 if (isempty(C{k}))
Dawn@4 33 continue;
Dawn@4 34 end
Dawn@4 35
Dawn@4 36 A = textscan(C{k}, '%[^=] = %s', 'delimiter', '\n');
Dawn@4 37
Dawn@4 38 if (~isempty(A{1}{1}))
Dawn@4 39 switch A{1}{1}
Dawn@4 40 % intervals
Dawn@4 41 case {'intervals: size '} % we found the start of a new tier, now allocate mem
Dawn@4 42 tiers = tiers + 1;
Dawn@4 43 tier_len = str2num(A{2}{1});
Dawn@4 44 labels{tiers} = cell(tier_len, 1);
Dawn@4 45 start{tiers} = zeros(tier_len, 1);
Dawn@4 46 stop{tiers} = zeros(tier_len, 1);
Dawn@4 47 cnt = 1;
Dawn@4 48 proceed_int = 1;
Dawn@4 49 case {'xmin '}
Dawn@4 50 if (proceed_int)
Dawn@4 51 start{tiers}(cnt) = str2num(A{2}{1});
Dawn@4 52 else
Dawn@4 53 xmin = str2num(A{2}{1});
Dawn@4 54 end
Dawn@4 55 case {'xmax '}
Dawn@4 56 if (proceed_int)
Dawn@4 57 stop{tiers}(cnt) = str2num(A{2}{1});
Dawn@4 58 else
Dawn@4 59 xmax = str2num(A{2}{1});
Dawn@4 60 end
Dawn@4 61 case {'text '}
Dawn@4 62 if (proceed_int)
Dawn@4 63 lab = A{2}{1};
Dawn@4 64 if (lab(end) ~= '"')
Dawn@4 65 lab = lab(1:end-1);
Dawn@4 66 end
Dawn@4 67
Dawn@4 68 labels{tiers}{cnt} = lab;
Dawn@4 69 cnt = cnt + 1;
Dawn@4 70 if (cnt > tier_len)
Dawn@4 71 proceed_int = 0;
Dawn@4 72 end
Dawn@4 73 end
Dawn@4 74 % point-sources
Dawn@4 75 case {'points: size '} % we found the start of a new tier, now allocate mem
Dawn@4 76 tiers = tiers + 1;
Dawn@4 77 tier_len = str2num(A{2}{1});
Dawn@4 78 labels{tiers} = cell(tier_len, 1);
Dawn@4 79 start{tiers} = zeros(tier_len, 1);
Dawn@4 80 stop{tiers} = zeros(tier_len, 1);
Dawn@4 81 cnt = 1;
Dawn@4 82 proceed_pnt = 1;
Dawn@4 83 case {'time '}
Dawn@4 84 if (proceed_pnt)
Dawn@4 85 start{tiers}(cnt) = str2num(A{2}{1}) - POINT_BUFFER;
Dawn@4 86 stop{tiers}(cnt) = str2num(A{2}{1}) + POINT_BUFFER;
Dawn@4 87
Dawn@4 88 if (start{tiers}(cnt) < xmin)
Dawn@4 89 start{tiers}(cnt) = xmin;
Dawn@4 90 end
Dawn@4 91
Dawn@4 92 if (stop{tiers}(cnt) > xmax)
Dawn@4 93 stop{tiers}(cnt) = xmas;
Dawn@4 94 end
Dawn@4 95 end
Dawn@4 96 case {'mark '}
Dawn@4 97 if (proceed_pnt)
Dawn@4 98 lab = A{2}{1};
Dawn@4 99 if (lab(end) ~= '"')
Dawn@4 100 lab = lab(1:end-1);
Dawn@4 101 end
Dawn@4 102
Dawn@4 103 labels{tiers}{cnt} = lab;
Dawn@4 104 cnt = cnt + 1;
Dawn@4 105 if (cnt > tier_len)
Dawn@4 106 proceed_pnt = 0;
Dawn@4 107 end
Dawn@4 108 end
Dawn@4 109
Dawn@4 110
Dawn@4 111 end
Dawn@4 112 end
Dawn@4 113
Dawn@4 114 end
Dawn@4 115
Dawn@4 116
Dawn@4 117
Dawn@4 118