Csound Csound-dev Csound-tekno Search About

[Csnd] Re: Re: Re: Re: python language proxy

Date2008-01-18 20:49
Fromvictor
Subject[Csnd] Re: Re: Re: Re: python language proxy
Csound never crashed with me because of signal routing.

----- Original Message ----- 
From: "Michael Gogins" 
To: 
Sent: Friday, January 18, 2008 8:13 PM
Subject: [Csnd] Re: Re: Re: python language proxy


> That reminds me, Csound schedules instruments first in instrument number 
> order, and then in instance order. Signal routing within this order is 
> arbitrary and can lead to problems and crashes.
>
> I suggest it might be better for Csound to extend this scheme with a true 
> data flow graph or DSP graph design. This could not be done now, but 
> perhaps it could be done as part of the parser implementation. It would 
> also make it possible to easily subdivide the orchestra into parts that 
> can run in parallel.
>
> Such a design works like this:
>
> Each unit generator is a subgraph in which input nodes (often called 
> inlets, in our case the parameters of the opcode) are connected to a 
> processing node (in our case the kperiod function). The processing node in 
> turn is connected to output nodes (often called outlets, in our case the 
> return value(s) (or left-hand side of the opcode).
>
>    a1   k1  k2  k3
>     |   |   |   |
>  +--+---+---+---+--+
>  |   \  \  /   /   |
>  |     kopadr      |
>  |        |        |
>  +--------+--------+
>           |
>          aout
>
> An graph is then created by connecting the output nodes (opcode return 
> values  or outlets) of some opcodes to the input nodes (opcode parameters) 
> of other opcodes, to produce a directed acyclical graph that represents a 
> data flow program. In reality, at 1 ksmps, cycles can be permitted without 
> in practice crippling the linear response of the graph.
>
> In Csound, this already happens inside instrument definitions. What needs 
> to happen is that should also happen between instrument definitions.
>
> The Csound orchestra language would then be extended to include the notion 
> of explicit connections between instrument definitions, which could be 
> used either instead of, or in addition to, the existing "out" family of 
> opcodes and pfields:
>
> ; Note: receives pfields,
> ;       sends outputs to ga1, ga2 instead of using "outs".
>
> ga1, ga2 instr 1 p1, p2, p3, p4
>         endin
>
> ; Note: receives ga1, ga2 from instr 1 as well as default pfields,
> ;       sends outputs to ga3, ga4.
>
> ga3, ga4 instr 2 p1, p2, p3, ga1, ga2
>         endin
>
> It is no longer necessary to define instruments in the correct order. 
> Instead, the finished graph (which is just a list of the connection arcs 
> [e.g. (instr1:out1,instr2:in4)] between the nodes, is traversed breadth 
> first and the finished list of nodes is reversed. This reversed 
> breadth-first list computes every instrument in the orchestra in exactly 
> the correct order. When the nodes in the list are ticked: (1) The output 
> nodes do nothing; (2) the input nodes sum the values of their connected 
> input nodes; and (3) the processing nodes compute their output node(s) 
> from their input node(s). The list is then ticked again to clear all the 
> output nodes.
>
> Polyphony can be implemented by scattering control signal output nodes to 
> N instrument subgraphs and gathering the instrument subgraph output 
> signals using a mixer opcode. This gathering and scattering can be an 
> implicit rule.
>
> Each instrument instance subgraph connected to such a mixer can run in 
> parallel:
>
>               control
>                  |
>         +--------+----------+  ...  +
>         |        |          |       |
>        inst[0] inst[1] inst[2] inst[n]
>         |        |          |       |
>         +--------+----------+  ...  +
>                  |
>                mixer
>
> Similarly, if the signal flow graph branches in some other way, each of 
> the legs of the independent branches on the same level can run in 
> parallel:
>
>                    m i x e r
>                  left     right
>                  /         \
>                 /           \
>                /             \
>           left reverb    right reverb
>               |               |
>              eq 1           eq 2
>                 \            /
>                  \          /
>                   \        /
>                    \      /
>                    m i x e r
>
> In this case the left reverb-EQ leg can run in parallel with the right 
> reverb-EQ leg (as long as the mixers run before and after).
>
> Furthermore, with such a design, one can dynamically edit the graph while 
> it is running (this is similar to what ChucK does).
>
> There is much more that can be said about this. Conceptually, the score 
> can become an instrument with pfield outputs that connect to instrument 
> pfield inputs.
>
> Regards,
> Mike
>
> -----Original Message-----
>>From: Eduardo Moguillansky 
>>Sent: Jan 18, 2008 12:52 PM
>>To: csound@lists.bath.ac.uk
>>Subject: [Csnd] Re: Re:  python language proxy
>>
>>
>>jpff@cs.bath.ac.uk wrote:
>>>>  is there any way to add instrs/opcodes on the fly?
>>>>
>>>
>>> Simple answer; no
>>> Complex answer, we really want it but so far noone has had the time
>>> to do it.  Stephen Yi and I had a good brain storm about this at Linux
>>> Audio Conference last year.  What some space or other......
>>>
>>I see. It would also be helpful to envisage a way of defining
>>instruments which is not bound to a certain evaluation order and allow
>>this to be triggered in the score.
>>That would make code more flexible.
>>
>>-- Eduardo
>>
>>
>>Send bugs reports to this list.
>>To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe 
>>csound"
>
>
>
>
>
> Send bugs reports to this list.
> To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe 
> csound"