jamie@141
|
1 /*
|
jamie@141
|
2 * Copyright (C) 2012 Jamie Bullock
|
jamie@140
|
3 *
|
jamie@141
|
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
|
jamie@141
|
5 * of this software and associated documentation files (the "Software"), to
|
jamie@141
|
6 * deal in the Software without restriction, including without limitation the
|
jamie@141
|
7 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
jamie@141
|
8 * sell copies of the Software, and to permit persons to whom the Software is
|
jamie@141
|
9 * furnished to do so, subject to the following conditions:
|
jamie@50
|
10 *
|
jamie@141
|
11 * The above copyright notice and this permission notice shall be included in
|
jamie@141
|
12 * all copies or substantial portions of the Software.
|
jamie@50
|
13 *
|
jamie@141
|
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
jamie@141
|
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
jamie@141
|
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
jamie@141
|
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
jamie@141
|
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
jamie@141
|
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
jamie@141
|
20 * IN THE SOFTWARE.
|
jamie@50
|
21 *
|
jamie@50
|
22 */
|
jamie@50
|
23
|
jamie@259
|
24 #include "xtract/libxtract.h"
|
jamie@56
|
25 #include "xtract_macros_private.h"
|
jamie@50
|
26 #include <stdlib.h>
|
jamie@50
|
27 #include <string.h>
|
jamie@50
|
28 #define XTRACT
|
jamie@50
|
29
|
jamie@140
|
30 xtract_function_descriptor_t *xtract_make_descriptors(void)
|
jamie@140
|
31 {
|
jamie@52
|
32
|
jamie@50
|
33 int f , F;
|
jamie@140
|
34 char *name, *p_name, *desc, *p_desc, *author;
|
jamie@146
|
35 double *argv_min, *argv_max, *argv_def, *result_min, *result_max;
|
jamie@56
|
36 int *argc, *year, *argv_donor;
|
jamie@140
|
37 xtract_vector_t *data_format, *result_format;
|
jamie@56
|
38 xtract_unit_t *data_unit, *argv_unit, *result_unit;
|
jamie@108
|
39 xtract_bool_t *is_scalar, *is_delta;
|
jamie@56
|
40 xtract_function_descriptor_t *fd, *d;
|
jamie@56
|
41 xtract_type_t *argv_type;
|
jamie@52
|
42
|
jamie@50
|
43 f = F = XTRACT_FEATURES;
|
jamie@50
|
44
|
andrea@211
|
45 fd = (xtract_function_descriptor_t*)malloc(XTRACT_FEATURES * sizeof(xtract_function_descriptor_t));
|
jamie@50
|
46
|
jamie@55
|
47 /* FIX - this file probably needs a rewrite for readability */
|
jamie@51
|
48
|
jamie@140
|
49 while(f--)
|
jamie@140
|
50 {
|
jamie@51
|
51
|
jamie@108
|
52 d = &fd[f];
|
jamie@110
|
53 d->id = f;
|
jamie@108
|
54 argc = &d->argc;
|
jamie@108
|
55 argv_type = &d->argv.type;
|
jamie@51
|
56
|
jamie@108
|
57 argv_min = &d->argv.min[0];
|
jamie@108
|
58 argv_max = &d->argv.max[0];
|
jamie@108
|
59 argv_def = &d->argv.def[0];
|
jamie@108
|
60 argv_unit = &d->argv.unit[0];
|
jamie@55
|
61
|
jamie@140
|
62 switch (f)
|
jamie@140
|
63 {
|
jamie@108
|
64 /* argc = 1 */
|
jamie@140
|
65 case XTRACT_VARIANCE:
|
jamie@140
|
66 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@140
|
67 case XTRACT_STANDARD_DEVIATION:
|
jamie@140
|
68 case XTRACT_DIFFERENCE_VECTOR:
|
jamie@140
|
69 case XTRACT_AVERAGE_DEVIATION:
|
jamie@140
|
70 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@123
|
71 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */
|
jamie@140
|
72 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
73 case XTRACT_TONALITY:
|
jamie@140
|
74 case XTRACT_MFCC:
|
jamie@140
|
75 case XTRACT_LPC:
|
jamie@140
|
76 case XTRACT_LPCC:
|
jamie@140
|
77 *argv_min = XTRACT_ANY;
|
jamie@140
|
78 *argv_max = XTRACT_ANY;
|
jamie@140
|
79 *argv_def = XTRACT_ANY;
|
jamie@140
|
80 *argv_unit = XTRACT_DBFS;
|
jamie@140
|
81 break;
|
jamie@140
|
82 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@146
|
83 *argv_min = 0.0;
|
jamie@146
|
84 *argv_max = XTRACT_SR_UPPER_LIMIT / 2.0;
|
jamie@140
|
85 *argv_def = XTRACT_FUNDAMENTAL_DEFAULT;
|
jamie@140
|
86 *argv_unit = XTRACT_HERTZ;
|
jamie@140
|
87 break;
|
jamie@140
|
88 case XTRACT_F0:
|
jamie@140
|
89 case XTRACT_FAILSAFE_F0:
|
jamie@161
|
90 case XTRACT_WAVELET_F0:
|
jamie@205
|
91 case XTRACT_MIDICENT:
|
jamie@140
|
92 *argv_min = XTRACT_SR_LOWER_LIMIT;
|
jamie@140
|
93 *argv_max = XTRACT_SR_UPPER_LIMIT;
|
jamie@140
|
94 *argv_def = XTRACT_SR_DEFAULT;
|
jamie@140
|
95 *argv_unit = XTRACT_HERTZ;
|
jamie@140
|
96 break;
|
jamie@140
|
97 case XTRACT_FLATNESS_DB:
|
jamie@140
|
98 *argv_min = 0;
|
jamie@140
|
99 *argv_max = 1.0;
|
jamie@140
|
100 *argv_def = XTRACT_ANY;
|
jamie@140
|
101 *argv_unit = XTRACT_DBFS;
|
jamie@140
|
102 break;
|
jamie@114
|
103 /* argc = 2 */;
|
jamie@140
|
104 case XTRACT_ROLLOFF:
|
jamie@140
|
105 *argv_min = XTRACT_FFT_BANDS_MIN;
|
jamie@140
|
106 *argv_max = XTRACT_FFT_BANDS_MAX;
|
jamie@140
|
107 *argv_def = XTRACT_SPEC_BW_DEF ;
|
jamie@140
|
108 *argv_unit = XTRACT_HERTZ;
|
jamie@146
|
109 *(argv_min + 1) = 0.0;
|
jamie@146
|
110 *(argv_max + 1) = 100.0;
|
jamie@146
|
111 *(argv_def + 1) = 95.0;
|
jamie@140
|
112 *(argv_unit + 1) = XTRACT_PERCENT;
|
jamie@140
|
113 break;
|
jamie@140
|
114 case XTRACT_PEAK_SPECTRUM:
|
jamie@146
|
115 *argv_min = XTRACT_SR_LOWER_LIMIT / 2.0;
|
jamie@146
|
116 *argv_max = XTRACT_SR_UPPER_LIMIT / 2.0;
|
jamie@146
|
117 *argv_def = XTRACT_SR_DEFAULT / 2.0;
|
jamie@140
|
118 *argv_unit = XTRACT_HERTZ;
|
jamie@146
|
119 *(argv_min + 1) = 0.0;
|
jamie@146
|
120 *(argv_max + 1) = 100.0 ;
|
jamie@146
|
121 *(argv_def + 1) = 10.0 ;
|
jamie@140
|
122 *(argv_unit + 1) = XTRACT_PERCENT;
|
jamie@140
|
123 break;
|
jamie@140
|
124 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@146
|
125 *argv_min = 0.0;
|
jamie@146
|
126 *argv_max = XTRACT_SR_UPPER_LIMIT / 2.0;
|
jamie@140
|
127 *argv_def = XTRACT_FUNDAMENTAL_DEFAULT;
|
jamie@140
|
128 *argv_unit = XTRACT_HERTZ;
|
jamie@146
|
129 *(argv_min + 1) = 0.0;
|
jamie@146
|
130 *(argv_max + 1) = 1.0 ;
|
jamie@146
|
131 *(argv_def + 1) = .1 ;
|
andrea@211
|
132 *(argv_unit + 1) = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
133 break;
|
jamie@140
|
134 case XTRACT_NOISINESS:
|
jamie@140
|
135 case XTRACT_SKEWNESS:
|
jamie@140
|
136 case XTRACT_KURTOSIS:
|
jamie@140
|
137 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@140
|
138 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@140
|
139 case XTRACT_CREST:
|
jamie@140
|
140 *argv_min = XTRACT_NONE;
|
jamie@140
|
141 *argv_max = XTRACT_NONE;
|
jamie@140
|
142 *argv_def = XTRACT_NONE;
|
andrea@211
|
143 *argv_unit = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
144 *(argv_min + 1) = XTRACT_NONE;
|
jamie@140
|
145 *(argv_max + 1) = XTRACT_NONE;
|
jamie@140
|
146 *(argv_def + 1) = XTRACT_NONE;
|
andrea@211
|
147 *(argv_unit + 1) = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
148 break;
|
jamie@114
|
149 /* argc = 4 */
|
jamie@140
|
150 case XTRACT_SPECTRUM:
|
jamie@140
|
151 *argv_min = XTRACT_SR_LOWER_LIMIT / XTRACT_FFT_BANDS_MIN;
|
jamie@140
|
152 *argv_max = XTRACT_SR_UPPER_LIMIT / XTRACT_FFT_BANDS_MAX;
|
jamie@140
|
153 *argv_def = XTRACT_SR_DEFAULT / XTRACT_FFT_BANDS_DEF;
|
jamie@140
|
154 *argv_unit = XTRACT_HERTZ;
|
jamie@140
|
155 *(argv_min + 1) = 0;
|
jamie@140
|
156 *(argv_max + 1) = 3 ;
|
jamie@140
|
157 *(argv_def + 1) = 0;
|
andrea@211
|
158 *(argv_unit + 1) = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
159 *(argv_min + 2) = 0;
|
jamie@140
|
160 *(argv_max + 2) = 1;
|
jamie@140
|
161 *(argv_def + 2) = 0;
|
andrea@211
|
162 *(argv_unit + 2) = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
163 *(argv_min + 3) = 0;
|
jamie@140
|
164 *(argv_max + 3) = 1;
|
jamie@140
|
165 *(argv_def + 3) = 0;
|
andrea@211
|
166 *(argv_unit + 3) = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
167 break;
|
jamie@140
|
168 case XTRACT_SUBBANDS:
|
jamie@140
|
169 *argv_min = XTRACT_ANY;
|
jamie@140
|
170 *argv_max = XTRACT_ANY;
|
jamie@140
|
171 *argv_def = XTRACT_MEAN;
|
andrea@211
|
172 *argv_unit = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
173 *(argv_min + 1) = 1;
|
jamie@140
|
174 *(argv_max + 1) = 16384;
|
jamie@140
|
175 *(argv_def + 1) = 4;
|
andrea@211
|
176 *(argv_unit + 1) = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
177 *(argv_min + 2) = 0;
|
jamie@140
|
178 *(argv_max + 2) = 32;
|
jamie@140
|
179 *(argv_def + 2) = 0;
|
andrea@211
|
180 *(argv_unit + 2) = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
181 *(argv_min + 3) = 0;
|
jamie@140
|
182 *(argv_max + 3) = XTRACT_ANY;
|
jamie@140
|
183 *(argv_def + 3) = 0;
|
jamie@140
|
184 *(argv_unit + 3) = XTRACT_BINS;
|
jamie@140
|
185 break;
|
jamie@140
|
186 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
187 /* BARK_COEFFICIENTS is special because argc = BARK_BANDS */
|
jamie@140
|
188 case XTRACT_WINDOWED:
|
jamie@140
|
189 /* WINDOWED is special because argc = window size = N */
|
jamie@140
|
190 default:
|
jamie@140
|
191 *argv_min = XTRACT_NONE;
|
jamie@140
|
192 *argv_max = XTRACT_NONE;
|
jamie@140
|
193 *argv_def = XTRACT_NONE;
|
andrea@211
|
194 *argv_unit = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
195 break;
|
jamie@108
|
196 }
|
jamie@55
|
197
|
jamie@108
|
198 argv_donor = &d->argv.donor[0];
|
jamie@55
|
199
|
jamie@140
|
200 switch (f)
|
jamie@140
|
201 {
|
jamie@108
|
202 /* argc = 1 */
|
jamie@140
|
203 case XTRACT_VARIANCE:
|
jamie@140
|
204 *argv_donor = XTRACT_MEAN;
|
jamie@140
|
205 break;
|
jamie@140
|
206 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@140
|
207 *argv_donor = XTRACT_SPECTRAL_MEAN;
|
jamie@140
|
208 break;
|
jamie@140
|
209 case XTRACT_STANDARD_DEVIATION:
|
jamie@140
|
210 *argv_donor = XTRACT_VARIANCE;
|
jamie@140
|
211 break;
|
jamie@140
|
212 case XTRACT_AVERAGE_DEVIATION:
|
jamie@140
|
213 *argv_donor = XTRACT_MEAN;
|
jamie@140
|
214 break;
|
jamie@140
|
215 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@140
|
216 *argv_donor = XTRACT_SPECTRAL_VARIANCE;
|
jamie@140
|
217 break;
|
jamie@123
|
218 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION:
|
jamie@108
|
219 *argv_donor = XTRACT_SPECTRAL_MEAN;
|
jamie@123
|
220 break; */
|
jamie@140
|
221 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@140
|
222 *argv_donor = XTRACT_FAILSAFE_F0;
|
jamie@140
|
223 break;
|
jamie@140
|
224 case XTRACT_FLATNESS_DB:
|
jamie@140
|
225 *argv_donor = XTRACT_FLATNESS;
|
jamie@140
|
226 break;
|
jamie@140
|
227 case XTRACT_TONALITY:
|
jamie@140
|
228 *argv_donor = XTRACT_FLATNESS_DB;
|
jamie@140
|
229 break;
|
jamie@140
|
230 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
231 case XTRACT_F0:
|
jamie@140
|
232 case XTRACT_FAILSAFE_F0:
|
jamie@161
|
233 case XTRACT_WAVELET_F0:
|
jamie@205
|
234 case XTRACT_MIDICENT:
|
jamie@140
|
235 *argv_donor = XTRACT_ANY;
|
jamie@140
|
236 break;
|
jamie@140
|
237 case XTRACT_MFCC:
|
jamie@140
|
238 *argv_donor = XTRACT_INIT_MFCC;
|
jamie@140
|
239 break;
|
jamie@140
|
240 /* argc = 2 */;
|
jamie@140
|
241 case XTRACT_ROLLOFF:
|
jamie@140
|
242 case XTRACT_PEAK_SPECTRUM:
|
jamie@140
|
243 case XTRACT_FLUX:
|
jamie@140
|
244 case XTRACT_LNORM:
|
jamie@140
|
245 *argv_donor = XTRACT_ANY;
|
jamie@140
|
246 *(argv_donor + 1) = XTRACT_ANY;
|
jamie@140
|
247 break;
|
jamie@140
|
248 case XTRACT_SKEWNESS:
|
jamie@140
|
249 case XTRACT_KURTOSIS:
|
jamie@140
|
250 *argv_donor = XTRACT_MEAN;
|
jamie@140
|
251 *(argv_donor + 1) = XTRACT_STANDARD_DEVIATION;
|
jamie@140
|
252 break;
|
jamie@140
|
253 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@140
|
254 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@140
|
255 *argv_donor = XTRACT_SPECTRAL_MEAN;
|
jamie@140
|
256 *(argv_donor + 1) = XTRACT_SPECTRAL_STANDARD_DEVIATION;
|
jamie@140
|
257 break;
|
jamie@140
|
258 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@140
|
259 *argv_donor = XTRACT_FAILSAFE_F0;
|
jamie@140
|
260 *(argv_donor + 1) = XTRACT_ANY;
|
jamie@140
|
261 break;
|
jamie@140
|
262 case XTRACT_NOISINESS:
|
jamie@140
|
263 *argv_donor = XTRACT_SUM;
|
jamie@140
|
264 *(argv_donor + 1) = XTRACT_SUM;
|
jamie@140
|
265 break;
|
jamie@140
|
266 case XTRACT_CREST:
|
jamie@140
|
267 *argv_donor = XTRACT_HIGHEST_VALUE;
|
jamie@140
|
268 *(argv_donor + 1) = XTRACT_MEAN;
|
jamie@140
|
269 break;
|
jamie@140
|
270 /* argc = 4 */
|
jamie@140
|
271 case XTRACT_SPECTRUM:
|
jamie@140
|
272 *argv_donor = XTRACT_ANY;
|
jamie@140
|
273 *(argv_donor + 1) = XTRACT_ANY;
|
jamie@140
|
274 *(argv_donor + 2) = XTRACT_ANY;
|
jamie@140
|
275 *(argv_donor + 3) = XTRACT_ANY;
|
jamie@140
|
276 break;
|
jamie@140
|
277 case XTRACT_SUBBANDS:
|
jamie@140
|
278 *argv_donor = XTRACT_ANY;
|
jamie@140
|
279 *(argv_donor + 1) = XTRACT_ANY;
|
jamie@140
|
280 *(argv_donor + 2) = XTRACT_ANY;
|
jamie@140
|
281 *(argv_donor + 3) = XTRACT_ANY;
|
jamie@140
|
282 break;
|
jamie@108
|
283 /* BARK_BANDS */
|
jamie@140
|
284 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
285 *argv_donor = XTRACT_INIT_BARK;
|
jamie@140
|
286 break;
|
jamie@140
|
287 case XTRACT_WINDOWED:
|
jamie@140
|
288 *argv_donor = XTRACT_INIT_WINDOWED;
|
jamie@140
|
289 break;
|
jamie@140
|
290 default:
|
jamie@140
|
291 *argv_donor = XTRACT_ANY;
|
jamie@140
|
292 break;
|
jamie@108
|
293 }
|
jamie@51
|
294
|
jamie@54
|
295 data_format = &d->data.format;
|
jamie@54
|
296
|
jamie@140
|
297 switch(f)
|
jamie@140
|
298 {
|
jamie@54
|
299
|
jamie@140
|
300 case XTRACT_MEAN:
|
jamie@140
|
301 case XTRACT_VARIANCE:
|
jamie@140
|
302 case XTRACT_STANDARD_DEVIATION:
|
jamie@140
|
303 case XTRACT_AVERAGE_DEVIATION:
|
jamie@140
|
304 case XTRACT_SKEWNESS:
|
jamie@140
|
305 case XTRACT_KURTOSIS:
|
jamie@140
|
306 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
307 case XTRACT_HIGHEST_VALUE:
|
jamie@140
|
308 case XTRACT_SUM:
|
jamie@140
|
309 case XTRACT_WINDOWED:
|
jamie@140
|
310 *data_format = XTRACT_ARBITRARY_SERIES;
|
jamie@140
|
311 break;
|
jamie@140
|
312 case XTRACT_SPECTRAL_MEAN:
|
jamie@140
|
313 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@140
|
314 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@123
|
315 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */
|
jamie@140
|
316 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@140
|
317 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@140
|
318 case XTRACT_SPECTRAL_CENTROID:
|
jamie@140
|
319 case XTRACT_SPECTRAL_SLOPE:
|
jamie@140
|
320 *data_format = XTRACT_SPECTRAL;
|
jamie@140
|
321 break;
|
jamie@140
|
322 case XTRACT_ROLLOFF:
|
jamie@140
|
323 case XTRACT_NOISINESS:
|
jamie@140
|
324 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
325 case XTRACT_CREST:
|
jamie@140
|
326 case XTRACT_IRREGULARITY_K:
|
jamie@140
|
327 case XTRACT_IRREGULARITY_J:
|
jamie@140
|
328 case XTRACT_SMOOTHNESS:
|
jamie@140
|
329 case XTRACT_FLATNESS:
|
jamie@140
|
330 case XTRACT_SPREAD:
|
jamie@140
|
331 case XTRACT_POWER:
|
jamie@140
|
332 case XTRACT_HPS:
|
jamie@140
|
333 case XTRACT_PEAK_SPECTRUM:
|
jamie@140
|
334 case XTRACT_SUBBANDS:
|
jamie@140
|
335 case XTRACT_MFCC:
|
jamie@140
|
336 *data_format = XTRACT_SPECTRAL_MAGNITUDES;
|
jamie@140
|
337 break;
|
jamie@140
|
338 case XTRACT_LPC:
|
jamie@140
|
339 *data_format = XTRACT_AUTOCORRELATION_COEFFS;
|
jamie@140
|
340 break;
|
jamie@140
|
341 case XTRACT_LPCC:
|
jamie@140
|
342 *data_format = XTRACT_LPC_COEFFS;
|
jamie@140
|
343 break;
|
jamie@140
|
344 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@140
|
345 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@140
|
346 *data_format = XTRACT_SPECTRAL_PEAKS;
|
jamie@140
|
347 break;
|
jamie@140
|
348 case XTRACT_NONZERO_COUNT:
|
jamie@140
|
349 *data_format = XTRACT_SPECTRAL_PEAKS_MAGNITUDES;
|
jamie@140
|
350 break;
|
jamie@140
|
351 case XTRACT_F0:
|
jamie@140
|
352 case XTRACT_FAILSAFE_F0:
|
jamie@161
|
353 case XTRACT_WAVELET_F0:
|
jamie@140
|
354 case XTRACT_SPECTRUM:
|
jamie@140
|
355 case XTRACT_AUTOCORRELATION:
|
jamie@140
|
356 case XTRACT_AUTOCORRELATION_FFT:
|
jamie@140
|
357 case XTRACT_DCT:
|
jamie@140
|
358 case XTRACT_AMDF:
|
jamie@140
|
359 case XTRACT_ASDF:
|
jamie@140
|
360 case XTRACT_ZCR:
|
jamie@140
|
361 case XTRACT_RMS_AMPLITUDE:
|
jamie@140
|
362 case XTRACT_FLUX:
|
jamie@140
|
363 case XTRACT_LNORM:
|
jamie@140
|
364 *data_format = XTRACT_AUDIO_SAMPLES;
|
jamie@140
|
365 break;
|
jamie@140
|
366 case XTRACT_TONALITY:
|
jamie@140
|
367 case XTRACT_FLATNESS_DB:
|
jamie@140
|
368 *data_format = XTRACT_NO_DATA;
|
jamie@140
|
369 break;
|
jamie@140
|
370 case XTRACT_TRISTIMULUS_1:
|
jamie@140
|
371 case XTRACT_TRISTIMULUS_2:
|
jamie@140
|
372 case XTRACT_TRISTIMULUS_3:
|
jamie@140
|
373 case XTRACT_ODD_EVEN_RATIO:
|
jamie@140
|
374 *data_format = XTRACT_SPECTRAL_HARMONICS_MAGNITUDES;
|
jamie@140
|
375 break;
|
jamie@140
|
376 case XTRACT_LOUDNESS:
|
jamie@140
|
377 case XTRACT_SHARPNESS:
|
jamie@140
|
378 *data_format = XTRACT_BARK_COEFFS;
|
jamie@140
|
379 break;
|
jamie@140
|
380 case XTRACT_DIFFERENCE_VECTOR:
|
jamie@140
|
381 *data_format = XTRACT_SUBFRAMES;
|
jamie@140
|
382 break;
|
jamie@140
|
383 case XTRACT_ATTACK_TIME:
|
jamie@140
|
384 case XTRACT_DECAY_TIME:
|
jamie@205
|
385 case XTRACT_MIDICENT:
|
jamie@140
|
386 default:
|
jamie@140
|
387 *data_format = XTRACT_NO_DATA;
|
jamie@140
|
388 break;
|
jamie@108
|
389 }
|
jamie@54
|
390
|
jamie@55
|
391 data_unit = &d->data.unit;
|
jamie@55
|
392
|
jamie@140
|
393 switch(f)
|
jamie@140
|
394 {
|
jamie@55
|
395
|
jamie@140
|
396 case XTRACT_MEAN:
|
jamie@140
|
397 case XTRACT_VARIANCE:
|
jamie@140
|
398 case XTRACT_STANDARD_DEVIATION:
|
jamie@140
|
399 case XTRACT_AVERAGE_DEVIATION:
|
jamie@140
|
400 case XTRACT_SKEWNESS:
|
jamie@140
|
401 case XTRACT_KURTOSIS:
|
jamie@140
|
402 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
403 case XTRACT_HIGHEST_VALUE:
|
jamie@140
|
404 case XTRACT_SUM:
|
jamie@140
|
405 case XTRACT_ZCR:
|
jamie@140
|
406 case XTRACT_PEAK_SPECTRUM:
|
jamie@140
|
407 case XTRACT_TRISTIMULUS_1:
|
jamie@140
|
408 case XTRACT_TRISTIMULUS_2:
|
jamie@140
|
409 case XTRACT_TRISTIMULUS_3:
|
jamie@140
|
410 case XTRACT_DCT:
|
jamie@140
|
411 case XTRACT_AMDF:
|
jamie@140
|
412 case XTRACT_ASDF:
|
jamie@140
|
413 case XTRACT_IRREGULARITY_K:
|
jamie@140
|
414 case XTRACT_IRREGULARITY_J:
|
jamie@140
|
415 case XTRACT_ATTACK_TIME:
|
jamie@140
|
416 case XTRACT_DECAY_TIME:
|
jamie@140
|
417 case XTRACT_DIFFERENCE_VECTOR:
|
jamie@140
|
418 case XTRACT_FLUX:
|
jamie@140
|
419 case XTRACT_LNORM:
|
jamie@140
|
420 case XTRACT_F0:
|
jamie@140
|
421 case XTRACT_FAILSAFE_F0:
|
jamie@161
|
422 case XTRACT_WAVELET_F0:
|
jamie@140
|
423 case XTRACT_MFCC:
|
jamie@140
|
424 case XTRACT_AUTOCORRELATION:
|
jamie@140
|
425 case XTRACT_AUTOCORRELATION_FFT:
|
jamie@140
|
426 case XTRACT_ROLLOFF:
|
jamie@140
|
427 case XTRACT_NOISINESS:
|
jamie@140
|
428 case XTRACT_CREST:
|
jamie@140
|
429 case XTRACT_FLATNESS:
|
jamie@140
|
430 case XTRACT_FLATNESS_DB:
|
jamie@140
|
431 case XTRACT_POWER:
|
jamie@140
|
432 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
433 case XTRACT_RMS_AMPLITUDE:
|
jamie@140
|
434 case XTRACT_SMOOTHNESS:
|
jamie@140
|
435 case XTRACT_SPREAD:
|
jamie@140
|
436 case XTRACT_SHARPNESS:
|
jamie@140
|
437 case XTRACT_HPS:
|
jamie@140
|
438 case XTRACT_SPECTRUM:
|
jamie@140
|
439 case XTRACT_TONALITY:
|
jamie@140
|
440 case XTRACT_LOUDNESS:
|
jamie@140
|
441 case XTRACT_NONZERO_COUNT:
|
jamie@140
|
442 case XTRACT_LPC:
|
jamie@140
|
443 case XTRACT_LPCC:
|
jamie@140
|
444 case XTRACT_WINDOWED:
|
jamie@140
|
445 case XTRACT_SUBBANDS:
|
andrea@211
|
446 *data_unit = (xtract_unit_t)XTRACT_ANY;
|
jamie@140
|
447 break;
|
jamie@140
|
448 case XTRACT_SPECTRAL_MEAN:
|
jamie@140
|
449 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@140
|
450 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@123
|
451 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */
|
jamie@140
|
452 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@140
|
453 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@140
|
454 case XTRACT_SPECTRAL_CENTROID:
|
jamie@140
|
455 case XTRACT_SPECTRAL_SLOPE:
|
jamie@140
|
456 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@140
|
457 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@140
|
458 *data_unit = XTRACT_ANY_AMPLITUDE_HERTZ;
|
jamie@140
|
459 break;
|
jamie@140
|
460 case XTRACT_ODD_EVEN_RATIO:
|
jamie@140
|
461 *data_unit = XTRACT_HERTZ;
|
jamie@140
|
462 break;
|
jamie@108
|
463 }
|
jamie@55
|
464
|
jamie@108
|
465 name = d->algo.name;
|
jamie@108
|
466 p_name = d->algo.p_name;
|
jamie@108
|
467 desc = d->algo.desc;
|
jamie@108
|
468 p_desc = d->algo.p_desc;
|
jamie@108
|
469 author = d->algo.author;
|
jamie@108
|
470 year = &d->algo.year;
|
jamie@51
|
471
|
jamie@108
|
472 strcpy(author, "");
|
jamie@108
|
473 *year = 0;
|
jamie@51
|
474
|
jamie@140
|
475 switch(f)
|
jamie@140
|
476 {
|
jamie@140
|
477 case XTRACT_MEAN:
|
jamie@140
|
478 strcpy(name, "mean");
|
jamie@140
|
479 strcpy(p_name, "Mean");
|
jamie@140
|
480 strcpy(desc, "Extract the mean of an input vector");
|
jamie@140
|
481 strcpy(p_desc, "Extract the mean of a range of values");
|
jamie@140
|
482 strcpy(author, "");
|
jamie@140
|
483 break;
|
jamie@140
|
484 case XTRACT_VARIANCE:
|
jamie@140
|
485 strcpy(name, "variance");
|
jamie@140
|
486 strcpy(p_name, "Variance");
|
jamie@140
|
487 strcpy(desc, "Extract the variance of an input vector");
|
jamie@140
|
488 strcpy(p_desc, "Extract the variance of a range of values");
|
jamie@140
|
489 strcpy(author, "");
|
jamie@140
|
490 break;
|
jamie@140
|
491 case XTRACT_STANDARD_DEVIATION:
|
jamie@140
|
492 strcpy(name, "standard_deviation");
|
jamie@140
|
493 strcpy(p_name, "Standard Deviation");
|
jamie@140
|
494 strcpy(desc,
|
jamie@140
|
495 "Extract the standard deviation of an input vector");
|
jamie@140
|
496 strcpy(p_desc,
|
jamie@140
|
497 "Extract the standard deviation of a range of values");
|
jamie@140
|
498 strcpy(author, "");
|
jamie@140
|
499 break;
|
jamie@140
|
500 case XTRACT_AVERAGE_DEVIATION:
|
jamie@140
|
501 strcpy(name, "average_deviation");
|
jamie@140
|
502 strcpy(p_name, "Average Deviation");
|
jamie@140
|
503 strcpy(desc,
|
jamie@140
|
504 "Extract the average deviation of an input vector");
|
jamie@140
|
505 strcpy(p_desc,
|
jamie@140
|
506 "Extract the average deviation of a range of values");
|
jamie@140
|
507 strcpy(author, "");
|
jamie@140
|
508 break;
|
jamie@140
|
509 case XTRACT_SKEWNESS:
|
jamie@140
|
510 strcpy(name, "skewness");
|
jamie@140
|
511 strcpy(p_name, "Skewness");
|
jamie@140
|
512 strcpy(desc,
|
jamie@140
|
513 "Extract the skewness of an input vector");
|
jamie@140
|
514 strcpy(p_desc,
|
jamie@140
|
515 "Extract the skewness of a range of values");
|
jamie@140
|
516 strcpy(author, "");
|
jamie@140
|
517 break;
|
jamie@140
|
518 case XTRACT_KURTOSIS:
|
jamie@140
|
519 strcpy(name, "kurtosis");
|
jamie@140
|
520 strcpy(p_name, "Kurtosis");
|
jamie@140
|
521 strcpy(desc,
|
jamie@140
|
522 "Extract the kurtosis of an input vector");
|
jamie@140
|
523 strcpy(p_desc,
|
jamie@140
|
524 "Extract the kurtosis of a range of values");
|
jamie@140
|
525 strcpy(author, "");
|
jamie@140
|
526 break;
|
jamie@140
|
527 case XTRACT_SPECTRAL_MEAN:
|
jamie@140
|
528 strcpy(name, "spectral_mean");
|
jamie@140
|
529 strcpy(p_name, "Spectral Mean");
|
jamie@140
|
530 strcpy(desc, "Extract the mean of an input spectrum");
|
jamie@140
|
531 strcpy(p_desc, "Extract the mean of an audio spectrum");
|
jamie@140
|
532 strcpy(author, "");
|
jamie@140
|
533 break;
|
jamie@140
|
534 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@140
|
535 strcpy(name, "spectral_variance");
|
jamie@140
|
536 strcpy(p_name, "Spectral Variance");
|
jamie@140
|
537 strcpy(desc, "Extract the variance of an input spectrum");
|
jamie@140
|
538 strcpy(p_desc, "Extract the variance of an audio spectrum");
|
jamie@140
|
539 strcpy(author, "");
|
jamie@140
|
540 break;
|
jamie@140
|
541 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@140
|
542 strcpy(name, "spectral_standard_deviation");
|
jamie@140
|
543 strcpy(p_name, "Spectral Standard Deviation");
|
jamie@140
|
544 strcpy(desc,
|
jamie@140
|
545 "Extract the standard deviation of an input spectrum");
|
jamie@140
|
546 strcpy(p_desc,
|
jamie@140
|
547 "Extract the standard deviation of an audio spectrum");
|
jamie@140
|
548 strcpy(author, "");
|
jamie@140
|
549 break;
|
jamie@123
|
550 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION:
|
jamie@108
|
551 strcpy(name, "spectral_average_deviation");
|
jamie@108
|
552 strcpy(p_name, "Spectral Average Deviation");
|
jamie@140
|
553 strcpy(desc,
|
jamie@108
|
554 "Extract the average deviation of an input spectrum");
|
jamie@140
|
555 strcpy(p_desc,
|
jamie@108
|
556 "Extract the average deviation of an audio spectrum");
|
jamie@108
|
557 strcpy(author, "");
|
jamie@108
|
558 break;
|
jamie@123
|
559 */
|
jamie@140
|
560 case XTRACT_ROLLOFF:
|
jamie@140
|
561 strcpy(name, "rolloff");
|
jamie@140
|
562 strcpy(p_name, "Spectral Rolloff");
|
jamie@140
|
563 strcpy(desc,
|
jamie@140
|
564 "Extract the rolloff point of a spectrum");
|
jamie@140
|
565 strcpy(p_desc,
|
jamie@140
|
566 "Extract the rolloff point of an audio spectrum");
|
jamie@140
|
567 strcpy(author, "Bee Suan Ong");
|
jamie@140
|
568 *year = 2005;
|
jamie@140
|
569 break;
|
jamie@140
|
570 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@140
|
571 strcpy(name, "spectral_inharmonicity");
|
jamie@140
|
572 strcpy(p_name, "Inharmonicity");
|
jamie@140
|
573 strcpy(desc, "Extract the inharmonicity of a spectrum");
|
jamie@140
|
574 strcpy(p_desc,
|
jamie@140
|
575 "Extract the inharmonicity of an audio spectrum");
|
jamie@140
|
576 break;
|
jamie@140
|
577 case XTRACT_SPECTRUM:
|
jamie@140
|
578 strcpy(name, "spectrum");
|
jamie@140
|
579 strcpy(p_name, "Spectrum");
|
jamie@140
|
580 strcpy(desc,
|
jamie@140
|
581 "Extract the spectrum of an input vector");
|
jamie@140
|
582 strcpy(p_desc,
|
jamie@140
|
583 "Extract the spectrum of an audio signal");
|
jamie@140
|
584 strcpy(author, "");
|
jamie@140
|
585 break;
|
jamie@140
|
586 case XTRACT_ODD_EVEN_RATIO:
|
jamie@140
|
587 strcpy(name, "odd_even_ratio");
|
jamie@140
|
588 strcpy(p_name, "Odd/even Harmonic Ratio");
|
jamie@140
|
589 strcpy(desc,
|
jamie@140
|
590 "Extract the odd-to-even harmonic ratio of a spectrum");
|
jamie@140
|
591 strcpy(p_desc,
|
jamie@140
|
592 "Extract the odd-to-even harmonic ratio of an audio spectrum");
|
jamie@140
|
593 strcpy(author, "");
|
jamie@140
|
594 break;
|
jamie@140
|
595 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
596 strcpy(name, "lowest_value");
|
jamie@140
|
597 strcpy(p_name, "Lowest Value");
|
jamie@140
|
598 strcpy(desc, "Extract the lowest value from an input vector");
|
jamie@140
|
599 strcpy(p_desc, "Extract the lowest value from a given range");
|
jamie@140
|
600 strcpy(author, "");
|
jamie@140
|
601 break;
|
jamie@140
|
602 case XTRACT_F0:
|
jamie@140
|
603 strcpy(name, "f0");
|
jamie@140
|
604 strcpy(p_name, "Fundamental Frequency");
|
jamie@140
|
605 strcpy(desc, "Extract the fundamental frequency of a signal");
|
jamie@140
|
606 strcpy(p_desc,
|
jamie@140
|
607 "Extract the fundamental frequency of an audio signal");
|
jamie@140
|
608 strcpy(author, "Jamie Bullock");
|
jamie@140
|
609 break;
|
jamie@140
|
610 case XTRACT_FAILSAFE_F0:
|
jamie@140
|
611 strcpy(name, "failsafe_f0");
|
jamie@140
|
612 strcpy(p_name, "Fundamental Frequency (failsafe)");
|
jamie@140
|
613 strcpy(desc, "Extract the fundamental frequency of a signal (failsafe)");
|
jamie@140
|
614 strcpy(p_desc,
|
jamie@140
|
615 "Extract the fundamental frequency of an audio signal (failsafe)");
|
jamie@140
|
616 strcpy(author, "Jamie Bullock");
|
jamie@140
|
617 break;
|
jamie@161
|
618 case XTRACT_WAVELET_F0:
|
jamie@161
|
619 strcpy(name, "wavelet_f0");
|
jamie@161
|
620 strcpy(p_name, "Fundamental Frequency (wavelet method)");
|
jamie@161
|
621 strcpy(desc, "Extract the fundamental frequency of a signal (wavelet method)");
|
jamie@161
|
622 strcpy(p_desc,
|
jamie@161
|
623 "Extract the fundamental frequency of an audio signal (wavelet method)");
|
jamie@161
|
624 strcpy(author, "Antoine Schmitt");
|
jamie@161
|
625 break;
|
jamie@205
|
626 case XTRACT_MIDICENT:
|
jamie@205
|
627 strcpy(name, "midicent");
|
jamie@205
|
628 strcpy(p_name, "Frequency to MIDI Cent conversion");
|
jamie@205
|
629 strcpy(desc, "Convert frequency in Hertz to Pitch in MIDI cents");
|
jamie@205
|
630 strcpy(p_desc, "Convert frequency in Hertz to Pitch in MIDI cents");
|
jamie@205
|
631 strcpy(author, "Jamie Bullock");
|
jamie@205
|
632 break;
|
jamie@140
|
633 case XTRACT_TONALITY:
|
jamie@140
|
634 strcpy(name, "tonality");
|
jamie@140
|
635 strcpy(p_name, "Tonality");
|
jamie@140
|
636 strcpy(desc, "Extract the tonality of a spectrum");
|
jamie@140
|
637 strcpy(p_desc, "Extract the tonality an audio spectrum");
|
jamie@140
|
638 strcpy(author, "J. D. Johnston");
|
jamie@140
|
639 *year = 1988;
|
jamie@140
|
640 break;
|
jamie@140
|
641 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@140
|
642 strcpy(name, "spectral_skewness");
|
jamie@140
|
643 strcpy(p_name, "Spectral Skewness");
|
jamie@140
|
644 strcpy(desc, "Extract the skewness of an input spectrum");
|
jamie@140
|
645 strcpy(p_desc, "Extract the skewness of an audio spectrum");
|
jamie@140
|
646 strcpy(author, "");
|
jamie@140
|
647 break;
|
jamie@140
|
648 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@140
|
649 strcpy(name, "spectral_kurtosis");
|
jamie@140
|
650 strcpy(p_name, "Spectral Kurtosis");
|
jamie@140
|
651 strcpy(desc, "Extract the kurtosis of an input spectrum");
|
jamie@140
|
652 strcpy(p_desc, "Extract the kurtosis of an audio spectrum");
|
jamie@140
|
653 strcpy(author, "");
|
jamie@140
|
654 break;
|
jamie@140
|
655 case XTRACT_PEAK_SPECTRUM:
|
jamie@140
|
656 strcpy(name, "peak_spectrum");
|
jamie@140
|
657 strcpy(p_name, "Peak Spectrum");
|
jamie@140
|
658 strcpy(desc, "Extract the spectral peaks from of a spectrum");
|
jamie@140
|
659 strcpy(p_desc,
|
jamie@140
|
660 "Extract the spectral peaks from an audio spectrum");
|
jamie@140
|
661 strcpy(author, "");
|
jamie@140
|
662 break;
|
jamie@140
|
663 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@140
|
664 strcpy(name, "harmonic_spectrum");
|
jamie@140
|
665 strcpy(p_name, "Harmonic Spectrum");
|
jamie@140
|
666 strcpy(desc, "Extract the harmonics from a spectrum");
|
jamie@140
|
667 strcpy(p_desc, "Extract the harmonics from an audio spectrum");
|
jamie@140
|
668 strcpy(author, "");
|
jamie@140
|
669 break;
|
jamie@140
|
670 case XTRACT_NOISINESS:
|
jamie@140
|
671 strcpy(name, "noisiness");
|
jamie@140
|
672 strcpy(p_name, "Noisiness");
|
jamie@140
|
673 strcpy(desc, "Extract the noisiness of a spectrum");
|
jamie@140
|
674 strcpy(p_desc, "Extract the noisiness of an audio spectrum");
|
jamie@140
|
675 strcpy(author, "Tae Hong Park");
|
jamie@140
|
676 *year = 2000;
|
jamie@140
|
677 break;
|
jamie@140
|
678 case XTRACT_CREST:
|
jamie@140
|
679 strcpy(name, "crest");
|
jamie@140
|
680 strcpy(p_name, "Spectral Crest Measure");
|
jamie@140
|
681 strcpy(desc,
|
jamie@140
|
682 "Extract the spectral crest measure of a spectrum");
|
jamie@140
|
683 strcpy(p_desc,
|
jamie@140
|
684 "Extract the spectral crest measure of an audio spectrum");
|
jamie@140
|
685 strcpy(author, "Peeters");
|
jamie@140
|
686 *year = 2003;
|
jamie@140
|
687 break;
|
jamie@140
|
688 case XTRACT_MFCC:
|
jamie@140
|
689 strcpy(name, "mfcc");
|
jamie@140
|
690 strcpy(p_name, "Mel-Frequency Cepstral Coefficients");
|
jamie@140
|
691 strcpy(desc, "Extract MFCC from a spectrum");
|
jamie@140
|
692 strcpy(p_desc, "Extract MFCC from an audio spectrum");
|
jamie@140
|
693 strcpy(author, "Rabiner");
|
jamie@140
|
694 break;
|
jamie@140
|
695 case XTRACT_LPC:
|
jamie@140
|
696 strcpy(name, "lpc");
|
jamie@140
|
697 strcpy(p_name, "Linear predictive coding coefficients");
|
jamie@140
|
698 strcpy(desc, "Extract LPC from autocorrelation coefficients");
|
jamie@140
|
699 strcpy(p_desc,
|
jamie@140
|
700 "Extract LPC from autocorrelation coefficients");
|
jamie@140
|
701 strcpy(author,
|
jamie@140
|
702 "Rabiner and Juang as implemented by Jutta Degener");
|
jamie@140
|
703 *year = 1994;
|
jamie@140
|
704 break;
|
jamie@140
|
705 case XTRACT_LPCC:
|
jamie@140
|
706 strcpy(name, "lpcc");
|
jamie@140
|
707 strcpy(p_name, "Linear predictive coding cepstral coefficients");
|
jamie@140
|
708 strcpy(desc, "Extract LPC cepstrum from LPC coefficients");
|
jamie@140
|
709 strcpy(p_desc,
|
jamie@140
|
710 "Extract LPC cepstrum from LPC coefficients");
|
jamie@140
|
711 strcpy(author, "Rabiner and Juang");
|
jamie@140
|
712 *year = 1993;
|
jamie@140
|
713 break;
|
jamie@140
|
714 case XTRACT_SUBBANDS:
|
jamie@140
|
715 strcpy(name, "subbands");
|
jamie@140
|
716 strcpy(p_name, "Sub band coefficients");
|
jamie@140
|
717 strcpy(desc, "Extract subband coefficients from spectral magnitudes");
|
jamie@140
|
718 strcpy(p_desc,
|
jamie@140
|
719 "Extract subband coefficients from spectral magnitudes");
|
jamie@140
|
720 strcpy(author, "");
|
jamie@140
|
721 break;
|
jamie@140
|
722 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
723 strcpy(name, "bark_coefficients");
|
jamie@140
|
724 strcpy(p_name, "Bark Coefficients");
|
jamie@140
|
725 strcpy(desc, "Extract bark coefficients from a spectrum");
|
jamie@140
|
726 strcpy(p_desc,
|
jamie@140
|
727 "Extract bark coefficients from an audio spectrum");
|
jamie@140
|
728 strcpy(author, "");
|
jamie@140
|
729 break;
|
jamie@140
|
730 case XTRACT_SPECTRAL_CENTROID:
|
jamie@140
|
731 strcpy(name, "spectral_centroid");
|
jamie@140
|
732 strcpy(p_name, "Spectral Centroid");
|
jamie@140
|
733 strcpy(desc, "Extract the spectral centroid of a spectrum");
|
jamie@140
|
734 strcpy(p_desc,
|
jamie@140
|
735 "Extract the spectral centroid of an audio spectrum");
|
jamie@140
|
736 strcpy(author, "");
|
jamie@140
|
737 break;
|
jamie@140
|
738 case XTRACT_IRREGULARITY_K:
|
jamie@140
|
739 strcpy(name, "irregularity_k");
|
jamie@140
|
740 strcpy(p_name, "Irregularity I");
|
jamie@140
|
741 strcpy(desc, "Extract the irregularity (type I) of a spectrum");
|
jamie@140
|
742 strcpy(p_desc,
|
jamie@140
|
743 "Extract the irregularity (type I) of an audio spectrum");
|
jamie@140
|
744 strcpy(author, "Krimphoff");
|
jamie@140
|
745 *year = 1994;
|
jamie@140
|
746 break;
|
jamie@140
|
747 case XTRACT_IRREGULARITY_J:
|
jamie@140
|
748 strcpy(name, "irregularity_j");
|
jamie@140
|
749 strcpy(p_name, "Irregularity II");
|
jamie@140
|
750 strcpy(desc, "Extract the irregularity (type II) of a spectrum");
|
jamie@140
|
751 strcpy(p_desc,
|
jamie@140
|
752 "Extract the irregularity (type II) of an audio spectrum");
|
jamie@140
|
753 strcpy(author, "Jensen");
|
jamie@140
|
754 *year = 1999;
|
jamie@140
|
755 break;
|
jamie@140
|
756 case XTRACT_TRISTIMULUS_1:
|
jamie@140
|
757 strcpy(name, "tristimulus_1");
|
jamie@140
|
758 strcpy(p_name, "Tristimulus I");
|
jamie@140
|
759 strcpy(desc, "Extract the tristimulus (type I) of a spectrum");
|
jamie@140
|
760 strcpy(p_desc,
|
jamie@140
|
761 "Extract the tristimulus (type I) of an audio spectrum");
|
jamie@140
|
762 strcpy(author, "Pollard and Jansson");
|
jamie@140
|
763 *year = 1982;
|
jamie@140
|
764 break;
|
jamie@140
|
765 case XTRACT_TRISTIMULUS_2:
|
jamie@140
|
766 strcpy(name, "tristimulus_2");
|
jamie@140
|
767 strcpy(p_name, "Tristimulus II");
|
jamie@140
|
768 strcpy(desc, "Extract the tristimulus (type II) of a spectrum");
|
jamie@140
|
769 strcpy(p_desc,
|
jamie@140
|
770 "Extract the tristimulus (type II) of an audio spectrum");
|
jamie@140
|
771 strcpy(author, "Pollard and Jansson");
|
jamie@140
|
772 *year = 1982;
|
jamie@140
|
773 break;
|
jamie@140
|
774 case XTRACT_TRISTIMULUS_3:
|
jamie@140
|
775 strcpy(name, "tristimulus_3");
|
jamie@140
|
776 strcpy(p_name, "Tristimulus III");
|
jamie@140
|
777 strcpy(desc,
|
jamie@140
|
778 "Extract the tristimulus (type III) of a spectrum");
|
jamie@140
|
779 strcpy(p_desc,
|
jamie@140
|
780 "Extract the tristimulus (type III) of an audio spectrum");
|
jamie@140
|
781 strcpy(author, "Pollard and Jansson");
|
jamie@140
|
782 *year = 1982;
|
jamie@140
|
783 break;
|
jamie@140
|
784 case XTRACT_SMOOTHNESS:
|
jamie@140
|
785 strcpy(name, "smoothness");
|
jamie@140
|
786 strcpy(p_name, "Spectral Smoothness");
|
jamie@140
|
787 strcpy(desc, "Extract the spectral smoothness of a spectrum");
|
jamie@140
|
788 strcpy(p_desc,
|
jamie@140
|
789 "Extract the spectral smoothness of an audio spectrum");
|
jamie@140
|
790 strcpy(author, "McAdams");
|
jamie@140
|
791 *year = 1999;
|
jamie@140
|
792 break;
|
jamie@140
|
793 case XTRACT_FLATNESS:
|
jamie@140
|
794 strcpy(name, "flatness");
|
jamie@140
|
795 strcpy(p_name, "Spectral Flatness");
|
jamie@140
|
796 strcpy(desc, "Extract the spectral flatness of a spectrum");
|
jamie@140
|
797 strcpy(p_desc,
|
jamie@140
|
798 "Extract the spectral flatness of an audio spectrum");
|
jamie@140
|
799 strcpy(author, "Tristan Jehan");
|
jamie@140
|
800 *year = 2005;
|
jamie@140
|
801 break;
|
jamie@140
|
802 case XTRACT_FLATNESS_DB:
|
jamie@140
|
803 strcpy(name, "flatness_db");
|
jamie@140
|
804 strcpy(p_name, "Log Spectral Flatness");
|
jamie@140
|
805 strcpy(desc, "Extract the log spectral flatness of a spectrum");
|
jamie@140
|
806 strcpy(p_desc,
|
jamie@140
|
807 "Extract the log spectral flatness of an audio spectrum");
|
jamie@140
|
808 strcpy(author, "Peeters");
|
jamie@140
|
809 *year = 2003;
|
jamie@140
|
810 break;
|
jamie@140
|
811 case XTRACT_SPREAD:
|
jamie@140
|
812 strcpy(name, "spread");
|
jamie@140
|
813 strcpy(p_name, "Spectral Spread");
|
jamie@140
|
814 strcpy(desc, "Extract the spectral spread of a spectrum");
|
jamie@140
|
815 strcpy(p_desc,
|
jamie@140
|
816 "Extract the spectral spread of an audio spectrum");
|
jamie@140
|
817 strcpy(author, "Norman Casagrande");
|
jamie@140
|
818 *year = 2005;
|
jamie@140
|
819 break;
|
jamie@140
|
820 case XTRACT_ZCR:
|
jamie@140
|
821 strcpy(name, "zcr");
|
jamie@140
|
822 strcpy(p_name, "Zero Crossing Rate");
|
jamie@140
|
823 strcpy(desc, "Extract the zero crossing rate of a vector");
|
jamie@140
|
824 strcpy(p_desc,
|
jamie@140
|
825 "Extract the zero crossing rate of an audio signal");
|
jamie@140
|
826 strcpy(author, "");
|
jamie@140
|
827 break;
|
jamie@140
|
828 case XTRACT_LOUDNESS:
|
jamie@140
|
829 strcpy(name, "loudness");
|
jamie@140
|
830 strcpy(p_name, "Loudness");
|
jamie@140
|
831 strcpy(desc,
|
jamie@140
|
832 "Extract the loudness of a signal from its spectrum");
|
jamie@140
|
833 strcpy(p_desc,
|
jamie@140
|
834 "Extract the loudness of an audio signal from its spectrum");
|
jamie@140
|
835 strcpy(author, "Moore, Glasberg et al");
|
jamie@140
|
836 *year = 2005;
|
jamie@140
|
837 break;
|
jamie@140
|
838 case XTRACT_HIGHEST_VALUE:
|
jamie@140
|
839 strcpy(name, "highest_value");
|
jamie@140
|
840 strcpy(p_name, "Highest Value");
|
jamie@140
|
841 strcpy(desc, "Extract the highest value from an input vector");
|
jamie@140
|
842 strcpy(p_desc, "Extract the highest value from a given range");
|
jamie@140
|
843 strcpy(author, "");
|
jamie@140
|
844 break;
|
jamie@140
|
845 case XTRACT_SUM:
|
jamie@140
|
846 strcpy(name, "sum");
|
jamie@140
|
847 strcpy(p_name, "Sum of Values");
|
jamie@140
|
848 strcpy(desc,
|
jamie@140
|
849 "Extract the sum of the values in an input vector");
|
jamie@140
|
850 strcpy(p_desc,
|
jamie@140
|
851 "Extract the sum of the values in a given range");
|
jamie@140
|
852 strcpy(author, "");
|
jamie@140
|
853 break;
|
jamie@140
|
854 case XTRACT_RMS_AMPLITUDE:
|
jamie@140
|
855 strcpy(name, "rms_amplitude");
|
jamie@140
|
856 strcpy(p_name, "RMS Amplitude");
|
jamie@140
|
857 strcpy(desc, "Extract the RMS amplitude of a signal");
|
jamie@140
|
858 strcpy(p_desc, "Extract the RMS amplitude of an audio signal");
|
jamie@140
|
859 strcpy(author, "");
|
jamie@140
|
860 break;
|
jamie@140
|
861 case XTRACT_POWER:
|
jamie@140
|
862 strcpy(name, "power");
|
jamie@140
|
863 strcpy(p_name, "Spectral Power");
|
jamie@140
|
864 strcpy(desc, "Extract the spectral power of a spectrum");
|
jamie@140
|
865 strcpy(p_desc,
|
jamie@140
|
866 "Extract the spectral power of an audio spectrum");
|
jamie@140
|
867 strcpy(author, "Bee Suan Ong");
|
jamie@140
|
868 *year = 2005;
|
jamie@140
|
869 break;
|
jamie@140
|
870 case XTRACT_SHARPNESS:
|
jamie@140
|
871 strcpy(name, "sharpness");
|
jamie@140
|
872 strcpy(p_name, "Spectral Sharpness");
|
jamie@140
|
873 strcpy(desc, "Extract the spectral sharpness of a spectrum");
|
jamie@140
|
874 strcpy(p_desc,
|
jamie@140
|
875 "Extract the spectral sharpness of an audio spectrum");
|
jamie@140
|
876 strcpy(author, "");
|
jamie@140
|
877 break;
|
jamie@140
|
878 case XTRACT_SPECTRAL_SLOPE:
|
jamie@140
|
879 strcpy(name, "spectral_slope");
|
jamie@140
|
880 strcpy(p_name, "Spectral Slope");
|
jamie@140
|
881 strcpy(desc, "Extract the spectral slope of a spectrum");
|
jamie@140
|
882 strcpy(p_desc,
|
jamie@140
|
883 "Extract the spectral slope of an audio spectrum");
|
jamie@140
|
884 strcpy(author, "");
|
jamie@140
|
885 break;
|
jamie@140
|
886 case XTRACT_HPS:
|
jamie@140
|
887 strcpy(name, "hps");
|
jamie@140
|
888 strcpy(p_name, "Harmonic Product Spectrum");
|
jamie@140
|
889 strcpy(desc,
|
jamie@140
|
890 "Extract the harmonic product spectrum of a spectrum");
|
jamie@140
|
891 strcpy(p_desc,
|
jamie@140
|
892 "Extract the harmonic product spectrum of an audio spectrum");
|
jamie@140
|
893 strcpy(author, "");
|
jamie@140
|
894 break;
|
jamie@140
|
895 case XTRACT_FLUX:
|
jamie@140
|
896 strcpy(name, "flux");
|
jamie@140
|
897 strcpy(p_name, "Spectral Flux");
|
jamie@140
|
898 strcpy(desc, "Extract the spectral flux of a spectrum");
|
jamie@140
|
899 strcpy(p_desc,
|
jamie@140
|
900 "Extract the spectral flux of an audio spectrum");
|
jamie@140
|
901 strcpy(author, "");
|
jamie@140
|
902 break;
|
jamie@140
|
903 case XTRACT_LNORM:
|
jamie@140
|
904 strcpy(name, "lnorm");
|
jamie@140
|
905 strcpy(p_name, "L-norm");
|
jamie@140
|
906 strcpy(desc, "Extract the L-norm of a vector");
|
jamie@140
|
907 strcpy(p_desc, "Extract the L-norm of a vector");
|
jamie@140
|
908 strcpy(author, "");
|
jamie@140
|
909 break;
|
jamie@140
|
910 case XTRACT_ATTACK_TIME:
|
jamie@140
|
911 strcpy(name, "attack_time");
|
jamie@140
|
912 strcpy(p_name, "Attack Time");
|
jamie@140
|
913 strcpy(desc, "Extract the attack time of a signal");
|
jamie@140
|
914 strcpy(p_desc, "Extract the attack time of an audio signal");
|
jamie@140
|
915 strcpy(author, "");
|
jamie@140
|
916 break;
|
jamie@140
|
917 case XTRACT_DECAY_TIME:
|
jamie@140
|
918 strcpy(name, "decay_time");
|
jamie@140
|
919 strcpy(p_name, "Decay Time");
|
jamie@140
|
920 strcpy(desc, "Extract the decay time of a signal");
|
jamie@140
|
921 strcpy(p_desc, "Extract the decay time of an audio signal");
|
jamie@140
|
922 strcpy(author, "");
|
jamie@140
|
923 break;
|
jamie@140
|
924 case XTRACT_DIFFERENCE_VECTOR:
|
jamie@140
|
925 strcpy(name, "difference_vector");
|
jamie@140
|
926 strcpy(p_name, "Difference vector");
|
jamie@140
|
927 strcpy(desc, "Extract the difference between two vectors");
|
jamie@140
|
928 strcpy(p_desc, "Extract the difference between two vectors");
|
jamie@140
|
929 strcpy(author, "");
|
jamie@140
|
930 break;
|
jamie@140
|
931 case XTRACT_AUTOCORRELATION_FFT:
|
jamie@140
|
932 strcpy(name, "autocorrelation_fft");
|
jamie@140
|
933 strcpy(p_name, "Autocorrelation (FFT method)");
|
jamie@140
|
934 strcpy(desc, "Extract the autocorrelation of a signal (fft method)");
|
jamie@140
|
935 strcpy(p_desc, "Extract the autocorrelation of an audio signal (fft method)");
|
jamie@140
|
936 strcpy(author, "");
|
jamie@140
|
937 break;
|
jamie@140
|
938 case XTRACT_DCT:
|
jamie@140
|
939 strcpy(name, "dct");
|
jamie@140
|
940 strcpy(p_name, "Discrete Cosine Transform");
|
jamie@140
|
941 strcpy(desc, "Extract the DCT of a signal");
|
jamie@140
|
942 strcpy(p_desc, "Extract the DCT of an audio signal");
|
jamie@140
|
943 strcpy(author, "");
|
jamie@140
|
944 break;
|
jamie@140
|
945 case XTRACT_AUTOCORRELATION:
|
jamie@140
|
946 strcpy(name, "autocorrelation");
|
jamie@140
|
947 strcpy(p_name, "Autocorrelation");
|
jamie@140
|
948 strcpy(desc, "Extract the autocorrelation of a signal");
|
jamie@140
|
949 strcpy(p_desc,
|
jamie@140
|
950 "Extract the autocorrelation of an audio signal");
|
jamie@140
|
951 strcpy(author, "");
|
jamie@140
|
952 break;
|
jamie@140
|
953 case XTRACT_AMDF:
|
jamie@140
|
954 strcpy(name, "amdf");
|
jamie@140
|
955 strcpy(p_name, "Average Magnitude Difference Function");
|
jamie@140
|
956 strcpy(desc, "Extract the AMDF of a signal");
|
jamie@140
|
957 strcpy(p_desc, "Extract the AMDF of an audio signal");
|
jamie@140
|
958 strcpy(author, "");
|
jamie@140
|
959 break;
|
jamie@140
|
960 case XTRACT_ASDF:
|
jamie@140
|
961 strcpy(name, "asdf");
|
jamie@140
|
962 strcpy(p_name, "Average Squared Difference Function");
|
jamie@140
|
963 strcpy(desc, "Extract the ASDF of a signal");
|
jamie@140
|
964 strcpy(p_desc, "Extract the ASDF of an audio signal");
|
jamie@140
|
965 strcpy(author, "");
|
jamie@140
|
966 break;
|
jamie@140
|
967 case XTRACT_NONZERO_COUNT:
|
jamie@140
|
968 strcpy(name, "nonzero_count");
|
jamie@140
|
969 strcpy(p_name, "Non-zero count");
|
jamie@140
|
970 strcpy(desc,
|
jamie@140
|
971 "Extract the number of non-zero elements in the input vector");
|
jamie@140
|
972 strcpy(p_desc,
|
jamie@140
|
973 "Extract the number of non-zero elements in an input spectrum");
|
jamie@140
|
974 strcpy(author, "");
|
jamie@140
|
975 break;
|
jamie@140
|
976 case XTRACT_WINDOWED:
|
jamie@140
|
977 strcpy(name, "windowed");
|
jamie@140
|
978 strcpy(p_name, "Windowed frame");
|
jamie@140
|
979 strcpy(desc, "Apply a window function to a frame of data");
|
jamie@140
|
980 strcpy(p_desc, "Apply a window function to a frame of data");
|
jamie@140
|
981 strcpy(author, "");
|
jamie@140
|
982 break;
|
jamie@140
|
983 default:
|
jamie@140
|
984 strcpy(name, "");
|
jamie@140
|
985 strcpy(p_name, "");
|
jamie@140
|
986 strcpy(desc, "");
|
jamie@140
|
987 strcpy(p_desc, "");
|
jamie@140
|
988 strcpy(author, "");
|
jamie@140
|
989 break;
|
jamie@108
|
990 }
|
jamie@55
|
991
|
jamie@140
|
992 switch(f)
|
jamie@140
|
993 {
|
jamie@55
|
994
|
jamie@140
|
995 case XTRACT_VARIANCE:
|
jamie@140
|
996 case XTRACT_STANDARD_DEVIATION:
|
jamie@140
|
997 case XTRACT_AVERAGE_DEVIATION:
|
jamie@140
|
998 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@140
|
999 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@123
|
1000 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */
|
jamie@140
|
1001 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@140
|
1002 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
1003 case XTRACT_F0:
|
jamie@140
|
1004 case XTRACT_FAILSAFE_F0:
|
jamie@161
|
1005 case XTRACT_WAVELET_F0:
|
jamie@205
|
1006 case XTRACT_MIDICENT:
|
jamie@140
|
1007 case XTRACT_FLATNESS_DB:
|
jamie@140
|
1008 case XTRACT_TONALITY:
|
jamie@140
|
1009 *argc = 1;
|
jamie@140
|
1010 *argv_type = XTRACT_FLOAT;
|
jamie@140
|
1011 break;
|
jamie@140
|
1012 case XTRACT_SKEWNESS:
|
jamie@140
|
1013 case XTRACT_KURTOSIS:
|
jamie@140
|
1014 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@140
|
1015 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@140
|
1016 case XTRACT_PEAK_SPECTRUM:
|
jamie@140
|
1017 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@140
|
1018 case XTRACT_NOISINESS:
|
jamie@140
|
1019 case XTRACT_CREST:
|
jamie@140
|
1020 case XTRACT_ROLLOFF:
|
jamie@140
|
1021 case XTRACT_FLUX:
|
jamie@140
|
1022 case XTRACT_LNORM:
|
jamie@140
|
1023 *argc = 2;
|
jamie@140
|
1024 *argv_type = XTRACT_FLOAT;
|
jamie@140
|
1025 break;
|
jamie@140
|
1026 case XTRACT_SPECTRUM:
|
jamie@140
|
1027 *argc = 4;
|
jamie@140
|
1028 *argv_type = XTRACT_FLOAT;
|
jamie@140
|
1029 break;
|
jamie@140
|
1030 case XTRACT_SUBBANDS:
|
jamie@140
|
1031 *argc = 4;
|
jamie@140
|
1032 *argv_type = XTRACT_INT;
|
jamie@140
|
1033 break;
|
jamie@140
|
1034 case XTRACT_MFCC:
|
jamie@140
|
1035 *argc = 1;
|
jamie@140
|
1036 *argv_type = XTRACT_MEL_FILTER;
|
jamie@140
|
1037 break;
|
jamie@140
|
1038 case XTRACT_LPCC:
|
jamie@140
|
1039 *argc = 1;
|
jamie@140
|
1040 *argv_type = XTRACT_INT;
|
jamie@140
|
1041 break;
|
jamie@140
|
1042 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
1043 *argc = XTRACT_BARK_BANDS;
|
jamie@140
|
1044 *argv_type = XTRACT_INT;
|
jamie@140
|
1045 break;
|
jamie@140
|
1046 case XTRACT_WINDOWED:
|
jamie@140
|
1047 *argc = XTRACT_WINDOW_SIZE;
|
jamie@140
|
1048 *argv_type = XTRACT_FLOAT;
|
jamie@140
|
1049 break;
|
jamie@140
|
1050 case XTRACT_MEAN:
|
jamie@140
|
1051 case XTRACT_SPECTRAL_MEAN:
|
jamie@140
|
1052 case XTRACT_SPECTRAL_CENTROID:
|
jamie@140
|
1053 case XTRACT_IRREGULARITY_K:
|
jamie@140
|
1054 case XTRACT_IRREGULARITY_J:
|
jamie@140
|
1055 case XTRACT_TRISTIMULUS_1:
|
jamie@140
|
1056 case XTRACT_TRISTIMULUS_2:
|
jamie@140
|
1057 case XTRACT_TRISTIMULUS_3:
|
jamie@140
|
1058 case XTRACT_SMOOTHNESS:
|
jamie@140
|
1059 case XTRACT_FLATNESS:
|
jamie@140
|
1060 case XTRACT_SPREAD:
|
jamie@140
|
1061 case XTRACT_ZCR:
|
jamie@140
|
1062 case XTRACT_LOUDNESS:
|
jamie@140
|
1063 case XTRACT_HIGHEST_VALUE:
|
jamie@140
|
1064 case XTRACT_SUM:
|
jamie@140
|
1065 case XTRACT_RMS_AMPLITUDE:
|
jamie@140
|
1066 case XTRACT_POWER:
|
jamie@140
|
1067 case XTRACT_SHARPNESS:
|
jamie@140
|
1068 case XTRACT_SPECTRAL_SLOPE:
|
jamie@140
|
1069 case XTRACT_HPS:
|
jamie@140
|
1070 case XTRACT_ATTACK_TIME:
|
jamie@140
|
1071 case XTRACT_DECAY_TIME:
|
jamie@140
|
1072 case XTRACT_DIFFERENCE_VECTOR:
|
jamie@140
|
1073 case XTRACT_AUTOCORRELATION_FFT:
|
jamie@140
|
1074 case XTRACT_DCT:
|
jamie@140
|
1075 case XTRACT_AUTOCORRELATION:
|
jamie@140
|
1076 case XTRACT_AMDF:
|
jamie@140
|
1077 case XTRACT_ASDF:
|
jamie@140
|
1078 case XTRACT_NONZERO_COUNT:
|
jamie@140
|
1079 case XTRACT_ODD_EVEN_RATIO:
|
jamie@140
|
1080 case XTRACT_LPC:
|
jamie@140
|
1081 default:
|
jamie@140
|
1082 *argc = 0;
|
jamie@140
|
1083 break;
|
jamie@108
|
1084 }
|
jamie@55
|
1085
|
jamie@108
|
1086 is_scalar = &d->is_scalar;
|
jamie@108
|
1087
|
jamie@140
|
1088 switch(f)
|
jamie@140
|
1089 {
|
jamie@140
|
1090 case XTRACT_MEAN:
|
jamie@140
|
1091 case XTRACT_VARIANCE:
|
jamie@140
|
1092 case XTRACT_STANDARD_DEVIATION:
|
jamie@140
|
1093 case XTRACT_AVERAGE_DEVIATION:
|
jamie@140
|
1094 case XTRACT_SKEWNESS:
|
jamie@140
|
1095 case XTRACT_KURTOSIS:
|
jamie@140
|
1096 case XTRACT_SPECTRAL_MEAN:
|
jamie@140
|
1097 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@140
|
1098 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@140
|
1099 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */
|
jamie@140
|
1100 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@140
|
1101 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@140
|
1102 case XTRACT_SPECTRAL_CENTROID:
|
jamie@140
|
1103 case XTRACT_IRREGULARITY_K:
|
jamie@140
|
1104 case XTRACT_IRREGULARITY_J:
|
jamie@140
|
1105 case XTRACT_TRISTIMULUS_1:
|
jamie@140
|
1106 case XTRACT_TRISTIMULUS_2:
|
jamie@140
|
1107 case XTRACT_TRISTIMULUS_3:
|
jamie@140
|
1108 case XTRACT_SMOOTHNESS:
|
jamie@140
|
1109 case XTRACT_SPREAD:
|
jamie@140
|
1110 case XTRACT_ZCR:
|
jamie@140
|
1111 case XTRACT_ROLLOFF:
|
jamie@140
|
1112 case XTRACT_LOUDNESS:
|
jamie@140
|
1113 case XTRACT_FLATNESS:
|
jamie@140
|
1114 case XTRACT_FLATNESS_DB:
|
jamie@140
|
1115 case XTRACT_TONALITY:
|
jamie@140
|
1116 case XTRACT_CREST:
|
jamie@140
|
1117 case XTRACT_NOISINESS:
|
jamie@140
|
1118 case XTRACT_RMS_AMPLITUDE:
|
jamie@140
|
1119 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@140
|
1120 case XTRACT_POWER:
|
jamie@140
|
1121 case XTRACT_ODD_EVEN_RATIO:
|
jamie@140
|
1122 case XTRACT_SHARPNESS:
|
jamie@140
|
1123 case XTRACT_SPECTRAL_SLOPE:
|
jamie@140
|
1124 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
1125 case XTRACT_HIGHEST_VALUE:
|
jamie@140
|
1126 case XTRACT_SUM:
|
jamie@140
|
1127 case XTRACT_HPS:
|
jamie@140
|
1128 case XTRACT_F0:
|
jamie@140
|
1129 case XTRACT_FAILSAFE_F0:
|
jamie@161
|
1130 case XTRACT_WAVELET_F0:
|
jamie@205
|
1131 case XTRACT_MIDICENT:
|
jamie@140
|
1132 case XTRACT_FLUX:
|
jamie@140
|
1133 case XTRACT_LNORM:
|
jamie@140
|
1134 case XTRACT_NONZERO_COUNT:
|
jamie@140
|
1135 *is_scalar = XTRACT_TRUE;
|
jamie@140
|
1136 break;
|
jamie@140
|
1137 case XTRACT_AUTOCORRELATION:
|
jamie@140
|
1138 case XTRACT_AMDF:
|
jamie@140
|
1139 case XTRACT_ASDF:
|
jamie@140
|
1140 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
1141 case XTRACT_PEAK_SPECTRUM:
|
jamie@140
|
1142 case XTRACT_SPECTRUM:
|
jamie@140
|
1143 case XTRACT_SUBBANDS:
|
jamie@140
|
1144 case XTRACT_AUTOCORRELATION_FFT:
|
jamie@140
|
1145 case XTRACT_MFCC:
|
jamie@140
|
1146 case XTRACT_LPC:
|
jamie@140
|
1147 case XTRACT_LPCC:
|
jamie@140
|
1148 case XTRACT_DCT:
|
jamie@140
|
1149 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@140
|
1150 case XTRACT_DIFFERENCE_VECTOR:
|
jamie@140
|
1151 case XTRACT_WINDOWED:
|
jamie@140
|
1152 *is_scalar = XTRACT_FALSE;
|
jamie@140
|
1153 break;
|
jamie@140
|
1154 default:
|
jamie@140
|
1155 *is_scalar = XTRACT_TRUE;
|
jamie@140
|
1156 break;
|
jamie@140
|
1157
|
jamie@140
|
1158 }
|
jamie@140
|
1159
|
jamie@140
|
1160 is_delta = &d->is_delta;
|
jamie@140
|
1161
|
jamie@140
|
1162 switch(f)
|
jamie@140
|
1163 {
|
jamie@140
|
1164 case XTRACT_FLUX:
|
jamie@140
|
1165 case XTRACT_LNORM:
|
jamie@140
|
1166 case XTRACT_DIFFERENCE_VECTOR:
|
jamie@140
|
1167 *is_delta = XTRACT_TRUE;
|
jamie@140
|
1168 break;
|
jamie@140
|
1169 case XTRACT_MEAN:
|
jamie@140
|
1170 case XTRACT_VARIANCE:
|
jamie@140
|
1171 case XTRACT_STANDARD_DEVIATION:
|
jamie@140
|
1172 case XTRACT_AVERAGE_DEVIATION:
|
jamie@140
|
1173 case XTRACT_SKEWNESS:
|
jamie@140
|
1174 case XTRACT_KURTOSIS:
|
jamie@140
|
1175 case XTRACT_SPECTRAL_MEAN:
|
jamie@140
|
1176 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@140
|
1177 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@140
|
1178 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */
|
jamie@140
|
1179 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@140
|
1180 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@140
|
1181 case XTRACT_SPECTRAL_CENTROID:
|
jamie@140
|
1182 case XTRACT_IRREGULARITY_K:
|
jamie@140
|
1183 case XTRACT_IRREGULARITY_J:
|
jamie@140
|
1184 case XTRACT_TRISTIMULUS_1:
|
jamie@140
|
1185 case XTRACT_TRISTIMULUS_2:
|
jamie@140
|
1186 case XTRACT_TRISTIMULUS_3:
|
jamie@140
|
1187 case XTRACT_SMOOTHNESS:
|
jamie@140
|
1188 case XTRACT_SPREAD:
|
jamie@140
|
1189 case XTRACT_ZCR:
|
jamie@140
|
1190 case XTRACT_ROLLOFF:
|
jamie@140
|
1191 case XTRACT_LOUDNESS:
|
jamie@140
|
1192 case XTRACT_FLATNESS:
|
jamie@140
|
1193 case XTRACT_FLATNESS_DB:
|
jamie@140
|
1194 case XTRACT_TONALITY:
|
jamie@140
|
1195 case XTRACT_CREST:
|
jamie@140
|
1196 case XTRACT_NOISINESS:
|
jamie@140
|
1197 case XTRACT_RMS_AMPLITUDE:
|
jamie@140
|
1198 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@140
|
1199 case XTRACT_POWER:
|
jamie@140
|
1200 case XTRACT_ODD_EVEN_RATIO:
|
jamie@140
|
1201 case XTRACT_SHARPNESS:
|
jamie@140
|
1202 case XTRACT_SPECTRAL_SLOPE:
|
jamie@140
|
1203 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
1204 case XTRACT_HIGHEST_VALUE:
|
jamie@140
|
1205 case XTRACT_SUM:
|
jamie@140
|
1206 case XTRACT_HPS:
|
jamie@140
|
1207 case XTRACT_F0:
|
jamie@140
|
1208 case XTRACT_FAILSAFE_F0:
|
jamie@161
|
1209 case XTRACT_WAVELET_F0:
|
jamie@205
|
1210 case XTRACT_MIDICENT:
|
jamie@140
|
1211 case XTRACT_NONZERO_COUNT:
|
jamie@140
|
1212 case XTRACT_AUTOCORRELATION:
|
jamie@140
|
1213 case XTRACT_AMDF:
|
jamie@140
|
1214 case XTRACT_ASDF:
|
jamie@140
|
1215 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
1216 case XTRACT_PEAK_SPECTRUM:
|
jamie@140
|
1217 case XTRACT_SPECTRUM:
|
jamie@140
|
1218 case XTRACT_SUBBANDS:
|
jamie@140
|
1219 case XTRACT_AUTOCORRELATION_FFT:
|
jamie@140
|
1220 case XTRACT_MFCC:
|
jamie@140
|
1221 case XTRACT_LPC:
|
jamie@140
|
1222 case XTRACT_LPCC:
|
jamie@140
|
1223 case XTRACT_DCT:
|
jamie@140
|
1224 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@140
|
1225 case XTRACT_WINDOWED:
|
jamie@140
|
1226 default:
|
jamie@140
|
1227 *is_delta = XTRACT_FALSE;
|
jamie@140
|
1228 break;
|
jamie@140
|
1229 }
|
jamie@140
|
1230
|
jamie@140
|
1231 if(*is_scalar)
|
jamie@140
|
1232 {
|
jamie@140
|
1233
|
jamie@140
|
1234 result_unit = &d->result.scalar.unit;
|
jamie@140
|
1235 result_min = &d->result.scalar.min;
|
jamie@140
|
1236 result_max = &d->result.scalar.max;
|
jamie@140
|
1237
|
jamie@140
|
1238 switch(f)
|
jamie@140
|
1239 {
|
jamie@108
|
1240 case XTRACT_MEAN:
|
jamie@108
|
1241 case XTRACT_VARIANCE:
|
jamie@108
|
1242 case XTRACT_STANDARD_DEVIATION:
|
jamie@108
|
1243 case XTRACT_AVERAGE_DEVIATION:
|
jamie@108
|
1244 case XTRACT_SKEWNESS:
|
jamie@108
|
1245 case XTRACT_KURTOSIS:
|
jamie@140
|
1246 case XTRACT_RMS_AMPLITUDE:
|
jamie@140
|
1247 case XTRACT_LOWEST_VALUE:
|
jamie@140
|
1248 case XTRACT_HIGHEST_VALUE:
|
jamie@140
|
1249 case XTRACT_SUM:
|
jamie@140
|
1250 case XTRACT_FLUX:
|
jamie@140
|
1251 case XTRACT_LNORM:
|
jamie@140
|
1252 case XTRACT_NONZERO_COUNT:
|
jamie@140
|
1253 case XTRACT_WINDOWED:
|
andrea@211
|
1254 *result_unit = (xtract_unit_t)XTRACT_ANY;
|
jamie@140
|
1255 *result_min = XTRACT_ANY;
|
jamie@140
|
1256 *result_max = XTRACT_ANY;
|
jamie@140
|
1257 break;
|
jamie@108
|
1258 case XTRACT_SPECTRAL_SKEWNESS:
|
jamie@108
|
1259 case XTRACT_SPECTRAL_KURTOSIS:
|
jamie@108
|
1260 case XTRACT_IRREGULARITY_K:
|
jamie@108
|
1261 case XTRACT_IRREGULARITY_J:
|
jamie@108
|
1262 case XTRACT_TRISTIMULUS_1:
|
jamie@108
|
1263 case XTRACT_TRISTIMULUS_2:
|
jamie@108
|
1264 case XTRACT_TRISTIMULUS_3:
|
jamie@140
|
1265 case XTRACT_NOISINESS:
|
jamie@108
|
1266 case XTRACT_SMOOTHNESS:
|
andrea@211
|
1267 *result_unit = (xtract_unit_t)XTRACT_NONE;
|
jamie@140
|
1268 *result_min = XTRACT_ANY; /* FIX: need to check these */
|
jamie@140
|
1269 *result_max = XTRACT_ANY;
|
jamie@108
|
1270 break;
|
jamie@108
|
1271 case XTRACT_SPECTRAL_MEAN:
|
jamie@108
|
1272 case XTRACT_SPECTRAL_VARIANCE:
|
jamie@108
|
1273 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
|
jamie@140
|
1274 /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */
|
jamie@108
|
1275 case XTRACT_SPECTRAL_CENTROID:
|
jamie@108
|
1276 case XTRACT_SPREAD:
|
jamie@140
|
1277 case XTRACT_F0:
|
jamie@140
|
1278 case XTRACT_FAILSAFE_F0:
|
jamie@161
|
1279 case XTRACT_WAVELET_F0:
|
jamie@140
|
1280 case XTRACT_HPS:
|
jamie@140
|
1281 case XTRACT_ROLLOFF:
|
jamie@140
|
1282 *result_unit = XTRACT_HERTZ;
|
jamie@146
|
1283 *result_min = 0.0;
|
jamie@146
|
1284 *result_max = XTRACT_SR_UPPER_LIMIT / 2.0;
|
jamie@140
|
1285 break;
|
jamie@205
|
1286 case XTRACT_MIDICENT:
|
jamie@205
|
1287 *result_unit = XTRACT_MIDI_CENT;
|
jamie@205
|
1288 *result_min = 0.0;
|
jamie@205
|
1289 *result_max = 12700;
|
jamie@108
|
1290 case XTRACT_ZCR:
|
jamie@140
|
1291 *result_unit = XTRACT_HERTZ;
|
jamie@146
|
1292 *result_min = 0.0;
|
jamie@140
|
1293 *result_max = XTRACT_ANY;
|
jamie@140
|
1294 break;
|
jamie@140
|
1295 case XTRACT_ODD_EVEN_RATIO:
|
andrea@211
|
1296 *result_unit = (xtract_unit_t)XTRACT_NONE;
|
jamie@146
|
1297 *result_min = 0.0;
|
jamie@146
|
1298 *result_max = 1.0;
|
jamie@140
|
1299 break;
|
jamie@140
|
1300 case XTRACT_FLATNESS_DB:
|
jamie@140
|
1301 *result_unit = XTRACT_DBFS;
|
jamie@140
|
1302 *result_min = XTRACT_ANY; /* FIX: check this */
|
jamie@140
|
1303 *result_max = XTRACT_ANY;
|
jamie@140
|
1304 break;
|
jamie@108
|
1305 case XTRACT_LOUDNESS:
|
jamie@108
|
1306 case XTRACT_FLATNESS:
|
jamie@108
|
1307 case XTRACT_TONALITY:
|
jamie@108
|
1308 case XTRACT_CREST:
|
jamie@108
|
1309 case XTRACT_SPECTRAL_INHARMONICITY:
|
jamie@108
|
1310 case XTRACT_POWER:
|
jamie@108
|
1311 case XTRACT_SHARPNESS:
|
jamie@108
|
1312 case XTRACT_SPECTRAL_SLOPE:
|
jamie@108
|
1313 case XTRACT_LPC:
|
jamie@108
|
1314 case XTRACT_LPCC:
|
jamie@108
|
1315 default:
|
andrea@211
|
1316 *result_unit = (xtract_unit_t)XTRACT_UNKNOWN;
|
jamie@140
|
1317 *result_min = XTRACT_UNKNOWN;
|
jamie@140
|
1318 *result_max = XTRACT_UNKNOWN;
|
jamie@108
|
1319 break;
|
jamie@108
|
1320 }
|
jamie@108
|
1321 }
|
jamie@140
|
1322 else
|
jamie@140
|
1323 {
|
jamie@55
|
1324
|
jamie@108
|
1325 result_min = NULL;
|
jamie@108
|
1326 result_max = NULL;
|
jamie@108
|
1327 result_unit = &d->result.vector.unit;
|
jamie@108
|
1328 result_format = &d->result.vector.format;
|
jamie@55
|
1329
|
jamie@140
|
1330 switch(f)
|
jamie@140
|
1331 {
|
jamie@140
|
1332 case XTRACT_AUTOCORRELATION:
|
jamie@140
|
1333 case XTRACT_AMDF:
|
jamie@140
|
1334 case XTRACT_ASDF:
|
jamie@140
|
1335 case XTRACT_DCT:
|
jamie@140
|
1336 case XTRACT_SUBBANDS:
|
jamie@140
|
1337 case XTRACT_WINDOWED:
|
jamie@140
|
1338 *result_format = XTRACT_ARBITRARY_SERIES;
|
andrea@211
|
1339 *result_unit = (xtract_unit_t)XTRACT_ANY;
|
jamie@140
|
1340 break;
|
jamie@140
|
1341 case XTRACT_BARK_COEFFICIENTS:
|
jamie@140
|
1342 *result_format = XTRACT_BARK_COEFFS;
|
andrea@211
|
1343 *result_unit = (xtract_unit_t)XTRACT_UNKNOWN; /* FIX: check */
|
jamie@140
|
1344 break;
|
jamie@140
|
1345 case XTRACT_PEAK_SPECTRUM:
|
jamie@140
|
1346 case XTRACT_SPECTRUM:
|
jamie@140
|
1347 case XTRACT_HARMONIC_SPECTRUM:
|
jamie@140
|
1348 *result_format = XTRACT_SPECTRAL;
|
jamie@140
|
1349 *result_unit = XTRACT_ANY_AMPLITUDE_HERTZ;
|
jamie@140
|
1350 break;
|
jamie@140
|
1351 case XTRACT_AUTOCORRELATION_FFT:
|
jamie@140
|
1352 break;
|
jamie@140
|
1353 case XTRACT_MFCC:
|
jamie@140
|
1354 *result_format = XTRACT_MEL_COEFFS;
|
andrea@211
|
1355 *result_unit = (xtract_unit_t)XTRACT_UNKNOWN; /* FIX: check */
|
jamie@140
|
1356 break;
|
jamie@140
|
1357 case XTRACT_LPC:
|
jamie@140
|
1358 *result_format = XTRACT_LPC_COEFFS;
|
andrea@211
|
1359 *result_unit = (xtract_unit_t)XTRACT_UNKNOWN;
|
jamie@140
|
1360 break;
|
jamie@140
|
1361 case XTRACT_LPCC:
|
jamie@140
|
1362 *result_format = XTRACT_LPCC_COEFFS;
|
andrea@211
|
1363 *result_unit = (xtract_unit_t)XTRACT_UNKNOWN;
|
jamie@140
|
1364 break;
|
jamie@140
|
1365 default:
|
jamie@140
|
1366 break;
|
jamie@108
|
1367 }
|
jamie@108
|
1368 }
|
jamie@50
|
1369 }
|
jamie@50
|
1370
|
jamie@50
|
1371 return fd;
|
jamie@50
|
1372 }
|
jamie@50
|
1373
|
jamie@140
|
1374 int xtract_free_descriptors(xtract_function_descriptor_t *fd)
|
jamie@140
|
1375 {
|
jamie@50
|
1376
|
jamie@140
|
1377 if (fd != NULL)
|
jamie@140
|
1378 {
|
jamie@108
|
1379 free(fd);
|
jamie@50
|
1380 }
|
jamie@50
|
1381
|
jamie@56
|
1382 return XTRACT_SUCCESS;
|
jamie@50
|
1383 }
|
jamie@50
|
1384
|
jamie@50
|
1385
|
jamie@50
|
1386
|
jamie@50
|
1387
|
jamie@50
|
1388
|