migration from 'smp_v1p0' dev. for 'sampler' -> skip irrelavant note msg. and keep playing
143 lines
3.7 KiB
C++
143 lines
3.7 KiB
C++
#include <Audio.h>
|
|
#include <Wire.h>
|
|
#include <SD.h>
|
|
#include <SPI.h>
|
|
#include <SerialFlash.h>
|
|
|
|
#include "chords.h"
|
|
|
|
// Special thanks to Matthew Rahtz - http://amid.fish/karplus-strong/
|
|
|
|
AudioSynthKarplusStrong string1;
|
|
AudioSynthKarplusStrong string2;
|
|
AudioSynthKarplusStrong string3;
|
|
AudioSynthKarplusStrong string4;
|
|
AudioSynthKarplusStrong string5;
|
|
AudioSynthKarplusStrong string6;
|
|
AudioMixer4 mixer1;
|
|
AudioMixer4 mixer2;
|
|
AudioOutputI2S i2s1;
|
|
AudioConnection patchCord1(string1, 0, mixer1, 0);
|
|
AudioConnection patchCord2(string2, 0, mixer1, 1);
|
|
AudioConnection patchCord3(string3, 0, mixer1, 2);
|
|
AudioConnection patchCord4(string4, 0, mixer1, 3);
|
|
AudioConnection patchCord5(mixer1, 0, mixer2, 0);
|
|
AudioConnection patchCord6(string5, 0, mixer2, 1);
|
|
AudioConnection patchCord7(string6, 0, mixer2, 2);
|
|
AudioConnection patchCord8(mixer2, 0, i2s1, 0);
|
|
AudioConnection patchCord9(mixer2, 0, i2s1, 1);
|
|
AudioControlSGTL5000 sgtl5000_1;
|
|
|
|
const int finger_delay = 5;
|
|
const int hand_delay = 220;
|
|
|
|
int chordnum=0;
|
|
|
|
void setup() {
|
|
AudioMemory(15);
|
|
sgtl5000_1.enable();
|
|
sgtl5000_1.volume(0.6);
|
|
mixer1.gain(0, 0.15);
|
|
mixer1.gain(1, 0.15);
|
|
mixer1.gain(2, 0.15);
|
|
mixer1.gain(3, 0.15);
|
|
mixer2.gain(1, 0.15);
|
|
mixer2.gain(2, 0.15);
|
|
delay(700);
|
|
}
|
|
|
|
void strum_up(const float *chord, float velocity);
|
|
void strum_dn(const float *chord, float velocity);
|
|
|
|
void loop() {
|
|
const float *chord;
|
|
|
|
// each time through the loop, play a different chord
|
|
if (chordnum == 0) {
|
|
chord = Cmajor;
|
|
Serial.println("C major");
|
|
chordnum = 1;
|
|
} else if (chordnum == 1) {
|
|
chord = Gmajor;
|
|
Serial.println("G major");
|
|
chordnum = 2;
|
|
} else if (chordnum == 2) {
|
|
chord = Aminor;
|
|
Serial.println("A minor");
|
|
chordnum = 3;
|
|
} else {
|
|
chord = Eminor;
|
|
Serial.println("E minor");
|
|
chordnum = 0;
|
|
}
|
|
|
|
// then strum the 6 string several times
|
|
strum_up(chord, 1.0);
|
|
delay(hand_delay);
|
|
delay(hand_delay);
|
|
strum_up(chord, 1.0);
|
|
delay(hand_delay);
|
|
strum_dn(chord, 0.8);
|
|
delay(hand_delay);
|
|
delay(hand_delay);
|
|
strum_dn(chord, 0.8);
|
|
delay(hand_delay);
|
|
strum_up(chord, 1.0);
|
|
delay(hand_delay);
|
|
strum_dn(chord, 0.8);
|
|
delay(hand_delay);
|
|
strum_up(chord, 1.0);
|
|
delay(hand_delay);
|
|
delay(hand_delay);
|
|
strum_up(chord, 1.0);
|
|
delay(hand_delay);
|
|
strum_dn(chord, 0.7);
|
|
delay(hand_delay);
|
|
delay(hand_delay);
|
|
strum_dn(chord, 0.7);
|
|
delay(hand_delay);
|
|
strum_up(chord, 1.0);
|
|
delay(hand_delay);
|
|
strum_dn(chord, 0.7);
|
|
delay(hand_delay);
|
|
|
|
Serial.print("Max CPU Usage = ");
|
|
Serial.print(AudioProcessorUsageMax(), 1);
|
|
Serial.println("%");
|
|
}
|
|
|
|
void strum_up(const float *chord, float velocity)
|
|
{
|
|
if (chord[0] > 20.0) string1.noteOn(chord[0], velocity);
|
|
delay(finger_delay);
|
|
if (chord[1] > 20.0) string2.noteOn(chord[1], velocity);
|
|
delay(finger_delay);
|
|
if (chord[2] > 20.0) string3.noteOn(chord[2], velocity);
|
|
delay(finger_delay);
|
|
if (chord[3] > 20.0) string4.noteOn(chord[3], velocity);
|
|
delay(finger_delay);
|
|
if (chord[4] > 20.0) string5.noteOn(chord[4], velocity);
|
|
delay(finger_delay);
|
|
if (chord[5] > 20.0) string6.noteOn(chord[5], velocity);
|
|
delay(finger_delay);
|
|
}
|
|
|
|
void strum_dn(const float *chord, float velocity)
|
|
{
|
|
if (chord[5] > 20.0) string1.noteOn(chord[5], velocity);
|
|
delay(finger_delay);
|
|
if (chord[4] > 20.0) string2.noteOn(chord[4], velocity);
|
|
delay(finger_delay);
|
|
if (chord[3] > 20.0) string3.noteOn(chord[3], velocity);
|
|
delay(finger_delay);
|
|
if (chord[2] > 20.0) string4.noteOn(chord[2], velocity);
|
|
delay(finger_delay);
|
|
if (chord[1] > 20.0) string5.noteOn(chord[1], velocity);
|
|
delay(finger_delay);
|
|
if (chord[0] > 20.0) string6.noteOn(chord[0], velocity);
|
|
delay(finger_delay);
|
|
}
|
|
|
|
|
|
|