From fbd4657a2e5ec789ebb6fb50b993b3b0163f8d1f Mon Sep 17 00:00:00 2001
From: Micah Elizabeth Scott <micah@scanlime.org>
Date: Sun, 20 Oct 2013 22:23:50 -0700
Subject: [PATCH] More polish for the Sequencer processing example

---
 examples/Processing/sequencer/data/glass.jpeg | Bin 0 -> 30903 bytes
 examples/Processing/sequencer/sequencer.pde   | 178 ++++++++++++++----
 2 files changed, 142 insertions(+), 36 deletions(-)
 create mode 100644 examples/Processing/sequencer/data/glass.jpeg

diff --git a/examples/Processing/sequencer/data/glass.jpeg b/examples/Processing/sequencer/data/glass.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..d045dc95c89f296acc673799896cb771a9528f60
GIT binary patch
literal 30903
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%0DP%tt;|<y1who>uKt{jR327N%CC
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

literal 0
HcmV?d00001

diff --git a/examples/Processing/sequencer/sequencer.pde b/examples/Processing/sequencer/sequencer.pde
index 38071ab..c7abc15 100644
--- a/examples/Processing/sequencer/sequencer.pde
+++ b/examples/Processing/sequencer/sequencer.pde
@@ -4,22 +4,22 @@
 
 float BPM = 120;
 int[][] pattern = {
+  {0, 0, 0, 0, 0, 1, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0},
+  {0, 0, 0, 1, 0, 0, 0, 0},
+  {0, 1, 0, 0, 0, 0, 0, 0},
+  {0, 0, 1, 0, 0, 0, 0, 1},
+  {1, 0, 0, 0, 0, 0, 0, 0},
   {0, 0, 0, 0, 0, 0, 0, 0},
+  {0, 0, 0, 0, 0, 0, 1, 0},
   {0, 0, 0, 0, 0, 0, 0, 0},
+  {0, 0, 0, 0, 1, 0, 0, 1},
   {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 1},
+  {0, 0, 0, 0, 1, 0, 0, 1},
   {0, 0, 0, 0, 0, 0, 0, 0},
+  {0, 0, 0, 0, 1, 0, 0, 1},
   {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0},
-  {0, 0, 0, 0, 0, 0, 0, 0}
+  {0, 0, 0, 0, 1, 0, 0, 1}
 };
 
 OPC opc;
@@ -39,7 +39,8 @@ float patternDuration = pattern.length / rowsPerSecond;
 int ledX = 400;
 int ledY = 360/2;
 int ledSpacing = 15;
-int ledBottom = int(ledY + 3.5 * ledSpacing);
+int ledWidth = ledSpacing * 23;
+int ledHeight = ledSpacing * 7;
 
 // Images
 PImage imgGreenDot;
@@ -47,7 +48,11 @@ PImage imgOrangeDot;
 PImage imgPinkDot;
 PImage imgPurpleDot;
 PImage imgCheckers;
+PImage imgGlass;
+PImage[] dots;
 
+// Timekeeping
+long startTime, pauseTime;
 
 void setup()
 {
@@ -58,6 +63,10 @@ void setup()
   imgPinkDot = loadImage("pinkDot.png");
   imgPurpleDot = loadImage("purpleDot.png");
   imgCheckers = loadImage("checkers.png");
+  imgGlass = loadImage("glass.jpeg");
+
+  // Keep our multicolored dots in an array for easy access later
+  dots = new PImage[] { imgOrangeDot, imgPurpleDot, imgPinkDot, imgGreenDot };
 
   // Connect to the local instance of fcserver. You can change this line to connect to another computer's fcserver
   opc = new OPC(this, "127.0.0.1", 7890);
@@ -82,17 +91,54 @@ void setup()
 
   // If the Fadecandy board's status LED is bothersome, it's easy to turn off or repurpose.
   opc.setStatusLed(false);
+  
+  // Init timekeeping, start the pattern from the beginning
+  startPattern();
 }
 
 void draw()
 {
   background(0);
 
-  float now = millis() * 1e-3;
+  long m = millis();
+  if (pauseTime != 0) {
+    // Advance startTime forward while paused, so we don't make any progress
+    long delta = m - pauseTime;
+    startTime += delta;
+    pauseTime += delta;
+  }
+
+  float now = (m - startTime) * 1e-3;
   drawEffects(now);
   drawGrid(now);
+  drawInstructions();
+}
+
+void clearPattern()
+{
+  for (int row = 0; row < pattern.length; row++) {
+    for (int col = 0; col < pattern[0].length; col++) {
+      pattern[row][col] = 0;
+    }
+  }
 }
 
+void startPattern()
+{
+  startTime = millis();
+  pauseTime = 0;
+}
+
+void pausePattern()
+{
+  if (pauseTime == 0) {
+    // Pause by stopping the clock and remembering when to unpause at
+    pauseTime = millis();
+  } else {
+    pauseTime = 0;
+  }
+}   
+
 void mousePressed()
 {
   int gx = (mouseX - gridX) / gridSquareSpacing;
@@ -100,7 +146,15 @@ void mousePressed()
   if (gx >= 0 && gx < pattern[0].length && gy >= 0 && gy < pattern.length) {
     pattern[gy][gx] ^= 1;
   }
-} 
+}
+
+void keyPressed()
+{
+  if (keyCode == DELETE) clearPattern();
+  if (keyCode == BACKSPACE) clearPattern();
+  if (keyCode == UP) startPattern();
+  if (key == ' ') pausePattern();
+}
 
 void drawGrid(float now)
 {
@@ -122,6 +176,18 @@ void drawGrid(float now)
   }
 }
 
