Add ry to strip model
[SugarCubes.git] / _MIDI.pde
index d2fb69bd8d9d95d753a08d0fd4ed24883d9db659..e26050f20c42fc12ec39e25e9bfc645abb7afc73 100644 (file)
--- a/_MIDI.pde
+++ b/_MIDI.pde
@@ -50,7 +50,7 @@ class MidiEngine {
       } else if (device.getName().contains("SLIDER/KNOB KORG")) {
         midiControllers.add(new KorgNanoKontrolMidiInput(device).setEnabled(true));
       } else {
-        boolean enabled = device.getName().contains("KEYBOARD KORG");
+        boolean enabled = device.getName().contains("KEYBOARD KORG") || device.getName().contains("Bus 1 Apple");
         midiControllers.add(new SCMidiInput(device).setEnabled(enabled));
       }
     }
@@ -349,14 +349,31 @@ public class APC40MidiInput extends SCMidiInput {
     }
   }
 
+  
+
+       private double Tap1 = 0;
+       private double  getNow() { return millis() + 1000*second() + 60*1000*minute() + 3600*1000*hour(); }
+       private boolean dbtwn   (double         a,double b,double       c)              { return a >= b && a <= c;      }
+
   protected void handleNoteOn(Note note) {
-    switch (note.getPitch()) {
+       int nPitch = note.getPitch(), nChan = note.getChannel();
+    switch (nPitch) {
+               
+       case 82:        EFF_boom        .trigger();                             break;  // BOOM!
+       case 83:        EFF_flash       .trigger();                             break;  // Flash
+               
+       case 90:        lx.tempo.trigger(); Tap1 = getNow();    break;  // dan's dirty tapping mechanism
+
+    case 91: // play
+    case 95: // bank
+      midiEngine.setFocusedDeck(0);
+      break;
+
+    case 93: // rec
     case 94: // right bank
       midiEngine.setFocusedDeck(1);
       break;
-    case 95: // left bank
-      midiEngine.setFocusedDeck(0);
-      break;
+
     case 96: // up bank
       if (shiftOn) {
         glucose.incrementSelectedEffectBy(1);
@@ -386,8 +403,7 @@ public class APC40MidiInput extends SCMidiInput {
       lx.tempo.setBpm(lx.tempo.bpm() - (shiftOn ? 1 : .1));
       break;
 
-    case 91: // play
-    case 93: // rec
+    case 62: // Detail View
       releaseEffect = glucose.getSelectedEffect(); 
       if (releaseEffect.isMomentary()) {
         releaseEffect.enable();
@@ -396,22 +412,33 @@ public class APC40MidiInput extends SCMidiInput {
       }
       break;
 
-    case 92: // stop
+    case 63: // rec quantize
       glucose.getSelectedEffect().disable();
       break;
     }
   }
 
   protected void handleNoteOff(Note note) {
-    switch (note.getPitch()) {
-    case 93: // rec
+       int nPitch = note.getPitch(), nChan = note.getChannel();
+    switch (nPitch) {
+       case 90:
+               if (dbtwn(getNow() - Tap1,5000,300*1000)) {     // hackish tapping mechanism
+                       double bpm = 32.*60000./(getNow()-Tap1);
+                       while (bpm < 20) bpm*=2;
+                       while (bpm > 40) bpm/=2;
+                       lx.tempo.setBpm(bpm); lx.tempo.trigger(); Tap1=0; println("Tap Set - " + bpm + " bpm");
+               }
+               break;
+
+
+    case 63: // rec quantize
       if (releaseEffect != null) {
         if (releaseEffect.isMomentary()) {
           releaseEffect.disable();
         }
       }
       break;
-               
+
     case 98: // shift
       shiftOn = false;
        break;