const int PIN_BUZZ = 3;
const int oct = 3;
const int del = 300;
const float OCTAVE_0[] = {
16.35, //C = 0
17.32, //C# or Db = 1
18.35, //D = 2
19.45, //D# or Eb = 3
20.6, //E = 4
21.83, //F = 5
23.12, //F# or Gb = 6
24.5, //G = 7
25.96, //G# or Ab = 8
27.5, //A = 9
29.14, //A# or Bb = 10
30.87 //B = 11
};
class Note
{
public:
String letter;
int pitch,
octave,
duration;
Note()
{
letter = "C";
pitch = translate(letter);
octave = oct;
duration = del;
}
Note(String p)
{
letter = p;
pitch = translate(p);
octave = oct;
duration = del;
}
Note(String p, int d){
letter = p;
pitch = translate(p);
octave = oct;
duration = d;
}
Note(String p, int o, int d)
{
letter = p;
pitch = translate(p);
octave = o;
duration = d;
}
int translate(String l){
if(l == "C"){
return 0;
}else if (l == "C#" || l == "Db"){
return 1;
}else if(l == "D"){
return 2;
}else if(l == "D#" || l == "Eb"){
return 3;
}else if(l == "E"){
return 4;
}else if(l == "F"){
return 5;
}else if(l == "F#" || l == "Gb"){
return 6;
}else if(l == "G"){
return 7;
}else if(l == "G#" || l == "Ab"){
return 8;
}else if(l == "A"){
return 9;
}else if(l == "A#" || l == "Bb"){
return 10;
}else if(l == "B"){
return 11;
}else{
return 0;
}
}
};
static Note NoteO(String p, int o) {
return Note(p, o, del);
}
/*
Note notes[] = { //Happy B-Day
Note("G", del / 2), Note("G", del / 2),
Note("A"), Note("G"), NoteO("C", oct + 1),
Note("B", del * 2), Note("G", del / 2), Note("G", del / 2),
Note("A"), Note("G"), NoteO("D", oct + 1),
Note("C", oct + 1, del * 2), Note("G", del / 2), Note("G", del / 2),
NoteO("G", oct + 1), NoteO("E", oct + 1), NoteO("C", oct + 1),
Note("B"), Note("A"), Note("F", oct + 1, del / 2), Note("F", oct + 1, del / 2),
NoteO("E", oct + 1), NoteO("C", oct + 1), NoteO("D", oct + 1),
Note("C", oct + 1, del * 2)
};
*/
/*
Note notes[] = { //In Love w/ Stripper
Note("F", del), Note("G", del * 2),
NoteO("D", oct + 1), Note("C", oct + 1, del * 2), Note("A#"),
NoteO("D", oct + 1), Note("C", oct + 1, del * 2), Note("A#"),
NoteO("D", oct + 1), NoteO("C", oct + 1), Note("A#", del * 3),
Note("F", del), Note("G", del * 2),
NoteO("D", oct + 1), Note("C", oct + 1, del * 2), Note("A#"),
NoteO("D", oct + 1), Note("C", oct + 1, del * 2), Note("A#"),
NoteO("D", oct + 1), NoteO("C", oct + 1)
};
*/
Note notes[] = { //Rocket Jump Waltz
Note("G", del * 2),
Note("G", oct + 1, del / 2), Note("B", oct + 1, del * 2),
Note("G", oct + 1, del / 2), Note("E", oct + 1, del / 2), Note("B", del * 2),
Note("E", oct + 1, del / 2), Note("G", oct + 1, del / 2), Note("E", oct + 1, del * 2),
Note("F#", oct + 1, del / 2), Note("E", oct + 1, del / 2), Note("E", oct + 1, del * 2),
Note("G", oct + 1, del / 2), Note("B", oct + 1, del / 2), Note("C", oct + 2, del * 2),
NoteO("D", oct + 2), NoteO("E", oct + 2),
Note("D", oct + 2, del / 2), Note("C", oct + 2, del / 2), Note("B", oct + 1, del * 2),
Note("A", oct + 1, del / 2), Note("B", oct + 1, del / 2), Note("C", oct + 2, del * 2),
Note("E", oct + 2, del / 2), Note("G", oct + 2, del),
Note("A", oct + 2, del / 2), Note("A", oct + 2, del * 2),
Note("B", oct + 2, del / 2), Note("G", oct + 2, del * 2),
Note("F#", oct + 2, del / 2), Note("E", oct + 2, del / 2), Note("A", oct + 2, del * 2),
Note("G", oct + 2, del / 2), Note("F#", oct + 2, del * 2),
Note("E", oct + 2, del / 2), Note("E", oct + 2, del * 2),
Note("D#", oct + 2, del / 2), Note("B", oct + 1, del / 2), Note("D#", oct + 2, del), Note("B", oct + 1, del),
Note("A", oct + 1, del / 2), Note("G", oct + 1, del * 2),
Note("E", oct + 1, del / 2), Note("E", oct + 1, del * 2),
Note("G", oct + 1, del / 2), Note("B", oct + 1, del / 2), Note("E", oct + 2, del * 2),
Note("D", oct + 2, del / 2), Note("C", oct + 2, del / 2), Note("D", oct + 2, del),
Note("E", oct + 2, del / 2), Note("C", oct + 2, del),
Note("D", oct + 2, del / 2), Note("B", oct + 1, del * 2),
Note("G", oct + 1, del / 2), Note("C", oct + 2, del / 2), Note("E", oct + 2, del),
Note("G", oct + 2, del / 2), Note("G", oct + 2, del * 2),
Note("F#", oct + 2, del / 2), Note("G", oct + 2, del / 2), Note("A", oct + 2, del),
Note("F#", oct + 2, del), Note("A", oct + 2, del * 2),
Note("G", oct + 2, del / 2), Note("F#", oct + 2, del / 2), Note("E", oct + 2, del / 2), Note("F#", oct + 2, del / 2), Note("E", oct + 2, del * 2),
Note("D", oct + 2, del / 2), Note("C", oct + 2, del / 2), Note("B", oct + 1, del * 2),
Note("A", oct + 1, del / 2), Note("G", oct + 1, del / 2), Note("E", oct + 1, del * 2),
Note("D", oct + 1, del / 2), Note("E", oct + 1, del / 2), Note("E", oct + 1, del),
Note("F#", oct + 1, del / 2), Note("F#", oct + 1, del * 2),
Note("F#", oct + 1, del / 2), Note("B", oct + 1, del / 2), Note("D#", oct + 2, del * 2),
Note("D#", oct + 2, del / 2), Note("E", oct + 2, del / 2), Note("F#", oct + 2, del), Note("B", oct + 2, del),
Note("B", oct + 2, del), Note("A", oct + 2, del / 2), Note("G", oct + 2, del / 2), Note("E", oct + 2, del)
};
void setup() {
pinMode(PIN_BUZZ, OUTPUT);
Serial.begin(9600);
}
void loop() {
playMusic();
}
void playMusic(){
int arraySize = sizeof(notes) / sizeof(notes[0]);
for(int i = 0; i < arraySize; i++){
int pow = 1;
Note currNote = notes[i];
Serial.print(currNote.letter);
Serial.print(" ");
for (int j = 0; j < currNote.octave; j++){
pow *= 2;
}
int note = OCTAVE_0[currNote.pitch] * pow;
tone(PIN_BUZZ, note);
delay(currNote.duration);
tone(PIN_BUZZ, 0, 30);
}
tone(PIN_BUZZ, 0);
delay(1000);
Serial.println();
}