#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioSynthWaveformDc dc1; //xy=55,122
AudioSynthWaveform waveform1; //xy=183,52
AudioEffectEnvelope envelope2; //xy=187,122
AudioSynthWaveform waveform2; //xy=188,161
AudioEffectEnvelope envelope1; //xy=328,52
AudioEffectMultiply multiply1; //xy=332,138
AudioSynthWaveformModulated waveformMod2; //xy=490,145
AudioSynthWaveformModulated waveformMod1; //xy=492,58
AudioEffectEnvelope envelope4; //xy=655,145
AudioEffectEnvelope envelope3; //xy=656,58
AudioMixer4 mixer1; //xy=833,93
AudioAnalyzeFFT1024 myFFT; //xy=984,163
AudioOutputI2S i2s1; //xy=991,100
AudioConnection patchCord1(dc1, envelope2);
AudioConnection patchCord2(waveform1, envelope1);
AudioConnection patchCord3(envelope2, 0, multiply1, 0);
AudioConnection patchCord4(waveform2, 0, multiply1, 1);
AudioConnection patchCord5(envelope1, 0, waveformMod1, 0);
AudioConnection patchCord6(multiply1, 0, waveformMod2, 0);
AudioConnection patchCord7(waveformMod2, envelope4);
AudioConnection patchCord8(waveformMod1, envelope3);
AudioConnection patchCord9(envelope4, 0, mixer1, 1);
AudioConnection patchCord10(envelope3, 0, mixer1, 0);
AudioConnection patchCord11(mixer1, 0, i2s1, 0);
AudioConnection patchCord12(mixer1, 0, i2s1, 1);
AudioConnection patchCord13(mixer1, myFFT);
AudioControlSGTL5000 sgtl5000_1; //xy=995,20
// GUItool: end automatically generated code
int numWavType = 9;
float freq[] = {0, 130.8, 261.6, 523.2, 1046.4, 2092.8, 4185.6, 8371.2, 16472.4, 33483.8, 66969.6, 133939.2, 267878.4, 535756.8};
//float freq[] = {0, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000};
float n = 0.0;
void setup() {
Serial.begin(115200);
AudioMemory(20);
sgtl5000_1.enable();
sgtl5000_1.volume(1.0);
dc1.amplitude(1.0);
mixer1.gain(1, 1.0);
mixer1.gain(0, 0.0);
waveform1.frequency(130.8);
waveform1.pulseWidth(.15);
waveform1.amplitude(1.0);
waveform1.begin(WAVEFORM_SINE);
waveform2.frequency(130.8);
waveform2.pulseWidth(.15);
waveform2.amplitude(1.0);
waveform2.begin(WAVEFORM_SINE);
waveformMod1.frequency(130.8);
waveformMod1.amplitude(1.0);
waveformMod1.frequencyModulation(1.0);
waveformMod1.begin(WAVEFORM_SINE);
waveformMod2.frequency(130.8);
waveformMod2.amplitude(1.0);
waveformMod2.frequencyModulation(1.0);
waveformMod2.begin(WAVEFORM_SINE);
envelope1.attack(10);
envelope1.decay(0);
envelope1.hold(140);
envelope1.release(50);
envelope1.sustain(1.0);
//envelope1.on
envelope2.attack(10);
envelope2.decay(0);
envelope2.hold(140);
envelope2.release(50);
envelope2.sustain(1.0);
envelope3.attack(10);
envelope3.decay(0);
envelope3.hold(140);
envelope3.release(50);
envelope3.sustain(1.0);
envelope4.attack(10);
envelope4.decay(0);
envelope4.hold(140);
envelope4.release(50);
envelope4.sustain(1.0);
myFFT.windowFunction(AudioWindowHanning1024);
//uncomment for 1st block, comment for 2nd
/*
mixer1.gain(0, 1.0);
mixer1.gain(1, 0.0);
for (int i = 0; i < numWavType - 1; i++)
{
waveformMod1.begin(i);
Serial.print("Carrier Waveform Type: ");
Serial.print(i);
Serial.print("\n");
for (int j = 1; j < 2; j++)
{
waveformMod1.frequency(freq[j]);
//Serial.print("Carrier Freq: ");
//Serial.print(freq[j]);
//Serial.print("\n");
for (int k = 1; k < 4; k++) //13
{
//Serial.print("Octave ratio: ");
//Serial.print(k);
//Serial.print("\n");
waveformMod1.frequencyModulation((float)k);
for (int l = 0; l < numWavType - 1; l++)
{
//Serial.print("Mod Waveform Type: ");
//Serial.print(l);
//Serial.print("\n");
waveform1.begin(l);
for (int m = 0; m < 13; m++) //14
{
//Serial.print("Mod Freq: ");
//Serial.print(freq[m]);
//Serial.print("\n");
waveform1.frequency(freq[m]);
envelope3.noteOn();
envelope1.noteOn();
delay(150);
envelope3.noteOff();
envelope1.noteOff();
delay(50);
Serial.print("FFT: ");
for (int p = 0; p < 40; p++)
{
n = myFFT.read(p);
if (n >= 0.01)
{
Serial.print(n);
Serial.print(" ");
}
else
{
Serial.print(" - ");
}
}
Serial.println();
}
}
}
}
}
Serial.end();
*/
//2nd block, comment out below to run 1st block
mixer1.gain(1, 1.0);
mixer1.gain(0, 0.0);
for (int i = 0; i < numWavType - 1; i++)
{
waveformMod2.begin(i);
Serial.print("Carrier Waveform Type: ");
Serial.print(i);
Serial.print("\n");
for (int j = 1; j < 2; j++)
{
waveformMod2.frequency(freq[j]);
//Serial.print("Carrier Freq: ");
//Serial.print(freq[j]);
//Serial.print("\n");
for (int k = 1; k < 4; k++) //13
{
//Serial.print("Octave ratio: ");
//Serial.print(k);
//Serial.print("\n");
waveformMod2.frequencyModulation((float)k);
for (int l = 0; l < numWavType - 1; l++)
{
//Serial.print("Mod Waveform Type: ");
//Serial.print(l);
//Serial.print("\n");
waveform2.begin(l);
for (int m = 0; m < 13; m++) //14
{
//Serial.print("Mod Freq: ");
//Serial.print(freq[m]);
//Serial.print("\n");
waveform2.frequency(freq[m]);
envelope4.noteOn();
envelope2.noteOn();
delay(150);
envelope4.noteOff();
envelope2.noteOff();
delay(50);
Serial.print("FFT: ");
for (int p = 0; p < 40; p++)
{
n = myFFT.read(p);
if (n >= 0.01)
{
Serial.print(n);
Serial.print(" ");
}
else
{
Serial.print(" - "); // don't print "0.00"
}
}
Serial.println();
}
}
}
}
}
Serial.end();
}
void loop()
{
}