}
}
- public void run(int 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);
+ public void run(double deltaMs) {
+ for (LXPoint p : model.points) {
+ 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)<glitch/20) {
pos=pos-int(random(10,30));
}
}
private color flameColor(float level) {
- if (level<=0) return color(0,0,0);
+ if (level<=0) return lx.hsb(0,0,0);
float br=min(100,sqrt(level)*15);
- return color(level/1.7,100,br);
+ return lx.hsb(level/1.7,100,br);
}
- public void run(int deltaMs) {
+ public void run(double deltaMs) {
for (int x=10;x<xm-10;x++) {
if (x%50>45 || x%50<5) {
intensity[x][ym-1] = random(30,100);
}
}
- 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);
+ for (LXPoint p : model.points) {
+ 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]);
}
}
}
}
- 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;i<numOsc;i++) {
float avgdist=0.0;
- avgdist = dist(strip.points.get(8).fx,strip.points.get(8).fy,strip.points.get(8).fz,fX[i].getValuef(),fY[i].getValuef(),fZ[i].getValuef());
+ avgdist = dist(strip.points.get(8).x,strip.points.get(8).y,strip.points.get(8).z,fX[i].getValuef(),fY[i].getValuef(),fZ[i].getValuef());
boolean on = avgdist<30;
float hv = (lx.getBaseHuef()+colorOffset[i])%360;
float br = max(0,100-avgdist*4);
- for (Point p : strip.points) {
+ for (LXPoint p : strip.points) {
if (on && br>bright[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;
}
}
}
}
- 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);
}
for (int j=0; j<c.strips.size(); j++) {
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())%avgSize;
- seq=abs(seq-(avgSize/2));
- colors[p.index] = color(200,max(0,100-abs(p.fx-col1.getValuef())/2),lightVals[seq]);
+ for (LXPoint p : s.points) {
+ 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] = lx.hsb(200,max(0,100-abs(p.x-col1.getValuef())/2),lightVals[seq]);
}
}
}
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 (LXPoint 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; j<c.strips.size(); j++) {
+ Strip s = c.strips.get(j);
+ if (j%4!=0 && j%4!=2) {
+ for (LXPoint p : s.points) {
+ float dis = (abs(p.x-model.xMax/2)+pos.getValuef())%model.xMax/2;
+ int seq = int((dis*avgSize*2)/model.xMax);
+ if (seq>avgSize) 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);
+ }
+ }
+ }
+ }
+ }
}
+