AudioInputUSB usb1;
AudioInputI2S i2s1;
AudioMixer4 LEFTC;
AudioMixer4 RIGHTC;
AudioPlaySdWav SDwav;
AudioOutputI2S i2sout;
AudioMixer4 mixer1;
AudioMixer4 mixer2;
AudioAnalyzePeak peak_L;
AudioAnalyzePeak peak_R;
AudioConnection patchCord1(usb1, 0, LEFTC, 0);
AudioConnection patchCord2(usb1, 1, RIGHTC, 0);
AudioConnection patchCord3(i2s1, 0, LEFTC, 1);
AudioConnection patchCord4(i2s1, 1, RIGHTC, 1);
AudioConnection patchCord5(LEFTC, 0, mixer1, 0);
AudioConnection patchCord6(RIGHTC, 0, mixer2, 0);
AudioConnection patchCord7(SDwav, 0, mixer1, 1);
AudioConnection patchCord8(SDwav, 1, mixer2, 1);
AudioConnection patchCord9(mixer1, 0, i2sout, 0);
AudioConnection patchCord10(mixer2, 0, i2sout, 1);
AudioConnection patchCord11(LEFTC, 0, peak_L, 0);
AudioConnection patchCord12(RIGHTC, 0, peak_R, 0);
AudioControlSGTL5000 CHIP;
IntervalTimer FadeSDin;
IntervalTimer FadeSDout;
//void DebugSermon() {}
class FADECLASS {
public:
void in(volatile int ch, volatile float Gain) {
mixer1.gain(ch, Gain);
mixer2.gain(ch, Gain);
}
void out(volatile int ch, volatile float Gain) {
mixer1.gain(ch, 1 - Gain);
mixer2.gain(ch, 1 - Gain);
}
};
FADECLASS Fade;
void SDin() {
noInterrupts();
lockT();
Fade.in(1, G);
Fade.out(0, G);
G += 0.1;
if (G > 1.1) {
FadeSDin.end();
}
unlockT();
interrupts();
}
void SDout() {
noInterrupts();
lockT();
Fade.in(0, G2);
Fade.out(1, G2);
G2 += 0.1;
if (G2 > 1.1) {
delayofchance = millis() - 50;
delaybegun = true;
FadeSDout.end();
SDwav.stop();
}
unlockT();
interrupts();
}
////////////////////////////////////////////////////////////////////////////
void HandleAudio() {
//Serial.print("Audio: ");
//Serial.println(threads.id());
//while (1) {
unsigned long curr = millis();
if (SDwav.isPlaying() == false && plays == true && FDOUT == false) {
noInterrupts();
lockT();
SDwav.play(currPlay);
delay(5);
plays = false;
FDOUT = true;
waitSonder = false;
G = 0;
pre = curr;
FadeSDin.begin(SDin, 500000);
unlockT();
interrupts();
}
if (curr - pre > AudioTime + FadeOffset && FDOUT == true) {
G2 = 0;
FadeSDout.begin(SDout, 500000);
FDOUT = false;
}
if (DebugBoot && Debugdelay >= Debugwait) {
Debugdelay = 0;
//DebugSermon();
}
threads.yield();
//}
}