Hi Forum, newby here.
- making a quick prototype of a keyboard with teensy-3.2, Audio-shield, 8 tick-switches that plays 8 different notes. using digi-Inputs 0-7.
- using waveform >> envelope >> mixer >> I2S
The code :
#include <Bounce.h>
Bounce button1 = Bounce(0, 15);
Bounce button2 = Bounce(1, 15);
Bounce button3 = Bounce(2, 15);
Bounce button4 = Bounce(3, 15);
Bounce button5 = Bounce(4, 15);
Bounce button6 = Bounce(5, 15);
Bounce button7 = Bounce(6, 15);
Bounce button8 = Bounce(7, 15);
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioSynthWaveform waveform1; //xy=64,187
AudioEffectEnvelope envelope1; //xy=238,176
AudioMixer4 mixer1; //xy=485,164
AudioOutputI2S i2s1; //xy=810,169
AudioConnection patchCord1(waveform1, envelope1);
AudioConnection patchCord2(envelope1, 0, mixer1, 0);
AudioConnection patchCord3(mixer1, 0, i2s1, 0);
AudioConnection patchCord4(mixer1, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; //xy=495,480
// GUItool: end automatically generated code
void setup() {
Serial.begin(9600);
AudioMemory(20);
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
mixer1.gain(0, 0.9);
sgtl5000_1.enable();
sgtl5000_1.volume(0.32);
envelope1.attack(0.1);
envelope1.hold(0);
envelope1.decay(0.1);
envelope1.sustain(0.3);
envelope1.release(2000);
}
void loop() {
button1.update();
button2.update();
button3.update();
button4.update();
button5.update();
button6.update();
button7.update();
button8.update();
if (button1.risingEdge()){
Serial.println("C");
waveform1.begin(0.75,262,WAVEFORM_SAWTOOTH);
waveform1.pulseWidth(0.15);
envelope1.noteOn();
} else if (button1.fallingEdge()){
envelope1.noteOff();
}
.
.
.
.
if (button7.risingEdge()){
Serial.println("B");
waveform1.begin(0.75,493,WAVEFORM_SAWTOOTH);
waveform1.pulseWidth(0.15);
envelope1.noteOn();
} else if (button7.fallingEdge()){
envelope1.noteOff();
}
if (button8.risingEdge()){
Serial.println("C");
waveform1.begin(0.75,523,WAVEFORM_SAWTOOTH);
waveform1.pulseWidth(0.15);
envelope1.noteOn();
} else if (button8.fallingEdge()){
envelope1.noteOff();
}
}
What I hear:
- most of the switches are not triggering anything. the ones that do - are not playing the allocated frequency
- the audio is not consistent - sometimes it plays some times it doesn't.
I am sure that I am doing fundamental mistakes both code and wiring. If anyone can shine a light on those mistakes I'd be very happy.
also - is there a better way to play notes without explicitly writing the frequency? i.e something like C4, D5 etc
Thank you so much
- making a quick prototype of a keyboard with teensy-3.2, Audio-shield, 8 tick-switches that plays 8 different notes. using digi-Inputs 0-7.
- using waveform >> envelope >> mixer >> I2S
The code :
#include <Bounce.h>
Bounce button1 = Bounce(0, 15);
Bounce button2 = Bounce(1, 15);
Bounce button3 = Bounce(2, 15);
Bounce button4 = Bounce(3, 15);
Bounce button5 = Bounce(4, 15);
Bounce button6 = Bounce(5, 15);
Bounce button7 = Bounce(6, 15);
Bounce button8 = Bounce(7, 15);
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioSynthWaveform waveform1; //xy=64,187
AudioEffectEnvelope envelope1; //xy=238,176
AudioMixer4 mixer1; //xy=485,164
AudioOutputI2S i2s1; //xy=810,169
AudioConnection patchCord1(waveform1, envelope1);
AudioConnection patchCord2(envelope1, 0, mixer1, 0);
AudioConnection patchCord3(mixer1, 0, i2s1, 0);
AudioConnection patchCord4(mixer1, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; //xy=495,480
// GUItool: end automatically generated code
void setup() {
Serial.begin(9600);
AudioMemory(20);
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
mixer1.gain(0, 0.9);
sgtl5000_1.enable();
sgtl5000_1.volume(0.32);
envelope1.attack(0.1);
envelope1.hold(0);
envelope1.decay(0.1);
envelope1.sustain(0.3);
envelope1.release(2000);
}
void loop() {
button1.update();
button2.update();
button3.update();
button4.update();
button5.update();
button6.update();
button7.update();
button8.update();
if (button1.risingEdge()){
Serial.println("C");
waveform1.begin(0.75,262,WAVEFORM_SAWTOOTH);
waveform1.pulseWidth(0.15);
envelope1.noteOn();
} else if (button1.fallingEdge()){
envelope1.noteOff();
}
.
.
.
.
if (button7.risingEdge()){
Serial.println("B");
waveform1.begin(0.75,493,WAVEFORM_SAWTOOTH);
waveform1.pulseWidth(0.15);
envelope1.noteOn();
} else if (button7.fallingEdge()){
envelope1.noteOff();
}
if (button8.risingEdge()){
Serial.println("C");
waveform1.begin(0.75,523,WAVEFORM_SAWTOOTH);
waveform1.pulseWidth(0.15);
envelope1.noteOn();
} else if (button8.fallingEdge()){
envelope1.noteOff();
}
}
What I hear:
- most of the switches are not triggering anything. the ones that do - are not playing the allocated frequency
- the audio is not consistent - sometimes it plays some times it doesn't.
I am sure that I am doing fundamental mistakes both code and wiring. If anyone can shine a light on those mistakes I'd be very happy.
also - is there a better way to play notes without explicitly writing the frequency? i.e something like C4, D5 etc
Thank you so much