APC40 is mapped, update UI to reflect that and use GLucose internals
[SugarCubes.git] / _Internals.pde
index d040f119426b9a9095b09fa75b4dc14d55cb17ed..46c39390dcf93ac1dfe29deaee243eba0c36efa5 100644 (file)
@@ -1,4 +1,13 @@
 /**
+ *     DOUBLE BLACK DIAMOND        DOUBLE BLACK DIAMOND
+ *
+ *         //\\   //\\                 //\\   //\\  
+ *        ///\\\ ///\\\               ///\\\ ///\\\
+ *        \\\/// \\\///               \\\/// \\\///
+ *         \\//   \\//                 \\//   \\//
+ *
+ *        EXPERTS ONLY!!              EXPERTS ONLY!!
+ *
  * If you are an artist, you may ignore this file! It just sets
  * up the framework to run the patterns. Should not need modification
  * for general animation work.
 
 import glucose.*;
 import glucose.control.*;
+import glucose.effect.*;
+import glucose.model.*;
 import glucose.pattern.*;
+import glucose.transform.*;
 import glucose.transition.*;
-import glucose.model.*;
 import heronarts.lx.*;
+import heronarts.lx.control.*;
 import heronarts.lx.effect.*;
-import heronarts.lx.pattern.*;
 import heronarts.lx.modulator.*;
+import heronarts.lx.pattern.*;
 import heronarts.lx.transition.*;
 import ddf.minim.*;
 import ddf.minim.analysis.*;
 import processing.opengl.*;
 import java.lang.reflect.*;
+import rwmidi.*;
 
 final int VIEWPORT_WIDTH = 900;
 final int VIEWPORT_HEIGHT = 700;
@@ -30,7 +43,8 @@ LXPattern[] patterns;
 LXTransition[] transitions;
 LXEffect[] effects;
 OverlayUI ui;
-int activeTransitionIndex = 0;
+
+boolean debugMode = false;
 
 void setup() {
   startMillis = lastMillis = millis();
@@ -38,12 +52,14 @@ void setup() {
   // Initialize the Processing graphics environment
   size(VIEWPORT_WIDTH, VIEWPORT_HEIGHT, OPENGL);
   frameRate(TARGET_FRAMERATE);
+  noSmooth();
   // hint(ENABLE_OPENGL_4X_SMOOTH); // no discernable improvement?
   logTime("Created viewport");
 
   // Create the GLucose engine to run the cubes
-  glucose = new GLucose(this);
+  glucose = new GLucose(this, new SCMapping());
   lx = glucose.lx;
+  lx.enableKeyboardTempo();
   logTime("Built GLucose engine");
   
   // Set the patterns
@@ -51,20 +67,41 @@ void setup() {
   logTime("Built patterns");
   glucose.lx.addEffects(effects = effects(glucose));
   logTime("Built effects");
-  transitions = transitions(glucose);
+  glucose.setTransitions(transitions = transitions(glucose));
   logTime("Built transitions");
   
   // Build overlay UI
   ui = new OverlayUI();
   logTime("Built overlay UI");
-  
+    
   // MIDI devices
-  MidiKnobController.initializeStandardDevices(glucose);
-  logTime("Setup MIDI controllers");
+  for (MidiInputDevice d : RWMidi.getInputDevices()) {
+    d.createInput(this);
+  }
+  SCMidiDevices.initializeStandardDevices(glucose);
+  logTime("Setup MIDI devices");
   
   println("Total setup: " + (millis() - startMillis) + "ms");
 }
 
+void controllerChangeReceived(rwmidi.Controller cc) {
+  if (debugMode) {
+    println("CC: " + cc.toString());
+  }
+}
+
+void noteOnReceived(Note note) {
+  if (debugMode) {
+    println("Note On: " + note.toString());
+  }
+}
+
+void noteOffReceived(Note note) {
+  if (debugMode) {
+    println("Note Off: " + note.toString());
+  }
+}
+
 void logTime(String evt) {
   int now = millis();
   println(evt + ": " + (now - lastMillis) + "ms");
@@ -86,9 +123,16 @@ void drawUI() {
 }
 
 boolean uiOn = true;
+boolean knobsOn = true;
 void keyPressed() {
-  if (key == 'u') {
-    uiOn = !uiOn;
+  switch (key) {
+    case 'd':
+      debugMode = !debugMode;
+      println("Debug output: " + (debugMode ? "ON" : "OFF"));
+      break;
+    case 'u':
+      uiOn = !uiOn;
+      break;
   }
 }