#include #include #include #include // 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); } }