X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TobySegaran.pde;h=82ad4d27c0d1ee337602e1e9a38df62a8f4b8349;hb=1c44211b1a15965afee7056a2f1d43a1306df61b;hp=0358668ace2961afef76d33431ef44ebce1194f5;hpb=e608336bcb5738c848a6510ac54990dc9f193f69;p=SugarCubes.git diff --git a/TobySegaran.pde b/TobySegaran.pde index 0358668..82ad4d2 100644 --- a/TobySegaran.pde +++ b/TobySegaran.pde @@ -23,14 +23,14 @@ class GlitchPlasma extends SCPattern { } } - public void run(int deltaMs) { + public void run(double deltaMs) { for (Point p : model.points) { - float hv = sin(dist(p.fx + pos, p.fy, 128.0, 128.0) / 8.0) - + sin(dist(p.fx, p.fy, 64.0, 64.0) / 8.0) - + 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 hv = sin(dist(p.x + pos, p.y, 128.0, 128.0) / 8.0) + + sin(dist(p.x, p.y, 64.0, 64.0) / 8.0) + + sin(dist(p.x, p.y + pos / 7, 192.0, 64.0) / 7.0) + + sin(dist(p.x, p.z + pos, 192.0, 100.0) / 8.0); float bv = 100; - colors[p.index] = color((hv+2)*50, satu, bv); + colors[p.index] = lx.hsb((hv+2)*50, satu, bv); } if (random(1.0)45 || x%50<5) { intensity[x][ym-1] = random(30,100); @@ -82,8 +82,8 @@ class FireEffect extends SCPattern { } for (Point p : model.points) { - int x = max(0,(int(p.fx)+int(p.fz))%xm); - int y = constrain(ym-int(p.fy),0,ym-1); + int x = max(0,(int(p.x)+int(p.z))%xm); + int y = constrain(ym-int(p.y),0,ym-1); colors[p.index] = flameColor(intensity[x][y]); } } @@ -111,18 +111,18 @@ class StripBounce extends SCPattern { } } - public void run(int deltaMs) { + public void run(double deltaMs) { float[] bright = new float[model.points.size()]; for (Strip strip : model.strips) { for (int i=0;ibright[p.index]) { - colors[p.index] = color(hv,sat[i].getValuef(),br); + colors[p.index] = lx.hsb(hv,sat[i].getValuef(),br); bright[p.index] = br; } } @@ -168,14 +168,14 @@ class SoundRain extends SCPattern { } } - public void run(int deltaMs) { + public void run(double 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]+10,lv,100); + lightVals[i]=min(lightVals[i]+15,lv,100); } else { lightVals[i]=max(lv,lightVals[i]-5,0); } @@ -185,9 +185,9 @@ class SoundRain extends SCPattern { Strip s = c.strips.get(j); if (j%4!=0 && j%4!=2) { for (Point p : s.points) { - int seq = int(p.fy*avgSize/model.yMax+pos.getValuef()+sin(p.fx+p.fz)*2)%avgSize; + int seq = int(p.y*avgSize/model.yMax+pos.getValuef()+sin(p.x+p.z)*2)%avgSize; seq=min(abs(seq-(avgSize/2)),avgSize-1); - colors[p.index] = color(200,max(0,100-abs(p.fx-col1.getValuef())/2),lightVals[seq]); + colors[p.index] = lx.hsb(200,max(0,100-abs(p.x-col1.getValuef())/2),lightVals[seq]); } } } @@ -211,26 +211,92 @@ class FaceSync extends SCPattern { col2.setValue(model.xMax); } - public void run(int deltaMs) { + public void run(double deltaMs) { int i=0; - for (Cube c : model.cubes) { + for (Strip s : model.strips) { i++; - for (Point p : c.points) { + for (Point p : s.points) { float dx, dz; - if (i%2==0) { - dx = p.fx - (c.cx+xosc.getValuef()); - dz = p.fz - (c.cz+zosc.getValuef()); + if (i%32 < 16) { + dx = p.x - (s.cx+xosc.getValuef()); + dz = p.z - (s.cz+zosc.getValuef()); } else { - dx = p.fx - (c.cx+zosc.getValuef()); - dz = p.fz - (c.cz+xosc.getValuef()); + dx = p.x - (s.cx+zosc.getValuef()); + dz = p.z - (s.cz+xosc.getValuef()); } //println(dx); - float a1=max(0,100-abs(p.fx-col1.getValuef())); - float a2=max(0,100-abs(p.fx-col2.getValuef())); + float a1=max(0,100-abs(p.x-col1.getValuef())); + float a2=max(0,100-abs(p.x-col2.getValuef())); float sat = max(a1,a2); float h = (359*a1+200*a2) / (a1+a2); - colors[p.index] = color(h,sat,100-abs(dx*5)-abs(dz*5)); + colors[p.index] = lx.hsb(h,sat,100-abs(dx*5)-abs(dz*5)); } } } } + +class SoundSpikes extends SCPattern { + private FFT fft = null; + private LinearEnvelope[] bandVals = null; + private float[] lightVals = null; + private int avgSize; + private float gain = 25; + BasicParameter gainParameter = new BasicParameter("GAIN", 0.5); + SawLFO pos = new SawLFO(0, model.xMax, 8000); + + public SoundSpikes(GLucose glucose) { + super(glucose); + addParameter(gainParameter); + addModulator(pos).trigger(); + } + + 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(double 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,model.yMax+10); + if (lv>lightVals[i]) { + lightVals[i]=min(lightVals[i]+30,lv,model.yMax+10); + } else { + lightVals[i]=max(lv,lightVals[i]-10,0); + } + } + int i = 0; + for (Cube c : model.cubes) { + for (int j=0; javgSize) seq=avgSize-seq; + seq=constrain(seq,0,avgSize-1); + float br=max(0, lightVals[seq]-p.y); + colors[p.index] = lx.hsb((dis*avgSize*65)/model.xMax,90,br); + } + } + } + } + } +} +