adc => PoleZero dcblock => FFT fft => blackhole;
SinOsc s => JCRev r => dac;
.05 => r.mix;
.99 => dcblock.blockZero;
1024 => fft.size;
Windowing.hamming( fft.size() ) => fft.window;
UAnaBlob blob;
second / samp => float srate;
float target_freq, curr_freq, target_gain, curr_gain;
spork ~ ramp_stuff();
while( true )
{
fft.upchuck() @=> blob;
0 => float max; int where;
for( int i; i < blob.fvals().size(); i++ )
{
if( blob.fvals()[i] > max )
{
blob.fvals()[i] => max;
i => where;
}
}
(where $ float) / fft.size() * srate => target_freq;
(max / .8) => target_gain;
(fft.size()/2)::samp => now;
}
fun void ramp_stuff()
{
0.025 => float slew;
while( true )
{
(target_freq - curr_freq) * 5 * slew + curr_freq => curr_freq => s.freq;
(target_gain - curr_gain) * slew + curr_gain => curr_gain => s.gain;
0.0025::second => now;
}
}