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

Hlöðver Sigurðsson <[email protected]> Mon, 10 Nov 2025 18:52:28 +0200
Newsgroups gmane.comp.audio.csound.devel
Message-ID <CAB8vR8JygimsFEdOQZNvnEgJo8KG_vv5BTbjJhUtHqF9oxhjnQ@mail.gmail.com>
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.
>>>>>
>>>>>
>>>>>
>>>>>