#include "Arduino.h"
#include <Audio.h>
// One PSRAM 8MB chip is 95108.93ms of delay
// With a SPI bus of 31.41MHz, and 3 delay objects with 3, 3, and 1 tap, we
// need to do 3 writes and 7 reads of 128*2*8 = 2048 bits, so 20480 bits,
// which will take about 0.68ms. This happens every 2.9ms, so expect
// a CPU load of 22.4%. We get about 19%, so fairly close.
//
// 2024-02-06 - re-testing CPU use %
// Memory Usage Max
// PSRAM64 -> 42.6 42.8
// EXTMEM -> 3.8 4.8
// HEAP -> 0.86 0.97
//
// See also the benchmark comment in extmem.h
#define AUDIO_DELAY_MEMORY AUDIO_MEMORY_23LC1024
//#define AUDIO_DELAY_MEMORY AUDIO_MEMORY_PSRAM64
//#define AUDIO_DELAY_MEMORY AUDIO_MEMORY_PSRAM64_X8
//#define AUDIO_DELAY_MEMORY AUDIO_MEMORY_EXTMEM
//#define AUDIO_DELAY_MEMORY AUDIO_MEMORY_HEAP
// GUItool: begin automatically generated code
AudioSynthWaveformModulated waveformMod; //xy=303,301
AudioEffectFade fader; //xy=506,304
AudioEffectDelayExternal delayExt(AUDIO_DELAY_MEMORY,910.0f); //xy=540,506
AudioEffectDelayExternal delayExt1(AUDIO_DELAY_MEMORY,560.0f); //xy=559,757
AudioMixer4 mixer4; //xy=834,329
AudioMixer4 mixer5; //xy=841,574
AudioOutputI2S i2s; //xy=1041,264
AudioConnection patchCord1(waveformMod, fader);
AudioConnection patchCord2(fader, 0, mixer4, 0);
AudioConnection patchCord3(delayExt, 0, mixer4, 1);
AudioConnection patchCord4(delayExt, 1, mixer4, 2);
AudioConnection patchCord5(delayExt, 1, mixer5, 0);
AudioConnection patchCord6(delayExt, 2, mixer4, 3);
AudioConnection patchCord7(delayExt1, 0, mixer5, 1);
AudioConnection patchCord8(delayExt1, 1, mixer5, 2);
AudioConnection patchCord9(delayExt1, 2, mixer5, 3);
AudioConnection patchCord10(mixer4, 0, delayExt, 0);
AudioConnection patchCord11(mixer4, 0, i2s, 1);
AudioConnection patchCord12(mixer5, 0, delayExt1, 0);
AudioConnection patchCord13(mixer5, 0, i2s, 0);
AudioControlSGTL5000 sgtl5000_1; //xy=1041,311
// GUItool: end automatically generated code
elapsedMillis next;
void setup() {
Serial.begin(115200);
Serial.println("Starting audio...");
AudioMemory(40);
sgtl5000_1.enable();
sgtl5000_1.volume(0.4);
mixer4.gain(0,0.3f);
mixer4.gain(1,0.05f);
mixer4.gain(2,0.10f);
mixer4.gain(3,0.51f);
Serial.println("Set up delayExt object");
delayExt.delay(0,300.0);
delayExt.delay(1,700.0);
delayExt.delay(2,900.0);
mixer5.gain(0,0.1f);
mixer5.gain(1,0.05f);
mixer5.gain(2,0.10f);
mixer5.gain(3,0.71f);
Serial.println("Set up delayExt1 object");
delayExt1.delay(0,69.0);
delayExt1.delay(1,241.0);
delayExt1.delay(2,547.0);
waveformMod.begin(0.001f,1000.0f,WAVEFORM_SINE);
fader.fadeOut(1.0);
delay(5);
waveformMod.amplitude(0.5f);
next = 4900;
}
void loop() {
if (next > 5000)
{
next = 0;
fader.fadeIn(2.0);
delay(40);
Serial.printf("Usage %.2f, max %.2f\n",AudioProcessorUsage(),AudioProcessorUsageMax());
AudioProcessorUsageMaxReset();
fader.fadeOut(2.0);
}
}