const byte brocheBuzzer = 5;
#include "melodies.h"
void jouerMelodie(int * laMelodie, int nbNotes, int metro) {
int wholenote = (60000L * 4) / metro; // this calculates the duration of a whole note in ms (60s/tempo)*4 beats
int divider = 0, noteDuration = 0;
// iterate over the notes of the melody.
// Remember, the array is twice the number of notes (notes + durations)
for (int thisNote = 0; thisNote < nbNotes * 2; thisNote = thisNote + 2) {
divider = laMelodie[thisNote + 1]; // calculates the duration of each note
if (divider > 0) {
noteDuration = (wholenote) / divider; // regular note, just proceed
} else if (divider < 0) {
noteDuration = (wholenote) / abs(divider); // dotted notes are represented with negative durations!!
noteDuration *= 1.5; // increases the duration in half for dotted notes
}
tone(brocheBuzzer, laMelodie[thisNote], noteDuration * 0.9); // 90% du temps de la note jouée et 10% de pause
delay(noteDuration); // durée entre 2 notes
noTone(brocheBuzzer); // arret du son entre 2 notes
}
}
void setup() {
pinMode(brocheBuzzer, OUTPUT);
jouerMelodie(tetris, (sizeof tetris / sizeof * tetris) / 2, 144);
delay(2000);
jouerMelodie(zelda, (sizeof zelda / sizeof * zelda) / 2, 88);
delay(2000);
jouerMelodie(ode, (sizeof ode / sizeof * ode) / 2, 200);
delay(2000);
jouerMelodie(godfather, (sizeof godfather / sizeof * godfather) / 2, 80);
delay(2000);
}
void loop() {}