[PD-dev] Fwd: help with some new multichannel tools

Alexandre Torres Porres porres at gmail.com
Mon Jul 24 06:42:06 CEST 2023


Em dom., 23 de jul. de 2023 às 19:41, Christof Ressi <info at christofressi.com>
escreveu:

> Side note: why do your channel indexes start at 1?
>
I do this in some objects although I may be doing things inconsistently

in this case the idea is that "0" means "none" and I do this in other
similar objects, like [xselect~], makes good intuitive sense to me.

thanks for all the help


> Pd uses zero-based indexes for almost anything, with only few exceptions
> (ADC/DAC and MIDI channels, anything else?).
>
> Christof
> On 23.07.2023 05:59, Alexandre Torres Porres wrote:
>
>
>
> On Sun, 23 Jul 2023 at 00:10 Alexandre Torres Porres <porres at gmail.com>
> wrote:
>
>> I see now I was just doing something silly thinking I was trying to copy
>> some sophisticated trick that would sove things.
>>
>> I can't remember now which object I had to deal with something like this.
>>
>
>
> Found one, copied the structure, it works!  I still have no good idea on
> how things work, but hey, I got it working and I can sleep
>
>
>
> Thanks
>
>
>
>
>> anyway, in this last version, I have my own "perform" method that fails
>> equally as before in some cases, but it is not as weird as before...
>>
>> let me just copy it instead of linking to a github code that might
>> change, here's the code section
>>
>> *static* t_int *remap_perform(t_int *w){
>>
>>     t_remap *x = (t_remap *)(w[1]);
>>
>>     t_int n = (t_int)(w[2]);
>>
>>     t_int nchans = (t_int)(w[3]);
>>
>>     t_sample *in = (t_sample *)(w[4]);
>>
>>     t_sample *out = (t_sample *)(w[5]);
>>
>>     *for*(*int* i = 0; i < x->x_n; i++){ // channels to copy
>>
>>         *int* ch = x->x_vec[i].a_w.w_float - 1; // get channel number
>>
>>         *if*(ch >= nchans)
>>
>>             ch = nchans - 1;
>>
>>         *for*(*int* j = 0; j < n; j++){ // j is sample number of each
>> channel
>>
>>             *if*(ch >= 0)
>>
>>                 *out++ = in[ch*n + j];
>>
>>             *else*
>>
>>                 *out++ = 0;
>>
>>         }
>>
>>     }
>>
>>     *return*(w+6);
>>
>> }
>>
>> Em sáb., 22 de jul. de 2023 às 21:22, Alexandre Torres Porres <
>> porres at gmail.com> escreveu:
>>
>>> ok, I was able to compile a version that does not blow pd up
>>>
>>> obviously I have no idea of what I am doing and I did some things based
>>> on warnings I was getting, but then, I do copy the input first and then
>>> reorder the channels but I do get the exact same result as before, so it
>>> was all for nothing.
>>>
>>> here's my new attempt, hopefully not too far from getting things right
>>> https://github.com/porres/pd-else/blob/master/Code_source/Compiled/signal/remap~.c#L34
>>>
>>> cheers
>>>
>>> Em sáb., 22 de jul. de 2023 às 21:02, Alexandre Torres Porres <
>>> porres at gmail.com> escreveu:
>>>
>>>>
>>>>
>>>> Em sáb., 22 de jul. de 2023 às 18:39, Christof Ressi <
>>>> info at christofressi.com> escreveu:
>>>>
>>>>> if the input and output signals have the same channel count, they will
>>>>> alias each other, just like in regular single-channel objects.
>>>>>
>>>> actually, funny stuff happens for 4 multichannel input and 3
>>>> multichannel output, but I've seen that issue with single channel objects
>>>> and I tried copying stuff from other objects in ELSE into this multichannel
>>>> idea and failed.
>>>>
>>>>> You first need to copy the whole input signal to a temporary buffer
>>>>> (probably allocated in your object) and then copy the corresponding
>>>>> channels to the output signal.
>>>>>
>>>>
>>>> I wonder if you can give me a better detailed strategy/steps.
>>>>
>>>> thanks
>>>>
>>> _______________________________________________
> 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/20230724/db97fb03/attachment.htm>


More information about the Pd-dev mailing list