aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/puredata/subframe-test.pd131
-rw-r--r--examples/puredata/xtract/a_blockswap~.pd64
-rw-r--r--examples/puredata/xtract~.c115
-rw-r--r--src/delta.c2
-rw-r--r--src/descriptors.c2158
-rw-r--r--xtract/libxtract.h8
-rw-r--r--xtract/xtract_helper.h3
-rw-r--r--xtract/xtract_macros.h1
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