diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/crossfade~.c | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/src/crossfade~.c b/src/crossfade~.c index 75cd9b6..6a546cd 100644 --- a/src/crossfade~.c +++ b/src/crossfade~.c @@ -8,7 +8,8 @@ static t_class *crossfade_tilde_class; typedef struct _crossfade_tilde { t_object x_obj; - t_float mix; //The mix value (0: input 1, 1:input2) + //t_float mix; //The mix value (0: input 1, 1:input2) + //t_float sig_mode; int n_in; int channels; t_sample **in; @@ -27,19 +28,24 @@ static t_int *crossfade_tilde_perform(t_int *w) t_crossfade_tilde *x = (t_crossfade_tilde *)(w[1]); int n = (int)(w[2]); - if (x->mix < 0) x->mix = 0; - if (x->mix > 1) x->mix = 1; - t_float inv_mix = 1-x->mix; + //if (x->mix < 0) x->mix = 0; + //if (x->mix > 1) x->mix = 1; + //t_float inv_mix = 1-x->mix; int i; int j; t_sample* out; - - + t_sample* mix = (t_sample *) (w[3]); + t_sample mix_f; + t_sample inv_mix_f; + for ( j =0; j < n; j++) { - + mix_f = *mix++; + //if (mix_f > 1) mix_f = 1; + //if (mix_f < 0) mix_f = 0; + inv_mix_f = 1-mix_f; // Copy one sample of all the inputs for ( i=0; i < x->n_in;i++ ) { x->buffer[i] = (t_sample) x->in[i][j]; @@ -48,13 +54,13 @@ static t_int *crossfade_tilde_perform(t_int *w) for ( i=0; i < x->channels;i++ ) { out = (t_sample *)(x->out[i]); - out[j] = (x->buffer[i] * inv_mix) + (x->buffer[i+x->channels] * x->mix) ; + out[j] = (x->buffer[i] * inv_mix_f) + (x->buffer[i+x->channels] * mix_f) ; } } - return (w+3); + return (w+4); } @@ -67,11 +73,13 @@ static void crossfade_tilde_dsp(t_crossfade_tilde *x, t_signal **sp) t_sample **dummy=x->in; for(n=0;n<x->n_in;n++)*dummy++=sp[n]->s_vec; + //Add +1 because of the mix inlet + dummy=x->out; - for(n=0;n<x->n_out;n++)*dummy++=sp[n+x->n_in]->s_vec; + for(n=0;n<x->n_out;n++)*dummy++=sp[n+x->n_in+1]->s_vec; - dsp_add(crossfade_tilde_perform, 2, x, sp[0]->s_n); + dsp_add(crossfade_tilde_perform, 3, x, sp[0]->s_n, sp[x->n_in]->s_vec); } @@ -91,7 +99,6 @@ static void *crossfade_tilde_new(t_floatarg f) x->channels = (int) f; if ( x->channels < 1 ) x->channels = 2; - x->n_in = x->channels * 2; x->in = (t_sample **)getbytes(x->n_in * sizeof(t_sample *)); @@ -106,18 +113,24 @@ static void *crossfade_tilde_new(t_floatarg f) x->buffer = getbytes(x->n_in * sizeof( * x->buffer)); - + //if (ac && IS_A_FLOAT(av,0) { + // x->sig_mode = 0; + //} else { + // x->sig_mode = 1; + //} for (i=0; i < x->n_in - 1; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); } + //if ( x->sig_mode ) inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); + for (i=0; i < x->n_out; i++) { outlet_new(&x->x_obj, &s_signal); } - - floatinlet_new (&x->x_obj, &x->mix); + //if ( x->sig_mode == 0 ) floatinlet_new (&x->x_obj, &x->mix); return (void *)x; |