Hi, I'd like to make a question. Is it posible to create an external (dsp object) with two independient signal outlets? I'm newbie in externals writing and i can't resolve this.
I'm trying to extend the external from the Johannes M Zmölning manual called pan~. i want to create a stereopan~ and this is the code: (it don't work as it must be). Can anyone help me?
#include "m_pd.h"
static t_class *stereopan_tilde_class;
typedef struct _stereopan_tilde { t_object x_obj; t_sample f_pan; t_sample f; } t_stereopan_tilde;
t_int *stereopan_tilde_perform(t_int *w) { t_stereopan_tilde *x = (t_stereopan_tilde *)(w[1]); t_sample *in1 = (t_sample *)(w[2]); t_sample *in2 = (t_sample *)(w[3]); t_sample *outL = (t_sample *)(w[4]); t_sample *outR = (t_sample *)(w[5]); int n = (int)(w[6]); t_sample f_pan = (x->f_pan<0)?0.0:(x->f_pan>1)?1.0:x->f_pan; while (n--) {
*outL++ = (*in1++)*(1-f_pan); *outR++ = (*in2++)*f_pan;
}
return (w+7); }
void stereopan_tilde_dsp(t_stereopan_tilde *x, t_signal **sp) { dsp_add(stereopan_tilde_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[0]->s_n); }
void *stereopan_tilde_new(t_floatarg f) { t_stereopan_tilde *x = (t_stereopan_tilde *)pd_new(stereopan_tilde_class); x->f_pan = f; inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); floatinlet_new (&x->x_obj, &x->f_pan); outlet_new(&x->x_obj, &s_signal); outlet_new(&x->x_obj, &s_signal); return (void *)x; }
void stereopan_tilde_setup(void) { stereopan_tilde_class = class_new(gensym("stereopan~"),(t_newmethod)stereopan_tilde_new,0, sizeof(t_stereopan_tilde), CLASS_DEFAULT, A_DEFFLOAT, 0); class_addmethod(stereopan_tilde_class, (t_method)stereopan_tilde_dsp, gensym("dsp"), 0); CLASS_MAINSIGNALIN(stereopan_tilde_class, t_stereopan_tilde, f); }
Hi Javier,
It works fine for me; what specific problem (e.g. won't compile, wrong behaviour in patch) are you experiencing?
Jamie
On Mon, 12 Dec 2005 18:24:46 +0000 "Javier Jimenez Urbano" j2urban@hotmail.com wrote:
Hi, I'd like to make a question. Is it posible to create an external (dsp object) with two independient signal outlets? I'm newbie in externals writing and i can't resolve this.
I'm trying to extend the external from the Johannes M Zmölning manual called pan~. i want to create a stereopan~ and this is the code: (it don't work as it must be). Can anyone help me?
#include "m_pd.h"
static t_class *stereopan_tilde_class;
typedef struct _stereopan_tilde { t_object x_obj; t_sample f_pan; t_sample f; } t_stereopan_tilde;
t_int *stereopan_tilde_perform(t_int *w) { t_stereopan_tilde *x = (t_stereopan_tilde *)(w[1]); t_sample *in1 = (t_sample *)(w[2]); t_sample *in2 = (t_sample *)(w[3]); t_sample *outL = (t_sample *)(w[4]); t_sample *outR = (t_sample *)(w[5]); int n = (int)(w[6]); t_sample f_pan = (x->f_pan<0)?0.0:(x->f_pan>1)?1.0:x->f_pan; while (n--) {
*outL++ = (*in1++)*(1-f_pan); *outR++ = (*in2++)*f_pan;
}
return (w+7); }
void stereopan_tilde_dsp(t_stereopan_tilde *x, t_signal **sp) { dsp_add(stereopan_tilde_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[0]->s_n); }
void *stereopan_tilde_new(t_floatarg f) { t_stereopan_tilde *x = (t_stereopan_tilde *)pd_new(stereopan_tilde_class); x->f_pan = f; inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); floatinlet_new (&x->x_obj, &x->f_pan); outlet_new(&x->x_obj, &s_signal); outlet_new(&x->x_obj, &s_signal); return (void *)x; }
void stereopan_tilde_setup(void) { stereopan_tilde_class = class_new(gensym("stereopan~"),(t_newmethod)stereopan_tilde_new,0, sizeof(t_stereopan_tilde), CLASS_DEFAULT, A_DEFFLOAT, 0); class_addmethod(stereopan_tilde_class, (t_method)stereopan_tilde_dsp, gensym("dsp"), 0); CLASS_MAINSIGNALIN(stereopan_tilde_class, t_stereopan_tilde, f); }
PD-dev mailing list PD-dev@iem.at http://lists.puredata.info/listinfo/pd-dev