Edinburgh Speech Tools  2.4-release
 All Classes Functions Variables Typedefs Enumerations Enumerator Friends Pages
EST_TrackMap.cc
1  /************************************************************************/
2  /* */
3  /* Centre for Speech Technology Research */
4  /* University of Edinburgh, UK */
5  /* Copyright (c) 1996,1997 */
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  /* Author: Richard Caley (rjc@cstr.ed.ac.uk) */
34  /* Date: Fri May 9 1997 */
35  /************************************************************************/
36  /* */
37  /* Track maps provide a mapping from symbolic track names to the */
38  /* actual position of the information within a track frame. */
39  /* */
40  /* Channel name maps map textual names for track channels to symbolic */
41  /* names, they are just a special case of named enums. */
42  /* */
43  /************************************************************************/
44 
45 #include "EST_TrackMap.h"
46 
48 {
49  for(int i=0; i<num_channel_types; i++)
50  p_map[i]=NO_SUCH_CHANNEL;
51 }
52 
54 {
55  for(int i=0; i<num_channel_types; i++)
56  p_map[i]=from.p_map[i];
57 }
58 
59 
61 {
62 clear();
63 p_parent=NULL;
64 p_offset=0;
65 }
66 
68 {
69  init();
70 }
71 
72 
74 {
75  init();
76  if (refcount)
77  start_refcounting();
78 }
79 
80 EST_TrackMap::EST_TrackMap(const EST_TrackMap *parent, int offset, int refcount)
81 {
82  init();
83  p_parent = (EST_TrackMap *)parent;
84  p_offset=offset;
85  if (refcount)
86  start_refcounting();
87 }
88 
90 {
91  copy(from);
92  if (refcount)
93  start_refcounting();
94 }
95 
97 {
98  init();
99 
100  int i;
101  for(i=0; map[i].type != channel_unknown; i++)
102  set(map[i].type, map[i].channel);
103 }
104 
105 EST_TrackMap::~EST_TrackMap()
106 {
107 }
108 
109 short EST_TrackMap::get_parent(EST_ChannelType type) const
110 {
111  short c= NO_SUCH_CHANNEL;
112  if (p_parent!=0)
113  {
114  c = p_parent->get(type);
115  if (c != NO_SUCH_CHANNEL)
116  c -= p_offset;
117  }
118  return c;
119 }
120 
121 EST_ChannelType EST_TrackMap::channel_type(unsigned short channel) const
122 {
123  unsigned short i;
124 
125  for(i=0; i<num_channel_types;i++)
126  if (p_map[i] == channel)
127  return (EST_ChannelType)i;
128 
129  if (p_parent!=0)
130  return p_parent->channel_type(channel+p_offset);
131 
132  return channel_unknown;
133 }
134 
135 short EST_TrackMap::last_channel(void) const
136 {
137  short last = -1;
138  for(short i=0; i<num_channel_types;i++)
139  if (p_map[i]> last)
140  last = p_map[i];
141  return last;
142 }
143 
144 
146  { channel_unknown, { "Unknown" }},
147  { channel_order, { "Order" }},
148  { channel_power, { "power", "Power", "raw_power"}},
149  { channel_power_d, { "power_d", "Power_d", "raw_power_d"}},
150  { channel_power_a, { "power_a", "Power_a", "raw_power_a"}},
151  { channel_energy, { "energy", "Energy"}},
152  { channel_energy_d, { "energy_d", "Energy_d"}},
153  { channel_energy_a, { "energy_a", "Energy_a"}},
154  { channel_peak, { "Peak", "ac_peak" }},
155  { channel_duration, { "Duration" }},
156  { channel_length, { "Length", "frame_len"}},
157  { channel_offset, { "Offset", "frame_offset"}},
158  { channel_f0, { "f0", "F0" }},
159  { channel_f0_d, { "f0_d", "F0_d" }},
160  { channel_f0_a, { "f0_a", "F0_a" }},
161  { channel_voiced, { "Voiced", "prob_voice"}},
162  { channel_frame, { "Frame"}},
163  { channel_time, { "Time"}},
164  { channel_lpc_0, { "lpc_0", "Lpc_0"}},
165  { channel_lpc_N, { "lpc_N", "Lpc_N"}},
166  { channel_lpc_d_0, { "lpc_d_0"}},
167  { channel_lpc_d_N, { "lpc_d_N"}},
168  { channel_lpc_a_0, { "lpc_a_0"}},
169  { channel_lpc_a_N, { "lpc_a_N"}},
170  { channel_cepstrum_0, { "cep_0"}},
171  { channel_cepstrum_N, { "cep_N"}},
172  { channel_cepstrum_d_0, { "cep_d_0"}},
173  { channel_cepstrum_d_N, { "cep_d_N"}},
174  { channel_cepstrum_a_0, { "cep_a_0"}},
175  { channel_cepstrum_a_N, { "cep_a_N"}},
176  { channel_melcepstrum_0, { "melcep_0"}},
177  { channel_melcepstrum_N, { "melcep_N"}},
178  { channel_melcepstrum_d_0, { "melcep_d_0"}},
179  { channel_melcepstrum_d_N, { "melcep_d_N"}},
180  { channel_melcepstrum_a_0, { "melcep_a_0"}},
181  { channel_melcepstrum_a_N, { "melcep_a_N"}},
182  { channel_lsf_0, { "lsf_0"}},
183  { channel_lsf_N, { "lsf_N"}},
184  { channel_lsf_d_0, { "lsf_d_0"}},
185  { channel_lsf_d_N, { "lsf_d_N"}},
186  { channel_lsf_a_0, { "lsf_a_0"}},
187  { channel_lsf_a_N, { "lsf_a_N"}},
188  { channel_fbank_0, { "fbank_0"}},
189  { channel_fbank_N, { "fbank_N"}},
190  { channel_fbank_d_0, { "fbank_d_0"}},
191  { channel_fbank_d_N, { "fbank_d_N"}},
192  { channel_fbank_a_0, { "fbank_a_0"}},
193  { channel_fbank_a_N, { "fbank_a_N"}},
194  { channel_filter_0, { "filter_0"}},
195  { channel_filter_N, { "filter_N"}},
196  { channel_filter_d_0, { "filter_d_0"}},
197  { channel_filter_d_N, { "filter_d_N"}},
198  { channel_filter_a_0, { "filter_a_0"}},
199  { channel_filter_a_N, { "filter_a_N"}},
200  { channel_reflection_0, { "reflection_0"}},
201  { channel_reflection_N, { "reflection_N"}},
202  { channel_reflection_d_0, { "reflection_d_0"}},
203  { channel_reflection_d_N, { "reflection_d_N"}},
204  { channel_reflection_a_0, { "reflection_a_0"}},
205  { channel_reflection_a_N, { "reflection_a_N"}},
206  { channel_unknown, { NULL }}
207 };
208 
209 EST_ChannelNameMap EST_default_channel_names(channel_name_tbl);
210 
212  { channel_unknown, { "Unknown" }},
213  { channel_order, { "Order" }},
214  { channel_power, { "raw_power", "rms" }},
215  { channel_peak, { "ac_peak" }},
216  { channel_duration, { "Duration" }},
217  { channel_length, { "frame_len"}},
218  { channel_f0, { "F0" }},
219  { channel_voiced, { "prob_voice"}},
220  { channel_lpc_0, { "lpc_0", "spec_param" }},
221  { channel_lpc_N, { "lpc_N"}},
222  // { channel_coef0, { "spec_param" }},
223  { channel_unknown, { NULL }}
224 };
225 
226 EST_ChannelNameMap esps_channel_names(esps_channel_name_tbl);
227 
228 #if defined(INSTANTIATE_TEMPLATES)
229 
230 #include "../base_class/EST_TNamedEnum.cc"
231 
232 template class EST_TNamedEnum<EST_ChannelType>;
236 
238 
239 #endif