#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
#include <MedianFilter.h>
// GUItool: begin automatically generated code
AudioSynthToneSweep tonesweep1; //xy=139,238
AudioOutputI2S i2s1; //xy=339,97
AudioEffectDelay delay2; //xy=388,350
AudioInputI2S i2s2; //xy=469,98
AudioAnalyzeRMS rmsMic; //xy=637,92
AudioEffectMultiply multiply2; //xy=659,397
AudioAnalyzeRMS rmsSigInt; //xy=660,302
AudioAnalyzeRMS rms1; //xy=811,397
AudioConnection patchCord1(tonesweep1, delay2);
AudioConnection patchCord2(tonesweep1, 0, i2s1, 0);
AudioConnection patchCord3(tonesweep1, 0, i2s1, 1);
AudioConnection patchCord4(delay2, 0, multiply2, 1);
AudioConnection patchCord5(delay2, 0, rmsSigInt, 0);
AudioConnection patchCord6(i2s2, 0, multiply2, 0);
AudioConnection patchCord7(i2s2, 0, rmsMic, 0);
AudioConnection patchCord8(multiply2, rms1);
AudioControlSGTL5000 sgtl5000_1; //xy=139,397
// GUItool: end automatically generated code
MedianFilter Median(10, 0);
const int myInput = AUDIO_INPUT_MIC;
float valMax = 0;
float delayCompens = 0;
float AttenuationFactor = 0;
float AttenuationFactorMedian = 0;
void ping(int idel)
{
float fdel = idel * 1000.0f / AUDIO_SAMPLE_RATE_EXACT;
AudioNoInterrupts();
rmsMic.read(); // clear rms counter/accumulator
rmsSigInt.read(); // clear rms counter/accumulator
rms1.read(); // clear rms counter/accumulator
delay2.delay(0, fdel); // delay in ms
AudioInterrupts();
tonesweep1.play(1.0, 500, 3000, 0.01);
delay(200);
float val2 = rmsSigInt.read() * 1000;
float val3 = rmsMic.read() * 1000;
float val = rms1.read() * 1000;
if (val > valMax) {
valMax = val;
delayCompens = fdel;
}
AttenuationFactor = val2 / val3;
Median.in(AttenuationFactor);
AttenuationFactorMedian = Median.out();
Serial.printf("%d %f %f %f %f\n\r", idel, fdel, val2, val3, val);
Serial.println(" ----- ");
}
void setup() {
// put your setup code here, to run once:
AudioMemory(80);
while (!Serial);
Serial.println("TestShift");
AudioNoInterrupts();
// setup audio board
sgtl5000_1.enable();
// setup headphone
sgtl5000_1.volume(0.8);
sgtl5000_1.inputSelect(myInput);
// setup microphone
sgtl5000_1.micGain(50); // from 0 to 63
for (int ii = 1; ii < 8; ii++) delay2.disable(ii);
AudioInterrupts();
}
void loop() {
static int idel = 1;
if (idel < 0) return;
ping(idel);
idel++;
if (idel > 512) {
Serial.print("The Delay compensation is : ");
Serial.println(delayCompens);
Serial.print("The attenuation factor is : ");
Serial.println(AttenuationFactor);
idel = -1; // mark to stop
}
}