{ 10 + 6 * ~harry }.asCompileString;

many objects understand .storeOn, which a way to post their string that is needed

to reproduce them by compilation.

sometimes one wants to store a certain configuration of a proxy space, which can be done

if all functions used are closed functions.

// an example how ProxySpace can document its current state:

p = ProxySpace.push(s);

(

~ctl1 = {

var z = 1;

4.do { |i| z = z * SinOsc.kr(i.sqrt, i+[0,0.2]) };

z

};

~ctl2[0] = { LFNoise2.kr([20,20],20) };

~ctl2[1] = {

LFNoise2.kr([20,20],20) * LFNoise0.kr([20,20],20)

};

~out = {

SinOsc.ar(~freq.kr, 0, 0.1)

};

~freq[0] = { ~ctl1.kr(2) + ~ctl2.kr(2) + 400 };

~freq[5] = ~ctl1.wrap2(~ctl2) * ~ctl1 / (~ctl2 + ~ctl1);

~pat = Pbind(\freq, Pfunc({ 1.2.rand }));

~z = 9;

~out.set(\freq, 760, \ffreq, 20);

)

p.asCompileString;

// the document message creates a new document which it posts the code into

p.document; // document everything

p.document([\out]); // document all dependants of ~out

p.document([\ctl1]); // document all dependants of ~ctl1