Add midi logging toggle
[SugarCubes.git] / MarkSlee.pde
index adc86d078e298deedf1c8ba2875676a7671cbbff..5d08a8600c805c7d5aeee90333a77a62769cf144 100644 (file)
@@ -28,7 +28,7 @@ class SpaceTime extends SCPattern {
     }
   }
 
-  void run(int deltaMs) {    
+  void run(double deltaMs) {    
     angle += deltaMs * 0.0007;
     float sVal1 = model.strips.size() * (0.5 + 0.5*sin(angle));
     float sVal2 = model.strips.size() * (0.5 + 0.5*cos(angle));
@@ -84,7 +84,7 @@ class Swarm extends SCPattern {
     }
   }
 
-  void run(int deltaMs) {
+  void run(double deltaMs) {
     float s = 0;
     for (Strip strip : model.strips  ) {
       int i = 0;
@@ -93,7 +93,7 @@ class Swarm extends SCPattern {
         colors[p.index] = color(
         (lx.getBaseHuef() + 0.3 * abs(p.fx - hOffX.getValuef())) % 360, 
         constrain(80 + 40 * fV, 0, 100), 
-        constrain(100 - (30 - fV * falloff.getValuef()) * modDist(i + (s*63)%61, (int) (offset.getValuef() * strip.metrics.numPoints), strip.metrics.numPoints), 0, 100)
+        constrain(100 - (30 - fV * falloff.getValuef()) * modDist(i + (s*63)%61, offset.getValuef() * strip.metrics.numPoints, strip.metrics.numPoints), 0, 100)
           );
         ++i;
       }
@@ -128,6 +128,84 @@ class SwipeTransition extends SCTransition {
   }
 }
 
+abstract class BlendTransition extends SCTransition {
+  
+  final int blendType;
+  
+  BlendTransition(GLucose glucose, int blendType) {
+    super(glucose);
+    this.blendType = blendType;
+  }
+
+  void computeBlend(int[] c1, int[] c2, double progress) {
+    if (progress < 0.5) {
+      for (int i = 0; i < c1.length; ++i) {
+        colors[i] = lerpColor(
+          c1[i],
+          blendColor(c1[i], c2[i], blendType),
+          (float) (2.*progress),
+          RGB);
+      }
+    } else {
+      for (int i = 0; i < c1.length; ++i) {
+        colors[i] = lerpColor(
+          c2[i],
+          blendColor(c1[i], c2[i], blendType),
+          (float) (2.*(1. - progress)),
+          RGB);
+      }
+    }
+  }
+}
+
+class MultiplyTransition extends BlendTransition {
+  MultiplyTransition(GLucose glucose) {
+    super(glucose, MULTIPLY);
+  }
+}
+
+class ScreenTransition extends BlendTransition {
+  ScreenTransition(GLucose glucose) {
+    super(glucose, SCREEN);
+  }
+}
+
+class BurnTransition extends BlendTransition {
+  BurnTransition(GLucose glucose) {
+    super(glucose, BURN);
+  }
+}
+
+class DodgeTransition extends BlendTransition {
+  DodgeTransition(GLucose glucose) {
+    super(glucose, DODGE);
+  }
+}
+
+class OverlayTransition extends BlendTransition {
+  OverlayTransition(GLucose glucose) {
+    super(glucose, OVERLAY);
+  }
+}
+
+class AddTransition extends BlendTransition {
+  AddTransition(GLucose glucose) {
+    super(glucose, ADD);
+  }
+}
+
+class SubtractTransition extends BlendTransition {
+  SubtractTransition(GLucose glucose) {
+    super(glucose, SUBTRACT);
+  }
+}
+
+class SoftLightTransition extends BlendTransition {
+  SoftLightTransition(GLucose glucose) {
+    super(glucose, SOFT_LIGHT);
+  }
+}
+
 class BassPod extends SCPattern {
 
   private GraphicEQ eq = null;
@@ -148,7 +226,7 @@ class BassPod extends SCPattern {
     }
   }
 
-  public void run(int deltaMs) {
+  public void run(double deltaMs) {
     eq.run(deltaMs);
     
     float bassLevel = eq.getAverageLevel(0, 5);
@@ -198,7 +276,7 @@ class CubeEQ extends SCPattern {
     }
   }
 
-  public void run(int deltaMs) {
+  public void run(double deltaMs) {
     eq.run(deltaMs);
 
     float edgeConst = 2 + 30*edge.getValuef();
@@ -313,11 +391,7 @@ public class PianoKeyPattern extends SCPattern {
   
   PianoKeyPattern(GLucose glucose) {
     super(glucose);
-    
-    for (MidiInputDevice input : RWMidi.getInputDevices()) {
-      input.createInput(this);
-    }
-    
+        
     addParameter(attack);
     addParameter(release);
     addParameter(level);
@@ -356,7 +430,7 @@ public class PianoKeyPattern extends SCPattern {
     getEnvelope(note.getPitch()).setEndVal(0, getReleaseTime()).start();
   }
   
-  public void run(int deltaMs) {
+  public void run(double deltaMs) {
     int i = 0;
     float huef = lx.getBaseHuef();
     float levelf = level.getValuef();
@@ -426,7 +500,7 @@ class CrossSections extends SCPattern {
     zv = z.getValuef();    
   }
 
-  public void run(int deltaMs) {
+  public void run(double deltaMs) {
     updateXYZVals();
     
     float xlv = 100*xl.getValuef();
@@ -478,7 +552,7 @@ class Blinders extends SCPattern {
     s.modulateDurationBy(r);
   }
 
-  public void run(int deltaMs) {
+  public void run(double deltaMs) {
     float hv = lx.getBaseHuef();
     int si = 0;
     for (Strip strip : model.strips) {
@@ -513,7 +587,7 @@ class Psychedelia extends SCPattern {
     addModulator(c).trigger();
   }
 
-  void run(int deltaMs) {
+  void run(double deltaMs) {
     float huev = h.getValuef();
     float cv = c.getValuef();
     float sv = s.getValuef();
@@ -549,7 +623,7 @@ class AskewPlanes extends SCPattern {
       addModulator(c = new SinLFO(-50, 50, 4000 + 1000*i * ((i % 2 == 0) ? 1 : -1))).trigger();      
     }
     
-    void run(int deltaMs) {
+    void run(double deltaMs) {
       av = a.getValuef();
       bv = b.getValuef();
       cv = c.getValuef();
@@ -568,7 +642,7 @@ class AskewPlanes extends SCPattern {
     }
   }
   
-  public void run(int deltaMs) {
+  public void run(double deltaMs) {
     float huev = lx.getBaseHuef();
     
     // This is super fucking bizarre. But if this is a for loop, the framerate
@@ -613,7 +687,7 @@ class ShiftingPlane extends SCPattern {
     addModulator(d).trigger();    
   }
   
-  public void run(int deltaMs) {
+  public void run(double deltaMs) {
     float hv = lx.getBaseHuef();
     float av = a.getValuef();
     float bv = b.getValuef();
@@ -669,7 +743,7 @@ class Traktor extends SCPattern {
 
   int counter = 0;
   
-  public void run(int deltaMs) {
+  public void run(double deltaMs) {
     eq.run(deltaMs);
     
     int stepThresh = (int) (40 - 39*speed.getValuef());