Respond to tempo
authorEugene Petkevich <nasedil.genio.code@gmail.com>
Thu, 2 Jun 2022 16:59:41 +0000 (19:59 +0300)
committerEugene Petkevich <nasedil.genio.code@gmail.com>
Thu, 2 Jun 2022 16:59:41 +0000 (19:59 +0300)
extensions/classes/midiremotesl.sc

index 12ea5c2..9e21a5e 100644 (file)
 // 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);
@@ -46,9 +50,22 @@ MidiRemote25SL : MidiHandler {
       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);
@@ -59,7 +76,7 @@ MidiRemote25SL : MidiHandler {
 
   free {
     [
-      \keyDown, \keyUp, \bend, \mod, \touch
+      \keyDown, \keyUp, \bend, \mod, \touch, \tempo
     ].do{|prefix|
       var defName = (prefix ++ name).asSymbol;
       MIDIdef(defName).free;