diff examples/puredata/xtract~.c @ 115:6c5ece9cba3a

- Added to pd example the ability to differentiate between different argv types (XTRACT_FLOAT, XTRACT_INT) and pass the correct data type to the xtract[]() function - Added xtract_flatness_db() details to descriptors.c - Fixes to tonality and xtract_subbands descriptors - Added Pd examples for 'subband mean' and tonality calculated using subbands
author Jamie Bullock <jamie@postlude.co.uk>
date Sat, 16 Feb 2008 20:13:05 +0000
parents 72a9a393d5bd
children e4f704649c50
line wrap: on
line diff
--- a/examples/puredata/xtract~.c	Fri Feb 15 15:49:49 2008 +0000
+++ b/examples/puredata/xtract~.c	Sat Feb 16 20:13:05 2008 +0000
@@ -50,6 +50,7 @@
     t_int feature,
           is_scalar,
           is_subframe,
+          argv_type,
           init_blocksize,
           done_init;
     t_symbol *feature_name;
@@ -123,11 +124,13 @@
 
 static void xtract_dsp(t_xtract_tilde *x, t_signal **sp) {
 
-    if(!x->is_scalar)
+    if(!x->is_scalar){
         dsp_add(xtract_perform_vector, 4, 
             sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
+    }
             
-    else dsp_add(xtract_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
+    else  
+        dsp_add(xtract_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
 
 }
 
@@ -155,6 +158,7 @@
     N = BLOCKSIZE;
     
     x->argv = NULL;
+    x->argv_type = 0;
     x->done_init = 0;
     x->is_scalar = 0;
     x->is_subframe = 0;
@@ -203,6 +207,8 @@
     n_args = fd[f].argc;
     type = fd[f].argv.type;
 
+    x->argv_type = type;
+
     if(n_args){
 	for(n = 0; n < n_args; n++){
 		    argv_max = &fd[f].argv.max[n]; 
@@ -335,8 +341,17 @@
 
     x->argv = getbytes(argc * sizeof(float));
     
-    while(argc--)
-        ((t_float *)x->argv)[argc] = atom_getfloat(&argv[argc]);
+    while(argc--){
+        switch(x->argv_type){
+            case XTRACT_INT:
+                ((t_int *)x->argv)[argc] = (int)atom_getfloat(&argv[argc]);
+                break;
+            case XTRACT_FLOAT:
+            default:
+                ((t_float *)x->argv)[argc] = atom_getfloat(&argv[argc]);
+                break;
+        }
+    }
  /*   }*/
 }