/*
c
* Vocal compression example
* Author: J. Shima
*
- released
The audio board uses the following pins.
6 - MEMCS
7 - MOSI
9 - BCLK
10 - SDCS
11 - MCLK
12 - MISO
13 - RX
14 - SCLK
15 - VOL
18 - SDA
19 - SCL
22 - TX
23 -
*/
#include <Audio.h>
#include <Wire.h>
#include <SD.h>
#include <SPI.h>
#include <SerialFlash.h>
// Use these with the audio adaptor board
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14
const int myInput = AUDIO_INPUT_MIC;
//const int myInput = AUDIO_INPUT_LINEIN;
// GUItool: begin automatically generated code
AudioInputI2S audioInput;
AudioAnalyzeRMS rms;
AudioEffectCompressor compress;
AudioOutputI2S audioOutput;
AudioConnection patchCord1(audioInput, 0, rms, 0);
AudioConnection patchCord2(audioInput, 0, compress, 0);
AudioConnection patchCord3(compress, 0, audioOutput, 0);
AudioConnection patchCord4(compress, 0, audioOutput, 1);
AudioControlSGTL5000 audioShield;
#define ALPHA 0.8 // time constant of 45ms
//
//---- Global variables -----
float rms_cur;
float env = 0;
unsigned long last_time = millis();
int cnt = 0;
//================ main loop ==============================
void loop()
{
// timer loop at 10ms
while(millis() - last_time < 10);
last_time = millis();
//update env (pwr) for compressor
if(rms.available())
{
rms_cur = rms.read();
env = rms_cur + ALPHA*(env - rms_cur);
compress.update_pwr( env ); //update compressor cN est
}
if(++cnt >= 100) //every sec
{
cnt = 0;
Serial.print("Comp gain: ");
Serial.println(compress.get_gain());
}
} //loop
//------------ Init routine ---------------
void setup()
{
int waitcnt;
Serial.begin(9600);
delay(300);
// ----------------------
AudioMemory(10);
audioShield.enable();
audioShield.inputSelect(myInput);
audioShield.volume(0.5);
compress.begin(1, 0.5, 4); //en, thresh c0, comp ratio p
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN)))
{
waitcnt = 0;
// stop here, but print a message repetitively
while (1)
{
Serial.println("Unable to access the SD card");
if(++waitcnt >= 5)
{
Serial.println("Could not find SD card, continuing....");
break;
}
}
}
Serial.println("setup done");
} //setup()