class BeatParticle { Oscillator wave; int period; int curr = 0; float sz = 6; //float ampDelta = random(0.025, 0.025); float ampDelta = 0.025; int freqIndex; BeatParticle(int freqIndex) { float tmp = random(1); if (tmp > 0.66) { period = quantise * 8; } else if (tmp > 0.33) { period = quantise * 4; } else { period = quantise * 2; } 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 { if (tick % quantise == 0) { fill(0, 204, 255); noStroke(); float posX = (width / (freqs.length + 0.0)) * (freqIndex + 0.5); ellipse(posX, 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(0, 204, 255, 64); noStroke(); rect(freqIndex * (width / (freqs.length + 0.0)), 0, (width / (freqs.length + 0.0)), height); fill(255, 204, 0); } fill(0, 204, 255); ellipse(((width + 0.0) / freqs.length) * (freqIndex + 0.5), sz * 2, sz * 2, sz * 2); } }