// 94, 95 — tempo change selector
MidiRemote25SL : MidiHandler {
+ var <idin2;
var <>key;
var <>bend;
var <>mod;
var <>touch;
+ var <>tempo, bpm=127;
*new {|name='Novation SL25 ReMOTE MKII', midiNames=#["ReMOTE SL", "ReMOTE SL MIDI 1", "ReMOTE SL MIDI 1"], reveal=true|
^super.newCopyArgs(name, midiNames, reveal).midiInit.controlInit;
}
controlInit {
+ idin2 = MIDIClient.sources.detect{|i| i.name == "ReMOTE SL MIDI 2"}.uid;
+
// key pressed/released
MIDIdef.noteOn((\keyDown++name).asSymbol, {|...args|
key.value(true, args[0].linlin(0, 127, 0, 1), args[1], *args);
touch.value(args[0].linlin(0, 127, 0, 1), *args);
}, srcID: idin);
+ // tempo
+ MIDIdef.cc((\tempo++name).asSymbol, {|...args|
+ switch (args[1],
+ 94, {
+ bpm = 128 * args[0];
+ },
+ 95, {
+ bpm = bpm + args[0];
+ tempo.value(bpm, *args);
+ }
+ );
+ }, [94, 95], srcID: idin2);
+
// initialize handlers with revealing code
[
- \key, \bend, \mod, \touch
+ \key, \bend, \mod, \touch, \tempo,
].do{|handlerName|
this.perform((handlerName++\_).asSymbol, {|...args|
this.noCallback(handlerName, *args);
free {
[
- \keyDown, \keyUp, \bend, \mod, \touch
+ \keyDown, \keyUp, \bend, \mod, \touch, \tempo
].do{|prefix|
var defName = (prefix ++ name).asSymbol;
MIDIdef(defName).free;