adc => FFT fft => blackhole; // draw samples through FFT SinOsc s => dac; // Our "synthesizer" Windowing.hamming(1024) => fft.window; 2048 => fft.size; UAnaBlob blob; float peak,power; int peakloc; while (1) { 512 :: samp => now; // Hop size fft.upchuck() @=> blob; // Compute and blob.fvals() @=> float mag_spec[]; // store spectrum 0.0 => peak; 0.0 => power; 0 => peakloc; for (0 => int i; i < fft.size()/2; 1 +=> i) { mag_spec[i]*mag_spec[i] +=> power; // Accumulate power if (mag_spec[i] > peak) { // Find peak mag_spec[i] => peak; i => peakloc; } } 44100.0 * peakloc / fft.size() => s.freq; // Set freq Math.sqrt(power) => s.gain; // Set gain // <<< s.freq() >>>; }