the lazy proxy

NodeProxy (and BusPlug) uses a lazy evaluation scheme to derive its appropriate

rate and numChannels from the first meaningful input that is assigned to it.

see [NodeProxy] and [ProxySpace] helpfiles for basic info.

So as long as the source is not set, the proxy is neutral:

p = ProxySpace.push;


as soon as the first time the source is set, it derives its bus arguments from that input

~x = { Array.fill(14, {, 0, 100) }) }; //~x is now 14 channels control rate


in order to reset these properties, clear is used:


//note that no other proxy should be reading from ~x when this is done:

//for simplicity nodeproxy currently does not care for its children, only for its parents.

for a quick initialisation, also defineBus can be used:

~x.defineBus(\control, 5);

// or in another way:

the properties are also set when some other proxy reads from it:

~x = { * }; //the first arg to kr / ar is the default number of channels

if no number of channels is passed in, the default value is used:; // 2; // 1

the default can be set in the class NodeProxy:

NodeProxy.defaultNumAudio = 3;

NodeProxy.defaultNumControl = 13;; // 3; // 13

// set them back:

NodeProxy.defaultNumAudio = 2;

NodeProxy.defaultNumControl = 1;

also if a proxy is used as a map source, control rate is assumed:

~u;\zzz, ~u);


when unary or binary operations are performed, the highest rate / numChannels is used

to initialize all uninitialized proxies:


~x.defineBus(\control, 5);

~x = ~e + ~f;

~x.clear; ~e.clear; ~f.clear;

~e.defineBus(\audio, 1);

~x = ~e + ~f.squared + ~r;


~x.clear; ~e.clear; ~f.clear;

~e.defineBus(\audio, 3);

~x = ~e;

if a rate-1 proxy is used as rate-2 input, the rate is converted

and the channels are expanded in the ususal multichannel expansion pattern:



// if the number of channels passed in is less, it only uses the first n channels

~f.defineBus(\audio, 8);;

an offset can be passed in as second argument to ar/kr

//modulate offset:

p = ProxySpace.push(s.boot);;

~src = {, 400, 500.0),, 2.1, 500.0)), 0.1) };

~out = {,, 5)) };

~out = { Mix(,, 5))) }; //the wrapping offset is moved accordingly