annotate src/descriptors.c @ 113:72a9a393d5bd

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