class BParticle { Oscillator wave; int period; int curr = 0; float sz = 6; //float ampDelta = random(0.0025, 0.0025); float ampDelta = 0.025; int freqIndex; BParticle(int freqIndex, int period) { this.period = period; this.freqIndex = freqIndex; } void update() { curr++; if (wave != null) { if (wave.amplitude() <= ampDelta) { out.removeSignal(wave); wave = null; } else { wave.setAmp(wave.amplitude() - ampDelta); } } if ((curr >= period) && (tick % quantise == 0)) { curr = 0; pulse(); } else { fill(255, 204, 0); noStroke(); float posX = (width / (freqs.length + 0.0)) * (freqIndex + 0.5); ellipse(posX, height - sz * 2, sz, sz); } } void pulse() { float frequency = freqs[freqIndex]; float maxAmp = 1.0 / (totalParticles + 0.0); if (wave != null) { wave.setAmp(0.0); out.removeSignal(wave); wave = null; //wave.setAmp(maxAmp); }// else { wave = new SineWave(frequency, maxAmp, 44100); wave.noPortamento(); out.addSignal(wave); //} if (DRAW_COLUMNS) { fill(255, 204, 0, 64); noStroke(); rect(freqIndex * (width / (freqs.length + 0.0)), 0, (width / (freqs.length + 0.0)), height); fill(255, 204, 0); } ellipse(((width + 0.0) / freqs.length) * (freqIndex + 0.5), height - sz * 2, sz * 2, sz * 2); } }