[PD-dev] Creating an external / sinewave equation example

Rick T ratulloch at gmail.com
Sat Sep 10 22:57:16 CEST 2011


Ok I'll try the changes and post to the pd-list like you suggested

aloha
Rick

On Fri, Sep 9, 2011 at 11:06 PM, Patrice Colet <colet.patrice at free.fr>wrote:

>
> ----- "Patrice Colet" <colet.patrice at free.fr> a écrit :
>
> Also I've just figured out that amp variable isn't really needed since it
> can be performed by [*~]
>
> > AFAIU you just need an output signal, would you mind trying something
> > like this:
> >
> >
> > static void sineq_tilde_amp (t_sineq_tilde *x, t_floatarg f)
> > {
> >       if ((f >= 0) && (f <= 1))
> >               x->amp = f;
> >       else
> >               x->amp = 0;
> > }
> >
> >
> > static void sineq_tilde_freq (t_sineq_tilde *x, t_floatarg f)
> > {
> >       if ((f > 0) && (f <= 20000))
> >               x->freq = f;
> >       else
> >               x->freq = 0;
> > }
> >
> >
> >
> > static void sineq_tilde_phase (t_sineq_tilde *x, t_floatarg f)
> > {
> >       if ((f >= -1) && (f <= 1))
> >               x->phase = f;
> >       else
> >               if (f < -1) x->phase = -1;
> >               if (f > 1) x->phase = 1;
> > }
> >
> >
> > static void sineq_tilde_vertoff (t_sineq_tilde *x, t_floatarg f)
> > {
> >       if ((f >= -1) && (f <= 1))
> >               x->vertoff = f;
> >       else
> >               if (f < -1) x->vertoff = -1;
> >               if (f > 1) x->vertoff = 1;
> > }
> >
> >
> >
> >
> > t_int *sineq_tilde_perform(t_int *w)
> > {
> >         t_sineq_tilde *x        = (t_sineq_tilde *)(w[1]);
> >         t_sample           *out = (t_sample *)(w[2]);
> >         int                   n = (int)           (w[3]);
> >
> >         while (n--)
> >         {
> >                 *out++ =
> > x->amp*sin(2*PI*x->freq+(deg2rad(x->phase)))+x->vertoff;
> >         }
> >         return (w+4);
> > }
> >
> > static void *sineq_tilde_new(t_symbol *s, int argc, t_atom *argv)
> > {
> >       unsigned int numargs;
> >     t_sineq_tilde *x = (t_sineq_tilde *)pd_new(sineq_tilde_class);
> >
> >       outlet_new(&x->x_obj, gensym("signal"));
> >     return (x);
> > }
> >
> >
> > void sineq_tilde_dsp(t_sineq_tilde *x, t_signal **sp)
> > {
> >         dsp_add(sineq_tilde_perform, 3, x,
> >                 sp[0]->s_vec, sp[0]->s_n);
> > }
> >
> > void sineq_tilde_setup(void)
> > {
> >         sineq_tilde_class = class_new(gensym("sineq~"),
> >                 (t_newmethod)sineq_tilde_new, 0,
> >                 sizeof(t_sineq_tilde), 0,
> >                 A_DEFFLOAT, 0);
> >         class_addmethod(sineq_tilde_class,
> >                 (t_method)sineq_tilde_dsp, gensym("dsp"), 0);
> >         CLASS_MAINSIGNALIN(sineq_tilde_class,t_sineq_tilde, f);
> >       class_addmethod(sineq_tilde, (t_method)sineq_tilde_amp,
> > gensym("amp"), A_DEFFLOAT, 0);
> >       class_addmethod(sineq_tilde, (t_method)sineq_tilde_freq,
> > gensym("freq"), A_DEFFLOAT, 0);
> >       class_addmethod(sineq_tilde, (t_method)sineq_tilde_phase,
> > gensym("phase"), A_DEFFLOAT, 0);
> >       class_addmethod(sineq_tilde, (t_method)sineq_tilde_vertoff,
> > gensym("vertoff"), A_DEFFLOAT, 0);
> > }
> >
> >
> > I didn't try this code but i think it should look like this
> >
> > You might want to post this thread in pd_list, then more people that
> > is able to help would interact.
> >
> >
> >
> >
> > >
> > >
> > >
> > >
> > >
> > > >
> > > >
> > > > >
> > > > > It does a "make" successfully but I get this warning message
> > > > > /usr/bin/ld: warning: cannot find entry symbol xport_dynamic;
> > > > > defaulting to 00000000000007f0
> > > > >
> > > >
> > > > it's certainly caused by your makefile during linking, it's rather
> > > > export_dynamic, you've certainly made a typo ^^
> > > >
> > > >
> > > >
> > > > I thought so to but when I take a look at the make file it looks
> > > fine
> > > > here's a link to the code in (pastebin)
> > > >
> > >
> > > Okay, in fact you should write:
> > >
> > > -Wl,-export-dynamic to pass it with gcc
> > >
> > >
> > > This caused compilation to fail so I had to take it out
> > >
> > >
> >
> > What does the console say?
> >
> > >
> > >
> > >
> > >
> > >
> > > > >
> > > > > but when I try and add it in PD it says "couldn't create". I've
> > > > looked
> > > > > at the pan~ tutorial and the d_osc.c file as recommended, which
> > > did
> > > > > help. I tried to take pieces from the two which I thought were
> > > > > applicable to my situation but I'm still having some issues.
> > > > >
> > > >
> > > > maybe a little look into bassmu~ source code could also be
> > > interesting
> > >
> > >
> > >
> > > I looked into it but this seems more complex than the d_osc.c file I
> > > need easier at the moment not more complex
> > >
> > >
> >
> >
> > I've found bassemu~.c perform part easier to understand than d_osc~.c
> > that's why I suggested to have a look.
> >
> >
> >
> >
> > >
> > > >
> > > >
> > > >
> > > > Do you know the name for the source file or know where I can find
> > > it?
> > > > I typed in bassmu~
> > > > in PD and nothing came back.
> > > >
> > >
> > > ah sorry I've made a typo :D
> > > it's bassemu~
> > >
> > > you can get it in pd-extended externals sources
> > >
> > >
> > >
> > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > >
> > > > > Here's a link to the workflow (dropbox)
> > > > > http://dl.dropbox.com/u/6576402/questions/pd/Sine_EQ_Diagram.jpg
> > > > >
> > > > >
> > > > > Here's a link to the C code online (pastebin)
> > > > > http://pastebin.com/9rK3szUE
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > My external is a reproduction of the sinewave equation with 4
> > > inputs
> > > > > and one output my logic is to have 4 inlets one for the
> > > > > frequency,amplitude,phase and vertical offset and an output for
> > > the
> > > > > created signal. Granted this isn't the final equation but this
> > > will
> > > > > help me understand how to create the full equation once done. If
> > > you
> > > > > want to see the full equation I'll be using here's a link to it
> > > > below.
> > > > > Basically it's a 1 second periodic signal with the sample rate
> > at
> > > > > 44100 which the equation gives me control over the
> > > > > frequency,amplitude,phase and vertical offset, which will be
> > > > > controlled by a usb midi controller.
> > > > >
> > > > >
> > > > > Another question I have is what do I use for the t (time) for my
> > > > final
> > > > > equation is that the t_sample object in PD? or do I need to
> > create
> > > a
> > > > > for loop counting from 1-44100 for a 1 second 44100 sampled
> > > > equation?
> > > > >
> > > > >
> > > > > http://dl.dropbox.com/u/6576402/questions/eq1.txt
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > PS: I'm compiling on ubuntu 10.04 using gcc
> > > > >
> > > > > On Sun, Sep 4, 2011 at 12:13 PM, Martin Peach <
> > > > > martin.peach at sympatico.ca > wrote:
> > > > >
> > > > >
> > > > > On 2011-09-04 16:52, Rick T wrote:
> > > > > ...
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > I've been able to find instructions on how to create a hello
> > world
> > > > > C-external but not one that creates a simple sine wave from a
> > > > sinewave
> > > > > equation like A*sin(w*t+p)
> > > > > ( https://secure.wikimedia.org/ wikipedia/en/wiki/Sine_wave )
> > Does
> > > > > anyone
> > > > > have one or know where to find one.
> > > > >
> > > > > The canonical reference is here:
> > > > > http://iem.at/pd/externals- HOWTO/node6.html
> > > > > You just need to plug your equation into the perform routine.
> > > > > Also check the source for osc~ in d_osc.c of the Pd source,
> > which
> > > > uses
> > > > > a fancy 32-bit float cosine table scanning method that was
> > useful
> > > > when
> > > > > it mattered but is getting obsolete as a call to sin() is
> > probably
> > > > > just as fast nowadays.
> > > > >
> > > > > Martin
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > > Pd-dev mailing list
> > > > > Pd-dev at iem.at
> > > > > http://lists.puredata.info/listinfo/pd-dev
> > > >
> > > > --
> > > > Patrice Colet
> > > >
> > > >
> > > >
> > > > Aloha
> > > > and thanks for the help every bit helps --
> > >
> > > --
> > > Patrice Colet
> > >
> > >
> > >
> > >
> > > aloha
> > > Rick
> > > _______________________________________________
> > > Pd-dev mailing list
> > > Pd-dev at iem.at
> > > http://lists.puredata.info/listinfo/pd-dev
> >
> > --
> > Patrice Colet
> >
> > _______________________________________________
> > Pd-dev mailing list
> > Pd-dev at iem.at
> > http://lists.puredata.info/listinfo/pd-dev
>
> --
> Patrice Colet
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-dev/attachments/20110910/57749f74/attachment.htm>


More information about the Pd-dev mailing list