class Buzzer{ float x; float y; Buzzer[] otherBuzzers; FFT fft; BB_Simulation dad; float freq; float ampli; AudioOutput world; SineWave voice; SineWave[] voicesHeard = new SineWave[totalBuzzers]; AudioSignal ambientSignal; int historyLength = 1000; float[] freqHistory = new float[historyLength]; float[] ampliHistory = new float[historyLength]; float[] avgFreqHistory = new float[historyLength]; float movingAveDFreq = 0f; BandPass bpf; int freqDenominator = 12; int freqMultiplier = freqDenominator; Buzzer(BB_Simulation d ){ fft = new FFT(bufferSize, rate); bpf = new BandPass(2000, 1600, rate); freq = random(100, 200); ampli = random(.001,.01); voice = new SineWave(freq, ampli, rate); dad = d; x = random(tableWidth); y = random(tableHeight); world = minim.getLineOut(Minim.STEREO, bufferSize, rate); world.addSignal(dad.ambientSignal); } void init(){ world.addEffect(bpf); world.mute(); for (int i =0; i< historyLength; i++){ freqHistory[i] = 0f; ampliHistory[i] = 0f; avgFreqHistory[i] = 0f; } for (int i = 0 ; i < dad.totalBuzzers ; i++){ Buzzer b = dad.buzzers[i]; if (b != this){ float distSquared = (this.x-b.x)*(this.x-b.x) +(this.y-b.y)*(this.y-b.y); voicesHeard[i] = new SineWave(b.freq, b.ampli * .01/(1+distSquared), rate); world.addSignal(voicesHeard[i]); } } } void calc(){ world.clearSignals(); world.addSignal(dad.ambientSignal); for (int i = 0 ; i < dad.totalBuzzers ; i++){ Buzzer b = dad.buzzers[i]; if (b != this){ float distSquared = (this.x-b.x)*(this.x-b.x) +(this.y-b.y)*(this.y-b.y); voicesHeard[i] = new SineWave(b.freq, b.ampli * .01/(10 + distSquared), rate); world.addSignal(voicesHeard[i]); } } voice = new SineWave(freq, ampli, rate); fft.forward(world.mix); float drag = .5f; float ampliDrag = .1f/drag; float sum = 0f; float prodSum = 0f; for (int i=0; i