126 lines
3.9 KiB
C++
126 lines
3.9 KiB
C++
#include <Audio.h>
|
|
#include <Wire.h>
|
|
#include <SPI.h>
|
|
#include <SD.h>
|
|
#include <SerialFlash.h>
|
|
#include <Bounce.h>
|
|
|
|
// WAV files converted to code by wav2sketch
|
|
#include "AudioSampleSnare.h" // http://www.freesound.org/people/KEVOY/sounds/82583/
|
|
#include "AudioSampleTomtom.h" // http://www.freesound.org/people/zgump/sounds/86334/
|
|
#include "AudioSampleHihat.h" // http://www.freesound.org/people/mhc/sounds/102790/
|
|
#include "AudioSampleKick.h" // http://www.freesound.org/people/DWSD/sounds/171104/
|
|
#include "AudioSampleGong.h" // http://www.freesound.org/people/juskiddink/sounds/86773/
|
|
#include "AudioSampleCashregister.h" // http://www.freesound.org/people/kiddpark/sounds/201159/
|
|
|
|
// Create the Audio components. These should be created in the
|
|
// order data flows, inputs/sources -> processing -> outputs
|
|
//
|
|
AudioPlayMemory sound0;
|
|
AudioPlayMemory sound1; // six memory players, so we can play
|
|
AudioPlayMemory sound2; // all six sounds simultaneously
|
|
AudioPlayMemory sound3;
|
|
AudioPlayMemory sound4;
|
|
AudioPlayMemory sound5;
|
|
AudioMixer4 mix1; // two 4-channel mixers are needed in
|
|
AudioMixer4 mix2; // tandem to combine 6 audio sources
|
|
AudioOutputI2S headphones;
|
|
AudioOutputAnalog dac; // play to both I2S audio board and on-chip DAC
|
|
|
|
// Create Audio connections between the components
|
|
//
|
|
AudioConnection c1(sound0, 0, mix1, 0);
|
|
AudioConnection c2(sound1, 0, mix1, 1);
|
|
AudioConnection c3(sound2, 0, mix1, 2);
|
|
AudioConnection c4(sound3, 0, mix1, 3);
|
|
AudioConnection c5(mix1, 0, mix2, 0); // output of mix1 into 1st input on mix2
|
|
AudioConnection c6(sound4, 0, mix2, 1);
|
|
AudioConnection c7(sound5, 0, mix2, 2);
|
|
AudioConnection c8(mix2, 0, headphones, 0);
|
|
AudioConnection c9(mix2, 0, headphones, 1);
|
|
AudioConnection c10(mix2, 0, dac, 0);
|
|
|
|
// Create an object to control the audio shield.
|
|
//
|
|
AudioControlSGTL5000 audioShield;
|
|
|
|
// Bounce objects to read six pushbuttons (pins 0-5)
|
|
//
|
|
Bounce button0 = Bounce(0, 5);
|
|
Bounce button1 = Bounce(1, 5); // 5 ms debounce time
|
|
Bounce button2 = Bounce(2, 5);
|
|
Bounce button3 = Bounce(3, 5);
|
|
Bounce button4 = Bounce(4, 5);
|
|
Bounce button5 = Bounce(5, 5);
|
|
|
|
|
|
void setup() {
|
|
// Configure the pushbutton pins for pullups.
|
|
// Each button should connect from the pin to GND.
|
|
pinMode(0, INPUT_PULLUP);
|
|
pinMode(1, INPUT_PULLUP);
|
|
pinMode(2, INPUT_PULLUP);
|
|
pinMode(3, INPUT_PULLUP);
|
|
pinMode(4, INPUT_PULLUP);
|
|
pinMode(5, INPUT_PULLUP);
|
|
|
|
// Audio connections require memory to work. For more
|
|
// detailed information, see the MemoryAndCpuUsage example
|
|
AudioMemory(10);
|
|
|
|
// turn on the output
|
|
audioShield.enable();
|
|
audioShield.volume(0.5);
|
|
|
|
// by default the Teensy 3.1 DAC uses 3.3Vp-p output
|
|
// if your 3.3V power has noise, switching to the
|
|
// internal 1.2V reference can give you a clean signal
|
|
//dac.analogReference(INTERNAL);
|
|
|
|
// reduce the gain on mixer channels, so more than 1
|
|
// sound can play simultaneously without clipping
|
|
mix1.gain(0, 0.4);
|
|
mix1.gain(1, 0.4);
|
|
mix1.gain(2, 0.4);
|
|
mix1.gain(3, 0.4);
|
|
mix2.gain(1, 0.4);
|
|
mix2.gain(2, 0.4);
|
|
}
|
|
|
|
void loop() {
|
|
// Update all the button objects
|
|
button0.update();
|
|
button1.update();
|
|
button2.update();
|
|
button3.update();
|
|
button4.update();
|
|
button5.update();
|
|
|
|
// When the buttons are pressed, just start a sound playing.
|
|
// The audio library will play each sound through the mixers
|
|
// so any combination can play simultaneously.
|
|
//
|
|
if (button0.fallingEdge()) {
|
|
sound0.play(AudioSampleSnare);
|
|
}
|
|
if (button1.fallingEdge()) {
|
|
sound1.play(AudioSampleTomtom);
|
|
}
|
|
if (button2.fallingEdge()) {
|
|
sound2.play(AudioSampleHihat);
|
|
}
|
|
if (button3.fallingEdge()) {
|
|
sound3.play(AudioSampleKick);
|
|
}
|
|
if (button4.fallingEdge()) {
|
|
// comment this line to work with Teensy 3.0.
|
|
// the Gong sound is very long, too much for 3.0's memory
|
|
sound4.play(AudioSampleGong);
|
|
}
|
|
if (button5.fallingEdge()) {
|
|
sound5.play(AudioSampleCashregister);
|
|
}
|
|
|
|
}
|
|
|