#include <Arduino.h>
#include <Audio.h>
#include <SD.h>
#include <TeensyVariablePlayback.h>
#include <SPI.h>
#include <Wire.h> // SERIAL+AUDIO+MIDI
#include <Keypad.h>
const uint8_t RowS = 7; // 7 Rows
const uint8_t COLS = 4; //4 columns
char keys[RowS][COLS] = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 },
{ 17, 18, 19, 20 },
{ 21, 22, 23, 24 },
{ 25, 26, 27, 28 }
};
uint8_t RowPins[RowS] = { 33, 34, 35, 36, 37, 38, 39 };
uint8_t colPins[COLS] = { 40, 41, 14, 16 };
Keypad kpd = Keypad(makeKeymap(keys), RowPins, colPins, RowS, COLS);
AudioPlaySdResmp playSdWav1;
AudioPlaySdResmp playSdWav2;
AudioEffectGranular granular1;
AudioPlaySdWav playArrayWav1;
AudioMixer4 mixer1;
AudioMixer4 mixer2;
AudioOutputI2S i2s2;
AudioConnection patchCord1(playSdWav1, 0, mixer2, 0);
AudioConnection patchCord2(playSdWav1, 0, mixer2, 1);
AudioConnection patchCord3(playArrayWav1, 0,granular1,0 );
AudioConnection patchCord9(granular1,0,mixer1,0);
AudioConnection patchCord7(mixer1, 0, i2s2, 1);
AudioConnection patchCord8(mixer1, 0, i2s2, 0);
AudioControlSGTL5000 audioShield;
#define NUM_WAVS 16 // avoid silly mistakes
float Speed = 1.00;
bool PLAYING = false;
int Song_length = 0;
const char *SMP_WAV[NUM_WAVS] = { "01.WAV", "02.WAV", "03.WAV", "04.WAV", "05.WAV", "06.WAV", "07.WAV", "08.WAV", "09.WAV", "10.WAV", "11.WAV", "12.WAV", "13.WAV", "14.WAV", "15.WAV", "16.WAV" };
EXTMEM int16_t granularBuffer[5292000]; // 32000 //5292000
const uint32_t bufferSize = sizeof(granularBuffer) / sizeof(int16_t);
void setup() {
Serial.begin(57600);
if (!(SD.begin(BUILTIN_SDCARD))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);
}
}
kpd.setHoldTime(1500);
AudioMemory(128);
audioShield.enable();
audioShield.volume(0.5);
// Ensure the buffer is initialized (EXTMEM is not zeroed by default)
memset(granularBuffer, 0, sizeof(granularBuffer)); // works ww
// Set up the granular effect to use this buffer
granular1.begin(granularBuffer, bufferSize); // works ww
}
void loop() {
//----------------------SERIAL.AVALABLE-------------------------
if (Serial.available() > 0) {
String incomingByte = Serial.readString();
incomingByte.trim();
if (incomingByte=="M") {
Speed=Speed+ 0.5;
granular1.beginFreeze(0); // sizes[0] // nnnn
granular1.setSpeed(Speed);
Serial.println(Speed);
}
if (incomingByte=="9") {
Speed = Speed+0.1;
Serial.println(Speed);
granular1.beginFreeze(0); //
granular1.setSpeed(Speed);
}
if (incomingByte=="8") {
Speed = Speed-0.1;
Serial.println(Speed);
granular1.beginFreeze(0); //
granular1.setSpeed(Speed);
}
}
//----------------------SERIAL.AVALABLE-------------------------
if (!playArrayWav1.isPlaying()) {
playArrayWav1.play("01.WAV");
if (PLAYING==false) {
granular1.beginFreeze(2264); // 2264
PLAYING=true;
}
}
granular1.setSpeed(Speed);
}