/usr/share/SuperCollider/HelpSource/Classes/ProxyMixer.schelp is in supercollider-common 1:3.8.0~repack-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | class:: ProxyMixer
summary:: mix control for a proxyspace or Ndef.all
categories:: Libraries>JITLib>GUI, Live Coding
related:: Classes/ProxySpace, Classes/Ndef, Classes/JITGui, Classes/NdefGui, Classes/MonitorGui, Classes/NdefParamGui
description::
ProxyMixer provides controls for handling and editing the node proxies in a proxyspace and their monitors (cross-platform graphics). It replaces the earlier ProxyMixer class. For Ndefs, use link::Classes/NdefMixer::.
Overview: link::Overviews/JITLib::
code::
// First examples:
(
p = ProxySpace.push(s.boot, p);
"abcde".do { |k| p[k.asSymbol].ar };
m = ProxyMixer(p, 8);
n.parent.alwaysOnTop_(true); // show mixer in front of IDE
)
p.do(_.play(0));
m.object_(nil);
m.object_(p);
// if you have JITLibExtensions installed, try ProxyMeter to see the proxy levels:
if (\ProxyMeter.asClass.notNil) { ProxyMeter.addMixer(m); };
"abcdefghijk".do { |k| p[k.asSymbol].ar };
"lmnopqrtuvw".do { |k| p[k.asSymbol].kr };
"abcdefghijk".do { |k, i|
p[k.asSymbol].playN(vol: 0.8 - (0.1 * i) );
p[k.asSymbol].source = {
VarSaw.ar((i + 1 * 100) + [-1, 1])
* LFSaw.ar((i + 1 * 0.25));
};
};
::
ClassMethods::
subsection::Creation
method::new
argument::obj
the proxyspace to show and control
argument::numItems
how many ar and kr proxies can be shown
argument::parent
by default nil, so a window is made automatically. if a parent is supplied, the ProxyMixer will be shown there.
argument::bounds
window bounds - default is nil, so it determines it size.
argument::makeSkip
a flag whether to make make a skipjack
argument::options
additional settings - currently none provided.
method::small
like *new, but creates a proxyMixer for small screen sizes.
InstanceMethods::
subsection::Instance variables
strong::GUI areas and elements: ::
method::arZone, krZone, editZone, arGuis, krGuis, editGui, arScroller, krScroller
strong::current state and access methods: ::
method::proxyspace, existingProxies, activeProxies, playingProxies, selectedKeys, arNames, krNames, numArs, numKrs, atAr, atKr
subsection::Instance methods
method:: highlight, unhighlight
highlight and unhighlight an arGui slot in the arZone (left)
method:: highlightSlots
highlight a block of the arGuis in the arZone/
method::sizes, switchSize
switch between display modes 0: ar, 1: ar+kr, 2: ar+kr+ed
method::arKeysRotation, krKeysRotation
if too many proxies are present, by how much to rotate arKeys or krKeys to display.
method:: title
get the proxymixer window title.
method:: getNameLeftBorder, setNameLeftBorder, shiftNameLeftBorder
trade nameView size and volume slider size:
code::
m.getNameLeftBorder; // get its current left border position
m.setNameLeftBorder(250); // default
m.setNameLeftBorder(200); // aps left pos, smaller slider
// relative adjust:
m.shiftNameLeftBorder(10);
m.shiftNameLeftBorder(-10);
strong::standard JITGui methods: ::
method:: setDefaults, accepts, getState, checkUpdate
strong::internal - making the ProxyMixer gui elements: ::
method:: makeViews, makeTopLine, makeArZone, makeKrZone, makeEditZone, setEdButs
Examples::
code::
// make a proxyspace and 5 ar proxies, and a mixer to show them
(
p = ProxySpace.push(s.boot, p);
"abcde".do { |k| p[k.asSymbol].ar };
m = ProxyMixer(p, 8);
p.do(_.play(0));
)
m.object_(nil); // no object
m.object_(p); // the proxyspace
// if you have JITLibExtensions installed, try ProxyMeter to see the proxy levels:
if (\ProxyMeter.asClass.notNil) { ProxyMeter.addMixer(m); };
// make too many ar proxies, get a scroller
"abcdefghijk".do { |k| p[k.asSymbol].ar };
// make too many kr proxies, get a scroller
"lmnopqrtuvw".do { |k| p[k.asSymbol].kr };
p.stop;
// play some of them
m.arNames.scramble.keep(5).do { |k| p[k.asSymbol].playN };
// the top left menu sets which proxies will be shown.
// existingProxies: even an empty proxy is shown
~test.ar;
( // activeProxies: proxy appears when it is alive
~test = { |freq=250, intv=19, timescale=1, curve=0, loopnode=0|
var env = EnvGen.kr(
Env({ 1.0.rand2 }!11, {1.0.rand}!10, curve, releaseNode: 9, loopNode: loopnode),
timeScale: timescale);
var pitch = (env * [1, 0.33, -1] * intv).midiratio * freq;
Splay.ar(Formant.ar(pitch, pitch.scramble * 2, pitch.scramble)) * 0.1;
};
)
~test.lag(\freq, 4);
// playingProxies : only those that really play are shown.
~test.playN(vol: 1);
// switch back to active proxies...
// the reduce button removes all proxies that are not playing
// and that are not used as sources in other proxies:
~otto = { |dens=12| Dust.ar(dens) };
~otto.clear; // remove it
p.reduce;
// doc and docSel post the current proxyspace as code
p.document;
// ProxyMixer has three preset widths:
m.switchSize(0); // ar zone only
m.switchSize(1); // ar + kr
m.switchSize(2); // ar + kr + edit zone
// try with a small ProxyMixer:
l = ProxyMixer.small(p, 8);
l.switchSize(0, true); // ar zone only
l.switchSize(1, true); // ar + kr
l.switchSize(2, true); // ar + edit zone
// Record opens a utility window, RecordProxyMixer.
// this requires the JITLibExtensions quark.
// the line of controls for one proxy and its monitor is
// a ProxyMonitorGui, so for full details see ProxyMonitorGui.help.
// it displays current volume,
~test.vol_(0.05);
~test.vol_(0.1);
// proxy name; play/stop/end control:
~test.playN; // playN as is
~test.stop; // stop
~test.end; // option-click on stop : end the monitor and the proxy itself.
~test.playN(vol: 0); // option-click on play : start playing with volume zero.
~test.playNDialog; // shift-click on play/stop: set multichan outputs from code
s.scope(8);
~test.playN(4); // set proxy's first output channel:
~test.playN(0);
// One can move the border between sliders and nameView:
n.enableNameResize(true); // try click and dragging that border now
n.setNameLeftBorder(200); // or set by code
// paus/rsum toggles pause and resume:
~test.pause;
~test.resume;
// send button resends the proxy,
// option-click on send rebuilds the proxy
// (e.g. for lookup in client-site state)
~test.send;
~test.send;
~test.rebuild;
~test.rebuild;
// the ed button sends this proxy to the editor - see below
// kr proxies show up in the middle
~lfo = { SinOsc.kr(2) };
~lfnoyz0 = { |lofreq = 0.5, mul=1, add| LFDNoise0.kr(lofreq, mul, add) };
// the editor zone is a NodeProxyEditor
// open it and set some params
m.switchSize(2);
m.editGui.object_(~test);
~test.set(\freq, exprand(80, 1250)); // set ~tests parameters
~test.set(\intv, 1.0.linrand);
// if you declare global specs for the range of a parameter,
// they can be used in the editor:
m.editGui.paramGui.specs.clear;
Spec.add(\intv, [0, 36, \lin]);
Spec.add(\timescale, [0.001, 10, \exp]);
Spec.add(\loopnode, [0, 7, \lin, 1]);
Spec.add(\curve, [-10, 10]);
m.editGui.object_(~test);
// you can map a kr proxy to a control param;
~test.map(\intv, ~lfnoyz0);
~test.unmap(\intv);
// this also works by dragging the kr proxy name
// the field left of the param name.
p.reduce(method: \clear);
p.clean;
p.clear;
::
|