annotate src/descriptors.c @ 60:192097e366d1

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