Edinburgh Speech Tools  2.1-release
sigpr_utt.cc
Go to the documentation of this file.
1 /*************************************************************************/
2 /* */
3 /* Centre for Speech Technology Research */
4 /* University of Edinburgh, UK */
5 /* Copyright (c) 1996 */
6 /* All Rights Reserved. */
7 /* */
8 /* Permission is hereby granted, free of charge, to use and distribute */
9 /* this software and its documentation without restriction, including */
10 /* without limitation the rights to use, copy, modify, merge, publish, */
11 /* distribute, sublicense, and/or sell copies of this work, and to */
12 /* permit persons to whom this work is furnished to do so, subject to */
13 /* the following conditions: */
14 /* 1. The code must retain the above copyright notice, this list of */
15 /* conditions and the following disclaimer. */
16 /* 2. Any modifications must be clearly marked as such. */
17 /* 3. Original authors' names are not deleted. */
18 /* 4. The authors' names are not used to endorse or promote products */
19 /* derived from this software without specific prior written */
20 /* permission. */
21 /* */
22 /* THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK */
23 /* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */
24 /* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */
25 /* SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE */
26 /* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
27 /* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */
28 /* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */
29 /* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
30 /* THIS SOFTWARE. */
31 /* */
32 /*************************************************************************/
33 /* Authors: Paul Taylor and Simon King */
34 /* Date : March 1998 */
35 /*-----------------------------------------------------------------------*/
36 /* Signal processing functions which operate on entire utterances */
37 /* */
38 /*=======================================================================*/
39 
40 
41 #include "EST_error.h"
42 #include "EST_track_aux.h"
43 #include "EST_inline_utils.h"
44 #include "sigpr/EST_fft.h"
45 #include "sigpr/EST_sigpr_frame.h"
46 #include "sigpr/EST_sigpr_utt.h"
47 
48 #include "EST_Features.h"
49 #include "EST_types.h"
50 #include "EST_string_aux.h"
51 
52 using namespace std;
53 
54 void sigpr_acc(EST_Wave &sig, EST_Track &fv, EST_Features &op,
55  const EST_StrList &slist);
56 
57 void sigpr_delta(EST_Wave &sig, EST_Track &fv, EST_Features &op,
58  const EST_StrList &slist);
59 
60 
61 
62 static void parse_op_settings(EST_Features &op, EST_WindowFunc *&wf, float &f)
63 {
64  EST_String w_name;
65 
66  if (op.present("window_type"))
67  w_name = op.S("window_type");
68  else
69  w_name = DEFAULT_WINDOW_NAME;
70  wf = EST_Window::creator(w_name);
71 
72  f = op.present("frame_factor") ? op.F("frame_factor")
74 }
75 
77  EST_Features &op, int delta_order)
78 {
79  EST_String t;
80  EST_String dos;
81 
82  if (delta_order == 0)
83  dos = "";
84  else if (delta_order == 1)
85  dos = "_d";
86  else if (delta_order == 2)
87  dos = "_a";
88  else
89  EST_error("Requested delta order too high: %d\n", delta_order);
90 
91 
92 
93  for (EST_Litem *s = types.head(); s; s = s->next())
94  {
95  t = types(s);
96  if (op.present(t + "_order"))
97  {
98  int actual_order = op.I(t + "_order");
99  if(actual_order < 1)
100  {
101  cerr << "Invalid " << t << "_order" << " : ";
102  cerr << actual_order;
103  cerr << " (using 1 instead) " << endl;
104  actual_order = 1;
105  }
106 
107  int lowest_coef=0,highest_coef=actual_order-1;
108 
109  if(t == "lpc")
110  // For lpc coefficients, we ALWAYS include energy as the
111  // 0th coefficient, so when the users gives lpc_order of
112  // 16, we produce 17 coefficients (0 to 16)
113  highest_coef=actual_order;
114 
115 
116  if(t == "melcep")
117  {
118  // Mel cepstra have special names - if we are not
119  // including c0, then the coefficients are numbered
120  // 1...order, and NOT 0...order-1
121  highest_coef=actual_order;
122  if(op.present("include_c0"))
123  lowest_coef = 0;
124  else
125  lowest_coef = 1;
126  }
127 
128  if(actual_order == 1)
129  map.append(t + dos);
130  else
131  map.append("$" + t + dos + "-"+itoString(lowest_coef)+"+"+itoString(highest_coef));
132  }
133  else
134  map.append(t + dos);
135  }
136 }
137 
139  const EST_StrList &slist)
140 {
141  EST_Track fill, tmp;
142  EST_String b_name;
143  EST_String k;
144  float frame_factor;
145  EST_WindowFunc *wf;
146 
147  int fbank_order;
148  float liftering_parameter=0;
149  bool use_power_rather_than_energy=false, take_logs=true, include_c0=false;
150 
151  parse_op_settings(op, wf, frame_factor);
152 
153  for (EST_Litem *s = slist.head(); s; s = s->next())
154  {
155  k = slist(s);
156 
157  EST_String start_channel="0";
158  if( (slist(s) == "melcep") && !op.present("include_c0"))
159  start_channel = "1";
160 
161  if (fv.has_channel(k))
162  fv.sub_track(fill, 0, EST_ALL, k , 1);
163  else
164  fv.sub_track(fill, 0, EST_ALL, k + "_" + start_channel, k + "_N");
165 
166  if(op.present("usepower"))
167  cerr << "USING POWER" << endl;
168 
169  if ((slist(s) == "lpc") || (slist(s) == "cep")
170  ||(slist(s) == "ref") || (slist(s) == "lsf"))
171  sig2coef(sig, fill, slist(s), frame_factor, wf);
172  else if (slist(s) == "power")
173  power(sig, fill, frame_factor);
174  else if (slist(s) == "energy")
175  energy(sig, fill, frame_factor);
176  else if (slist(s) == "f0")
177  {
178  op.set("srpd_resize", 0);
179  op.set("pda_frame_shift", op.F("frame_shift"));
180  pda(sig, fill, op, "srpd");
181  }
182 // else if (slist(s) == "rasta")
183 // rasta(sig, fill, op);
184 
185  else if (slist(s) == "fbank")
186  {
187  use_power_rather_than_energy = op.present("usepower");
188  fbank(sig, fill, frame_factor, wf, use_power_rather_than_energy,
189  take_logs);
190  }
191 
192  else if (slist(s) == "melcep")
193  {
194  fbank_order=op.I("fbank_order");
195  use_power_rather_than_energy = op.present("usepower");
196  include_c0=op.present("include_c0");
197 
198  if(op.present("lifter"))
199  liftering_parameter=op.F("lifter");
200 
201  //cerr << "calling melcep " << fill.num_channels() << endl;
202 
203  melcep(sig, fill, frame_factor, fbank_order,
204  liftering_parameter, wf, include_c0,
205  use_power_rather_than_energy);
206  }
207  else
208  EST_error("Error: Unnknown type of processing requested: %s\n",
209  ((const char*) slist(s)));
210  }
211 }
212 
214  const EST_String &k)
215 {
216  EST_Track base, fill;
217 
218 // cout << "type: " << k << endl;
219 
220  // look to see if base coefficients already exist
221  EST_String start_channel="0";
222  if( (k == "melcep") && !op.present("include_c0"))
223  start_channel = "1";
224 
225  if (fv.has_channel(k))
226  fv.sub_track(base, 0, EST_ALL, k , 1);
227  else if (fv.has_channel(k + "_" + start_channel))
228  fv.sub_track(base, 0, EST_ALL, k + "_" + start_channel, k + "_N");
229  else // otherwise make them in temporary track
230  {
231 // cout << "making tmp cpoefs\n";
232  EST_StrList tmp_base, tmp_map;
233  tmp_base.append(k);
234  add_channels_to_map(tmp_map, tmp_base, op, 0);
235  base.resize(fv.num_frames(), tmp_map);
236 
237  base.fill_time(fv);
238 
239  base.set_equal_space(false);
240  sigpr_base(sig, base, op, tmp_base);
241 // cout << "BASE\n" << base;
242 // cout <<"after\n";
243  }
244 
245  if (fv.has_channel(k + "_d"))
246  fv.sub_track(fill, 0, EST_ALL, k+"_d", 1);
247  else
248  fv.sub_track(fill, 0, EST_ALL, k+"_d_" + start_channel, k+"_d_N");
249 
250 /* cout << "base\n";
251  track_info(base);
252  cout << "fill\n";
253  track_info(fill);
254 */
255 
256  delta(base, fill);
257 }
258 
260  const EST_String &k)
261 {
262  EST_Track base, fill;
263 
264 // cout << endl << endl << "acc\n";
265 
266 // cout << "type: " << k << endl;
267 
268  // look to see if delta coefficients already exist
269  EST_String start_channel="0";
270  if( (k == "melcep") && !op.present("include_c0"))
271  start_channel = "1";
272  if (fv.has_channel(k+"_d"))
273  fv.sub_track(base, 0, EST_ALL, k + "_d", 1);
274  else if (fv.has_channel(k + "_d_" + start_channel))
275  fv.sub_track(base, 0, EST_ALL, k + "_d_" + start_channel, k + "_d_N");
276  else // otherwise make them in temporary track
277  {
278  EST_StrList tmp_base, tmp_map;
279  tmp_base.append(k);
280  add_channels_to_map(tmp_map, tmp_base, op, 1);
281  base.resize(fv.num_frames(), tmp_map);
282 
283  base.fill_time(fv);
284 
285  base.set_equal_space(false);
286  sigpr_delta(sig, base, op, tmp_base);
287  }
288 
289  if (fv.has_channel(k + "_a"))
290  fv.sub_track(fill, 0, EST_ALL, k+"_a", 1);
291  else
292  fv.sub_track(fill, 0, EST_ALL, k+"_a_" + start_channel, k+"_a_N");
293 
294 // cout << "base\n";
295 // track_info(base);
296 // cout << "fill\n";
297 // track_info(fill);
298 
299  delta(base, fill);
300 }
301 
303  const EST_StrList &slist)
304 {
305  for (EST_Litem *s = slist.head(); s; s = s->next())
306  sigpr_acc(sig, fv, op, slist(s));
307 }
308 
310  const EST_StrList &slist)
311 {
312  for (EST_Litem *s = slist.head(); s; s = s->next())
313  sigpr_delta(sig, fv, op, slist(s));
314 }
315 
316 
318  int i, int sample_rate, int prefer_prev)
319 {
320  int prev = -1;
321  int next = -1;
322 
323  if (i>0)
324  prev = irint((pms.t(i) - pms.t(i-1))*sample_rate);
325  if (i<pms.num_frames()-1)
326  next = irint((pms.t(i+1) - pms.t(i))*sample_rate);
327 
328  if (prefer_prev)
329  return prev>=0?prev:(next>=0?next:0);
330  return next>=0?next:(prev>=0?prev:0);
331 }
332 
333 float get_time_frame_size(EST_Track &pms, int i, int prefer_prev)
334 {
335  float prev = -1;
336  float next = -1;
337 
338  if (i > 0)
339  prev = pms.t(i) - pms.t(i-1);
340  if (i < pms.num_frames() -1)
341  next = pms.t(i+1) - pms.t(i);
342 
343  if (prefer_prev)
344  return prev>=0 ? prev: (next>=0 ? next : 0.0);
345  return next>=0 ? next: (prev>=0 ? prev : 0.0);
346 }
347 
348 /*void sig2lpc(EST_Wave &sig, EST_Track &lpc, EST_WindowFunc *wf, float factor)
349 {
350  int order = lpc.num_channels() - 1;
351  EST_FVector coefs(order + 1);
352  int k;
353  int window_start, window_size, length; // can be merged with window_size
354 
355  int sample_rate = sig.sample_rate();
356 
357  EST_FVector frame;
358 
359  for (k = 0; k < lpc.num_frames(); ++k)
360  {
361  int pos = irint(lpc.t(k) * sample_rate);
362 
363  length = get_local_frame_size(lpc, k, sig.sample_rate());
364  window_size = irint(length * factor);
365  window_start = pos - (window_size/2);
366 
367  EST_Window::window_signal(sig, wf, window_start,
368  window_size, frame, 1);
369 
370  lpc.frame(coefs, k);
371  sig2lpc(frame, coefs);
372  }
373  lpc.save("test.est", "est");
374 }
375 */
376 
377 /*typedef void EST_FrameFunc(const EST_FVector &in_frame,
378  EST_FVector &out_frame);
379 
380 void sig2coef(EST_Wave &sig, EST_Track &lpc, EST_WindowFunc *wf,
381  EST_FrameFunc *ff, float factor)
382 {
383  EST_FVector coefs, frame;
384  int start, size;
385 
386  for (int k = 0; k < lpc.num_frames(); ++k)
387  {
388  size = irint(get_local_frame_size(lpc, k, sig.sample_rate())* factor);
389  start = (irint(lpc.t(k) * sig.sample_rate()) - (size/2));
390 
391  EST_Window::window_signal(sig, wf, start, size, frame, 1);
392 
393  lpc.frame(coefs, k);
394  (*ff)(frame, coefs);
395  }
396 }
397 */
398 
399 void sig2coef(EST_Wave &sig, EST_Track &tr, EST_String type,
400  float factor, EST_WindowFunc *wf)
401 {
402  EST_FVector coefs, frame;
403  int start, size;
404 
405 // cout << "TYPE IS " << type << endl;
406 
407  for (int k = 0; k < tr.num_frames(); ++k)
408  {
409  if (factor < 0) // want fixed frame rate
410  size = (int)(-1.0 * factor * (float)sig.sample_rate());
411  else
412  size = irint(get_frame_size(tr, k, sig.sample_rate())* factor);
413  start = (irint(tr.t(k) * sig.sample_rate()) - (size/2));
414 
415  EST_Window::window_signal(sig, wf, start, size, frame, 1);
416 
417  tr.frame(coefs, k);
418  frame_convert(frame, "sig", coefs, type);
419  }
420 }
421 
422 void power(EST_Wave &sig, EST_Track &pow, float factor)
423 {
424  EST_FVector frame;
425  int window_start, window_size, pos;
426  ssize_t k;
427 
428  EST_WindowFunc *wf = EST_Window::creator("rectangular");
429 
430  for (k = 0; k < pow.num_frames(); ++k)
431  {
432  pos = irint(pow.t(k) * sig.sample_rate());
433  if (factor < 0) // want fixed frame rate
434  window_size = (int)(-1.0 * factor * (float)sig.sample_rate());
435  else
436  window_size = irint(get_frame_size(pow, k, sig.sample_rate())
437  * factor);
438  window_start = pos - window_size/2;
439  EST_Window::window_signal(sig, wf, window_start, window_size,frame, 1);
440 
441  sig2pow(frame, pow.a(k));
442  }
443 }
444 
445 void energy(EST_Wave &sig, EST_Track &pow, float factor)
446 {
447  EST_FVector frame;
448  int window_start, window_size, pos;
449  ssize_t k;
450 
451  EST_WindowFunc *wf = EST_Window::creator("rectangular");
452 
453  for (k = 0; k < pow.num_frames(); ++k)
454  {
455  pos = irint(pow.t(k) * sig.sample_rate());
456  if (factor < 0) // want fixed frame rate
457  window_size = (int)(-1.0 * factor * (float)sig.sample_rate());
458  else
459  window_size = irint(get_frame_size(pow, k, sig.sample_rate())
460  * factor);
461  window_start = pos - window_size/2;
462  EST_Window::window_signal(sig, wf, window_start, window_size,frame,1);
463 
464  sig2rms(frame, pow.a(k));
465  }
466 }
467 
468 static EST_String determine_type(const EST_String &intype)
469 {
470  return (intype.contains("_") ? intype.before("_"): intype);
471 }
472 
473 void convert_track(EST_Track &in_track, EST_Track &out_track,
474  const EST_String &out_type, const EST_String &in_type)
475 {
476  if (in_track.num_frames() != out_track.num_frames())
477  EST_error("In track has %d frames, out track has %d\n",
478  in_track.num_frames(), out_track.num_frames());
479 
480  EST_String tmp;
481  tmp = ((in_type == "") ? determine_type(in_track.channel_name(0)):in_type);
482 
483  EST_FVector in_frame(in_track.num_channels());
484  EST_FVector out_frame(out_track.num_channels());
485 
486  for (int i = 0; i < in_track.num_frames(); ++i)
487  {
488  in_track.frame(in_frame, i);
489  out_track.frame(out_frame, i);
490  frame_convert(in_frame, tmp, out_frame, out_type);
491  }
492 }
493 
494 
495 
496 void fbank(EST_Wave &sig,
497  EST_Track &fbank_track,
498  const float factor,
499  EST_WindowFunc *wf,
500  const bool use_power_rather_than_energy,
501  const bool take_log)
502 {
503 
504  // still to add : high/low pass filtering
505 
506  int window_start, window_size, pos, k;
507  EST_FVector frame,fbank_frame;
508 
509  // get_order(...) gives wrong answer ... Paul ?
510  int fbank_order = fbank_track.num_channels();
511 
512  // sanity check
513  if(fbank_order < 1)
514  {
515  EST_error("Filterbank order of %i makes no sense.\n",fbank_order);
516  return;
517  }
518 
519  for (k = 0; k < fbank_track.num_frames(); ++k)
520  {
521  if (factor < 0) // want fixed frame rate
522  window_size = (int)(-1.0 * factor * (float)sig.sample_rate());
523  else
524  window_size = irint(get_frame_size(fbank_track, k, sig.sample_rate())
525  * factor);
526  pos = irint(fbank_track.t(k) * sig.sample_rate());
527  window_start = pos - window_size/2;
528  EST_Window::window_signal(sig, wf, window_start, window_size,frame, 1);
529 
530  fbank_track.frame(fbank_frame,k);
531  sig2fbank(frame,fbank_frame,sig.sample_rate(),
532  use_power_rather_than_energy,take_log);
533 
534  }
535 
536 
537 }
538 
539 
540 void melcep(EST_Wave &sig, EST_Track &mfcc_track,
541  float factor,
542  int fbank_order,
543  float liftering_parameter,
544  EST_WindowFunc *wf,
545  const bool include_c0,
546  const bool use_power_rather_than_energy)
547 {
548 
549  EST_FVector frame,mfcc_frame,fbank_frame;
550  int k;
551 
552  // first, do filterbank analysis
553  // need a temporary track, with the same setup as mfcc_track
554  EST_Track fbank_track;
555 
556 // cout << "MELPCEP\n" << fbank_order << endl;
557 
558  fbank_track.resize(mfcc_track.num_frames(), fbank_order);
559  fbank_track.fill_time(mfcc_track);
560  fbank_track.set_equal_space(false);
561 
562  // temp removed by pault 24/02/99
563 // make_timed_track(mfcc_track, fbank_track, "filter", fbank_order, 0);
564 
565  // 'true' makes fbank(...) take logs
566  fbank(sig, fbank_track, factor, wf, use_power_rather_than_energy, true);
567 
568  /*
569  if(include_c0)
570  cerr << "melcep c0" << endl;
571  else
572  cerr << "melcep no c0" << endl;
573  */
574  for (k = 0; k < mfcc_track.num_frames(); ++k)
575  {
576 
577  mfcc_track.frame(mfcc_frame,k);
578  fbank_track.frame(fbank_frame,k);
579 
580  fbank2melcep(fbank_frame, mfcc_frame,liftering_parameter,include_c0);
581  }
582 }
A class for storing digital waveforms. The waveform is stored as an array of 16 bit shorts...
Definition: EST_Wave.h:64
#define DEFAULT_FRAME_FACTOR
Definition: EST_sigpr_utt.h:44
int contains(const char *s, ssize_t pos=-1) const
Does it contain this substring?
Definition: EST_String.h:365
static Func * creator(const char *name, bool report_error=false)
Return the creation function for the given window type.
Definition: EST_Window.cc:218
void delta(EST_Track &tr, EST_Track &d, int regression_length=3)
Definition: delta.cc:52
void convert_track(EST_Track &in_track, EST_Track &out_track, const EST_String &out_type, const EST_String &in_type)
Definition: sigpr_utt.cc:473
static void window_signal(const EST_Wave &sig, EST_WindowFunc *make_window, int start, int size, EST_TBuffer< float > &frame)
Definition: EST_Window.cc:279
A vector class for floating point numbers. EST_FVector x should be used instead of float *x wherever ...
Definition: EST_FMatrix.h:119
int num_channels() const
return number of channels in track
Definition: EST_Track.h:657
void energy(EST_Wave &sig, EST_Track &pow, float factor)
Definition: sigpr_utt.cc:445
EST_String itoString(int n)
Make a EST_String object from an integer.
Definition: util_io.cc:141
void sig2pow(EST_FVector &frame, float &power)
Definition: sigpr_frame.cc:472
void power(EST_Wave &sig, EST_Track &pow, float factor)
Definition: sigpr_utt.cc:422
void set(const EST_String &name, int ival)
Definition: EST_Features.h:186
int ssize_t
const int EST_ALL
void resize(ssize_t num_frames, int num_channels, bool preserve=1)
Definition: EST_Track.cc:214
void melcep(EST_Wave &sig, EST_Track &mfcc_track, float factor, int fbank_order, float liftering_parameter, EST_WindowFunc *wf, const bool include_c0, const bool use_power_rather_than_energy)
Definition: sigpr_utt.cc:540
void sig2coef(EST_Wave &sig, EST_Track &tr, EST_String type, float factor, EST_WindowFunc *wf)
Definition: sigpr_utt.cc:399
EST_UItem * next()
Definition: EST_UList.h:55
void sub_track(EST_Track &st, int start_frame=0, int nframes=EST_ALL, int start_chan=0, int nchans=EST_ALL)
Definition: EST_Track.cc:1100
const EST_String S(const EST_String &path) const
Definition: EST_Features.h:158
void fbank2melcep(const EST_FVector &fbank_vec, EST_FVector &mfcc, const float liftering_parameter, const bool include_c0=false)
Definition: sigpr_frame.cc:684
int take_logs
int get_frame_size(EST_Track &pms, int i, int sample_rate, int prefer_prev)
Definition: sigpr_utt.cc:317
float & t(ssize_t i=0)
return time position of frame i
Definition: EST_Track.h:478
float & a(ssize_t i, int c=0)
Definition: EST_Track.cc:1025
void sig2rms(EST_FVector &frame, float &rms_energy)
Definition: sigpr_frame.cc:481
void add_channels_to_map(EST_StrList &map, EST_StrList &types, EST_Features &op, int delta_order)
Definition: sigpr_utt.cc:76
void sigpr_delta(EST_Wave &sig, EST_Track &fv, EST_Features &op, const EST_StrList &slist)
Definition: sigpr_utt.cc:309
int present(const EST_String &name) const
#define EST_error
Definition: EST_error.h:104
f
Definition: EST_item_aux.cc:48
void frame_convert(const EST_FVector &in_frame, const EST_String &in_type, EST_FVector &out_frame, const EST_String &out_type)
Definition: sigpr_frame.cc:206
ssize_t num_frames() const
return number of frames in track
Definition: EST_Track.h:651
void EST_WindowFunc(int size, EST_TBuffer< float > &r_window, int window_centre)
Function which creates a window.
Definition: EST_Window.h:52
getString int
Definition: EST_item_aux.cc:50
void append(const T &item)
add item onto end of list
Definition: EST_TList.h:196
void pda(EST_Wave &sig, EST_Track &fz, EST_Features &op, EST_String method="")
Definition: pda.cc:51
void sigpr_acc(EST_Wave &sig, EST_Track &fv, EST_Features &op, const EST_StrList &slist)
Definition: sigpr_utt.cc:302
const EST_String channel_name(int channel, const EST_ChannelNameMap &map, int strings_override=1) const
Definition: EST_Track.cc:138
int sample_rate() const
return the sampling rate (frequency)
Definition: EST_Wave.h:147
void sig2fbank(const EST_FVector &sig, EST_FVector &fbank_frame, const float sample_rate, const bool use_power_rather_than_energy, const bool take_log)
Definition: sigpr_frame.cc:538
float start(const EST_Item &item)
Definition: EST_item_aux.cc:52
#define DEFAULT_WINDOW_NAME
Definition: EST_sigpr_utt.h:43
EST_UItem * head() const
Definition: EST_UList.h:97
int I(const EST_String &path) const
Definition: EST_Features.h:147
float get_time_frame_size(EST_Track &pms, int i, int prefer_prev)
Definition: sigpr_utt.cc:333
EST_String before(int pos, int len=0) const
Part before position.
Definition: EST_String.h:276
bool has_channel(const char *name) const
Definition: EST_Track.h:385
void frame(EST_FVector &fv, int n, int startf=0, int nf=EST_ALL)
Definition: EST_Track.h:210
void set_equal_space(bool t)
Definition: EST_Track.h:675
void fbank(EST_Wave &sig, EST_Track &fbank_track, const float factor, EST_WindowFunc *wf, const bool use_power_rather_than_energy, const bool take_log)
Definition: sigpr_utt.cc:496
void fill_time(float t, int start=1)
Definition: EST_Track.cc:789
float F(const EST_String &path) const
Definition: EST_Features.h:136
void sigpr_base(EST_Wave &sig, EST_Track &fv, EST_Features &op, const EST_StrList &slist)
Definition: sigpr_utt.cc:138
Utility EST_String Functions header file.