#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioSynthNoiseWhite noise1; //xy=157,165
AudioFilterBiquad biquad1; //xy=462,172
AudioOutputAnalogStereo dacs1; //xy=693,173
AudioConnection patchCord1(noise1, biquad1);
AudioConnection patchCord2(biquad1, 0, dacs1, 0);
AudioConnection patchCord3(biquad1, 0, dacs1, 1);
// GUItool: end automatically generated code
void setup() {
AudioMemory(20);
// put your setup code here, to run once:
noise1.amplitude(.5);
biquad1.setBandpass(0,400,1); //Low freq noise
delay(2000);
biquad1.setBandpass(0,5000,1); //High freq noise OK
delay(2000);
biquad1.setBandpass(1,5000,1); //More High freq noise OK
delay(2000);
biquad1.setBandpass(0,400,1); //Low freq noise? NO
}
void loop() {
// put your main code here, to run repeatedly:
}
void AudioFilterBiquad::setCoefficients(uint32_t stage, const int *coefficients)
{
if (stage >= 4) return;
int32_t *dest = definition + (stage << 3);
__disable_irq();
if (stage > 0) *(dest - 1) |= 0x80000000; // <<<<< this sets the continuation flag in previous stage, all as expected
*dest++ = *coefficients++;
*dest++ = *coefficients++;
*dest++ = *coefficients++;
*dest++ = *coefficients++ * -1;
*dest++ = *coefficients++ * -1;
//*dest++ = 0;
//*dest++ = 0; // clearing filter state causes loud pop
dest += 2;
*dest &= 0x80000000; // <<<<< I assumed this should be clearing the cont flag, but to do that it needs to be " *dest &= ~0x80000000; "
__enable_irq();
}
If after you've set a stage you want to pass through then just open up the filter or set the coefficients directly (b0 = 1 and all the rest 0 for pass through?)