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

Dave Seidel <[email protected]> Mon, 10 Nov 2025 12:21:33 -0500
Newsgroups gmane.comp.audio.csound.devel
Message-ID <CAMnrweBq2tRXq0em0-sBOkgusQZMfHeGhybWQCkZ1E5oUkyFog@mail.gmail.com>
Thanks, Joachim, I will try that. And thanks Victor, I missed Joachims's
original report.

On Mon, Nov 10, 2025 at 12:19 PM joachim heintz <[email protected]> wrote:

> hi dave -
> i have opened a ticket for a related issue.
> i have no problems when i checkout commit
> 728c8e4fdc6f1ca30da9577bed651ec79af59057.
> perhaps this is an option for you, too.
> best -
>         joachim
>
> On 10/11/2025 18:08, Dave Seidel wrote:
> > But I am grateful to have a workaround!
> >
> > On Mon, Nov 10, 2025 at 12:06 PM Dave Seidel <[email protected]
> > <mailto:[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]
> >     <mailto:[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] <mailto:[email protected]>> wrote:
> >
> >             Thanks, Hlöðver.
> >
> >             On Mon, Nov 10, 2025 at 11:52 AM Hlöðver Sigurðsson
> >             <[email protected] <mailto:[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] <mailto:[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]
> >                     <mailto:[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]
> >                         <mailto:[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]
> >                             <mailto:[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]
> >                                 <mailto:[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.
> >
> >
> >
>