----- "Rick T" <ratull...@gmail.com> a écrit : > On Fri, Sep 9, 2011 at 4:37 PM, Patrice Colet < colet.patr...@free.fr > > wrote: > > > > > ----- "Rick T" < ratull...@gmail.com > a écrit : > > > On Fri, Sep 9, 2011 at 2:46 PM, Patrice Colet < > colet.patr...@free.fr > > > wrote: > > > > > > Hello, I'm not a C expert but I see errors in your code > > > > ----- "Rick T" < ratull...@gmail.com > a écrit : > > > > > > > Greetings All > > > > > > > > > I'm having trouble getting my external to work, It compiles with 5 > > > warnings > > > sineq.c:48: warning: unused variable ‘x’ > > > sineq.c:49: warning: unused variable ‘in1’ > > > sineq.c:50: warning: unused variable ‘in2’ > > > sineq.c:51: warning: unused variable ‘in3’ > > > sineq.c:52: warning: unused variable ‘in4’ > > > > > > > in http://iem.at/pd/externals-HOWTO/node6.html it's not a t_float > but > > a t_sample for using those variables > > > > > > > > True but the variables in my external are floats not samples like in > > the example pan~ which takes in 2 different signals. I'm taking in 4 > > different floats (numbers) > > > > Allright, maybe you should directly name your variables amp freq phase > and vertoff > instead of in1 in2 in3 and in4 > > > Changing these just caused more errors I think the *in and *out are a > pd reserved class to create inputs and outputs >
the *in and *out are just variable names, representing samples from the signal vector, in bassemu~.c they are called *inbuf and *outbuf... 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.pe...@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