From: Toby Segaran Date: Mon, 12 Aug 2013 00:51:00 +0000 (-0700) Subject: Merge branch 'master' into tobysegaran X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=54521a391e9fac72b19c35ed1f20e055c79f2bb1;hp=76471486bf3646554b9db54832a3b20a9f18c13c;p=SugarCubes.git Merge branch 'master' into tobysegaran Conflicts: SugarCubes.pde --- diff --git a/SugarCubes.pde b/SugarCubes.pde index a7210f3..bb55e6f 100644 --- a/SugarCubes.pde +++ b/SugarCubes.pde @@ -36,9 +36,10 @@ LXPattern[] patterns(GLucose glucose) { new Psychedelia(glucose), new CubeEQ(glucose), new PianoKeyPattern(glucose), - new WarmPlasma(glucose), - // new FireTest(glucose), - // new SineSphere(glucose), + new GlitchPlasma(glucose), + new FireEffect(glucose), + new StripBounce(glucose), + new SoundCubes(glucose), // Basic test patterns for reference, not art new TestCubePattern(glucose), diff --git a/TobySegaran.pde b/TobySegaran.pde index 650bbb0..2eba4cf 100644 --- a/TobySegaran.pde +++ b/TobySegaran.pde @@ -1,20 +1,25 @@ -class WarmPlasma extends SCPattern { +class GlitchPlasma extends SCPattern { private int pos = 0; private float satu = 100; private float speed = 1; + private float glitch = 0; BasicParameter saturationParameter = new BasicParameter("SATU", 1.0); BasicParameter speedParameter = new BasicParameter("SPEED", 0.1); + BasicParameter glitchParameter = new BasicParameter("GLITCH", 0.0); - public WarmPlasma(GLucose glucose) { + public GlitchPlasma(GLucose glucose) { super(glucose); addParameter(saturationParameter); addParameter(speedParameter); + addParameter(glitchParameter); } public void onParameterChanged(LXParameter parameter) { if (parameter == saturationParameter) { satu = 100*parameter.getValuef(); } else if (parameter == speedParameter) { - speed = 10*parameter.getValuef(); + speed = 8*parameter.getValuef(); + } else if (parameter == glitchParameter) { + glitch = parameter.getValuef(); } } @@ -27,13 +32,16 @@ class WarmPlasma extends SCPattern { float bv = 100; colors[p.index] = color((hv+2)*25, satu, bv); } + if (random(1.0)= MAX_INT-1) pos=0; + if (pos >= MAX_INT-1) pos=0; } } // This is very much a work in progress. Trying to get a flame effect. -class FireTest extends SCPattern { +class FireEffect extends SCPattern { private float[][] intensity; private float hotspot; private float decay = 0.3; @@ -41,7 +49,7 @@ class FireTest extends SCPattern { private int ym; BasicParameter decayParameter = new BasicParameter("DECAY", 0.3); - public FireTest(GLucose glucose) { + public FireEffect(GLucose glucose) { super(glucose); xm = int(model.xMax); ym = int(model.yMax); @@ -74,9 +82,87 @@ class FireTest extends SCPattern { } for (Point p : model.points) { - int x = (int(p.fx)+int(p.fz))%xm; - int y = min(ym-int(p.fy),ym-1); + int x = max(0,(int(p.fx)+int(p.fz))%xm); + int y = constrain(ym-int(p.fy),0,ym-1); colors[p.index] = flameColor(intensity[x][y]); } } } + +class StripBounce extends SCPattern { + private final int numOsc = 30; + SinLFO[] fX = new SinLFO[numOsc]; //new SinLFO(0, model.xMax, 5000); + SinLFO[] fY = new SinLFO[numOsc]; //new SinLFO(0, model.yMax, 4000); + SinLFO[] fZ = new SinLFO[numOsc]; //new SinLFO(0, model.yMax, 3000); + SinLFO[] sat = new SinLFO[numOsc]; + float[] colorOffset = new float[numOsc]; + + public StripBounce(GLucose glucose) { + super(glucose); + for (int i=0;ibright[p.index]) { + colors[p.index] = color(hv,sat[i].getValuef(),br); + bright[p.index] = br; + } + } + } + } + } +} + +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 ); + } + } +}