#include <Audio.h>
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioInputAnalog adc1; //xy=91,270
AudioPlaySdWav playSdWav1; //xy=107,321
AudioMixer4 mixer1; //xy=293,333
AudioAnalyzeFFT1024 FFT; //xy=465,331
AudioConnection patchCord1(playSdWav1, 0, mixer1, 0);
AudioConnection patchCord2(playSdWav1, 1, mixer1, 1);
AudioConnection patchCord3(mixer1, FFT);
// GUItool: end automatically generated code
#include <FFTFreq.h>
FFTFreq _fft(&FFT);
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Started");
AudioMemory(8);
mixer1.gain(0,25);
mixer1.gain(1,25);
if (!(SD.begin(BUILTIN_SDCARD))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);
}
}
}
float lastFreq = 0;
unsigned long loopCount;
String fileName1 = "FE55M.wav";
String fileName2 = "FE55LW.wav";
bool file1 = true;
void loop() {
String fn = file1 ? fileName1 : fileName2;
if (!playSdWav1.isPlaying()) {
Serial.printf("\n**************************************************\nFinished %s\tDelaying 1 second...\n", fn.c_str());
delay (1000);
fn = file1 ? fileName1 : fileName2;
playSdWav1.play(fn.c_str());
Serial.printf("Starting %s\tDelaying 200ms...\n**************************************************", fn.c_str());
delay(200);
file1 = !file1;
}
float freq = _fft.getFFTFreq();
float prob = _fft.getFFTProb();
int freqScalingFactor = 4;
if ((freq > 0) && (freq != lastFreq)) {
Serial.printf("\n%s at %dms\tLoop:%5d\t%4.1fHz\t%3d%s\t", fn.c_str(), playSdWav1.positionMillis(), loopCount % 100000, freq, (int)(prob*100), "%");
int count = freq/freqScalingFactor;
int countUp = 0;
while (count--) {
if ((countUp % (100/freqScalingFactor)) == 0) Serial.print(countUp * freqScalingFactor);
else Serial.print('_');
countUp++;
}
if ((prob == 1.0) && (playSdWav1.positionMillis() > 1000) && (playSdWav1.positionMillis() < 1100)) {
_fft.graphFFTBins(true);
delay(100);
}
lastFreq = freq;
}
loopCount++;
}