X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TobySegaran.pde;h=443be5b053b8bbdf3c333a3ec9b247774c064580;hb=ae80d37a7fc19c8bce45067cdcf4e041808f9339;hp=a46ef4a22a210d3ef9d81c7b1dc93d0b8972d6b7;hpb=1b8ec15f473ce870790425148d7c73255bbe4433;p=SugarCubes.git diff --git a/TobySegaran.pde b/TobySegaran.pde index a46ef4a..443be5b 100644 --- a/TobySegaran.pde +++ b/TobySegaran.pde @@ -30,7 +30,7 @@ class GlitchPlasma extends SCPattern { + sin(dist(p.fx, p.fy + pos / 7, 192.0, 64.0) / 7.0) + sin(dist(p.fx, p.fz + pos, 192.0, 100.0) / 8.0); float bv = 100; - colors[p.index] = color((hv+2)*25, satu, bv); + colors[p.index] = color((hv+2)*50, satu, bv); } if (random(1.0)bright[p.index]) { @@ -131,19 +131,130 @@ class StripBounce extends SCPattern { } } -class SoundCubes extends SCPattern { +class SoundRain extends SCPattern { private FFT fft = null; private LinearEnvelope[] bandVals = null; private float[] lightVals = null; private int avgSize; + private float gain = 25; SawLFO pos = new SawLFO(0, 9, 8000); + SinLFO col1 = new SinLFO(0, model.xMax, 5000); + BasicParameter gainParameter = new BasicParameter("GAIN", 0.5); - public SoundCubes(GLucose glucose) { + public SoundRain(GLucose glucose) { super(glucose); addModulator(pos).trigger(); + addModulator(col1).trigger(); + addParameter(gainParameter); } + public void onParameterChanged(LXParameter parameter) { + if (parameter == gainParameter) { + gain = 50*parameter.getValuef(); + } + } + 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(); + } + lightVals = new float[avgSize]; + } + } + + 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(); + float lv = min(value*gain,100); + if (lv>lightVals[i]) { + lightVals[i]=min(lightVals[i]+15,lv,100); + } else { + lightVals[i]=max(lv,lightVals[i]-5,0); + } + } + for (Cube c : model.cubes) { + for (int j=0; jlightVals[i]-6) { - lightVals[i]=lv; + float lv = min(value*gain,model.yMax+10); + if (lv>lightVals[i]) { + lightVals[i]=min(lightVals[i]+30,lv,model.yMax+10); } else { - lightVals[i]=lightVals[i]-6; + lightVals[i]=max(lv,lightVals[i]-10,0); } } - for (int i=0; iavgSize) seq=avgSize-seq; + seq=constrain(seq,0,avgSize-1); + float br=max(0, lightVals[seq]-p.fy); + colors[p.index] = color((dis*avgSize*65)/model.xMax,90,br); + } + } } } } } +