diff options
-rw-r--r-- | examples/puredata/subframe-test.pd | 131 | ||||
-rw-r--r-- | examples/puredata/xtract/a_blockswap~.pd | 64 | ||||
-rw-r--r-- | examples/puredata/xtract~.c | 115 | ||||
-rw-r--r-- | src/delta.c | 2 | ||||
-rw-r--r-- | src/descriptors.c | 2158 | ||||
-rw-r--r-- | xtract/libxtract.h | 8 | ||||
-rw-r--r-- | xtract/xtract_helper.h | 3 | ||||
-rw-r--r-- | xtract/xtract_macros.h | 1 |
8 files changed, 1394 insertions, 1088 deletions
diff --git a/examples/puredata/subframe-test.pd b/examples/puredata/subframe-test.pd new file mode 100644 index 0000000..3a835a5 --- /dev/null +++ b/examples/puredata/subframe-test.pd @@ -0,0 +1,131 @@ +#N canvas 667 50 557 639 10; +#X obj 263 -160 xtract~ subframe windowed 64; +#X obj 442 -125 tabsend~ windowed; +#N canvas 0 0 450 300 (subpatch) 0; +#X array windowed 64 float 5; +#A 0 0 0.00988792 0.0386044 0.0571912 0.0189603 -0.101949 -0.277669 +-0.42422 -0.437499 -0.251716 0.11162 0.534831 0.846232 0.89682 0.634185 +0.135697 -0.418906 -0.823923 -0.937159 -0.739218 -0.334947 0.101471 +0.40821 0.503437 0.407727 0.215338 0.0353621 -0.0632974 -0.0748772 +-0.0405181 -0.00868179 -3.27457e-15 0 0.00657018 0.0386642 0.0864644 +0.104272 0.0386758 -0.128569 -0.351139 -0.525142 -0.535095 -0.31781 +0.0907861 0.554834 0.890148 0.946246 0.679244 0.177795 -0.372091 -0.768033 +-0.878652 -0.69562 -0.326984 0.0615718 0.325607 0.401064 0.317179 0.162825 +0.0298987 -0.0329445 -0.0328739 -0.0102196 -6.65005e-15; +#X coords 0 1 63 -1 200 140 1; +#X restore 46 -552 graph; +#X obj 264 -125 xtract~ subframe spectrum 64; +#N canvas 0 0 450 300 (subpatch) 0; +#X array sf_mags1 16 float 5; +#A 0 0.00733392 0.14449 0.240482 0.109887 0.00135916 0.000113993 5.63786e-05 +7.59283e-05 7.22785e-05 6.48168e-05 5.62613e-05 5.20935e-05 4.72571e-05 +4.40774e-05 4.34346e-05 1.76297e-06; +#X coords 0 1 15 -1 200 140 1; +#X restore 261 -551 graph; +#N canvas 0 0 450 300 (subpatch) 0; +#X array sf_mags2 32 float 5; +#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0077164 0.1443 0.240599 0.109809 +0.00131069 0.00011119 0.000100841 0.00010453 9.17035e-05 7.68611e-05 +6.53814e-05 5.45444e-05 4.76852e-05 4.18391e-05 4.00649e-05 1.43191e-06 +; +#X coords 0 1 31 -1 200 140 1; +#X restore 259 -389 graph; +#N canvas 0 0 450 300 (subpatch) 0; +#X array both 35 float 5; +#A 0 0.00733392 0.14449 0.240482 0.109887 0.00135916 0.000113993 5.63786e-05 +7.59283e-05 7.22785e-05 6.48168e-05 5.62613e-05 5.20935e-05 4.72571e-05 +4.40774e-05 4.34346e-05 1.76297e-06 0.0077164 0.1443 0.240599 0.109809 +0.00131069 0.00011119 0.000100841 0.00010453 9.17035e-05 7.68611e-05 +6.53814e-05 5.45444e-05 4.76852e-05 4.18391e-05 4.00649e-05 1.43191e-06 +0 0 0; +#X coords 0 1 34 -1 200 140 1; +#X restore 46 -393 graph; +#N canvas 18 175 447 500 get_mags 0; +#X obj 71 265 +~; +#X obj 72 233 tabreceive~ sf_mags1; +#X obj 221 233 tabreceive~ sf_mags2; +#X obj 101 30 tabsend~ sf_mags1; +#X obj 70 86 tabsend~ temp; +#X obj 69 124 tabreceive~ temp; +#X obj 70 175 tabsend~ sf_mags2; +#X obj 70 302 outlet~; +#X obj 70 -10 inlet~; +#X obj 70 59 a_blockswap~ 64; +#X obj 69 151 a_blockswap~ 32; +#N canvas 0 0 450 300 graph4 0; +#X array temp 16 float 5; +#A 0 0.0077164 0.1443 0.240599 0.109809 0.00131069 0.00011119 0.000100841 +0.00010453 9.17035e-05 7.68611e-05 6.53814e-05 5.45444e-05 4.76852e-05 +4.18391e-05 4.00649e-05 1.43191e-06; +#X coords 0 1 15 -1 200 140 1; +#X restore 226 -6 graph; +#X connect 0 0 7 0; +#X connect 1 0 0 0; +#X connect 2 0 0 1; +#X connect 5 0 10 0; +#X connect 8 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 4 0; +#X connect 10 0 6 0; +#X restore 263 -94 pd get_mags; +#N canvas 0 0 450 300 graph4 0; +#X array diff 16 float 5; +#A 0 -0.000382476 0.000189289 -0.000116706 7.71508e-05 4.8466e-05 2.80288e-06 +-4.44625e-05 -2.86015e-05 -1.9425e-05 -1.20443e-05 -9.12002e-06 -2.45091e-06 +-4.28088e-07 2.23831e-06 3.36968e-06 3.31062e-07; +#X coords 0 1 15 -1 200 140 1; +#X restore 46 -234 graph; +#N canvas 6 433 450 300 diff 0; +#X obj 134 136 tabsend~ diff; +#X obj 134 49 tabreceive~ both; +#X obj 135 78 xtract~ difference_vector 32; +#X obj 348 10 block~ 32; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X restore 260 -43 pd diff; +#N canvas 3 50 450 300 flux 0; +#X obj 143 17 tabreceive~ diff; +#X obj 371 -13 block~ 16; +#X obj 144 53 xtract~ flux 16; +#X obj 144 90 outlet; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X restore 262 -16 pd flux; +#X obj 262 -70 tabsend~ both; +#N canvas 9 100 467 310 source 0; +#X obj 162 -117 noise~; +#X obj 100 -40 *~; +#X obj 105 140 hsl 100 10 0 1 0 0 vol vol-set empty -2 -6 0 10 -204786 +-1 -1 9900 1; +#X msg 212 -58 1; +#X obj 115 -94 r vol; +#X obj 161 -40 *~; +#X obj 212 -89 t b f; +#X obj 225 -30 -; +#X obj 101 20 outlet~; +#X text 111 118 noise <-> sine; +#X obj 336 -87 loadbang; +#X obj 100 -115 osc~ 4000; +#X msg 336 -61 \; vol 1 \; vol-set 1; +#X connect 0 0 5 0; +#X connect 1 0 8 0; +#X connect 3 0 7 0; +#X connect 4 0 1 1; +#X connect 4 0 6 0; +#X connect 5 0 8 0; +#X connect 6 0 3 0; +#X connect 6 1 7 1; +#X connect 7 0 5 1; +#X connect 10 0 12 0; +#X connect 11 0 1 0; +#X coords 0 -1 1 1 110 60 1 100 100; +#X restore 263 -231 pd source; +#X floatatom 262 40 5 0 0 0 spectral_flux - -; +#X obj 262 7 a_bavg 128; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 3 0 7 0; +#X connect 7 0 11 0; +#X connect 10 0 14 0; +#X connect 12 0 0 0; +#X connect 14 0 13 0; diff --git a/examples/puredata/xtract/a_blockswap~.pd b/examples/puredata/xtract/a_blockswap~.pd index 959ecfd..65dbd10 100644 --- a/examples/puredata/xtract/a_blockswap~.pd +++ b/examples/puredata/xtract/a_blockswap~.pd @@ -1,29 +1,43 @@ -#N canvas 670 208 475 328 10; -#X obj 70 159 samplerate~; -#X obj 70 223 phasor~; -#X msg 163 159 0.5; +#N canvas 415 243 512 595 10; +#X obj 141 161 samplerate~; +#X obj 141 401 phasor~; #X obj 23 10 inlet~; -#X obj 23 34 tabsend~ input; -#X obj 385 4 table input; -#X obj 76 272 tabread~ input; -#X obj 75 299 outlet~; -#X obj 70 194 / \$1; +#X obj 140 523 outlet~; #X obj 141 78 loadbang; #X text 232 72 Clone of zexy blockswap~; #X text 232 90 First argument gives block size; -#X msg 209 158 \; input resize \$1; -#X obj 141 109 t b b b; -#X obj 75 249 *~ \$1; -#X obj 209 135 f \$1; -#X connect 0 0 8 0; -#X connect 1 0 14 0; -#X connect 2 0 1 1; -#X connect 3 0 4 0; -#X connect 6 0 7 0; -#X connect 8 0 1 0; -#X connect 9 0 13 0; -#X connect 13 0 0 0; -#X connect 13 1 2 0; -#X connect 13 2 15 0; -#X connect 14 0 6 0; -#X connect 15 0 12 0; +#X obj 245 167 f \$1; +#X obj 245 343 /; +#X obj 141 109 t b b; +#X obj 284 264 / 2; +#X obj 245 265 t b a; +#X obj 245 304 f; +#X obj 245 213 - 1; +#X obj 141 332 / \$1; +#X obj 140 473 *~ \$1; +#X obj 385 4 table \$0-input; +#X obj 23 34 tabsend~ \$0-input; +#X msg 321 315 \; \$1-input resize \$2; +#X obj 321 265 pack \$0 \$1; +#X obj 245 189 t a a b; +#X obj 141 496 tabread~ \$0-input; +#X connect 0 0 14 0; +#X connect 1 0 15 0; +#X connect 2 0 17 0; +#X connect 4 0 9 0; +#X connect 7 0 20 0; +#X connect 8 0 1 1; +#X connect 9 0 0 0; +#X connect 9 1 7 0; +#X connect 10 0 12 1; +#X connect 11 0 12 0; +#X connect 11 1 8 1; +#X connect 12 0 8 0; +#X connect 13 0 11 0; +#X connect 14 0 1 0; +#X connect 15 0 21 0; +#X connect 19 0 18 0; +#X connect 20 0 13 0; +#X connect 20 1 10 0; +#X connect 20 2 19 0; +#X connect 21 0 3 0; diff --git a/examples/puredata/xtract~.c b/examples/puredata/xtract~.c index f82aab6..7a33993 100644 --- a/examples/puredata/xtract~.c +++ b/examples/puredata/xtract~.c @@ -46,11 +46,13 @@ typedef struct _tracked_memory { typedef struct _xtract { t_object x_obj; t_float f; - t_int feature; - t_int feature_type; + t_float *window; + t_int feature, + is_scalar, + is_subframe, + init_blocksize, + done_init; t_symbol *feature_name; - t_int init_blocksize; - t_int done_init; tracked_memory memory; void *argv; } t_xtract_tilde; @@ -59,12 +61,12 @@ static t_int *xtract_perform(t_int *w) { t_sample *in = (t_sample *)(w[1]); t_xtract_tilde *x = (t_xtract_tilde *)(w[2]); t_int N = (t_int)(w[3]); - t_int return_code = 0; + t_int rv = 0; float result = 0; - return_code = xtract[x->feature]((float *)in, N, x->argv, &result); + rv = xtract[x->feature]((float *)in, N, x->argv, &result); - if(return_code == XTRACT_FEATURE_NOT_IMPLEMENTED) + if(rv == XTRACT_FEATURE_NOT_IMPLEMENTED) pd_error(x, "Feature not implemented"); /* set nan, inf or -inf to 0 */ @@ -81,7 +83,7 @@ static t_int *xtract_perform_vector(t_int *w) { t_float *tmp_in, *tmp_out; t_xtract_tilde *x = (t_xtract_tilde *)(w[3]); t_int N = (t_int)(w[4]), n; - t_int return_code = 0; + t_int rv = 0; if(N != x->init_blocksize && x->done_init){ error("xtract~ %s: Blocksize mismatch, try specifying the blocksize as a second argument", x->feature_name->s_name); @@ -96,12 +98,22 @@ static t_int *xtract_perform_vector(t_int *w) { if(x->feature == XTRACT_PEAK_SPECTRUM || x->feature == XTRACT_LPC) N >>= 1; - return_code = xtract[x->feature](tmp_in, N, x->argv, tmp_out); + if(x->is_subframe){ + + rv = xtract_features_from_subframes(tmp_in, N, x->feature, + x->argv, tmp_out); + } + else{ + + rv = xtract[x->feature](tmp_in, N, x->argv, tmp_out); - if(return_code == XTRACT_FEATURE_NOT_IMPLEMENTED) + } + + if(rv == XTRACT_FEATURE_NOT_IMPLEMENTED) pd_error(x, "Feature not implemented"); - while(n--) out[n] = tmp_out[n]; + while(n--) + out[n] = tmp_out[n]; freebytes(tmp_in, N * sizeof(t_float)); freebytes(tmp_out, N * sizeof(t_float)); @@ -111,7 +123,7 @@ static t_int *xtract_perform_vector(t_int *w) { static void xtract_dsp(t_xtract_tilde *x, t_signal **sp) { - if(x->feature_type == XTRACT_VECTOR) + if(!x->is_scalar) dsp_add(xtract_perform_vector, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n); @@ -123,15 +135,20 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) { t_xtract_tilde *x = (t_xtract_tilde *)pd_new(xtract_class); xtract_mel_filter *mf; - t_int n, N, f, F, n_args, type; + t_int n, N, M, f, F, + n_args, + type; t_float *argv_max; + t_symbol *arg1; xtract_function_descriptor_t *fd; - char *p_name, *p_desc, *author; + char *p_name, + *p_desc, + *author; int year; p_name = p_desc = author = NULL; - n_args = type = x->feature = 0; + n_args = type = 0; f = F = XTRACT_FEATURES; @@ -139,13 +156,29 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) { x->argv = NULL; x->done_init = 0; + x->is_scalar = 0; + x->is_subframe = 0; + x->feature = -1; - if(argc) - x->feature_name = atom_getsymbol(argv); - if(argc > 1) - N = atom_getint(&argv[1]); + /* Parse arguments */ + if(argc){ + arg1 = atom_getsymbol(argv); + if(arg1 == gensym("subframe")) + x->is_subframe = 1; + else + x->feature_name = atom_getsymbol(argv); + } + if(argc > 1){ + if(x->is_subframe) + x->feature_name = atom_getsymbol(argv+1); + else + N = atom_getint(argv+1); + } + if(argc > 2) + N = atom_getint(argv+2); x->init_blocksize = N; + M = N >> 1; /* get function descriptors */ fd = (xtract_function_descriptor_t *)xtract_make_descriptors(); @@ -159,6 +192,9 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) { } } + if(x->feature == -1) + post("xtract~: feature not found: %s", x->feature_name->s_name); + /* allocate memory for feature arguments */ n_args = fd[f].argc; type = fd[f].argv.type; @@ -200,6 +236,11 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) { else post("xtract~: No arguments given"); + /* Adjust frame size if we are using subframe features */ + if(x->is_subframe) + N = M; + + post("xtract~: window size: %d", N); /* do init if needed */ if(x->feature == XTRACT_MFCC){ @@ -223,6 +264,11 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) { xtract_init_bark(N, NYQUIST, x->argv); x->done_init = 1; } + else if(x->feature == XTRACT_WINDOWED){ + x->window = xtract_init_window(N, XTRACT_HANN); + x->argv = x->window; + x->done_init = 1; + } /* Initialise fft_plan if required */ if(x->feature == XTRACT_AUTOCORRELATION_FFT || @@ -232,6 +278,10 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) { x->done_init = 1; } + if(fd[f].is_scalar) + x->is_scalar = 1; + +/* if(x->feature == XTRACT_AUTOCORRELATION || x->feature == XTRACT_AUTOCORRELATION_FFT || x->feature == XTRACT_MFCC || x->feature == XTRACT_AMDF || @@ -241,23 +291,31 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) { x->feature == XTRACT_PEAK_SPECTRUM || x->feature == XTRACT_HARMONIC_SPECTRUM || x->feature == XTRACT_LPC || - x->feature == XTRACT_LPCC) + x->feature == XTRACT_LPCC || + x->feature == XTRACT_WINDOWED) x->feature_type = XTRACT_VECTOR; - - else if (x->feature == XTRACT_FLUX || x->feature == XTRACT_ATTACK_TIME || - x->feature == XTRACT_DECAY_TIME || x->feature == XTRACT_DELTA) - x->feature_type = XTRACT_DELTA; - + */ + /* else if (x->feature == XTRACT_FLUX || x->feature == XTRACT_ATTACK_TIME || + x->feature == XTRACT_DECAY_TIME || x->feature == XTRACT_DIFFERENCE_VECTOR) + x->feature_type = XTRACT_DELTA; */ +/* else x->feature_type = XTRACT_SCALAR; +*/ /* argv through right inlet */ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("list"), gensym("list")); /* if feature is vector, create signal out */ - if(x->feature_type == XTRACT_VECTOR) outlet_new(&x->x_obj, &s_signal); + if(!x->is_scalar) + outlet_new(&x->x_obj, &s_signal); /* otherwise: float */ - else outlet_new(&x->x_obj, &s_float); + else + outlet_new(&x->x_obj, &s_float); + + if(x->is_scalar && x->is_subframe) + post( + "xtract~: warning: subframes not yet supported for scalar features"); /* free the function descriptors */ xtract_free_descriptors(fd); @@ -303,6 +361,9 @@ static void xtract_tilde_free(t_xtract_tilde *x) { if(x->argv != NULL && x->memory.argv) freebytes(x->argv, x->memory.argv); + + if(x->window != NULL) + xtract_free_window(x->window); } void xtract_tilde_setup(void) { diff --git a/src/delta.c b/src/delta.c index 8e9fcd0..1591db3 100644 --- a/src/delta.c +++ b/src/delta.c @@ -41,7 +41,7 @@ int xtract_lnorm(const float *data, const int N, const void *argv , float *resul order = *(float *)argv; type = (int)*(float *)argv+1; - order = order > 0 ? order : 1.f; + order = order > 0 ? order : 2.f; switch(type){ diff --git a/src/descriptors.c b/src/descriptors.c index 4297539..4c232d7 100644 --- a/src/descriptors.c +++ b/src/descriptors.c @@ -32,7 +32,7 @@ void *xtract_make_descriptors(){ int *argc, *year, *argv_donor; xtract_vector_t *data_format, *result_format; xtract_unit_t *data_unit, *argv_unit, *result_unit; - xtract_bool_t *is_scalar; + xtract_bool_t *is_scalar, *is_delta; xtract_function_descriptor_t *fd, *d; xtract_type_t *argv_type; @@ -44,1102 +44,1194 @@ void *xtract_make_descriptors(){ while(f--){ - d = &fd[f]; - argc = &d->argc; - argv_type = &d->argv.type; + d = &fd[f]; + argc = &d->argc; + argv_type = &d->argv.type; - argv_min = &d->argv.min[0]; - argv_max = &d->argv.max[0]; - argv_def = &d->argv.def[0]; - argv_unit = &d->argv.unit[0]; + argv_min = &d->argv.min[0]; + argv_max = &d->argv.max[0]; + argv_def = &d->argv.def[0]; + argv_unit = &d->argv.unit[0]; - switch (f) { - /* argc = 1 */ - case XTRACT_VARIANCE: - case XTRACT_SPECTRAL_VARIANCE: - case XTRACT_STANDARD_DEVIATION: - case XTRACT_AVERAGE_DEVIATION: - case XTRACT_SPECTRAL_STANDARD_DEVIATION: - case XTRACT_SPECTRAL_AVERAGE_DEVIATION: - case XTRACT_LOWEST_VALUE: - case XTRACT_TONALITY: - case XTRACT_MFCC: - case XTRACT_LPC: - case XTRACT_LPCC: - *argv_min = XTRACT_ANY; - *argv_max = XTRACT_ANY; - *argv_def = XTRACT_ANY; - *argv_unit = XTRACT_ANY; - break; - case XTRACT_SPECTRAL_INHARMONICITY: - *argv_min = 0.f; - *argv_max = XTRACT_SR_UPPER_LIMIT / 2; - *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; - *argv_unit = XTRACT_HERTZ; - break; - case XTRACT_F0: - case XTRACT_FAILSAFE_F0: - *argv_min = XTRACT_SR_LOWER_LIMIT; - *argv_max = XTRACT_SR_UPPER_LIMIT; - *argv_def = XTRACT_SR_DEFAULT; - *argv_unit = XTRACT_HERTZ; - break; - /* argc = 2 */; - case XTRACT_ROLLOFF: - *argv_min = XTRACT_FFT_BANDS_MIN; - *argv_max = XTRACT_FFT_BANDS_MAX; - *argv_def = XTRACT_SPEC_BW_DEF ; - *argv_unit = XTRACT_HERTZ; - *(argv_min + 1) = 0.f; - *(argv_max + 1) = 100.f; - *(argv_def + 1) = 95.f; - *(argv_unit + 1) = XTRACT_PERCENT; - break; - case XTRACT_SPECTRUM: - *argv_min = XTRACT_SR_LOWER_LIMIT / XTRACT_FFT_BANDS_MIN; - *argv_max = XTRACT_SR_UPPER_LIMIT / XTRACT_FFT_BANDS_MAX; - *argv_def = XTRACT_SR_DEFAULT / XTRACT_FFT_BANDS_DEF; - *argv_unit = XTRACT_HERTZ; - *(argv_min + 1) = 0; - *(argv_max + 1) = 3 ; - *(argv_def + 1) = 0; - *(argv_unit + 1) = XTRACT_NONE; + switch (f) { + /* argc = 1 */ + case XTRACT_VARIANCE: + case XTRACT_SPECTRAL_VARIANCE: + case XTRACT_STANDARD_DEVIATION: + case XTRACT_DIFFERENCE_VECTOR: + case XTRACT_AVERAGE_DEVIATION: + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + case XTRACT_LOWEST_VALUE: + case XTRACT_TONALITY: + case XTRACT_MFCC: + case XTRACT_LPC: + case XTRACT_LPCC: + *argv_min = XTRACT_ANY; + *argv_max = XTRACT_ANY; + *argv_def = XTRACT_ANY; + *argv_unit = XTRACT_ANY; + break; + case XTRACT_SPECTRAL_INHARMONICITY: + *argv_min = 0.f; + *argv_max = XTRACT_SR_UPPER_LIMIT / 2; + *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; + *argv_unit = XTRACT_HERTZ; + break; + case XTRACT_F0: + case XTRACT_FAILSAFE_F0: + *argv_min = XTRACT_SR_LOWER_LIMIT; + *argv_max = XTRACT_SR_UPPER_LIMIT; + *argv_def = XTRACT_SR_DEFAULT; + *argv_unit = XTRACT_HERTZ; + break; + /* argc = 2 */; + case XTRACT_ROLLOFF: + *argv_min = XTRACT_FFT_BANDS_MIN; + *argv_max = XTRACT_FFT_BANDS_MAX; + *argv_def = XTRACT_SPEC_BW_DEF ; + *argv_unit = XTRACT_HERTZ; + *(argv_min + 1) = 0.f; + *(argv_max + 1) = 100.f; + *(argv_def + 1) = 95.f; + *(argv_unit + 1) = XTRACT_PERCENT; + break; + case XTRACT_SPECTRUM: + *argv_min = XTRACT_SR_LOWER_LIMIT / XTRACT_FFT_BANDS_MIN; + *argv_max = XTRACT_SR_UPPER_LIMIT / XTRACT_FFT_BANDS_MAX; + *argv_def = XTRACT_SR_DEFAULT / XTRACT_FFT_BANDS_DEF; + *argv_unit = XTRACT_HERTZ; + *(argv_min + 1) = 0; + *(argv_max + 1) = 3 ; + *(argv_def + 1) = 0; + *(argv_unit + 1) = XTRACT_NONE; *(argv_min + 2) = 0; *(argv_max + 2) = 1; *(argv_def + 2) = 0; - *(argv_unit + 2) = XTRACT_NONE; + *(argv_unit + 2) = XTRACT_NONE; *(argv_min + 3) = 0; *(argv_max + 3) = 1; *(argv_def + 3) = 0; - *(argv_unit + 3) = XTRACT_NONE; - break; - case XTRACT_PEAK_SPECTRUM: - *argv_min = XTRACT_SR_LOWER_LIMIT / 2; - *argv_max = XTRACT_SR_UPPER_LIMIT / 2; - *argv_def = XTRACT_SR_DEFAULT / 2; - *argv_unit = XTRACT_HERTZ; - *(argv_min + 1) = 0.f; - *(argv_max + 1) = 100.f ; - *(argv_def + 1) = 10.f ; - *(argv_unit + 1) = XTRACT_PERCENT; - break; - case XTRACT_HARMONIC_SPECTRUM: - *argv_min = 0.f; - *argv_max = XTRACT_SR_UPPER_LIMIT / 2; - *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; - *argv_unit = XTRACT_HERTZ; - *(argv_min + 1) = 0.f; - *(argv_max + 1) = 1.f ; - *(argv_def + 1) = .1f ; - *(argv_unit + 1) = XTRACT_NONE; - break; - case XTRACT_NOISINESS: - case XTRACT_SKEWNESS: - case XTRACT_KURTOSIS: - case XTRACT_SPECTRAL_SKEWNESS: - case XTRACT_SPECTRAL_KURTOSIS: - case XTRACT_CREST: - *argv_min = XTRACT_NONE; - *argv_max = XTRACT_NONE; - *argv_def = XTRACT_NONE; - *argv_unit = XTRACT_NONE; - *(argv_min + 1) = XTRACT_NONE; - *(argv_max + 1) = XTRACT_NONE; - *(argv_def + 1) = XTRACT_NONE; - *(argv_unit + 1) = XTRACT_NONE; - break; - case XTRACT_BARK_COEFFICIENTS: - /* BARK_COEFFICIENTS is special because argc = BARK_BANDS */ - default: - *argv_min = XTRACT_NONE; - *argv_max = XTRACT_NONE; - *argv_def = XTRACT_NONE; - *argv_unit = XTRACT_NONE; - break; - } + *(argv_unit + 3) = XTRACT_NONE; + break; + case XTRACT_PEAK_SPECTRUM: + *argv_min = XTRACT_SR_LOWER_LIMIT / 2; + *argv_max = XTRACT_SR_UPPER_LIMIT / 2; + *argv_def = XTRACT_SR_DEFAULT / 2; + *argv_unit = XTRACT_HERTZ; + *(argv_min + 1) = 0.f; + *(argv_max + 1) = 100.f ; + *(argv_def + 1) = 10.f ; + *(argv_unit + 1) = XTRACT_PERCENT; + break; + case XTRACT_HARMONIC_SPECTRUM: + *argv_min = 0.f; + *argv_max = XTRACT_SR_UPPER_LIMIT / 2; + *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; + *argv_unit = XTRACT_HERTZ; + *(argv_min + 1) = 0.f; + *(argv_max + 1) = 1.f ; + *(argv_def + 1) = .1f ; + *(argv_unit + 1) = XTRACT_NONE; + break; + case XTRACT_NOISINESS: + case XTRACT_SKEWNESS: + case XTRACT_KURTOSIS: + case XTRACT_SPECTRAL_SKEWNESS: + case XTRACT_SPECTRAL_KURTOSIS: + case XTRACT_CREST: + *argv_min = XTRACT_NONE; + *argv_max = XTRACT_NONE; + *argv_def = XTRACT_NONE; + *argv_unit = XTRACT_NONE; + *(argv_min + 1) = XTRACT_NONE; + *(argv_max + 1) = XTRACT_NONE; + *(argv_def + 1) = XTRACT_NONE; + *(argv_unit + 1) = XTRACT_NONE; + break; + case XTRACT_BARK_COEFFICIENTS: + /* BARK_COEFFICIENTS is special because argc = BARK_BANDS */ + case XTRACT_WINDOWED: + /* WINDOWED is special because argc = window size = N */ + default: + *argv_min = XTRACT_NONE; + *argv_max = XTRACT_NONE; + *argv_def = XTRACT_NONE; + *argv_unit = XTRACT_NONE; + break; + } - argv_donor = &d->argv.donor[0]; + argv_donor = &d->argv.donor[0]; - switch (f) { - /* argc = 1 */ - case XTRACT_VARIANCE: - *argv_donor = XTRACT_MEAN; - break; - case XTRACT_SPECTRAL_VARIANCE: - *argv_donor = XTRACT_SPECTRAL_MEAN; - break; - case XTRACT_STANDARD_DEVIATION: - *argv_donor = XTRACT_VARIANCE; - break; - case XTRACT_AVERAGE_DEVIATION: - *argv_donor = XTRACT_MEAN; - break; - case XTRACT_SPECTRAL_STANDARD_DEVIATION: - *argv_donor = XTRACT_SPECTRAL_VARIANCE; - break; - case XTRACT_SPECTRAL_AVERAGE_DEVIATION: - *argv_donor = XTRACT_SPECTRAL_MEAN; - break; - case XTRACT_SPECTRAL_INHARMONICITY: - *argv_donor = XTRACT_FAILSAFE_F0; - break; - case XTRACT_TONALITY: - *argv_donor = XTRACT_FLATNESS; - break; - case XTRACT_LOWEST_VALUE: - case XTRACT_F0: - case XTRACT_FAILSAFE_F0: - *argv_donor = XTRACT_ANY; - break; - case XTRACT_MFCC: - *argv_donor = XTRACT_INIT_MFCC; - break; - /* argc = 2 */; - case XTRACT_ROLLOFF: - case XTRACT_PEAK_SPECTRUM: + switch (f) { + /* argc = 1 */ + case XTRACT_VARIANCE: + *argv_donor = XTRACT_MEAN; + break; + case XTRACT_SPECTRAL_VARIANCE: + *argv_donor = XTRACT_SPECTRAL_MEAN; + break; + case XTRACT_STANDARD_DEVIATION: + *argv_donor = XTRACT_VARIANCE; + break; + case XTRACT_AVERAGE_DEVIATION: + *argv_donor = XTRACT_MEAN; + break; + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + *argv_donor = XTRACT_SPECTRAL_VARIANCE; + break; + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + *argv_donor = XTRACT_SPECTRAL_MEAN; + break; + case XTRACT_SPECTRAL_INHARMONICITY: + *argv_donor = XTRACT_FAILSAFE_F0; + break; + case XTRACT_TONALITY: + *argv_donor = XTRACT_FLATNESS; + break; + case XTRACT_LOWEST_VALUE: + case XTRACT_F0: + case XTRACT_FAILSAFE_F0: + *argv_donor = XTRACT_ANY; + break; + case XTRACT_MFCC: + *argv_donor = XTRACT_INIT_MFCC; + break; + /* argc = 2 */; + case XTRACT_ROLLOFF: + case XTRACT_PEAK_SPECTRUM: case XTRACT_FLUX: case XTRACT_LNORM: - *argv_donor = XTRACT_ANY; - *(argv_donor + 1) = XTRACT_ANY; - break; - case XTRACT_SKEWNESS: - case XTRACT_KURTOSIS: - *argv_donor = XTRACT_MEAN; - *(argv_donor + 1) = XTRACT_STANDARD_DEVIATION; - break; - case XTRACT_SPECTRAL_SKEWNESS: - case XTRACT_SPECTRAL_KURTOSIS: - *argv_donor = XTRACT_SPECTRAL_MEAN; - *(argv_donor + 1) = XTRACT_SPECTRAL_STANDARD_DEVIATION; - break; - case XTRACT_HARMONIC_SPECTRUM: - *argv_donor = XTRACT_FAILSAFE_F0; - *(argv_donor + 1) = XTRACT_ANY; - break; - case XTRACT_NOISINESS: - *argv_donor = XTRACT_SUM; - *(argv_donor + 1) = XTRACT_SUM; - break; - case XTRACT_CREST: - *argv_donor = XTRACT_HIGHEST_VALUE; - *(argv_donor + 1) = XTRACT_MEAN; - break; - /* argc = 4 */ - case XTRACT_SPECTRUM: - *argv_donor = XTRACT_ANY; - *(argv_donor + 1) = XTRACT_ANY; - *(argv_donor + 2) = XTRACT_ANY; - *(argv_donor + 3) = XTRACT_ANY; - break; - /* BARK_BANDS */ - case XTRACT_BARK_COEFFICIENTS: - *argv_donor = XTRACT_INIT_BARK; - break; - default: - *argv_donor = XTRACT_ANY; - break; - } + *argv_donor = XTRACT_ANY; + *(argv_donor + 1) = XTRACT_ANY; + break; + case XTRACT_SKEWNESS: + case XTRACT_KURTOSIS: + *argv_donor = XTRACT_MEAN; + *(argv_donor + 1) = XTRACT_STANDARD_DEVIATION; + break; + case XTRACT_SPECTRAL_SKEWNESS: + case XTRACT_SPECTRAL_KURTOSIS: + *argv_donor = XTRACT_SPECTRAL_MEAN; + *(argv_donor + 1) = XTRACT_SPECTRAL_STANDARD_DEVIATION; + break; + case XTRACT_HARMONIC_SPECTRUM: + *argv_donor = XTRACT_FAILSAFE_F0; + *(argv_donor + 1) = XTRACT_ANY; + break; + case XTRACT_NOISINESS: + *argv_donor = XTRACT_SUM; + *(argv_donor + 1) = XTRACT_SUM; + break; + case XTRACT_CREST: + *argv_donor = XTRACT_HIGHEST_VALUE; + *(argv_donor + 1) = XTRACT_MEAN; + break; + /* argc = 4 */ + case XTRACT_SPECTRUM: + *argv_donor = XTRACT_ANY; + *(argv_donor + 1) = XTRACT_ANY; + *(argv_donor + 2) = XTRACT_ANY; + *(argv_donor + 3) = XTRACT_ANY; + break; + /* BARK_BANDS */ + case XTRACT_BARK_COEFFICIENTS: + *argv_donor = XTRACT_INIT_BARK; + break; + case XTRACT_WINDOWED: + *argv_donor = XTRACT_INIT_WINDOWED; + break; + default: + *argv_donor = XTRACT_ANY; + break; + } data_format = &d->data.format; - switch(f){ + switch(f){ - case XTRACT_MEAN: - case XTRACT_VARIANCE: - case XTRACT_STANDARD_DEVIATION: - case XTRACT_AVERAGE_DEVIATION: - case XTRACT_SKEWNESS: - case XTRACT_KURTOSIS: - case XTRACT_LOWEST_VALUE: - case XTRACT_HIGHEST_VALUE: - case XTRACT_SUM: - *data_format = XTRACT_ARBITRARY_SERIES; - break; - case XTRACT_SPECTRAL_MEAN: - case XTRACT_SPECTRAL_VARIANCE: - case XTRACT_SPECTRAL_STANDARD_DEVIATION: - case XTRACT_SPECTRAL_AVERAGE_DEVIATION: - case XTRACT_SPECTRAL_SKEWNESS: - case XTRACT_SPECTRAL_KURTOSIS: - case XTRACT_SPECTRAL_CENTROID: - case XTRACT_SPECTRAL_SLOPE: - *data_format = XTRACT_SPECTRAL; - break; - case XTRACT_ROLLOFF: - case XTRACT_NOISINESS: - case XTRACT_BARK_COEFFICIENTS: - case XTRACT_CREST: - case XTRACT_IRREGULARITY_K: - case XTRACT_IRREGULARITY_J: - case XTRACT_SMOOTHNESS: - case XTRACT_FLATNESS: - case XTRACT_SPREAD: - case XTRACT_POWER: - case XTRACT_HPS: - case XTRACT_PEAK_SPECTRUM: - case XTRACT_MFCC: - *data_format = XTRACT_SPECTRAL_MAGNITUDES; - break; + case XTRACT_MEAN: + case XTRACT_VARIANCE: + case XTRACT_STANDARD_DEVIATION: + case XTRACT_AVERAGE_DEVIATION: + case XTRACT_SKEWNESS: + case XTRACT_KURTOSIS: + case XTRACT_LOWEST_VALUE: + case XTRACT_HIGHEST_VALUE: + case XTRACT_SUM: + case XTRACT_WINDOWED: + *data_format = XTRACT_ARBITRARY_SERIES; + break; + case XTRACT_SPECTRAL_MEAN: + case XTRACT_SPECTRAL_VARIANCE: + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + case XTRACT_SPECTRAL_SKEWNESS: + case XTRACT_SPECTRAL_KURTOSIS: + case XTRACT_SPECTRAL_CENTROID: + case XTRACT_SPECTRAL_SLOPE: + *data_format = XTRACT_SPECTRAL; + break; + case XTRACT_ROLLOFF: + case XTRACT_NOISINESS: + case XTRACT_BARK_COEFFICIENTS: + case XTRACT_CREST: + case XTRACT_IRREGULARITY_K: + case XTRACT_IRREGULARITY_J: + case XTRACT_SMOOTHNESS: + case XTRACT_FLATNESS: + case XTRACT_SPREAD: + case XTRACT_POWER: + case XTRACT_HPS: + case XTRACT_PEAK_SPECTRUM: + case XTRACT_MFCC: + *data_format = XTRACT_SPECTRAL_MAGNITUDES; + break; case XTRACT_LPC: *data_format = XTRACT_AUTOCORRELATION_COEFFS; break; case XTRACT_LPCC: *data_format = XTRACT_LPC_COEFFS; break; - case XTRACT_SPECTRAL_INHARMONICITY: - case XTRACT_HARMONIC_SPECTRUM: - *data_format = XTRACT_SPECTRAL_PEAKS; - break; - case XTRACT_NONZERO_COUNT: - *data_format = XTRACT_SPECTRAL_PEAKS_MAGNITUDES; - break; - case XTRACT_F0: - case XTRACT_FAILSAFE_F0: - case XTRACT_SPECTRUM: - case XTRACT_AUTOCORRELATION: - case XTRACT_AUTOCORRELATION_FFT: - case XTRACT_DCT: - case XTRACT_AMDF: - case XTRACT_ASDF: - case XTRACT_ZCR: - case XTRACT_RMS_AMPLITUDE: - case XTRACT_FLUX: - case XTRACT_LNORM: - *data_format = XTRACT_AUDIO_SAMPLES; - break; - case XTRACT_TONALITY: - *data_format = XTRACT_NO_DATA; - break; - case XTRACT_TRISTIMULUS_1: - case XTRACT_TRISTIMULUS_2: - case XTRACT_TRISTIMULUS_3: - case XTRACT_ODD_EVEN_RATIO: - *data_format = XTRACT_SPECTRAL_HARMONICS_MAGNITUDES; - break; - case XTRACT_LOUDNESS: - case XTRACT_SHARPNESS: - *data_format = XTRACT_BARK_COEFFS; - break; - case XTRACT_ATTACK_TIME: - case XTRACT_DECAY_TIME: - case XTRACT_DIFFERENCE_VECTOR: - default: - *data_format = XTRACT_NO_DATA; - break; - } + case XTRACT_SPECTRAL_INHARMONICITY: + case XTRACT_HARMONIC_SPECTRUM: + *data_format = XTRACT_SPECTRAL_PEAKS; + break; + case XTRACT_NONZERO_COUNT: + *data_format = XTRACT_SPECTRAL_PEAKS_MAGNITUDES; + break; + case XTRACT_F0: + case XTRACT_FAILSAFE_F0: + case XTRACT_SPECTRUM: + case XTRACT_AUTOCORRELATION: + case XTRACT_AUTOCORRELATION_FFT: + case XTRACT_DCT: + case XTRACT_AMDF: + case XTRACT_ASDF: + case XTRACT_ZCR: + case XTRACT_RMS_AMPLITUDE: + case XTRACT_FLUX: + case XTRACT_LNORM: + *data_format = XTRACT_AUDIO_SAMPLES; + break; + case XTRACT_TONALITY: + *data_format = XTRACT_NO_DATA; + break; + case XTRACT_TRISTIMULUS_1: + case XTRACT_TRISTIMULUS_2: + case XTRACT_TRISTIMULUS_3: + case XTRACT_ODD_EVEN_RATIO: + *data_format = XTRACT_SPECTRAL_HARMONICS_MAGNITUDES; + break; + case XTRACT_LOUDNESS: + case XTRACT_SHARPNESS: + *data_format = XTRACT_BARK_COEFFS; + break; + case XTRACT_DIFFERENCE_VECTOR: + *data_format = XTRACT_SUBFRAMES; + break; + case XTRACT_ATTACK_TIME: + case XTRACT_DECAY_TIME: + default: + *data_format = XTRACT_NO_DATA; + break; + } data_unit = &d->data.unit; - switch(f){ + switch(f){ - case XTRACT_MEAN: - case XTRACT_VARIANCE: - case XTRACT_STANDARD_DEVIATION: - case XTRACT_AVERAGE_DEVIATION: - case XTRACT_SKEWNESS: - case XTRACT_KURTOSIS: - case XTRACT_LOWEST_VALUE: - case XTRACT_HIGHEST_VALUE: - case XTRACT_SUM: - case XTRACT_ZCR: - case XTRACT_PEAK_SPECTRUM: - case XTRACT_TRISTIMULUS_1: - case XTRACT_TRISTIMULUS_2: - case XTRACT_TRISTIMULUS_3: - case XTRACT_DCT: - case XTRACT_AMDF: - case XTRACT_ASDF: - case XTRACT_IRREGULARITY_K: - case XTRACT_IRREGULARITY_J: - case XTRACT_ATTACK_TIME: - case XTRACT_DECAY_TIME: - case XTRACT_DIFFERENCE_VECTOR: - case XTRACT_FLUX: - case XTRACT_LNORM: - case XTRACT_F0: - case XTRACT_FAILSAFE_F0: - case XTRACT_MFCC: - case XTRACT_AUTOCORRELATION: - case XTRACT_AUTOCORRELATION_FFT: - case XTRACT_ROLLOFF: - case XTRACT_NOISINESS: - case XTRACT_CREST: - case XTRACT_FLATNESS: - case XTRACT_POWER: - case XTRACT_BARK_COEFFICIENTS: - case XTRACT_RMS_AMPLITUDE: - case XTRACT_SMOOTHNESS: - case XTRACT_SPREAD: - case XTRACT_SHARPNESS: - case XTRACT_HPS: - case XTRACT_SPECTRUM: - case XTRACT_TONALITY: - case XTRACT_LOUDNESS: - case XTRACT_NONZERO_COUNT: + case XTRACT_MEAN: + case XTRACT_VARIANCE: + case XTRACT_STANDARD_DEVIATION: + case XTRACT_AVERAGE_DEVIATION: + case XTRACT_SKEWNESS: + case XTRACT_KURTOSIS: + case XTRACT_LOWEST_VALUE: + case XTRACT_HIGHEST_VALUE: + case XTRACT_SUM: + case XTRACT_ZCR: + case XTRACT_PEAK_SPECTRUM: + case XTRACT_TRISTIMULUS_1: + case XTRACT_TRISTIMULUS_2: + case XTRACT_TRISTIMULUS_3: + case XTRACT_DCT: + case XTRACT_AMDF: + case XTRACT_ASDF: + case XTRACT_IRREGULARITY_K: + case XTRACT_IRREGULARITY_J: + case XTRACT_ATTACK_TIME: + case XTRACT_DECAY_TIME: + case XTRACT_DIFFERENCE_VECTOR: + case XTRACT_FLUX: + case XTRACT_LNORM: + case XTRACT_F0: + case XTRACT_FAILSAFE_F0: + case XTRACT_MFCC: + case XTRACT_AUTOCORRELATION: + case XTRACT_AUTOCORRELATION_FFT: + case XTRACT_ROLLOFF: + case XTRACT_NOISINESS: + case XTRACT_CREST: + case XTRACT_FLATNESS: + case XTRACT_POWER: + case XTRACT_BARK_COEFFICIENTS: + case XTRACT_RMS_AMPLITUDE: + case XTRACT_SMOOTHNESS: + case XTRACT_SPREAD: + case XTRACT_SHARPNESS: + case XTRACT_HPS: + case XTRACT_SPECTRUM: + case XTRACT_TONALITY: + case XTRACT_LOUDNESS: + case XTRACT_NONZERO_COUNT: case XTRACT_LPC: case XTRACT_LPCC: - *data_unit = XTRACT_ANY; - break; - case XTRACT_SPECTRAL_MEAN: - case XTRACT_SPECTRAL_VARIANCE: - case XTRACT_SPECTRAL_STANDARD_DEVIATION: - case XTRACT_SPECTRAL_AVERAGE_DEVIATION: - case XTRACT_SPECTRAL_SKEWNESS: - case XTRACT_SPECTRAL_KURTOSIS: - case XTRACT_SPECTRAL_CENTROID: - case XTRACT_SPECTRAL_SLOPE: - case XTRACT_HARMONIC_SPECTRUM: - case XTRACT_SPECTRAL_INHARMONICITY: - *data_unit = XTRACT_ANY_AMPLITUDE_HERTZ; - break; - case XTRACT_ODD_EVEN_RATIO: - *data_unit = XTRACT_HERTZ; - break; - } + case XTRACT_WINDOWED: + *data_unit = XTRACT_ANY; + break; + case XTRACT_SPECTRAL_MEAN: + case XTRACT_SPECTRAL_VARIANCE: + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + case XTRACT_SPECTRAL_SKEWNESS: + case XTRACT_SPECTRAL_KURTOSIS: + case XTRACT_SPECTRAL_CENTROID: + case XTRACT_SPECTRAL_SLOPE: + case XTRACT_HARMONIC_SPECTRUM: + case XTRACT_SPECTRAL_INHARMONICITY: + *data_unit = XTRACT_ANY_AMPLITUDE_HERTZ; + break; + case XTRACT_ODD_EVEN_RATIO: + *data_unit = XTRACT_HERTZ; + break; + } - name = d->algo.name; - p_name = d->algo.p_name; - desc = d->algo.desc; - p_desc = d->algo.p_desc; - author = d->algo.author; - year = &d->algo.year; + name = d->algo.name; + p_name = d->algo.p_name; + desc = d->algo.desc; + p_desc = d->algo.p_desc; + author = d->algo.author; + year = &d->algo.year; - strcpy(author, ""); - *year = 0; + strcpy(author, ""); + *year = 0; - switch(f){ - case XTRACT_MEAN: - strcpy(name, "mean"); - strcpy(p_name, "Mean"); - strcpy(desc, "Extract the mean of an input vector"); - strcpy(p_desc, "Extract the mean of a range of values"); - strcpy(author, ""); - d->argv.type = XTRACT_NONE; - break; - case XTRACT_VARIANCE: - strcpy(name, "variance"); - strcpy(p_name, "Variance"); - strcpy(desc, "Extract the variance of an input vector"); - strcpy(p_desc, "Extract the variance of a range of values"); - strcpy(author, ""); - break; - case XTRACT_STANDARD_DEVIATION: - strcpy(name, "standard_deviation"); - strcpy(p_name, "Standard Deviation"); - strcpy(desc, - "Extract the standard deviation of an input vector"); - strcpy(p_desc, - "Extract the standard deviation of a range of values"); - strcpy(author, ""); - break; - case XTRACT_AVERAGE_DEVIATION: - strcpy(name, "average_deviation"); - strcpy(p_name, "Average Deviation"); - strcpy(desc, - "Extract the average deviation of an input vector"); - strcpy(p_desc, - "Extract the average deviation of a range of values"); - strcpy(author, ""); - break; - case XTRACT_SKEWNESS: - strcpy(name, "skewness"); - strcpy(p_name, "Skewness"); - strcpy(desc, - "Extract the skewness of an input vector"); - strcpy(p_desc, - "Extract the skewness of a range of values"); - strcpy(author, ""); - break; - case XTRACT_KURTOSIS: - strcpy(name, "kurtosis"); - strcpy(p_name, "Kurtosis"); - strcpy(desc, - "Extract the kurtosis of an input vector"); - strcpy(p_desc, - "Extract the kurtosis of a range of values"); - strcpy(author, ""); - break; - case XTRACT_SPECTRAL_MEAN: - strcpy(name, "spectral_mean"); - strcpy(p_name, "Spectral Mean"); - strcpy(desc, "Extract the mean of an input spectrum"); - strcpy(p_desc, "Extract the mean of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_SPECTRAL_VARIANCE: - strcpy(name, "spectral_variance"); - strcpy(p_name, "Spectral Variance"); - strcpy(desc, "Extract the variance of an input spectrum"); - strcpy(p_desc, "Extract the variance of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_SPECTRAL_STANDARD_DEVIATION: - strcpy(name, "spectral_standard_deviation"); - strcpy(p_name, "Spectral Standard Deviation"); - strcpy(desc, - "Extract the standard deviation of an input spectrum"); - strcpy(p_desc, - "Extract the standard deviation of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_SPECTRAL_AVERAGE_DEVIATION: - strcpy(name, "spectral_average_deviation"); - strcpy(p_name, "Spectral Average Deviation"); - strcpy(desc, - "Extract the average deviation of an input spectrum"); - strcpy(p_desc, - "Extract the average deviation of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_ROLLOFF: - strcpy(name, "spectral_rolloff"); - strcpy(p_name, "Spectral Rolloff"); - strcpy(desc, - "Extract the rolloff point of a spectrum"); - strcpy(p_desc, - "Extract the rolloff point of an audio spectrum"); - strcpy(author, "Bee Suan Ong"); - *year = 2005; - break; - case XTRACT_SPECTRAL_INHARMONICITY: - strcpy(name, "spectral_inharmonicity"); - strcpy(p_name, "Inharmonicity"); - strcpy(desc, "Extract the inharmonicity of a spectrum"); - strcpy(p_desc, - "Extract the inharmonicity of an audio spectrum"); - break; - case XTRACT_SPECTRUM: - strcpy(name, "spectrum"); - strcpy(p_name, "Spectrum"); - strcpy(desc, - "Extract the spectrum of an input vector"); - strcpy(p_desc, - "Extract the spectrum of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_ODD_EVEN_RATIO: - strcpy(name, "odd_even_ratio"); - strcpy(p_name, "Odd/Even Harmonic Ratio"); - strcpy(desc, - "Extract the odd-to-even harmonic ratio of a spectrum"); - strcpy(p_desc, - "Extract the odd-to-even harmonic ratio of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_LOWEST_VALUE: - strcpy(name, "lowest_value"); - strcpy(p_name, "Lowest Value"); - strcpy(desc, "Extract the lowest value from an input vector"); - strcpy(p_desc, "Extract the lowest value from a given range"); - strcpy(author, ""); - break; - case XTRACT_F0: - strcpy(name, "f0"); - strcpy(p_name, "Fundamental Frequency"); - strcpy(desc, "Extract the fundamental frequency of a signal"); - strcpy(p_desc, - "Extract the fundamental frequency of an audio signal"); - strcpy(author, "Jamie Bullock"); - break; - case XTRACT_FAILSAFE_F0: - strcpy(name, "failsafe_f0"); - strcpy(p_name, "Fundamental Frequency (failsafe)"); - strcpy(desc, "Extract the fundamental frequency of a signal (failsafe)"); - strcpy(p_desc, - "Extract the fundamental frequency of an audio signal (failsafe)"); - strcpy(author, "Jamie Bullock"); - break; - case XTRACT_TONALITY: - strcpy(name, "tonality"); - strcpy(p_name, "Tonality"); - strcpy(desc, "Extract the tonality of a spectrum"); - strcpy(p_desc, "Extract the tonality an audio spectrum"); - strcpy(author, "J. D. Johnston"); - *year = 1988; - break; - case XTRACT_SPECTRAL_SKEWNESS: - strcpy(name, "spectral_skewness"); - strcpy(p_name, "Spectral Skewness"); - strcpy(desc, "Extract the skewness of an input spectrum"); - strcpy(p_desc, "Extract the skewness of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_SPECTRAL_KURTOSIS: - strcpy(name, "spectral_kurtosis"); - strcpy(p_name, "Spectral Kurtosis"); - strcpy(desc, "Extract the kurtosis of an input spectrum"); - strcpy(p_desc, "Extract the kurtosis of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_PEAK_SPECTRUM: - strcpy(name, "peak_spectrum"); - strcpy(p_name, "Peak Spectrum"); - strcpy(desc, "Extract the spectral peaks from of a spectrum"); - strcpy(p_desc, - "Extract the spectral peaks from an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_HARMONIC_SPECTRUM: - strcpy(name, "harmonic_spectrum"); - strcpy(p_name, "Harmonic Spectrum"); - strcpy(desc, "Extract the harmonics from a spectrum"); - strcpy(p_desc, "Extract the harmonics from an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_NOISINESS: - strcpy(name, "noisiness"); - strcpy(p_name, "Noisiness"); - strcpy(desc, "Extract the noisiness of a spectrum"); - strcpy(p_desc, "Extract the noisiness of an audio spectrum"); - strcpy(author, "Tae Hong Park"); - *year = 2000; - break; - case XTRACT_CREST: - strcpy(name, "crest"); - strcpy(p_name, "Spectral Crest Measure"); - strcpy(desc, - "Extract the spectral crest measure of a spectrum"); - strcpy(p_desc, - "Extract the spectral crest measure of an audio spectrum"); - strcpy(author, "Peeters"); - *year = 2003; - break; - case XTRACT_MFCC: - strcpy(name, "mfcc"); - strcpy(p_name, "Mel-Frequency Cepstral Coefficients"); - strcpy(desc, "Extract MFCC from a spectrum"); - strcpy(p_desc, "Extract MFCC from an audio spectrum"); - strcpy(author, "Rabiner"); + switch(f){ + case XTRACT_MEAN: + strcpy(name, "mean"); + strcpy(p_name, "Mean"); + strcpy(desc, "Extract the mean of an input vector"); + strcpy(p_desc, "Extract the mean of a range of values"); + strcpy(author, ""); + d->argv.type = XTRACT_NONE; + break; + case XTRACT_VARIANCE: + strcpy(name, "variance"); + strcpy(p_name, "Variance"); + strcpy(desc, "Extract the variance of an input vector"); + strcpy(p_desc, "Extract the variance of a range of values"); + strcpy(author, ""); + break; + case XTRACT_STANDARD_DEVIATION: + strcpy(name, "standard_deviation"); + strcpy(p_name, "Standard Deviation"); + strcpy(desc, + "Extract the standard deviation of an input vector"); + strcpy(p_desc, + "Extract the standard deviation of a range of values"); + strcpy(author, ""); + break; + case XTRACT_AVERAGE_DEVIATION: + strcpy(name, "average_deviation"); + strcpy(p_name, "Average Deviation"); + strcpy(desc, + "Extract the average deviation of an input vector"); + strcpy(p_desc, + "Extract the average deviation of a range of values"); + strcpy(author, ""); + break; + case XTRACT_SKEWNESS: + strcpy(name, "skewness"); + strcpy(p_name, "Skewness"); + strcpy(desc, + "Extract the skewness of an input vector"); + strcpy(p_desc, + "Extract the skewness of a range of values"); + strcpy(author, ""); + break; + case XTRACT_KURTOSIS: + strcpy(name, "kurtosis"); + strcpy(p_name, "Kurtosis"); + strcpy(desc, + "Extract the kurtosis of an input vector"); + strcpy(p_desc, + "Extract the kurtosis of a range of values"); + strcpy(author, ""); + break; + case XTRACT_SPECTRAL_MEAN: + strcpy(name, "spectral_mean"); + strcpy(p_name, "Spectral Mean"); + strcpy(desc, "Extract the mean of an input spectrum"); + strcpy(p_desc, "Extract the mean of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_SPECTRAL_VARIANCE: + strcpy(name, "spectral_variance"); + strcpy(p_name, "Spectral Variance"); + strcpy(desc, "Extract the variance of an input spectrum"); + strcpy(p_desc, "Extract the variance of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + strcpy(name, "spectral_standard_deviation"); + strcpy(p_name, "Spectral Standard Deviation"); + strcpy(desc, + "Extract the standard deviation of an input spectrum"); + strcpy(p_desc, + "Extract the standard deviation of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + strcpy(name, "spectral_average_deviation"); + strcpy(p_name, "Spectral Average Deviation"); + strcpy(desc, + "Extract the average deviation of an input spectrum"); + strcpy(p_desc, + "Extract the average deviation of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_ROLLOFF: + strcpy(name, "spectral_rolloff"); + strcpy(p_name, "Spectral Rolloff"); + strcpy(desc, + "Extract the rolloff point of a spectrum"); + strcpy(p_desc, + "Extract the rolloff point of an audio spectrum"); + strcpy(author, "Bee Suan Ong"); + *year = 2005; + break; + case XTRACT_SPECTRAL_INHARMONICITY: + strcpy(name, "spectral_inharmonicity"); + strcpy(p_name, "Inharmonicity"); + strcpy(desc, "Extract the inharmonicity of a spectrum"); + strcpy(p_desc, + "Extract the inharmonicity of an audio spectrum"); + break; + case XTRACT_SPECTRUM: + strcpy(name, "spectrum"); + strcpy(p_name, "Spectrum"); + strcpy(desc, + "Extract the spectrum of an input vector"); + strcpy(p_desc, + "Extract the spectrum of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_ODD_EVEN_RATIO: + strcpy(name, "odd_even_ratio"); + strcpy(p_name, "Odd/Even Harmonic Ratio"); + strcpy(desc, + "Extract the odd-to-even harmonic ratio of a spectrum"); + strcpy(p_desc, + "Extract the odd-to-even harmonic ratio of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_LOWEST_VALUE: + strcpy(name, "lowest_value"); + strcpy(p_name, "Lowest Value"); + strcpy(desc, "Extract the lowest value from an input vector"); + strcpy(p_desc, "Extract the lowest value from a given range"); + strcpy(author, ""); + break; + case XTRACT_F0: + strcpy(name, "f0"); + strcpy(p_name, "Fundamental Frequency"); + strcpy(desc, "Extract the fundamental frequency of a signal"); + strcpy(p_desc, + "Extract the fundamental frequency of an audio signal"); + strcpy(author, "Jamie Bullock"); + break; + case XTRACT_FAILSAFE_F0: + strcpy(name, "failsafe_f0"); + strcpy(p_name, "Fundamental Frequency (failsafe)"); + strcpy(desc, "Extract the fundamental frequency of a signal (failsafe)"); + strcpy(p_desc, + "Extract the fundamental frequency of an audio signal (failsafe)"); + strcpy(author, "Jamie Bullock"); + break; + case XTRACT_TONALITY: + strcpy(name, "tonality"); + strcpy(p_name, "Tonality"); + strcpy(desc, "Extract the tonality of a spectrum"); + strcpy(p_desc, "Extract the tonality an audio spectrum"); + strcpy(author, "J. D. Johnston"); + *year = 1988; + break; + case XTRACT_SPECTRAL_SKEWNESS: + strcpy(name, "spectral_skewness"); + strcpy(p_name, "Spectral Skewness"); + strcpy(desc, "Extract the skewness of an input spectrum"); + strcpy(p_desc, "Extract the skewness of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_SPECTRAL_KURTOSIS: + strcpy(name, "spectral_kurtosis"); + strcpy(p_name, "Spectral Kurtosis"); + strcpy(desc, "Extract the kurtosis of an input spectrum"); + strcpy(p_desc, "Extract the kurtosis of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_PEAK_SPECTRUM: + strcpy(name, "peak_spectrum"); + strcpy(p_name, "Peak Spectrum"); + strcpy(desc, "Extract the spectral peaks from of a spectrum"); + strcpy(p_desc, + "Extract the spectral peaks from an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_HARMONIC_SPECTRUM: + strcpy(name, "harmonic_spectrum"); + strcpy(p_name, "Harmonic Spectrum"); + strcpy(desc, "Extract the harmonics from a spectrum"); + strcpy(p_desc, "Extract the harmonics from an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_NOISINESS: + strcpy(name, "noisiness"); + strcpy(p_name, "Noisiness"); + strcpy(desc, "Extract the noisiness of a spectrum"); + strcpy(p_desc, "Extract the noisiness of an audio spectrum"); + strcpy(author, "Tae Hong Park"); + *year = 2000; + break; + case XTRACT_CREST: + strcpy(name, "crest"); + strcpy(p_name, "Spectral Crest Measure"); + strcpy(desc, + "Extract the spectral crest measure of a spectrum"); + strcpy(p_desc, + "Extract the spectral crest measure of an audio spectrum"); + strcpy(author, "Peeters"); + *year = 2003; + break; + case XTRACT_MFCC: + strcpy(name, "mfcc"); + strcpy(p_name, "Mel-Frequency Cepstral Coefficients"); + strcpy(desc, "Extract MFCC from a spectrum"); + strcpy(p_desc, "Extract MFCC from an audio spectrum"); + strcpy(author, "Rabiner"); break; case XTRACT_LPC: - strcpy(name, "lpc"); - strcpy(p_name, "Linear predictive coding coefficients"); - strcpy(desc, "Extract LPC from autocorrelation coefficients"); - strcpy(p_desc, + strcpy(name, "lpc"); + strcpy(p_name, "Linear predictive coding coefficients"); + strcpy(desc, "Extract LPC from autocorrelation coefficients"); + strcpy(p_desc, "Extract LPC from autocorrelation coefficients"); - strcpy(author, + strcpy(author, "Rabiner and Juang as implemented by Jutta Degener"); *year = 1994; break; case XTRACT_LPCC: - strcpy(name, "lpcc"); - strcpy(p_name, "Linear predictive coding cepstral coefficients"); - strcpy(desc, "Extract LPC cepstrum from LPC coefficients"); - strcpy(p_desc, + strcpy(name, "lpcc"); + strcpy(p_name, "Linear predictive coding cepstral coefficients"); + strcpy(desc, "Extract LPC cepstrum from LPC coefficients"); + strcpy(p_desc, "Extract LPC cepstrum from LPC coefficients"); - strcpy(author, "Rabiner and Juang"); + strcpy(author, "Rabiner and Juang"); *year = 1993; - break; - case XTRACT_BARK_COEFFICIENTS: - strcpy(name, "bark_coefficients"); - strcpy(p_name, "Bark Coefficients"); - strcpy(desc, "Extract bark coefficients from a spectrum"); - strcpy(p_desc, - "Extract bark coefficients from an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_SPECTRAL_CENTROID: - strcpy(name, "spectral_centroid"); - strcpy(p_name, "Spectral Centroid"); - strcpy(desc, "Extract the spectral centroid of a spectrum"); - strcpy(p_desc, - "Extract the spectral centroid of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_IRREGULARITY_K: - strcpy(name, "irregularity_k"); - strcpy(p_name, "Irregularity I"); - strcpy(desc, "Extract the irregularity (type I) of a spectrum"); - strcpy(p_desc, - "Extract the irregularity (type I) of an audio spectrum"); - strcpy(author, "Krimphoff"); - *year = 1994; - break; - case XTRACT_IRREGULARITY_J: - strcpy(name, "irregularity_j"); - strcpy(p_name, "Irregularity II"); - strcpy(desc, "Extract the irregularity (type II) of a spectrum"); - strcpy(p_desc, - "Extract the irregularity (type II) of an audio spectrum"); - strcpy(author, "Jensen"); - *year = 1999; - break; - case XTRACT_TRISTIMULUS_1: - strcpy(name, "tristimulus_1"); - strcpy(p_name, "Tristimulus I"); - strcpy(desc, "Extract the tristimulus (type I) of a spectrum"); - strcpy(p_desc, - "Extract the tristimulus (type I) of an audio spectrum"); - strcpy(author, "Pollard and Jansson"); - *year = 1982; - break; - case XTRACT_TRISTIMULUS_2: - strcpy(name, "tristimulus_2"); - strcpy(p_name, "Tristimulus II"); - strcpy(desc, "Extract the tristimulus (type II) of a spectrum"); - strcpy(p_desc, - "Extract the tristimulus (type II) of an audio spectrum"); - strcpy(author, "Pollard and Jansson"); - *year = 1982; - break; - case XTRACT_TRISTIMULUS_3: - strcpy(name, "tristimulus_3"); - strcpy(p_name, "Tristimulus III"); - strcpy(desc, - "Extract the tristimulus (type III) of a spectrum"); - strcpy(p_desc, - "Extract the tristimulus (type III) of an audio spectrum"); - strcpy(author, "Pollard and Jansson"); - *year = 1982; - break; - case XTRACT_SMOOTHNESS: - strcpy(name, "smoothness"); - strcpy(p_name, "Spectral Smoothness"); - strcpy(desc, "Extract the spectral smoothness of a spectrum"); - strcpy(p_desc, - "Extract the spectral smoothness of an audio spectrum"); - strcpy(author, "McAdams"); - *year = 1999; - break; - case XTRACT_FLATNESS: - strcpy(name, "flatness"); - strcpy(p_name, "Spectral Flatness"); - strcpy(desc, "Extract the spectral flatness of a spectrum"); - strcpy(p_desc, - "Extract the spectral flatness of an audio spectrum"); - strcpy(author, "Tristan Jehan"); - *year = 2005; - break; - case XTRACT_SPREAD: - strcpy(name, "spread"); - strcpy(p_name, "Spectral Spread"); - strcpy(desc, "Extract the spectral spread of a spectrum"); - strcpy(p_desc, - "Extract the spectral spread of an audio spectrum"); - strcpy(author, "Norman Casagrande"); - *year = 2005; - break; - case XTRACT_ZCR: - strcpy(name, "zcr"); - strcpy(p_name, "Zero Crossing Rate"); - strcpy(desc, "Extract the zero crossing rate of a vector"); - strcpy(p_desc, - "Extract the zero crossing rate of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_LOUDNESS: - strcpy(name, "loudness"); - strcpy(p_name, "Loudness"); - strcpy(desc, - "Extract the loudness of a signal from its spectrum"); - strcpy(p_desc, - "Extract the loudness of an audio signal from its spectrum"); - strcpy(author, "Moore, Glasberg et al"); - *year = 2005; - break; - case XTRACT_HIGHEST_VALUE: - strcpy(name, "highest_value"); - strcpy(p_name, "Highest Value"); - strcpy(desc, "Extract the highest value from an input vector"); - strcpy(p_desc, "Extract the highest value from a given range"); - strcpy(author, ""); - break; - case XTRACT_SUM: - strcpy(name, "sum"); - strcpy(p_name, "Sum of Values"); - strcpy(desc, - "Extract the sum of the values in an input vector"); - strcpy(p_desc, - "Extract the sum of the values in a given range"); - strcpy(author, ""); - break; - case XTRACT_RMS_AMPLITUDE: - strcpy(name, "rms_amplitude"); - strcpy(p_name, "RMS Amplitude"); - strcpy(desc, "Extract the RMS amplitude of a signal"); - strcpy(p_desc, "Extract the RMS amplitude of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_POWER: - strcpy(name, "power"); - strcpy(p_name, "Spectral Power"); - strcpy(desc, "Extract the spectral power of a spectrum"); - strcpy(p_desc, - "Extract the spectral power of an audio spectrum"); - strcpy(author, "Bee Suan Ong"); - *year = 2005; - break; - case XTRACT_SHARPNESS: - strcpy(name, "sharpness"); - strcpy(p_name, "Spectral Sharpness"); - strcpy(desc, "Extract the spectral sharpness of a spectrum"); - strcpy(p_desc, - "Extract the spectral sharpness of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_SPECTRAL_SLOPE: - strcpy(name, "spectral_slope"); - strcpy(p_name, "Spectral Slope"); - strcpy(desc, "Extract the spectral slope of a spectrum"); - strcpy(p_desc, - "Extract the spectral slope of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_HPS: - strcpy(name, "hps"); - strcpy(p_name, "Harmonic Product Spectrum"); - strcpy(desc, - "Extract the harmonic product spectrum of a spectrum"); - strcpy(p_desc, - "Extract the harmonic product spectrum of an audio spectrum"); - strcpy(author, ""); - break; - case XTRACT_FLUX: - strcpy(name, "flux"); - strcpy(p_name, "Spectral Flux"); - strcpy(desc, "Extract the spectral flux of a spectrum"); - strcpy(p_desc, - "Extract the spectral flux of an audio spectrum"); - strcpy(author, ""); - break; + break; + case XTRACT_BARK_COEFFICIENTS: + strcpy(name, "bark_coefficients"); + strcpy(p_name, "Bark Coefficients"); + strcpy(desc, "Extract bark coefficients from a spectrum"); + strcpy(p_desc, + "Extract bark coefficients from an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_SPECTRAL_CENTROID: + strcpy(name, "spectral_centroid"); + strcpy(p_name, "Spectral Centroid"); + strcpy(desc, "Extract the spectral centroid of a spectrum"); + strcpy(p_desc, + "Extract the spectral centroid of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_IRREGULARITY_K: + strcpy(name, "irregularity_k"); + strcpy(p_name, "Irregularity I"); + strcpy(desc, "Extract the irregularity (type I) of a spectrum"); + strcpy(p_desc, + "Extract the irregularity (type I) of an audio spectrum"); + strcpy(author, "Krimphoff"); + *year = 1994; + break; + case XTRACT_IRREGULARITY_J: + strcpy(name, "irregularity_j"); + strcpy(p_name, "Irregularity II"); + strcpy(desc, "Extract the irregularity (type II) of a spectrum"); + strcpy(p_desc, + "Extract the irregularity (type II) of an audio spectrum"); + strcpy(author, "Jensen"); + *year = 1999; + break; + case XTRACT_TRISTIMULUS_1: + strcpy(name, "tristimulus_1"); + strcpy(p_name, "Tristimulus I"); + strcpy(desc, "Extract the tristimulus (type I) of a spectrum"); + strcpy(p_desc, + "Extract the tristimulus (type I) of an audio spectrum"); + strcpy(author, "Pollard and Jansson"); + *year = 1982; + break; + case XTRACT_TRISTIMULUS_2: + strcpy(name, "tristimulus_2"); + strcpy(p_name, "Tristimulus II"); + strcpy(desc, "Extract the tristimulus (type II) of a spectrum"); + strcpy(p_desc, + "Extract the tristimulus (type II) of an audio spectrum"); + strcpy(author, "Pollard and Jansson"); + *year = 1982; + break; + case XTRACT_TRISTIMULUS_3: + strcpy(name, "tristimulus_3"); + strcpy(p_name, "Tristimulus III"); + strcpy(desc, + "Extract the tristimulus (type III) of a spectrum"); + strcpy(p_desc, + "Extract the tristimulus (type III) of an audio spectrum"); + strcpy(author, "Pollard and Jansson"); + *year = 1982; + break; + case XTRACT_SMOOTHNESS: + strcpy(name, "smoothness"); + strcpy(p_name, "Spectral Smoothness"); + strcpy(desc, "Extract the spectral smoothness of a spectrum"); + strcpy(p_desc, + "Extract the spectral smoothness of an audio spectrum"); + strcpy(author, "McAdams"); + *year = 1999; + break; + case XTRACT_FLATNESS: + strcpy(name, "flatness"); + strcpy(p_name, "Spectral Flatness"); + strcpy(desc, "Extract the spectral flatness of a spectrum"); + strcpy(p_desc, + "Extract the spectral flatness of an audio spectrum"); + strcpy(author, "Tristan Jehan"); + *year = 2005; + break; + case XTRACT_SPREAD: + strcpy(name, "spread"); + strcpy(p_name, "Spectral Spread"); + strcpy(desc, "Extract the spectral spread of a spectrum"); + strcpy(p_desc, + "Extract the spectral spread of an audio spectrum"); + strcpy(author, "Norman Casagrande"); + *year = 2005; + break; + case XTRACT_ZCR: + strcpy(name, "zcr"); + strcpy(p_name, "Zero Crossing Rate"); + strcpy(desc, "Extract the zero crossing rate of a vector"); + strcpy(p_desc, + "Extract the zero crossing rate of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_LOUDNESS: + strcpy(name, "loudness"); + strcpy(p_name, "Loudness"); + strcpy(desc, + "Extract the loudness of a signal from its spectrum"); + strcpy(p_desc, + "Extract the loudness of an audio signal from its spectrum"); + strcpy(author, "Moore, Glasberg et al"); + *year = 2005; + break; + case XTRACT_HIGHEST_VALUE: + strcpy(name, "highest_value"); + strcpy(p_name, "Highest Value"); + strcpy(desc, "Extract the highest value from an input vector"); + strcpy(p_desc, "Extract the highest value from a given range"); + strcpy(author, ""); + break; + case XTRACT_SUM: + strcpy(name, "sum"); + strcpy(p_name, "Sum of Values"); + strcpy(desc, + "Extract the sum of the values in an input vector"); + strcpy(p_desc, + "Extract the sum of the values in a given range"); + strcpy(author, ""); + break; + case XTRACT_RMS_AMPLITUDE: + strcpy(name, "rms_amplitude"); + strcpy(p_name, "RMS Amplitude"); + strcpy(desc, "Extract the RMS amplitude of a signal"); + strcpy(p_desc, "Extract the RMS amplitude of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_POWER: + strcpy(name, "power"); + strcpy(p_name, "Spectral Power"); + strcpy(desc, "Extract the spectral power of a spectrum"); + strcpy(p_desc, + "Extract the spectral power of an audio spectrum"); + strcpy(author, "Bee Suan Ong"); + *year = 2005; + break; + case XTRACT_SHARPNESS: + strcpy(name, "sharpness"); + strcpy(p_name, "Spectral Sharpness"); + strcpy(desc, "Extract the spectral sharpness of a spectrum"); + strcpy(p_desc, + "Extract the spectral sharpness of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_SPECTRAL_SLOPE: + strcpy(name, "spectral_slope"); + strcpy(p_name, "Spectral Slope"); + strcpy(desc, "Extract the spectral slope of a spectrum"); + strcpy(p_desc, + "Extract the spectral slope of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_HPS: + strcpy(name, "hps"); + strcpy(p_name, "Harmonic Product Spectrum"); + strcpy(desc, + "Extract the harmonic product spectrum of a spectrum"); + strcpy(p_desc, + "Extract the harmonic product spectrum of an audio spectrum"); + strcpy(author, ""); + break; + case XTRACT_FLUX: + strcpy(name, "flux"); + strcpy(p_name, "Spectral Flux"); + strcpy(desc, "Extract the spectral flux of a spectrum"); + strcpy(p_desc, + "Extract the spectral flux of an audio spectrum"); + strcpy(author, ""); + break; case XTRACT_LNORM: - strcpy(name, "L-norm"); - strcpy(p_name, "L-norm"); - strcpy(desc, "Extract the L-norm of a vector"); - strcpy(p_desc, "Extract the L-norm of a vector"); - strcpy(author, ""); - break; - case XTRACT_ATTACK_TIME: - strcpy(name, "attack_time"); - strcpy(p_name, "Attack Time"); - strcpy(desc, "Extract the attack time of a signal"); - strcpy(p_desc, "Extract the attack time of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_DECAY_TIME: - strcpy(name, "decay_time"); - strcpy(p_name, "Decay Time"); - strcpy(desc, "Extract the decay time of a signal"); - strcpy(p_desc, "Extract the decay time of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_DIFFERENCE_VECTOR: - strcpy(name, "difference_vector"); - strcpy(p_name, "Difference vector"); - strcpy(desc, "Extract the difference between two vectors"); - strcpy(p_desc, "Extract the difference between two vectors"); - strcpy(author, ""); - break; - case XTRACT_AUTOCORRELATION_FFT: - strcpy(name, "autocorrelation_fft"); - strcpy(p_name, "Autocorrelation (FFT method)"); - strcpy(desc, "Extract the autocorrelation of a signal (fft method)"); - strcpy(p_desc, "Extract the autocorrelation of an audio signal (fft method)"); - strcpy(author, ""); - break; - case XTRACT_DCT: - strcpy(name, "dct"); - strcpy(p_name, "Discrete Cosine Transform"); - strcpy(desc, "Extract the DCT of a signal"); - strcpy(p_desc, "Extract the DCT of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_AUTOCORRELATION: - strcpy(name, "autocorrelation"); - strcpy(p_name, "Autocorrelation"); - strcpy(desc, "Extract the autocorrelation of a signal"); - strcpy(p_desc, - "Extract the autocorrelation of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_AMDF: - strcpy(name, "amdf"); - strcpy(p_name, "Average Magnitude Difference Function"); - strcpy(desc, "Extract the AMDF of a signal"); - strcpy(p_desc, "Extract the AMDF of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_ASDF: - strcpy(name, "asdf"); - strcpy(p_name, "Average Squared Difference Function"); - strcpy(desc, "Extract the ASDF of a signal"); - strcpy(p_desc, "Extract the ASDF of an audio signal"); - strcpy(author, ""); - break; - case XTRACT_NONZERO_COUNT: - strcpy(name, "nonzero_count"); - strcpy(p_name, "Non-zero count"); - strcpy(desc, "Extract the number of non-zero elements in the input vector"); - strcpy(p_desc, "Extract the number of non-zero elements in an input spectrum"); - strcpy(author, ""); - break; - default: - strcpy(name, ""); - strcpy(p_name, ""); - strcpy(desc, ""); - strcpy(p_desc, ""); - strcpy(author, ""); - break; - } - + strcpy(name, "lnorm"); + strcpy(p_name, "L-norm"); + strcpy(desc, "Extract the L-norm of a vector"); + strcpy(p_desc, "Extract the L-norm of a vector"); + strcpy(author, ""); + break; + case XTRACT_ATTACK_TIME: + strcpy(name, "attack_time"); + strcpy(p_name, "Attack Time"); + strcpy(desc, "Extract the attack time of a signal"); + strcpy(p_desc, "Extract the attack time of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_DECAY_TIME: + strcpy(name, "decay_time"); + strcpy(p_name, "Decay Time"); + strcpy(desc, "Extract the decay time of a signal"); + strcpy(p_desc, "Extract the decay time of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_DIFFERENCE_VECTOR: + strcpy(name, "difference_vector"); + strcpy(p_name, "Difference vector"); + strcpy(desc, "Extract the difference between two vectors"); + strcpy(p_desc, "Extract the difference between two vectors"); + strcpy(author, ""); + break; + case XTRACT_AUTOCORRELATION_FFT: + strcpy(name, "autocorrelation_fft"); + strcpy(p_name, "Autocorrelation (FFT method)"); + strcpy(desc, "Extract the autocorrelation of a signal (fft method)"); + strcpy(p_desc, "Extract the autocorrelation of an audio signal (fft method)"); + strcpy(author, ""); + break; + case XTRACT_DCT: + strcpy(name, "dct"); + strcpy(p_name, "Discrete Cosine Transform"); + strcpy(desc, "Extract the DCT of a signal"); + strcpy(p_desc, "Extract the DCT of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_AUTOCORRELATION: + strcpy(name, "autocorrelation"); + strcpy(p_name, "Autocorrelation"); + strcpy(desc, "Extract the autocorrelation of a signal"); + strcpy(p_desc, + "Extract the autocorrelation of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_AMDF: + strcpy(name, "amdf"); + strcpy(p_name, "Average Magnitude Difference Function"); + strcpy(desc, "Extract the AMDF of a signal"); + strcpy(p_desc, "Extract the AMDF of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_ASDF: + strcpy(name, "asdf"); + strcpy(p_name, "Average Squared Difference Function"); + strcpy(desc, "Extract the ASDF of a signal"); + strcpy(p_desc, "Extract the ASDF of an audio signal"); + strcpy(author, ""); + break; + case XTRACT_NONZERO_COUNT: + strcpy(name, "nonzero_count"); + strcpy(p_name, "Non-zero count"); + strcpy(desc, + "Extract the number of non-zero elements in the input vector"); + strcpy(p_desc, + "Extract the number of non-zero elements in an input spectrum"); + strcpy(author, ""); + break; + case XTRACT_WINDOWED: + strcpy(name, "windowed"); + strcpy(p_name, "Windowed frame"); + strcpy(desc, "Apply a window function to a frame of data"); + strcpy(p_desc, "Apply a window function to a frame of data"); + strcpy(author, ""); + break; + default: + strcpy(name, ""); + strcpy(p_name, ""); + strcpy(desc, ""); + strcpy(p_desc, ""); + strcpy(author, ""); + break; + } - switch(f){ + switch(f){ - case XTRACT_VARIANCE: - case XTRACT_STANDARD_DEVIATION: - case XTRACT_AVERAGE_DEVIATION: - case XTRACT_SPECTRAL_VARIANCE: - case XTRACT_SPECTRAL_STANDARD_DEVIATION: - case XTRACT_SPECTRAL_AVERAGE_DEVIATION: - case XTRACT_SPECTRAL_INHARMONICITY: - case XTRACT_LOWEST_VALUE: - case XTRACT_F0: - case XTRACT_FAILSAFE_F0: - case XTRACT_TONALITY: - *argc = 1; - *argv_type = XTRACT_FLOAT; - break; - case XTRACT_SKEWNESS: - case XTRACT_KURTOSIS: - case XTRACT_SPECTRAL_SKEWNESS: - case XTRACT_SPECTRAL_KURTOSIS: - case XTRACT_PEAK_SPECTRUM: - case XTRACT_HARMONIC_SPECTRUM: - case XTRACT_NOISINESS: - case XTRACT_CREST: - case XTRACT_ROLLOFF: - case XTRACT_FLUX: - case XTRACT_LNORM: - *argc = 2; - *argv_type = XTRACT_FLOAT; - break; - case XTRACT_SPECTRUM: - *argc = 4; - *argv_type = XTRACT_FLOAT; - break; - case XTRACT_MFCC: - *argc = 1; - *argv_type = XTRACT_MEL_FILTER; - break; + case XTRACT_VARIANCE: + case XTRACT_STANDARD_DEVIATION: + case XTRACT_AVERAGE_DEVIATION: + case XTRACT_SPECTRAL_VARIANCE: + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + case XTRACT_SPECTRAL_INHARMONICITY: + case XTRACT_LOWEST_VALUE: + case XTRACT_F0: + case XTRACT_FAILSAFE_F0: + case XTRACT_TONALITY: + *argc = 1; + *argv_type = XTRACT_FLOAT; + break; + case XTRACT_SKEWNESS: + case XTRACT_KURTOSIS: + case XTRACT_SPECTRAL_SKEWNESS: + case XTRACT_SPECTRAL_KURTOSIS: + case XTRACT_PEAK_SPECTRUM: + case XTRACT_HARMONIC_SPECTRUM: + case XTRACT_NOISINESS: + case XTRACT_CREST: + case XTRACT_ROLLOFF: + case XTRACT_FLUX: + case XTRACT_LNORM: + *argc = 2; + *argv_type = XTRACT_FLOAT; + break; + case XTRACT_SPECTRUM: + *argc = 4; + *argv_type = XTRACT_FLOAT; + break; + case XTRACT_MFCC: + *argc = 1; + *argv_type = XTRACT_MEL_FILTER; + break; case XTRACT_LPCC: *argc = 1; *argv_type = XTRACT_INT; break; - case XTRACT_BARK_COEFFICIENTS: - *argc = XTRACT_BARK_BANDS; - *argv_type = XTRACT_INT; - break; - case XTRACT_MEAN: - case XTRACT_SPECTRAL_MEAN: - case XTRACT_SPECTRAL_CENTROID: - case XTRACT_IRREGULARITY_K: - case XTRACT_IRREGULARITY_J: - case XTRACT_TRISTIMULUS_1: - case XTRACT_TRISTIMULUS_2: - case XTRACT_TRISTIMULUS_3: - case XTRACT_SMOOTHNESS: - case XTRACT_FLATNESS: - case XTRACT_SPREAD: - case XTRACT_ZCR: - case XTRACT_LOUDNESS: - case XTRACT_HIGHEST_VALUE: - case XTRACT_SUM: - case XTRACT_RMS_AMPLITUDE: - case XTRACT_POWER: - case XTRACT_SHARPNESS: - case XTRACT_SPECTRAL_SLOPE: - case XTRACT_HPS: - case XTRACT_ATTACK_TIME: - case XTRACT_DECAY_TIME: - case XTRACT_DIFFERENCE_VECTOR: - case XTRACT_AUTOCORRELATION_FFT: - case XTRACT_DCT: - case XTRACT_AUTOCORRELATION: - case XTRACT_AMDF: - case XTRACT_ASDF: - case XTRACT_NONZERO_COUNT: - case XTRACT_ODD_EVEN_RATIO: + case XTRACT_BARK_COEFFICIENTS: + *argc = XTRACT_BARK_BANDS; + *argv_type = XTRACT_INT; + break; + case XTRACT_WINDOWED: + *argc = XTRACT_WINDOW_SIZE; + *argv_type = XTRACT_FLOAT; + break; + case XTRACT_MEAN: + case XTRACT_SPECTRAL_MEAN: + case XTRACT_SPECTRAL_CENTROID: + case XTRACT_IRREGULARITY_K: + case XTRACT_IRREGULARITY_J: + case XTRACT_TRISTIMULUS_1: + case XTRACT_TRISTIMULUS_2: + case XTRACT_TRISTIMULUS_3: + case XTRACT_SMOOTHNESS: + case XTRACT_FLATNESS: + case XTRACT_SPREAD: + case XTRACT_ZCR: + case XTRACT_LOUDNESS: + case XTRACT_HIGHEST_VALUE: + case XTRACT_SUM: + case XTRACT_RMS_AMPLITUDE: + case XTRACT_POWER: + case XTRACT_SHARPNESS: + case XTRACT_SPECTRAL_SLOPE: + case XTRACT_HPS: + case XTRACT_ATTACK_TIME: + case XTRACT_DECAY_TIME: + case XTRACT_DIFFERENCE_VECTOR: + case XTRACT_AUTOCORRELATION_FFT: + case XTRACT_DCT: + case XTRACT_AUTOCORRELATION: + case XTRACT_AMDF: + case XTRACT_ASDF: + case XTRACT_NONZERO_COUNT: + case XTRACT_ODD_EVEN_RATIO: case XTRACT_LPC: - default: - *argc = 0; - break; - } - - is_scalar = &d->is_scalar; + default: + *argc = 0; + break; + } - switch(f){ - case XTRACT_MEAN: - case XTRACT_VARIANCE: - case XTRACT_STANDARD_DEVIATION: - case XTRACT_AVERAGE_DEVIATION: - case XTRACT_SKEWNESS: - case XTRACT_KURTOSIS: - case XTRACT_SPECTRAL_MEAN: - case XTRACT_SPECTRAL_VARIANCE: - case XTRACT_SPECTRAL_STANDARD_DEVIATION: - case XTRACT_SPECTRAL_AVERAGE_DEVIATION: - case XTRACT_SPECTRAL_SKEWNESS: - case XTRACT_SPECTRAL_KURTOSIS: - case XTRACT_SPECTRAL_CENTROID: - case XTRACT_IRREGULARITY_K: - case XTRACT_IRREGULARITY_J: - case XTRACT_TRISTIMULUS_1: - case XTRACT_TRISTIMULUS_2: - case XTRACT_TRISTIMULUS_3: - case XTRACT_SMOOTHNESS: - case XTRACT_SPREAD: - case XTRACT_ZCR: - case XTRACT_ROLLOFF: - case XTRACT_LOUDNESS: - case XTRACT_FLATNESS: - case XTRACT_TONALITY: - case XTRACT_CREST: - case XTRACT_NOISINESS: - case XTRACT_RMS_AMPLITUDE: - case XTRACT_SPECTRAL_INHARMONICITY: - case XTRACT_POWER: - case XTRACT_ODD_EVEN_RATIO: - case XTRACT_SHARPNESS: - case XTRACT_SPECTRAL_SLOPE: - case XTRACT_LOWEST_VALUE: - case XTRACT_HIGHEST_VALUE: - case XTRACT_SUM: - case XTRACT_HPS: - case XTRACT_F0: - case XTRACT_FAILSAFE_F0: + is_scalar = &d->is_scalar; + + switch(f){ + case XTRACT_MEAN: + case XTRACT_VARIANCE: + case XTRACT_STANDARD_DEVIATION: + case XTRACT_AVERAGE_DEVIATION: + case XTRACT_SKEWNESS: + case XTRACT_KURTOSIS: + case XTRACT_SPECTRAL_MEAN: + case XTRACT_SPECTRAL_VARIANCE: + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + case XTRACT_SPECTRAL_SKEWNESS: + case XTRACT_SPECTRAL_KURTOSIS: + case XTRACT_SPECTRAL_CENTROID: + case XTRACT_IRREGULARITY_K: + case XTRACT_IRREGULARITY_J: + case XTRACT_TRISTIMULUS_1: + case XTRACT_TRISTIMULUS_2: + case XTRACT_TRISTIMULUS_3: + case XTRACT_SMOOTHNESS: + case XTRACT_SPREAD: + case XTRACT_ZCR: + case XTRACT_ROLLOFF: + case XTRACT_LOUDNESS: + case XTRACT_FLATNESS: + case XTRACT_TONALITY: + case XTRACT_CREST: + case XTRACT_NOISINESS: + case XTRACT_RMS_AMPLITUDE: + case XTRACT_SPECTRAL_INHARMONICITY: + case XTRACT_POWER: + case XTRACT_ODD_EVEN_RATIO: + case XTRACT_SHARPNESS: + case XTRACT_SPECTRAL_SLOPE: + case XTRACT_LOWEST_VALUE: + case XTRACT_HIGHEST_VALUE: + case XTRACT_SUM: + case XTRACT_HPS: + case XTRACT_F0: + case XTRACT_FAILSAFE_F0: case XTRACT_FLUX: case XTRACT_LNORM: - case XTRACT_NONZERO_COUNT: - *is_scalar = XTRACT_TRUE; - break; - case XTRACT_AUTOCORRELATION: - case XTRACT_AMDF: - case XTRACT_ASDF: - case XTRACT_BARK_COEFFICIENTS: - case XTRACT_PEAK_SPECTRUM: - case XTRACT_SPECTRUM: - case XTRACT_AUTOCORRELATION_FFT: - case XTRACT_MFCC: - case XTRACT_LPC: - case XTRACT_LPCC: - case XTRACT_DCT: - case XTRACT_HARMONIC_SPECTRUM: - *is_scalar = XTRACT_FALSE; - break; - default: - *is_scalar = XTRACT_TRUE; - break; + case XTRACT_NONZERO_COUNT: + *is_scalar = XTRACT_TRUE; + break; + case XTRACT_AUTOCORRELATION: + case XTRACT_AMDF: + case XTRACT_ASDF: + case XTRACT_BARK_COEFFICIENTS: + case XTRACT_PEAK_SPECTRUM: + case XTRACT_SPECTRUM: + case XTRACT_AUTOCORRELATION_FFT: + case XTRACT_MFCC: + case XTRACT_LPC: + case XTRACT_LPCC: + case XTRACT_DCT: + case XTRACT_HARMONIC_SPECTRUM: + case XTRACT_DIFFERENCE_VECTOR: + case XTRACT_WINDOWED: + *is_scalar = XTRACT_FALSE; + break; + default: + *is_scalar = XTRACT_TRUE; + break; - } + } + + is_delta = &d->is_delta; + + switch(f){ + case XTRACT_FLUX: + case XTRACT_LNORM: + case XTRACT_DIFFERENCE_VECTOR: + *is_delta = XTRACT_TRUE; + break; + case XTRACT_MEAN: + case XTRACT_VARIANCE: + case XTRACT_STANDARD_DEVIATION: + case XTRACT_AVERAGE_DEVIATION: + case XTRACT_SKEWNESS: + case XTRACT_KURTOSIS: + case XTRACT_SPECTRAL_MEAN: + case XTRACT_SPECTRAL_VARIANCE: + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + case XTRACT_SPECTRAL_SKEWNESS: + case XTRACT_SPECTRAL_KURTOSIS: + case XTRACT_SPECTRAL_CENTROID: + case XTRACT_IRREGULARITY_K: + case XTRACT_IRREGULARITY_J: + case XTRACT_TRISTIMULUS_1: + case XTRACT_TRISTIMULUS_2: + case XTRACT_TRISTIMULUS_3: + case XTRACT_SMOOTHNESS: + case XTRACT_SPREAD: + case XTRACT_ZCR: + case XTRACT_ROLLOFF: + case XTRACT_LOUDNESS: + case XTRACT_FLATNESS: + case XTRACT_TONALITY: + case XTRACT_CREST: + case XTRACT_NOISINESS: + case XTRACT_RMS_AMPLITUDE: + case XTRACT_SPECTRAL_INHARMONICITY: + case XTRACT_POWER: + case XTRACT_ODD_EVEN_RATIO: + case XTRACT_SHARPNESS: + case XTRACT_SPECTRAL_SLOPE: + case XTRACT_LOWEST_VALUE: + case XTRACT_HIGHEST_VALUE: + case XTRACT_SUM: + case XTRACT_HPS: + case XTRACT_F0: + case XTRACT_FAILSAFE_F0: + case XTRACT_NONZERO_COUNT: + case XTRACT_AUTOCORRELATION: + case XTRACT_AMDF: + case XTRACT_ASDF: + case XTRACT_BARK_COEFFICIENTS: + case XTRACT_PEAK_SPECTRUM: + case XTRACT_SPECTRUM: + case XTRACT_AUTOCORRELATION_FFT: + case XTRACT_MFCC: + case XTRACT_LPC: + case XTRACT_LPCC: + case XTRACT_DCT: + case XTRACT_HARMONIC_SPECTRUM: + case XTRACT_WINDOWED: + default: + *is_delta = XTRACT_FALSE; + break; + } - if(*is_scalar){ + if(*is_scalar){ - result_unit = &d->result.scalar.unit; - result_min = &d->result.scalar.min; - result_max = &d->result.scalar.max; + result_unit = &d->result.scalar.unit; + result_min = &d->result.scalar.min; + result_max = &d->result.scalar.max; - switch(f){ - case XTRACT_MEAN: - case XTRACT_VARIANCE: - case XTRACT_STANDARD_DEVIATION: - case XTRACT_AVERAGE_DEVIATION: - case XTRACT_SKEWNESS: - case XTRACT_KURTOSIS: - case XTRACT_RMS_AMPLITUDE: - case XTRACT_LOWEST_VALUE: - case XTRACT_HIGHEST_VALUE: - case XTRACT_SUM: + switch(f){ + case XTRACT_MEAN: + case XTRACT_VARIANCE: + case XTRACT_STANDARD_DEVIATION: + case XTRACT_AVERAGE_DEVIATION: + case XTRACT_SKEWNESS: + case XTRACT_KURTOSIS: + case XTRACT_RMS_AMPLITUDE: + case XTRACT_LOWEST_VALUE: + case XTRACT_HIGHEST_VALUE: + case XTRACT_SUM: case XTRACT_FLUX: case XTRACT_LNORM: - case XTRACT_NONZERO_COUNT: - *result_unit = XTRACT_ANY; - *result_min = XTRACT_ANY; - *result_max = XTRACT_ANY; - break; - case XTRACT_SPECTRAL_SKEWNESS: - case XTRACT_SPECTRAL_KURTOSIS: - case XTRACT_IRREGULARITY_K: - case XTRACT_IRREGULARITY_J: - case XTRACT_TRISTIMULUS_1: - case XTRACT_TRISTIMULUS_2: - case XTRACT_TRISTIMULUS_3: - case XTRACT_NOISINESS: - case XTRACT_SMOOTHNESS: - *result_unit = XTRACT_NONE; - *result_min = XTRACT_ANY; /* FIX: need to check these */ - *result_max = XTRACT_ANY; - break; - case XTRACT_SPECTRAL_MEAN: - case XTRACT_SPECTRAL_VARIANCE: - case XTRACT_SPECTRAL_STANDARD_DEVIATION: - case XTRACT_SPECTRAL_AVERAGE_DEVIATION: - case XTRACT_SPECTRAL_CENTROID: - case XTRACT_SPREAD: - case XTRACT_F0: - case XTRACT_FAILSAFE_F0: - case XTRACT_HPS: - case XTRACT_ROLLOFF: - *result_unit = XTRACT_HERTZ; - *result_min = 0.f; - *result_max = XTRACT_SR_UPPER_LIMIT / 2; + case XTRACT_NONZERO_COUNT: + case XTRACT_WINDOWED: + *result_unit = XTRACT_ANY; + *result_min = XTRACT_ANY; + *result_max = XTRACT_ANY; break; - case XTRACT_ZCR: - *result_unit = XTRACT_HERTZ; - *result_min = 0.f; - *result_max = XTRACT_ANY; + case XTRACT_SPECTRAL_SKEWNESS: + case XTRACT_SPECTRAL_KURTOSIS: + case XTRACT_IRREGULARITY_K: + case XTRACT_IRREGULARITY_J: + case XTRACT_TRISTIMULUS_1: + case XTRACT_TRISTIMULUS_2: + case XTRACT_TRISTIMULUS_3: + case XTRACT_NOISINESS: + case XTRACT_SMOOTHNESS: + *result_unit = XTRACT_NONE; + *result_min = XTRACT_ANY; /* FIX: need to check these */ + *result_max = XTRACT_ANY; break; - case XTRACT_ODD_EVEN_RATIO: - *result_unit = XTRACT_NONE; - *result_min = 0.f; - *result_max = 1.f; + case XTRACT_SPECTRAL_MEAN: + case XTRACT_SPECTRAL_VARIANCE: + case XTRACT_SPECTRAL_STANDARD_DEVIATION: + case XTRACT_SPECTRAL_AVERAGE_DEVIATION: + case XTRACT_SPECTRAL_CENTROID: + case XTRACT_SPREAD: + case XTRACT_F0: + case XTRACT_FAILSAFE_F0: + case XTRACT_HPS: + case XTRACT_ROLLOFF: + *result_unit = XTRACT_HERTZ; + *result_min = 0.f; + *result_max = XTRACT_SR_UPPER_LIMIT / 2; break; - case XTRACT_LOUDNESS: - case XTRACT_FLATNESS: - case XTRACT_TONALITY: - case XTRACT_CREST: - case XTRACT_SPECTRAL_INHARMONICITY: - case XTRACT_POWER: - case XTRACT_SHARPNESS: - case XTRACT_SPECTRAL_SLOPE: + case XTRACT_ZCR: + *result_unit = XTRACT_HERTZ; + *result_min = 0.f; + *result_max = XTRACT_ANY; + break; + case XTRACT_ODD_EVEN_RATIO: + *result_unit = XTRACT_NONE; + *result_min = 0.f; + *result_max = 1.f; + break; + case XTRACT_LOUDNESS: + case XTRACT_FLATNESS: + case XTRACT_TONALITY: + case XTRACT_CREST: + case XTRACT_SPECTRAL_INHARMONICITY: + case XTRACT_POWER: + case XTRACT_SHARPNESS: + case XTRACT_SPECTRAL_SLOPE: case XTRACT_LPC: case XTRACT_LPCC: - default: - *result_unit = XTRACT_UNKNOWN; - *result_min = XTRACT_UNKNOWN; - *result_max = XTRACT_UNKNOWN; + default: + *result_unit = XTRACT_UNKNOWN; + *result_min = XTRACT_UNKNOWN; + *result_max = XTRACT_UNKNOWN; break; - } - } - else { + } + } + else { - result_min = NULL; - result_max = NULL; - result_unit = &d->result.vector.unit; - result_format = &d->result.vector.format; + result_min = NULL; + result_max = NULL; + result_unit = &d->result.vector.unit; + result_format = &d->result.vector.format; - switch(f) { - case XTRACT_AUTOCORRELATION: - case XTRACT_AMDF: - case XTRACT_ASDF: - case XTRACT_DCT: - *result_format = XTRACT_ARBITRARY_SERIES; - *result_unit = XTRACT_ANY; + switch(f) { + case XTRACT_AUTOCORRELATION: + case XTRACT_AMDF: + case XTRACT_ASDF: + case XTRACT_DCT: + case XTRACT_WINDOWED: + *result_format = XTRACT_ARBITRARY_SERIES; + *result_unit = XTRACT_ANY; break; - case XTRACT_BARK_COEFFICIENTS: - *result_format = XTRACT_BARK_COEFFS; - *result_unit = XTRACT_UNKNOWN; /* FIX: check */ + case XTRACT_BARK_COEFFICIENTS: + *result_format = XTRACT_BARK_COEFFS; + *result_unit = XTRACT_UNKNOWN; /* FIX: check */ break; - case XTRACT_PEAK_SPECTRUM: - case XTRACT_SPECTRUM: - case XTRACT_HARMONIC_SPECTRUM: - *result_format = XTRACT_SPECTRAL; - *result_unit = XTRACT_ANY_AMPLITUDE_HERTZ; + case XTRACT_PEAK_SPECTRUM: + case XTRACT_SPECTRUM: + case XTRACT_HARMONIC_SPECTRUM: + *result_format = XTRACT_SPECTRAL; + *result_unit = XTRACT_ANY_AMPLITUDE_HERTZ; break; - case XTRACT_AUTOCORRELATION_FFT: + case XTRACT_AUTOCORRELATION_FFT: break; - case XTRACT_MFCC: - *result_format = XTRACT_MEL_COEFFS; - *result_unit = XTRACT_UNKNOWN; /* FIX: check */ + case XTRACT_MFCC: + *result_format = XTRACT_MEL_COEFFS; + *result_unit = XTRACT_UNKNOWN; /* FIX: check */ break; case XTRACT_LPC: *result_format = XTRACT_LPC_COEFFS; @@ -1149,10 +1241,10 @@ void *xtract_make_descriptors(){ *result_format = XTRACT_LPCC_COEFFS; *result_unit = XTRACT_UNKNOWN; break; - default: - break; - } - } + default: + break; + } + } } return fd; @@ -1161,7 +1253,7 @@ void *xtract_make_descriptors(){ int xtract_free_descriptors(void *fd){ if (fd != NULL) { - free(fd); + free(fd); } return XTRACT_SUCCESS; diff --git a/xtract/libxtract.h b/xtract/libxtract.h index 1b787b0..ae70efb 100644 --- a/xtract/libxtract.h +++ b/xtract/libxtract.h @@ -68,7 +68,7 @@ extern "C" { * @{ */ -#define XTRACT_FEATURES 58 +#define XTRACT_FEATURES 59 /** \brief Enumeration of features, elements are used as indixes to an array of pointers to feature extracton functions */ enum xtract_features_ { @@ -136,7 +136,8 @@ enum xtract_features_ { /** \brief Enumeration of feature initialisation functions */ enum xtract_feature_init_ { XTRACT_INIT_MFCC = 100, - XTRACT_INIT_BARK + XTRACT_INIT_BARK, + XTRACT_INIT_WINDOWED }; /** \brief Enumeration of feature types */ @@ -153,6 +154,7 @@ enum xtract_mfcc_types_ { }; enum xtract_lnorm_filter_types_ { + XTRACT_NO_LNORM_FILTER, XTRACT_POSITIVE_SLOPE, XTRACT_NEGATIVE_SLOPE }; @@ -240,6 +242,7 @@ typedef enum xtract_vector_ { XTRACT_LPC_COEFFS, XTRACT_LPCC_COEFFS, XTRACT_BARK_COEFFS, + XTRACT_SUBFRAMES, XTRACT_NO_DATA } xtract_vector_t; @@ -272,6 +275,7 @@ typedef struct _xtract_function_descriptor { } argv; xtract_bool_t is_scalar; + xtract_bool_t is_delta; /* features in xtract_delta.h can be scalar or vector */ /* The result.<> entries in descritors.c need to be checked */ union { diff --git a/xtract/xtract_helper.h b/xtract/xtract_helper.h index 31a2183..645f1cd 100644 --- a/xtract/xtract_helper.h +++ b/xtract/xtract_helper.h @@ -57,6 +57,9 @@ int xtract_windowed(const float *data, const int N, const void *argv, float *res * \param *argv a pointer to the argument vector to be passed to the feature extraction function as determined by feature * \param *result a pointer to the 'packed' results of the feature calculation. This may be passed in as *data to xtract_features_from_subframes() to calculate further features on the subframes, or xtract_difference_vector(), to get the difference between the subframes. * + * + * It is important to ensure that any _init_*() functions that are called in preparation for functions that are called on subframes are given the subframe size as 'N', and not the frame size. i.e. if xtract_features_from_subframes() is called with N=64, and feature=XTRACT_SPECTRUM, then xtract_init_fft() should be called with N=32. + * */ int xtract_features_from_subframes(const float *data, const int N, const int feature, const void *argv, float *result); diff --git a/xtract/xtract_macros.h b/xtract/xtract_macros.h index bd01ab7..2eed28e 100644 --- a/xtract/xtract_macros.h +++ b/xtract/xtract_macros.h @@ -30,6 +30,7 @@ extern "C" { #endif #define XTRACT_BARK_BANDS 26 +#define XTRACT_WINDOW_SIZE 1024/* dummy macro for descriptors where argc is window size */ #define XTRACT_NONE 0 #define XTRACT_ANY -1 #define XTRACT_UNKNOWN -2 |