Yes. the perform routine needs to access the signal vectors.
If the object has a fixed number of inlets and outlets, you simply pass the signal vectors directly to `dsp_add`.
If the number of inlets and outlets is variable, you have to store the signal vector pointers somewhere in the object.
Note that in the latter case, you could also use `dsp_addv`, where the `t_int` arguments are passed as an array. This is left as an exercise to the reader :)
Christof
On 10.10.2023 12:27, Alexandros Drymonitis wrote:
Getting back here after a while, just to confirm that Christof was right. I would like to clarify if the following chunk is necessary to be placed in the dsp routine:
t_sample **dummy = x->in; for (i = 0; i < x->inchnls; i++) *dummy++ = sp[i]->s_vec; dummy = x->out; for (i = x->inchnls; i < x->inchnls+x->outchnls; i++) *dummy++ = sp[i]->s_vec;
Without this the object crashes. From what I understand, the sp pointer contains the input and output samples, together with the block size, right? So, it's necessary to write the input and output to the pointer of pointers for the inlets and outlets.
Anyway, thanks for the help.
Alexandros
On 9/23/23 11:39, Christof Ressi wrote:
So you're saying that I only need to do the initial allocation, like this:
`x->x_in = (t_sample **)getbytes(ninlets * sizeof(t_sample *));`
and not try to allocate `t_sample *` bytes in the for loop? I did try this, but again the object is crushing.
Yes, because "x_in" and "x_out" are supposed to hold the signal vectors ("s_vecf") of the inlets and outlets, which you would assign in the "dsp" method.
Christof
Pd-dev mailing list Pd-dev@lists.iem.at https://lists.puredata.info/listinfo/pd-dev
Pd-dev mailing list Pd-dev@lists.iem.at https://lists.puredata.info/listinfo/pd-dev