+void drawInstructions()
+{
+  int size = 12;
+  int x = gridX + gridSquareSpacing * pattern[0].length + 5;
+  int y = gridY + size;
+
+  fill(255);
+  textSize(size);
+
+  text("<- Click squares to create an effect pattern\n[Delete] to clear, [Space] to pause, [Up] to restart pattern.\n", x, y);
+}
+
 void drawEffects(float now)
 {
   // To keep this simple and flexible, we'll calculate every possible effect that
@@ -136,29 +202,49 @@ void drawEffects(float now)
     for (int row = 0; row < pattern.length; row++) {
       for (int col = 0; col < pattern[0].length; col++) {
         if (pattern[row][col] != 0) {
-          float firingTime = patternStartTime + patternDuration * whichPattern + rowDuration * row;
-          drawSingleEffect(col, now - firingTime);
+          float patternTime = patternStartTime + patternDuration * whichPattern;
+          float firingTime = patternTime + rowDuration * row;
+          drawSingleEffect(col, firingTime, now);
         }
       }
     }
   }
 }
 
-void drawSingleEffect(int column, float time)
+void drawSingleEffect(int column, float firingTime, float now)
 {
+  /*
+   * Map sequencer columns to effects. Edit this to add your own effects!
+   *
+   * Parameters:
+   *   column -- Number of the column in the sequencer that we're drawing an effect for.
+   *   firingTime -- Time at which the effect in question should fire. May be in the
+   *                 past or the future. This number also uniquely identifies a particular
+   *                 instance of an effect.
+   *   now -- The current time, in seconds.
+   */
+
+  float timeDelta = now - firingTime;
+ 
   switch (column) {
 
     // First four tracks: Colored dots rising from below
-    case 0: drawDotEffect(column, time, imgOrangeDot); break;
-    case 1: drawDotEffect(column, time, imgPinkDot); break;
-    case 2: drawDotEffect(column, time, imgPurpleDot); break;
-    case 3: drawDotEffect(column, time, imgGreenDot); break;
-
-    // Spinner overlay
-    case 6: drawSpinnerEffect(time, imgCheckers); break;
+    case 0:
+    case 1:
+    case 2:
+    case 3:
+      drawDotEffect(column, timeDelta, dots[column]);
+      break;
+   
+    // Stripes moving from left to right. Each stripe particle is unique based on firingTime.
+    case 4: drawStripeEffect(firingTime, timeDelta); break;
+
+    // Image spinner overlays
+    case 5: drawSpinnerEffect(timeDelta, imgCheckers); break;
+    case 6: drawSpinnerEffect(timeDelta, imgGlass); break;
 
     // Full-frame flash effect
-    case 7: drawFlashEffect(time); break;
+    case 7: drawFlashEffect(timeDelta); break;
   }
 }
 
@@ -172,7 +258,7 @@ void drawDotEffect(int column, float time, PImage im)
   float shrinkSpeed = motionSpeed * 1.2;
   float size = 200 - max(0, time * shrinkSpeed);
   float centerX = ledX + (column - 1.5) * 75.0;
-  float topY = ledBottom - time * motionSpeed;
+  float topY = ledY + ledHeight/2 - time * motionSpeed;
   int brightness = int(255 - max(0, fadeSpeed * time));
 
   // Adjust the 'top' position so the dot seems to appear on-time
@@ -187,20 +273,22 @@ void drawDotEffect(int column, float time, PImage im)
 
 void drawSpinnerEffect(float time, PImage im)
 {
-  float t = time / (rowDuration * 8.0);
-  if (t < 0 || t > 1) return;
+  float t = time / (rowDuration * 1.5);
+  if (t < -1 || t > 1) return;
 
-  float angle = t * 2.5;
+  float angle = time * 5.0;
   float size = 400;
-  int alpha = int(100 * sin(t * PI));
+  int alpha = int(128 * (1.0 + cos(t * PI)));
 
-  pushMatrix();
-  translate(ledX, ledY);
-  rotate(angle);
-  blendMode(ADD);
-  tint(alpha);
-  image(im, -size/2, -size/2, size, size);
-  popMatrix();
+  if (alpha > 0) {
+    pushMatrix();
+    translate(ledX, ledY);
+    rotate(angle);
+    blendMode(ADD);
+    tint(alpha);
+    image(im, -size/2, -size/2, size, size);
+    popMatrix();
+  }
 }
 
 void drawFlashEffect(float time)
@@ -214,3 +302,21 @@ void drawFlashEffect(float time)
   rect(0, 0, width, height);
 }
 
+void drawStripeEffect(float identity, float time)
+{
+  // Pick a pseudorandom dot and Y position
+  randomSeed(int(identity * 1e3));
+  PImage im = dots[int(random(dots.length))];
+  float y = ledY - ledHeight/2 + random(ledHeight);
+
+  // Animation
+  float motionSpeed = rowsPerSecond * 400.0;
+  float x = ledX - ledWidth/2 + time * motionSpeed;
+  float sizeX = 300;
+  float sizeY = 30;
+  
+  blendMode(ADD);
+  tint(255);
+  image(im, x - sizeX/2, y - sizeY/2, sizeX, sizeY);   
+}
+
-- 
GitLab