annotate src/descriptors.c @ 285:89fe52066db1 tip master

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