Compare commits
No commits in common. "2df49cdac806fdfe30fa2f47e3373685553a87dd" and "902fb3359955418fec52fef2eab9d40db4f0c212" have entirely different histories.
2df49cdac8
...
902fb33599
|
@ -1,71 +1,19 @@
|
||||||
// Class for binding to a TouchOSC interface
|
// Class for binding to a TouchOSC interface
|
||||||
|
//
|
||||||
|
// I don't feel well enough to actually code this today so here are some notes.
|
||||||
|
// - bind a /url to a function
|
||||||
|
// - provide builtins for linear and exponential controls
|
||||||
|
// - provide builtins for X-Y and modal/radio buttons
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
TouchOSC {
|
TouchOSC {
|
||||||
var <net, <controls;
|
var <>ip, <>port;
|
||||||
|
|
||||||
*new { | ip, port |
|
*new { | ip, port |
|
||||||
^super.new.init(ip, port)
|
^super.new.init(ip, port)
|
||||||
}
|
}
|
||||||
|
|
||||||
init { | ip, port |
|
|
||||||
net = NetAddr(ip, port);
|
|
||||||
controls = Dictionary();
|
|
||||||
}
|
|
||||||
|
|
||||||
send { | url ... oargs |
|
|
||||||
net.sendMsg(url, *oargs)
|
|
||||||
}
|
|
||||||
|
|
||||||
label { | url, default |
|
|
||||||
var ctrl = TouchOSCLabel(this, url, default);
|
|
||||||
ctrl.init();
|
|
||||||
controls.put(url, ctrl);
|
|
||||||
^ctrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
button { | url, default, apply |
|
|
||||||
var ctrl = TouchOSCControl(this, url, apply, default);
|
|
||||||
ctrl.init();
|
|
||||||
controls.put(url, ctrl);
|
|
||||||
^ctrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
slider { | url, default, scale, apply |
|
|
||||||
var ctrl = TouchOSCControlScale(this, url, apply, default, scale);
|
|
||||||
ctrl.init();
|
|
||||||
controls.put(url, ctrl);
|
|
||||||
^ctrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
xy { | url, default, scale1, scale2, apply |
|
|
||||||
var ctrl = TouchOSCControlXY(this, url, apply, default, scale1, scale2);
|
|
||||||
ctrl.init();
|
|
||||||
controls.put(url, ctrl);
|
|
||||||
^ctrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
v { | url |
|
|
||||||
^if( controls.at(url).isNil.not,
|
|
||||||
{ controls.at(url).value },
|
|
||||||
{ ("v: No control with url" + url).postln }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
v_ { | url, v |
|
|
||||||
^if( controls.at(url).isNil.not,
|
|
||||||
{ controls.at(url).value_(v) },
|
|
||||||
{ ("v_: No control with url" + url).postln }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
s_ { | url, v |
|
|
||||||
^if( controls.at(url).isNil.not,
|
|
||||||
{ controls.at(url).send_(v) },
|
|
||||||
{ ("s_: No control with url" + url).postln }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,138 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
TouchOSCControl {
|
|
||||||
var <touchOSC, <url, apply, <value;
|
|
||||||
|
|
||||||
*new { | touchOSC, url, apply, value |
|
|
||||||
^super.newCopyArgs(touchOSC, url, apply, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
OSCdef.new(
|
|
||||||
'osc' ++ url,
|
|
||||||
{ | msg, time |
|
|
||||||
value = msg[1];
|
|
||||||
apply.value(value, time)
|
|
||||||
},
|
|
||||||
url
|
|
||||||
);
|
|
||||||
apply.value(value, 0);
|
|
||||||
this.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
value_ { |newval|
|
|
||||||
value = newval;
|
|
||||||
apply.value(value, 0);
|
|
||||||
this.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
send {
|
|
||||||
touchOSC.send(url, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
send_ { |newval|
|
|
||||||
value = newval;
|
|
||||||
this.send();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TouchOSCControlScale : TouchOSCControl {
|
|
||||||
var scale;
|
|
||||||
|
|
||||||
*new { | touchOSC, url, apply, value, scale |
|
|
||||||
^super.newCopyArgs(touchOSC, url, apply, value, scale)
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
OSCdef.new(
|
|
||||||
'osc' ++ url,
|
|
||||||
{ | msg, time |
|
|
||||||
value = scale.tovalue(msg[1]);
|
|
||||||
apply.value(value, time);
|
|
||||||
},
|
|
||||||
url
|
|
||||||
);
|
|
||||||
apply.value(value, 0);
|
|
||||||
this.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
send {
|
|
||||||
touchOSC.send(url, scale.toctrl(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
TouchOSCControlXY : TouchOSCControl {
|
|
||||||
var scale1, scale2;
|
|
||||||
|
|
||||||
*new { | touchOSC, url, apply, value, scale1, scale2 |
|
|
||||||
^super.newCopyArgs(touchOSC, url, apply, value, scale1, scale2)
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
OSCdef.new(
|
|
||||||
'osc' ++ url,
|
|
||||||
{ | msg, time |
|
|
||||||
value[0] = scale1.tovalue(msg[1]);
|
|
||||||
value[1] = scale2.tovalue(msg[2]);
|
|
||||||
apply.value(value, time);
|
|
||||||
},
|
|
||||||
url
|
|
||||||
);
|
|
||||||
apply.value(value, 0);
|
|
||||||
this.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
send {
|
|
||||||
touchOSC.send(url, scale1.toctrl(value[0]), scale2.toctrl(value[1]));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TouchOSCLabel {
|
|
||||||
var <touchOSC, <url, <value;
|
|
||||||
|
|
||||||
*new { | touchOSC, url, value |
|
|
||||||
^super.newCopyArgs(touchOSC, url, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
this.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
value_ { |newval|
|
|
||||||
value = newval;
|
|
||||||
this.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
send {
|
|
||||||
touchOSC.send(url, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TouchOSCScale {
|
|
||||||
var <min, <max;
|
|
||||||
|
|
||||||
*new { | min, max |
|
|
||||||
^super.newCopyArgs(min, max)
|
|
||||||
}
|
|
||||||
|
|
||||||
tovalue { | c | ^c.linlin(0, 1, min, max) }
|
|
||||||
|
|
||||||
toctrl { | v | ^v.linlin(min, max, 0, 1) }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo - better validation so that you can't set min as 0
|
|
||||||
|
|
||||||
TouchOSCScaleExp : TouchOSCScale {
|
|
||||||
|
|
||||||
tovalue { | c | ^c.linexp(0, 1, min, max) }
|
|
||||||
|
|
||||||
toctrl { | v | ^v.explin(min, max, 0, 1) }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue