aboutsummaryrefslogtreecommitdiff
path: root/examples/puredata/xtract~.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/puredata/xtract~.c')
-rw-r--r--examples/puredata/xtract~.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/examples/puredata/xtract~.c b/examples/puredata/xtract~.c
index 69595fe..5059a76 100644
--- a/examples/puredata/xtract~.c
+++ b/examples/puredata/xtract~.c
@@ -50,6 +50,7 @@ typedef struct _xtract {
t_int feature,
is_scalar,
is_subframe,
+ argv_type,
init_blocksize,
done_init;
t_symbol *feature_name;
@@ -123,11 +124,13 @@ static t_int *xtract_perform_vector(t_int *w) {
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 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) {
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 @@ static void *xtract_new(t_symbol *me, t_int argc, t_atom *argv) {
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 @@ t_int argc, t_atom *argv) {
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;
+ }
+ }
/* }*/
}