Christmas Music

I need help with this project. The song is "God Rest Ye Merry Gentlemen" and I want to play this....I am having a lot of trouble with this code. The music is extremely off key and rarely off beat (but sometimes). I need help to put it back on key; I am new to arduino music, and I don't know all of the notes. Thanks for helping!

int speakerPin = 9;

int length = 69;
char notes[] = "ddaagfedcdefga ddaagfedcdefga aAfgavCDagfdefgfgavaagfedfedgfgavCDagfed";
int beats[] = { 2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,4,2,2,2,2,2,2,4,1,1,2,4,2,2,2,2,2,2,2,2,2,2,8 };
int tempo = 100;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'A', 'b', 'C', 'v' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

  // play the tone corresponding to the note name
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}

void setup() {
  pinMode(speakerPin, OUTPUT);
}

void loop() {
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo); // rest
    } else {
      playNote(notes[i], beats[i] * tempo);
    }

    // pause between notes
    delay(tempo / 2); 
  }
}

Are the tone commands producing the notes you want?

I think your method of controlling the timing by fixed delays is probably to blame for any oddities in the tempo, but wouldn't be affecting the notes if you're using the tone library.

Are the tone commands producing the notes you want?

I think your method of controlling the timing by fixed delays is probably to blame for any oddities in the tempo, but wouldn't be affecting the notes if you're using the tone library.

Thank you! Ok...I think I fixed it. Thanks again! :smiley: