ProxyChainGui a gui for ProxyChain

see also: ProxyChain

// prepare for making a proxy chain

(

ProxyChain.add(

\dust, \mix -> { |dens=20, dustdec=0.02, dustfreq= 600|

Ringz.ar(Dust.ar(dens).lag(0.0001), dustfreq, dustdec)

}

);

ProxyChain.add(

\ringmod, \filter -> { |in, randrate=5|

in.asArray[0] // force mono inputs

* SinOsc.ar(LFNoise0.kr([randrate, randrate]).exprange(300, 3000)).sum

},

\dist, \filter -> { |in, drive=10, amp=0.2| (in.asArray[0] * drive).clip2(0.5) * amp }

);

// add specs for the controls used (for NodeProxyEditor).

Spec.add(\dens, [0.1, 1000, \exp]);

Spec.add(\dustamp, [0, 1, \amp]);

Spec.add(\dustdec, [0.0001, 0.1, \exp]);

Spec.add(\dustfreq, \freq);

c = ProxyChain(q.numChans, [\dust, \ringmod, \dist, \riseComb5 ]);

s.boot;

)

*new(chain, name, buttonList, nSliders)

chain the proxychain to show

name the name the window will have

buttonList which buttons should be created.

by default, buttonList nil is replaced with control buttons for all the slots.

if given, buttonList is in pairs of [label, type], where type can be

\slotCtl for a slot name,

\label for a label,

\extra for a button with a user-defined function.

ProxyChainGui.new(c, \PxChain, nil, 12);

// define buttons more specifically

(

g = c.gui(\PxChain,

[

[ \generators, \label ], // a label only

[ \dust, \slotCtl, 0.25 ], // a control for a slot, and initial volume

[ 'mono FX', \label ],

[ \ringmod, \slotCtl, 0.5 ], // initial mix level

[ \dist, \slotCtl ],

[ 'multichan', \label ],

[ \riseComb5, \slotCtl ], // off (0) by default.

[],

// extras:

// e.g. an editor with more space for controls

[\phatEdit, \extra, { c.makeEdit('Test', 40) } ],

// or maybe bigger buttons play, end buttons

[\play, \extra, { c.playN } ],

[\end, \extra, { c.end } ],

],

16

)

)