/**
+ * 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;
LXTransition[] transitions;
LXEffect[] effects;
OverlayUI ui;
-int activeTransitionIndex = 0;
+
+boolean debugMode = false;
void setup() {
startMillis = lastMillis = millis();
// 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
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");
}
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;
}
}