annotate src/descriptors.c @ 106:3693573a07fa

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