scide: implement selectionLength for openDocument
[supercollider.git] / HelpSource / Classes / ProxyMixerOld.schelp
blobe7b64a147e7de900cefc4cecac1d3e537e1a2d1a
1 class:: ProxyMixerOld
2 summary:: mix control for a proxyspace
3 categories:: Libraries>JITLib>GUI
4 related:: Classes/ProxySpace, Classes/NodeProxyEditor
6 description::
8 warning::
9 ProxyMixer has been updated - some little adaptations to existing uses may be needed. If you like, you can also replace "ProxyMixer" with "ProxyMixerOld" to keep using the old style of ProxyMixer.
12 ProxyMixer provides controls for handling and editing the node proxies in a proxyspace and their monitors (cross-platform graphics).
14 Overview: link::Overviews/JITLib::
16 ClassMethods::
18 private::initClass
20 subsection::Creation
22 method::new
24 argument::proxyspace
25 a link::Classes/ProxySpace::
27 argument::nProxies
28 the maximum number of proxies you plan to use
30 argument::title
31 window title
33 argument::where
34 window bounds
36 Examples::
38 code::
39 p = ProxySpace.push(s.boot, \p);
40 m = ProxyMixer(p, 8, \p, Rect(20, 500, 0,0));
42 m = ProxyMixer(p, 8)
44         // the top left menu sets which proxies will be shown.
46                 // existingProxies: even an empty proxy is shown
47 ~test.ar;
49 (               // activeProxies: proxy appears when it is alive
50 ~test = { |freq=250, intv=19, timescale=1, curve=0, loopnode=0|
51         var env = EnvGen.kr(
52                 Env({ 1.0.rand2 }!11, {1.0.rand}!10, curve, releaseNode: 9, loopNode: loopnode),
53                 timeScale: timescale);
54         var pitch = (env * [1, 0.33, -1] * intv).midiratio * freq;
55         Splay.ar(Formant.ar(pitch, pitch.scramble * 2, pitch.scramble)) * 0.1;
58 ~test.lag(\freq, 4);
60                 // playingProxies : only those that really play are shown.
61 ~test.playN(vol: 1);
63 // switch back to active proxies...
65                 // the reduce button removes all proxies that are not playing
66                 // and that are not used as sources in other proxies:
67 ~otto = { |dens=12| Dust.ar(dens) };
69 ~otto.clear;            // remove it
70 p.reduce;
72                 // doc and docc post the current proxyspace as code
73 p.document;
75                 // openEdit opens the editor zone, see below;
76 m.openEditZone(1);
78                 // R opens a Record utility, see below.
80         // the line of controls for one proxy and its monitor is
81         // a ProxyMonitorGui, so for full details see ProxyMonitorGui.help.
83         // it displays current volume,
84 ~test.vol_(0.05);
85 ~test.vol_(0.1);
87         // proxy name; play/stop/end control:
88 ~test.playN;            // playN as is
89 ~test.stop;             // stop
90 ~test.end;              // option-click on stop : end the monitor and the proxy itself.
91 ~test.playN(vol: 0);    // option-click on play : start playing with volume zero.
93 ~test.vol_(0.1);
95 s.scope(8);
96 ~test.playN(4); // set proxy's first output channel:
97 ~test.playN(0);
99         // the "-=" / "-<" button supports multichannel monitoring,
100         // see ProxyMonitorGui.help
102         //      paus/rsum toggles pause and resume:
103 ~test.pause;
104 ~test.resume;
106         // send button resends the proxy,
107         // option-click on send rebuilds the proxy
108         // (e.g. for lookup in client-site state)
109 ~test.send;
110 ~test.send;
111 ~test.send;
112 ~test.rebuild;
113 ~test.rebuild;
114 ~test.rebuild;
117         // the ed button sends this proxy to the editor - see below
119                 // kr proxies show up in the middle
120 ~lfo = { SinOsc.kr(2) };
121 ~lfnoyz0 = { |lofreq, mul=1, add| LFDNoise0.kr(lofreq, mul, add) };
123                 // the editor zone is a NodeProxyEditor
124                 // open it and set some params
125 m.openEditZone(1);
126 m.editor.proxy_(~test);
127 ~test.set(\freq, exprand(80, 1250));    // set ~tests parameters
128 ~test.set(\intv, 1.0.linrand);
130         //      if you declare global specs for the range of a parameter,
131         //      they can be used in the editor:
132 Spec.add(\intv, [0, 36, \lin]);
133 Spec.add(\timescale, [0.001, 10, \exp]);
134 Spec.add(\loopnode, [0, 7, \lin, 1]);
135 Spec.add(\curve, [-10, 10]);
137 m.editor.proxy_(~test);
139                 // you can map a kr proxy to a control param;
140 ~test.map(\intv, ~lfnoyz0);
141 ~test.unmap(\intv);
142                 // this also works by dragging the kr proxy name
143                 // the field left of the param name.
146         //      some more tests :
147         // if there are too many ar proxies, a scroller appears
148 (               // test too many
149 10.do { |i| p[("test" ++ i).asSymbol] = {
150         Pan2.ar(Ringz.ar(Impulse.ar(exprand(0.5, 4)), exprand(300, 3000), 0.02), 1.0.rand2, 0.2) };
154 10.do { |i| p[("test" ++ i).asSymbol].playN(vol: linrand(1.0), fadeTime: exprand(0.01, 5)) };
156         // and the same for kr proxies
157 10.do { |i| p[("kr" ++ i).asSymbol] = { LFNoise0.kr(exprand(5, 50)) }; };
159 p.krProxyNames.do { |key| p.removeAt(key) };
161 p.reduce(method: \clear);
163 p.clean;