comparison src/descriptors.c @ 140:67f6b6e63d45

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