changeset 108:e6354b0137d3

- PD example brought in line with new delta features and subframe function - subframe-test.pd added - fix to a_blockswap~.pd
author Jamie Bullock <jamie@postlude.co.uk>
date Sat, 29 Dec 2007 17:33:17 +0000
parents 3e648eec95cb
children 9518ae6afff4
files examples/puredata/subframe-test.pd examples/puredata/xtract/a_blockswap~.pd examples/puredata/xtract~.c src/delta.c src/descriptors.c xtract/libxtract.h xtract/xtract_helper.h xtract/xtract_macros.h
diffstat 8 files changed, 1385 insertions(+), 1079 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/puredata/subframe-test.pd	Sat Dec 29 17:33:17 2007 +0000
@@ -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;
--- a/examples/puredata/xtract/a_blockswap~.pd	Fri Dec 28 19:34:51 2007 +0000
+++ b/examples/puredata/xtract/a_blockswap~.pd	Sat Dec 29 17:33:17 2007 +0000
@@ -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;
--- a/examples/puredata/xtract~.c	Fri Dec 28 19:34:51 2007 +0000
+++ b/examples/puredata/xtract~.c	Sat Dec 29 17:33:17 2007 +0000
@@ -46,11 +46,13 @@
 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 @@
     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 @@
     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 @@
     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 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 @@
     
     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 @@
     
     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 @@
 	}
     }
 
+    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 @@
     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 @@
         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 @@
         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 @@
 	    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 @@
 
     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) {
--- a/src/delta.c	Fri Dec 28 19:34:51 2007 +0000
+++ b/src/delta.c	Sat Dec 29 17:33:17 2007 +0000
@@ -41,7 +41,7 @@
     order = *(float *)argv;
     type = (int)*(float *)argv+1;
 
-    order = order > 0 ? order : 1.f;
+    order = order > 0 ? order : 2.f;
 
     switch(type){
 
--- a/src/descriptors.c	Fri Dec 28 19:34:51 2007 +0000
+++ b/src/descriptors.c	Sat Dec 29 17:33:17 2007 +0000
@@ -32,7 +32,7 @@
     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 @@
 
     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;
+        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;
+            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;
+            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;
+                /* 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;
+            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;
+                *(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;
+            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;
+            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;
+            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;
+            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;
 
-	}
+        }
 
-	if(*is_scalar){
+        is_delta = &d->is_delta;
 
-	    result_unit = &d->result.scalar.unit;
-	    result_min = &d->result.scalar.min;
-	    result_max = &d->result.scalar.max;
+        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;
+        }
 
-	    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:
+        if(*is_scalar){
+
+            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:
                 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 @@
                     *result_format = XTRACT_LPCC_COEFFS;
                     *result_unit = XTRACT_UNKNOWN;
                     break;
-		default:
-		    break;
-	    }
-	}
+                default:
+                    break;
+            }
+        }
     }
 
     return fd;
@@ -1161,7 +1253,7 @@
 int xtract_free_descriptors(void *fd){
 
     if (fd != NULL) {
-	free(fd);
+        free(fd);
     }
 
     return XTRACT_SUCCESS;
--- a/xtract/libxtract.h	Fri Dec 28 19:34:51 2007 +0000
+++ b/xtract/libxtract.h	Sat Dec 29 17:33:17 2007 +0000
@@ -68,7 +68,7 @@
   * @{
   */
 
-#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 @@
 /** \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_lnorm_filter_types_ {
+    XTRACT_NO_LNORM_FILTER,
     XTRACT_POSITIVE_SLOPE,
     XTRACT_NEGATIVE_SLOPE
 };
@@ -240,6 +242,7 @@
     XTRACT_LPC_COEFFS, 
     XTRACT_LPCC_COEFFS, 
     XTRACT_BARK_COEFFS,
+    XTRACT_SUBFRAMES,
     XTRACT_NO_DATA
 } xtract_vector_t;
 
@@ -272,6 +275,7 @@
     } 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 {
--- a/xtract/xtract_helper.h	Fri Dec 28 19:34:51 2007 +0000
+++ b/xtract/xtract_helper.h	Sat Dec 29 17:33:17 2007 +0000
@@ -57,6 +57,9 @@
  * \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);
 
--- a/xtract/xtract_macros.h	Fri Dec 28 19:34:51 2007 +0000
+++ b/xtract/xtract_macros.h	Sat Dec 29 17:33:17 2007 +0000
@@ -30,6 +30,7 @@
 #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