[PD-dev] Fwd: external help, please
Pierre Guillot
guillotpierre6 at gmail.com
Fri Feb 23 14:59:33 CET 2018
Hi Alexandre,
You can also look at this thread on the forum.pdpatchrepo.info:
https://forum.pdpatchrepo.info/topic/10466/matrices-and-reallocating-memory.
And to this code :
https://github.com/pierreguillot/pd.dummies/blob/master/src/leeloo_tilde.c
2018-02-22 18:41 GMT+01:00 Miller Puckette <msp at ucsd.edu>:
> Check that the input addresses are different from the output ones - usually
> in a case like that Pd will re-use the memory from the inputs for the
> outputs,
> so your object needs to be able to operate in-place.
>
> (hint: allocate a bunch of temporary signals on teh stack using alloca(),
> and
> put the outputs in them irst; then when you're through using the intputs
> for
> anything, you can copy the temporary outputs to the real ones.)
>
> cheers
> Miller
>
> On Thu, Feb 22, 2018 at 02:38:24PM -0300, Alexandre Torres Porres wrote:
> > Hi folks, I need help on an external. I wanna perform a task on an array
> of
> > signal inputs. It's a multichannel object, and I define the number of
> > channels with an argument.
> >
> > Here's just the core of it, as an object named "mtx~", where I map the
> > input to the output. And this is what happens.
> >
> > [image: Imagem inline 1]
> >
> > So you see I get a weird mirrored output, instead of something like "1 2
> 3
> > 4 5 6".
> >
> > The perform method in the code is just
> >
> > static t_int *mtx_perform(t_int *w){
> >
> > t_mtx *x = (t_mtx *)(w[1]);
> >
> > int nblock = (int)(w[2]);
> >
> > t_float **in_vectors = x->x_in_vectors;
> >
> > t_float **out_vectors = x->x_out_vectors;
> >
> > t_int i;
> >
> > for(i = 0; i < x->x_ch; i++){
> >
> > t_float *in = in_vectors[i];
> >
> > t_float *out = out_vectors[i];
> >
> > t_int n = nblock;
> >
> > while(n--)
> >
> > *out++ = *in++;
> >
> > }
> >
> > return (w + 3);
> >
> > }
> >
> > What am I doing wrong? How should this go? See attached the help test
> > example and code.
> >
> > Thanks
>
>
>
>
>
>
> > #include "m_pd.h"
> >
> > typedef struct _mtx{
> > t_object x_obj;
> > t_int x_ch;
> > t_float **x_in_vectors;
> > t_float **x_out_vectors;
> > }t_mtx;
> >
> > static t_class *mtx_class;
> >
> > static t_int *mtx_perform(t_int *w){
> > t_mtx *x = (t_mtx *)(w[1]);
> > int nblock = (int)(w[2]);
> > t_float **in_vectors = x->x_in_vectors;
> > t_float **out_vectors = x->x_out_vectors;
> > t_int i;
> > for(i = 0; i < x->x_ch; i++){
> > t_float *in = in_vectors[i];
> > t_float *out = out_vectors[i];
> > t_int n = nblock;
> > while(n--)
> > *out++ = *in++;
> > }
> > return (w + 3);
> > }
> >
> > static void mtx_dsp(t_mtx *x, t_signal **sp){
> > t_int i, nblock = sp[0]->s_n;
> > t_signal **sigp = sp;
> > t_float **vecp = x->x_in_vectors;
> > for(i = 0; i < x->x_ch; i++)
> > *vecp++ = (*sigp++)->s_vec; // input vectors
> > vecp = x->x_out_vectors;
> > for(i = 0; i < x->x_ch; i++)
> > *vecp++ = (*sigp++)->s_vec; // output vectors
> > dsp_add(mtx_perform, 2, x, nblock);
> > }
> >
> > static void *mtx_free(t_mtx *x){
> > freebytes(x->x_in_vectors, x->x_ch * sizeof(*x->x_in_vectors));
> > freebytes(x->x_out_vectors, x->x_ch * sizeof(*x->x_out_vectors));
> > return(void *)x;
> > }
> >
> > static void *mtx_new(t_floatarg f){
> > t_mtx *x = (t_mtx *)pd_new(mtx_class);
> > x->x_ch = (int)f < 1 ? 1 : (int)f > 64 ? 64 : (int)f;
> > x->x_in_vectors = getbytes(x->x_ch * sizeof(*x->x_in_vectors));
> > x->x_out_vectors = getbytes(x->x_ch * sizeof(*x->x_out_vectors));
> > t_int i;
> > for(i = 0; i < x->x_ch; i++)
> > inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
> > for(i = 0; i < x->x_ch; i++)
> > outlet_new(&x->x_obj, gensym("signal"));
> > return(x);
> > }
> >
> > void mtx_tilde_setup(void){
> > mtx_class = class_new(gensym("mtx~"), (t_newmethod)mtx_new,
> (t_method)mtx_free,
> > sizeof(t_mtx), CLASS_NOINLET, A_DEFFLOAT, 0);
> > class_addmethod(mtx_class, (t_method)mtx_dsp, gensym("dsp"), A_CANT,
> 0);
> > }
>
> > _______________________________________________
> > Pd-dev mailing list
> > Pd-dev at lists.iem.at
> > https://lists.puredata.info/listinfo/pd-dev
>
>
> _______________________________________________
> Pd-dev mailing list
> Pd-dev at lists.iem.at
> https://lists.puredata.info/listinfo/pd-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-dev/attachments/20180223/9b000b8f/attachment.html>
More information about the Pd-dev
mailing list