annotate src/descriptors.c @ 104:a32738e9d955

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