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@free.frwrote:
----- "Patrice Colet" colet.patrice@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@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@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@iem.at http://lists.puredata.info/listinfo/pd-dev
-- Patrice Colet
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
-- Patrice Colet