Efficiency
authorToby Segaran <tobys@tobys-macbookpro2.local>
Mon, 12 Aug 2013 00:35:15 +0000 (17:35 -0700)
committerToby Segaran <tobys@tobys-macbookpro2.local>
Mon, 12 Aug 2013 00:35:15 +0000 (17:35 -0700)
SugarCubes.pde
TobySegaran.pde

index aa794b4b53fdd50d486f236e2c59a59b868aade7..ca6a1c870f48c71043145cc94dd869fd9f8c1e33 100644 (file)
@@ -37,6 +37,7 @@ LXPattern[] patterns(GLucose glucose) {
     new GlitchPlasma(glucose),
     new FireEffect(glucose),
     new StripBounce(glucose),
+    new SoundCubes(glucose),
     //new SineSphere(glucose),
     
     // Basic test patterns for reference, not art    
index 722f4d49e852d7a7d78bec59f7e08d9ab36a8f83..2eba4cfd5f74f324461b1e6dcd3d2c88d292494d 100644 (file)
@@ -128,10 +128,41 @@ class StripBounce extends SCPattern {
         }
       }
     }
-    for (Point p : model.points) {
-      if (bright[p.index]==0) {
-        colors[p.index]=color(0,0,0);
+  }
+}
+
+class SoundCubes extends SCPattern {
+
+  private FFT fft = null; 
+  private LinearEnvelope[] bandVals = null;
+  private int avgSize;
+    
+  public SoundCubes(GLucose glucose) {
+    super(glucose);
+  }
+
+  protected void onActive() {
+    if (this.fft == null) {
+      this.fft = new FFT(lx.audioInput().bufferSize(), lx.audioInput().sampleRate());
+      this.fft.window(FFT.HAMMING);
+      this.fft.logAverages(40, 1);
+      this.avgSize = this.fft.avgSize();
+      this.bandVals = new LinearEnvelope[this.avgSize];
+      for (int i = 0; i < this.bandVals.length; ++i) {
+        this.addModulator(this.bandVals[i] = (new LinearEnvelope(0, 0, 700+i*4))).trigger();
       }
     }
   }
+  
+  public void run(int deltaMs) {
+    this.fft.forward(this.lx.audioInput().mix);
+
+    for (int i = 0; i < avgSize; ++i) {
+      float value = this.fft.getAvg(i);
+      this.bandVals[i].setEndVal(value,40).trigger();
+    }
+    for (Point p : model.points) {
+      colors[p.index] = color(100,0,bandVals[1].getValuef()*25 );
+    }
+  }  
 }