[PD] Help with perform routine (suite ...)

Sylvain Le Beux slebeux at limsi.fr
Wed May 3 13:36:09 CEST 2006

As a corrolar, I would like to know why in the pan~ example code of 
Iohannes's "How to write externals" I can only see declaration of two 
inlets and after compiling, the creation in Pd of pan~ object appears to 
have three inlets ???
If somebody can point me out where in this following code is specified 
the fact that the object has to be instantiated with three inlets, it 
would be nice.

#include "m_pd.h"

static t_class *pan_tilde_class;

typedef struct _pan_tilde {
  t_object  x_obj;
  t_sample f_pan;
  t_sample f;
} t_pan_tilde;

t_int *pan_tilde_perform(t_int *w)
  t_pan_tilde *x = (t_pan_tilde *)(w[1]);
  t_sample  *in1 =    (t_sample *)(w[2]);
  t_sample  *in2 =    (t_sample *)(w[3]);
  t_sample  *out =    (t_sample *)(w[4]);
  int          n =           (int)(w[5]);
  t_sample f_pan = (x->f_pan<0)?0.0:(x->f_pan>1)?1.0:x->f_pan;

  while (n--) *out++ = (*in1++)*(1-f_pan)+(*in2++)*f_pan;

  return (w+6);

void pan_tilde_dsp(t_pan_tilde *x, t_signal **sp)
  dsp_add(pan_tilde_perform, 5, x,
          sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n);

void *pan_tilde_new(t_floatarg f)
  t_pan_tilde *x = (t_pan_tilde *)pd_new(pan_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);

  return (void *)x;

void pan_tilde_setup(void) {
  pan_tilde_class = class_new(gensym("pan~"),
        0, sizeof(t_pan_tilde),
        A_DEFFLOAT, 0);

        (t_method)pan_tilde_dsp, gensym("dsp"), 0);
  CLASS_MAINSIGNALIN(pan_tilde_class, t_pan_tilde, f);

-------------- next part --------------
A non-text attachment was scrubbed...
Name: slebeux.vcf
Type: text/x-vcard
Size: 404 bytes
Desc: not available
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20060503/b47b2ff9/attachment.vcf>

More information about the Pd-list mailing list