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