Re: [Csnd-dev] [EXTERNAL] Re: [Csnd-dev] expression with multiple outputs

Victor Lazzarini <[email protected]> Mon, 22 Sep 2025 12:55:40 +0000
Newsgroups gmane.comp.audio.csound.devel
Message-ID <DU0PR02MB83385206D4C8FB0C6CF5E2F08B12A@DU0PR02MB8338.eurprd02.prod.outlook.com>
Yes, I think so. Can you open a ticket for enhancement?
________________________________
From: Csound-developers <[email protected]> on behalf of joachim heintz <[email protected]>
Sent: Monday 22 September 2025 13:45
To: [email protected] <[email protected]>
Subject: Re: [Csnd-dev] [EXTERNAL] Re: [Csnd-dev] expression with multiple outputs

yes what you say is what i had in mind:
"There could be a section in the manual on inlined opcodes giving
examples where it can be noted that only opcodes with one output may be
inlined."

in the case of pan2: might it be an idea to add an array output, as
eduardo mentioned?

On 22/09/2025 20:42, Victor Lazzarini wrote:
> What do you have in mind in terms of documentation?
>
> There could be a section in the manual on inlined opcodes giving examples where it can be noted that only opcodes with one output may be inlined.
>
> Note that this is a common approach in other languages that have multiple outputs. In Python tuples are used to handle this,
>
> def fun(): return 1, 2
>
> fun()
> (1,2)
>
> def fun2(a,b): return a, b
>
> fun2(fun())
> TypeError: fun2() missing 1 required positional argument 'b'
>
> fun2(fun()[0], fun()[1])
> (1,2)
>
> In Csound we can do similarly with arrays.
>
> Prof. Victor Lazzarini
> Maynooth University
> Ireland
>
>> On 21 Sep 2025, at 23:13, joachim heintz <[email protected]> wrote:
>>
>> ok --- thanks to all for the explanations and thoughts.
>> i wonder where is a good place to document it.
>> or is it already anywhere documented?
>>
>>> On 22/09/2025 04:41, Victor Lazzarini wrote:
>>> It's a can of worms. I have discussed this with Steven and we concluded it's a bad idea.
>>> Prof. Victor Lazzarini
>>> Maynooth University
>>> Ireland
>>>>> On 21 Sep 2025, at 19:25, Hlöðver Sigurðsson <[email protected]> wrote:
>>>>
>>>> 
>>>> in theory the out could infer the [a,a] after I finish this behemoth change regarding struct arrays I could take a look at this
>>>>
>>>>> On Sun, 21 Sept 2025 at 17:17, Victor Lazzarini <000010b17ddd988e- [email protected] <mailto:000010b17ddd988e-dmarc- [email protected]>> wrote:
>>>>
>>>>     No, we don't have that syntax and we have decided a while ago that
>>>>     we would not try to implement it.
>>>>
>>>>     So in summary, a multi-output opcode cannot be used inline like this.
>>>>
>>>>     Prof. Victor Lazzarini
>>>>     Maynooth University
>>>>     Ireland
>>>>
>>>>     > On 21 Sep 2025, at 14:35, joachim heintz <[email protected]
>>>>     <mailto:[email protected]>> wrote:
>>>>     >
>>>>     > *Warning*
>>>>     >
>>>>     > This email originated from outside of Maynooth University's Mail
>>>>     System. Do not reply, click links or open attachments unless you
>>>>     recognise the sender and know the content is safe.
>>>>     >
>>>>     > my assumption was that if out(a1,a2) works, it should also work
>>>>     if the
>>>>     > two arguments are the outputs of an expression, like here.
>>>>     >
>>>>     >
>>>>     >> On 21/09/2025 22:28, Eduardo Moguillansky wrote:
>>>>     >> pan2 returns two outputs, not an array. So I would say that it is a
>>>>     >> limitation in the sense that for that to work one would need to
>>>>     add a
>>>>     >> variant of pan2 which returns an array.
>>>>     >>
>>>>     >> On Sun, Sep 21, 2025 at 3:18 PM joachim heintz
>>>>     <[email protected] <mailto:[email protected]>
>>>>     >> <mailto:[email protected] <mailto:[email protected]>>> wrote:
>>>>     >>
>>>>     >>    nchnls = 2
>>>>     >>    0dbfs = 1
>>>>     >>
>>>>     >>    instr 1
>>>>     >>        sound:a = pinkish(.1)
>>>>     >>        out(pan2(sound,random:i(0,1)))
>>>>     >>    endin
>>>>     >>    schedule(1,0,1)
>>>>     >>
>>>>     >>    error: opcode 'pan2' for expression with arg types ai
>>>>     returns out-args
>>>>     >>    != 1, line 14
>>>>     >>
>>>>     >>    is this a limitation, or is it supposed to work?
>>>>     >>
>>>>     >>    thanks -
>>>>     >>             joachim
>>>>     >>
>>>>