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

Victor Lazzarini <[email protected]> Mon, 22 Sep 2025 11:42:37 +0000
Newsgroups gmane.comp.audio.csound.devel
Message-ID <[email protected]>
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
>>>    >>
>>>