From cc8b3f8210cea5377cc7e28116626e7bc4defa7a Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Tue, 24 Sep 2013 19:23:20 -0700 Subject: [PATCH] New flitters pattern with bouncy stuffs --- MarkSlee.pde | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ SugarCubes.pde | 1 + _MIDI.pde | 3 +- 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/MarkSlee.pde b/MarkSlee.pde index 3a9b530..55f0922 100644 --- a/MarkSlee.pde +++ b/MarkSlee.pde @@ -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); diff --git a/SugarCubes.pde b/SugarCubes.pde index d589248..2156bad 100644 --- a/SugarCubes.pde +++ b/SugarCubes.pde @@ -27,6 +27,7 @@ LXPattern[] patterns(GLucose glucose) { return new LXPattern[] { // Slee + new Flitters(glucose), new Swarm(glucose), new SpaceTime(glucose), new ShiftingPlane(glucose), diff --git a/_MIDI.pde b/_MIDI.pde index 4b3f313..d2fb69b 100644 --- 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)); } } } -- 2.34.1