New flitters pattern with bouncy stuffs
authorMark Slee <mcslee@Mark-Slees-MacBook-Pro.local>
Wed, 25 Sep 2013 02:23:20 +0000 (19:23 -0700)
committerMark Slee <mcslee@Mark-Slees-MacBook-Pro.local>
Wed, 25 Sep 2013 02:23:20 +0000 (19:23 -0700)
MarkSlee.pde
SugarCubes.pde
_MIDI.pde

index 3a9b530cc4d44ddef86afe6c4e9b6c311a1fe232..55f09227316d7491bb759e6d829d331e951fc795 100644 (file)
@@ -1,3 +1,82 @@
+class Flitters extends SCPattern {
+  
+  static final int NUM_FLITTERS = 6;
+  
+  class Flitter {
+       
+    Accelerator yPos;
+    TriangleLFO xPos = new TriangleLFO(0, model.xMax, random(8000, 19000));
+    
+    Flitter(int i) {
+      addModulator(xPos).setBasis(random(0, TWO_PI)).start();
+      addModulator(yPos = new Accelerator(0, 0, 0));
+    }
+    
+    void bounce(float midiVel) {
+      float v = 100 + 8*midiVel;
+      yPos.setSpeed(v, getAccel(v, 60 / lx.tempo.bpmf())).start();
+    }
+    
+    float getAccel(float v, float oneBeat) {
+      return -2*v / oneBeat;
+    }
+    
+    void run(double deltaMs) {
+      float flrLevel = flr.getValuef() * model.xMax/2.;
+      if (yPos.getValuef() < flrLevel) {
+        if (yPos.getVelocity() < -50) {
+          yPos.setValue(2*flrLevel-yPos.getValuef());
+          float v = -yPos.getVelocityf() * bounce.getValuef();
+          yPos.setSpeed(v, getAccel(v, 60 / lx.tempo.bpmf()));
+        } else {
+          yPos.setValue(flrLevel).stop();
+        }
+      }
+      float falloff = 130.f / (12 + blobSize.getValuef() * 36);
+      for (Point p : model.points) {
+        float d = dist(p.x, p.y, xPos.getValuef(), yPos.getValuef());
+        float b = constrain(130 - falloff*d, 0, 100);
+        if (b > 0) {
+          colors[p.index] = blendColor(colors[p.index], color(
+            (lx.getBaseHuef() + p.y*.5 + abs(model.cx - p.x) * .5) % 360,
+            max(0, 100 - .45*(p.y - flrLevel)),
+            b
+          ), ADD);
+        }
+      }
+    }
+  }
+  
+  final Flitter[] flitters = new Flitter[NUM_FLITTERS];
+  
+  final BasicParameter bounce = new BasicParameter("BNC", .8);
+  final BasicParameter flr = new BasicParameter("FLR", 0);
+  final BasicParameter blobSize = new BasicParameter("SIZE", 0.5);
+  
+  Flitters(GLucose glucose) {
+    super(glucose);
+    for (int i = 0; i < flitters.length; ++i) {
+      flitters[i] = new Flitter(i);
+    }
+    addParameter(bounce);
+    addParameter(flr);
+    addParameter(blobSize);
+  }
+  
+  public void run(double deltaMs) {
+    setColors(#000000);
+    for (Flitter f : flitters) {
+      f.run(deltaMs);
+    }
+  }
+  
+  public boolean noteOnReceived(Note note) {
+    int pitch = (note.getPitch() + note.getChannel()) % NUM_FLITTERS;
+    flitters[pitch].bounce(note.getVelocity());
+    return true;
+  }
+}
+
 class SpaceTime extends SCPattern {
 
   SinLFO pos = new SinLFO(0, 1, 3000);
index d5892485e36658485b948be433512458c14d9868..2156bad83a925de5a7dbdcba9c6123e7585970ad 100644 (file)
@@ -27,6 +27,7 @@ LXPattern[] patterns(GLucose glucose) {
   return new LXPattern[] {
     
     // Slee
+    new Flitters(glucose),
     new Swarm(glucose),
     new SpaceTime(glucose),
     new ShiftingPlane(glucose),
index 4b3f3136ee9c7c03ce9835fb4d5552cd52d83590..d2fb69bd8d9d95d753a08d0fd4ed24883d9db659 100644 (file)
--- a/_MIDI.pde
+++ b/_MIDI.pde
@@ -50,7 +50,8 @@ class MidiEngine {
       } else if (device.getName().contains("SLIDER/KNOB KORG")) {
         midiControllers.add(new KorgNanoKontrolMidiInput(device).setEnabled(true));
       } else {
-        midiControllers.add(new SCMidiInput(device));
+        boolean enabled = device.getName().contains("KEYBOARD KORG");
+        midiControllers.add(new SCMidiInput(device).setEnabled(enabled));
       }
     }
   }