quarterturn
Well-known member
Anyone try using the biquad filter with four notch stages as a phaser effect? Just sweep them up and down with some sort of equal spacing, right?
// 2 millseconds for the sinewave LFO update
#define LFO_PERIOD 3000L
// 2 seconds for LFO cycle
// 2 ms is 500 updates/s
// so 1000 would be 2 seconds
#define BIQUAD_LFO_RANGE 1500
// biquad filter frequency
// sweep up to 5000 Hz
#define BIQUAD_MAX 5000
// update the biquad filter frequency
if ((micros() - biquadLfoUpdateTimer) >= LFO_PERIOD)
{
lfoIndex++;
if (lfoIndex > BIQUAD_LFO_RANGE)
lfoIndex = 0;
biquadFrequency = ((1 + sin((( 2.0 * M_PI) / BIQUAD_LFO_RANGE) * lfoIndex)) * BIQUAD_MAX) + 60;
biquad1.setNotch(0, biquadFrequency, 0.3);
biquad2.setNotch(0, biquadFrequency, 0.3);
biquadLfoUpdateTimer = micros();
}
// update the biquad filter frequency
if ((micros() - biquadLfoUpdateTimer) >= LFO_PERIOD)
{
lfoIndex++;
if (lfoIndex > BIQUAD_LFO_RANGE)
lfoIndex = 0;
biquad1.setNotch(0, ((sin((( 2.0 * M_PI) / BIQUAD_LFO_RANGE) * lfoIndex)) * 750) + 1000, 0.9);
biquad2.setNotch(0, ((sin((( 2.0 * M_PI) / BIQUAD_LFO_RANGE) * lfoIndex)) * 750) + 1000, 0.9);
biquad1.setNotch(1, ((sin((( 2.0 * M_PI) / BIQUAD_LFO_RANGE) * lfoIndex)) * 1000) + 2000, 0.9);
biquad2.setNotch(1, ((sin((( 2.0 * M_PI) / BIQUAD_LFO_RANGE) * lfoIndex)) * 1000) + 2000, 0.9);
biquad1.setNotch(2, ((sin((( 2.0 * M_PI) / BIQUAD_LFO_RANGE) * lfoIndex)) * 3000) + 5000, 0.9);
biquad2.setNotch(2, ((sin((( 2.0 * M_PI) / BIQUAD_LFO_RANGE) * lfoIndex)) * 3000) + 5000, 0.9);
biquadLfoUpdateTimer = micros();
}