Re: [Csnd-dev] UDO problem in latest develop

Dave Seidel <[email protected]> Mon, 10 Nov 2025 11:55:07 -0500
Newsgroups gmane.comp.audio.csound.devel
Message-ID <CAMnrweDwBPhHTcXA-hGoAjdh-Q5mFaohf6OBzcf6u8q6V_32Ug@mail.gmail.com>
Thanks, Hlöðver.

On Mon, Nov 10, 2025 at 11:52 AM Hlöðver Sigurðsson <[email protected]>
wrote:

> I made a reproducible test here, it fails in instr 2, instr 1 works, so
> you have a workaround for now, by placing the arguments positionally
> "old-style" while I make a fix
>
> <CsoundSynthesizer>
> <CsOptions>
> -n -d
> </CsOptions>
> <CsInstruments>
> sr = 44100
> ksmps = 64
> nchnls = 2
> 0dbfs = 1
>
> giSine ftgen 0, 0, 4096, 10, 1
>
> opcode TestXout, aa, ikai
>   ifreq, koff, aamp, itbl xin
>   koff1 = koff
>   koff2 = 2 * koff
>
>   a1 poscil aamp, ifreq+koff1, itbl
>   a2 poscil aamp, ifreq+koff2, itbl
>   a3 poscil aamp, ifreq-koff1, itbl
>   a4 poscil aamp, ifreq-koff2, itbl
>
>   aL = a1 + a3
>   aR = a2 + a4
>
>   xout aL, aR
> endop
>
> instr 1
>   ifreq = 440
>   koff = 0.004
>   aenv linen 0.5, 0.01, p3, 0.01
>
>   ; This should work - unpacking the outputs
>   aL, aR TestXout ifreq, koff, aenv, giSine
>   out aL, aR
> endin
>
> instr 2
>   ifreq = 440
>   koff = 0.004
>   aenv linen 0.5, 0.01, p3, 0.01
>
>   ; This tests the regression - calling UDO with multiple outputs directly
> in out statement
>   out TestXout(ifreq, koff, aenv, giSine)
> endin
>
> </CsInstruments>
> <CsScore>
> i 1 0 0.1
> i 2 0 0.1
> </CsScore>
> </CsoundSynthesizer>
>
> On Mon, 10 Nov 2025 at 18:51, Dave Seidel <[email protected]> wrote:
>
>> This is how it's being used in context:
>>
>> instr Drone
>>     idur = p3
>>     iamp = ampdb(p4) / 7
>>     ifreq = p5
>>
>>     icps = ifreq / 4
>>     icps2 = icps * 1.5
>>     icps3 = icps * 2
>>     prints("drones: %f, %f, %f\n", icps, icps2, icps3)
>>
>>     aenv = linen(iamp, 3, idur, 3)
>>
>>     a1L, a1R = RissetHarmOsc(icps,  0.004, aenv, giPrime)
>>     a2L, a2R = RissetHarmOsc(icps2, 0.005, aenv, giPrime)
>>     a3L, a3R = RissetHarmOsc(icps3, 0.006, aenv, giPrime)
>>     ga_drone_L +=  a1L+a2L+a3L
>>     ga_drone_R +=  a1R+a2R+a3R
>>
>>     printks("drone %f, %f\n", 2, ga_drone_L, ga_drone_R)
>> endin
>>
>>
>> On Mon, Nov 10, 2025 at 11:48 AM Dave Seidel <[email protected]>
>> wrote:
>>
>>> I'm not getting any error message at all.
>>>
>>> On Mon, Nov 10, 2025 at 11:45 AM Hlöðver Sigurðsson <[email protected]>
>>> wrote:
>>>
>>>> this is the error you are seeing?
>>>>
>>>> > error: opcode 'RissetHarmOsc' for expression with arg types icai
>>>> returns out-args != 1, line 43
>>>>
>>>> On Mon, 10 Nov 2025 at 18:41, Hlöðver Sigurðsson <[email protected]>
>>>> wrote:
>>>>
>>>>> I'm taking a look at this now, I don't know if my changes had anything
>>>>> to do with it, not unlikely
>>>>>
>>>>> On Mon, 10 Nov 2025 at 18:39, Dave Seidel <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> The following UDO does not work with the latest develop sources. The
>>>>>> print statement shows that all four inputs argos are coming in at 0; If I
>>>>>> revert to the 7.0.0-beta.9 tag, it works fine.
>>>>>>
>>>>>> opcode RissetHarmOsc(freq:i,ofs:k,amp:a,tbl:i):(a,a)
>>>>>>     koff1 = ofs
>>>>>>     koff2 = 2 * ofs
>>>>>>     koff3 = 3 * ofs
>>>>>>     koff4 = 4 * ofs
>>>>>>
>>>>>>     printks(">> RissetHarmOsc ->%f %f %f %f\n", 5, freq, ofs, amp,
>>>>>> tbl)
>>>>>>
>>>>>>     ; a1 = poscil3(kamp, freq, tbl
>>>>>>     a2 = poscil3(amp, freq+koff1, tbl)
>>>>>>     a3 = poscil3(amp, freq+koff2, tbl)
>>>>>>     a4 = poscil3(amp, freq+koff3, tbl)
>>>>>>     a5 = poscil3(amp, freq+koff4, tbl)
>>>>>>     a6 = poscil3(amp, freq-koff1, tbl)
>>>>>>     a7 = poscil3(amp, freq-koff2, tbl)
>>>>>>     a8 = poscil3(amp, freq-koff3, tbl)
>>>>>>     a9 = poscil3(amp, freq-koff4, tbl)
>>>>>>     aL = a2+a4+a6+a8
>>>>>>     aR = a3+a5+a7+a9
>>>>>>
>>>>>>     aoutL, aoutR = reverbsc(aL, aR, 0.4, 4000)
>>>>>>     xout(aoutL+aL, aoutR+aR)
>>>>>>     ; xout(aL, aR)
>>>>>>   endop
>>>>>>
>>>>>> example calling statement:
>>>>>>
>>>>>> a1L, a1R = RissetHarmOsc(icps,  0.004, aenv, giPrime)
>>>>>>
>>>>>> Has something changed to make my UDO invalid in some way? I'm using
>>>>>> this code in as performance on Saturday and I'm focused on preparing, but I
>>>>>> can follow up with a minimal example.
>>>>>>
>>>>>>
>>>>>>
>>>>>>