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

Dave Seidel <[email protected]> Mon, 10 Nov 2025 12:08:32 -0500
Newsgroups gmane.comp.audio.csound.devel
Message-ID <CAMnrweDPtu4VG1MCKyz8Da5brmmBKK2zSf3FRo8XEpafu7ELEg@mail.gmail.com>
But I am grateful to have a workaround!

On Mon, Nov 10, 2025 at 12:06 PM Dave Seidel <[email protected]> wrote:

> My piece actually contains 5 UDOs, all of which were written using the new
> style, and none of them work. Hopefully there will be a testable fix soon
> so I don't have to rewrite a substantial part of the code. :-)
>
> On Mon, Nov 10, 2025 at 11:59 AM Dave Seidel <[email protected]>
> wrote:
>
>> To confirm, the UDO works if defined and invoked using the old syntax.
>>
>> On Mon, Nov 10, 2025 at 11:55 AM Dave Seidel <[email protected]>
>> wrote:
>>
>>> 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.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>