Compare commits
10 Commits
902fb33599
...
2df49cdac8
Author | SHA1 | Date |
---|---|---|
Mike Lynch | 2df49cdac8 | |
Mike Lynch | 464412494a | |
Mike Lynch | 61130aa239 | |
Mike Lynch | 4849ff7a68 | |
Mike Lynch | e272a34dfe | |
Mike Lynch | 5d3dd866eb | |
Mike Lynch | 95a32d81c7 | |
Mike Lynch | 2350e9cf6b | |
Mike Lynch | 94be9f50f7 | |
Mike Lynch | 2cfe624ff7 |
|
@ -1,19 +1,71 @@
|
||||||
// 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 <>ip, <>port;
|
var <net, <controls;
|
||||||
|
|
||||||
*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 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,138 @@
|
||||||
|
|
||||||
|
|
||||||
|
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