Making LEDs blink with my music program

I am new to programming and the Arduino.

I modified the toneMelody sketch to play Twinkle Twinkle Little Star:

// notes in the melody:
int melody[] = {
NOTE_C3,NOTE_C3, NOTE_G3,NOTE_G3, NOTE_A3,NOTE_A3, NOTE_G3,NOTE_F3, NOTE_F3, NOTE_E3, NOTE_E3, NOTE_D3, NOTE_D3, NOTE_C3,NOTE_G3,NOTE_G3, NOTE_F3, NOTE_F3,NOTE_E3, NOTE_E3, NOTE_D3,NOTE_G3,NOTE_G3, NOTE_F3, NOTE_F3,NOTE_E3, NOTE_E3, NOTE_F3, NOTE_E3, NOTE_D3,NOTE_C3,NOTE_C3, NOTE_G3,NOTE_G3, NOTE_A3,NOTE_A3, NOTE_G3,NOTE_F3, NOTE_F3, NOTE_E3, NOTE_E3, NOTE_D3, NOTE_D3, NOTE_C3};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,8,8,4,4,4,4,4,4,4,4,2,4,4,4,4,4,4,2 };

void setup() {
// iterate over the notes of the melody:
for (int thisNote = 0; thisNote < 55; thisNote++) {

// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);

// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(42);
}
}

void loop() {
// no need to repeat the melody.
}

I want to know if I can get one or more LEDs to blink along with the music?

Thank you,

Anna

You could use the note duration as an ON/OFF delay. longer duration = slower blink, shorter duration = quicker blink.
DONT USE DELAY()! You will need to use the same method in the Blink without delay example.

int pauseBetweenNotes = noteDuration * 1.30; // this is not going to work, it's even like this in the example.
uhmm, "noTone(42);" does this look correct?

I was thinking making an array LED pins, call them out when the note was called:

//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
digitalWrite(pinsArray[thisNote], HIGH);
    tone(8, melody[thisNote],noteDuration);
    delay(pauseBetweenNotes);
    // stop the tone playing:
noTone(42);
digitalWrite (pinsArray[thisNote], LOW);

Haven't worked out in my mind yet how

pinsArray[thisNote],

would work.
Ah, its just a number from 0 to 54, so just another array like melody[] with the LED pins instead. Crude manual method, will get the job done tho.

Thank you! I will try that. .. I do not think that the noTone(42); works.. there is still a note that plays that I trying to get to stop.

Try this.

#include "pitches.h"
int melody[] = {
  NOTE_C3, NOTE_C3, NOTE_G3, NOTE_G3, NOTE_A3,NOTE_A3, NOTE_G3,NOTE_F3, NOTE_F3, NOTE_E3, NOTE_E3, NOTE_D3, NOTE_D3, NOTE_C3,NOTE_G3,NOTE_G3, NOTE_F3, NOTE_F3,NOTE_E3, NOTE_E3, NOTE_D3,NOTE_G3,NOTE_G3, NOTE_F3, NOTE_F3,NOTE_E3, NOTE_E3, NOTE_F3, NOTE_E3, NOTE_D3,NOTE_C3,NOTE_C3, NOTE_G3,NOTE_G3, NOTE_A3,NOTE_A3, NOTE_G3,NOTE_F3, NOTE_F3, NOTE_E3, NOTE_E3, NOTE_D3, NOTE_D3, NOTE_C3};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,8,8,4,4,4,4,4,4,4,4,2,4,4,4,4,4,4,2};

void setup() {
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 44; thisNote++) {

    // to calculate the note duration, take one second 
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
     while(pauseBetweenNotes != 0){
       pauseBetweenNotes--;
       analogWrite(9,pauseBetweenNotes);// LED is on PIN 9 to GND
     }
    // stop the tone playing:
    noTone(8);
  }
}

void loop() {
  // no need to repeat the melody.
}

If anyone would like to know.

I figured out how to make it work by incorporating the basic blink sketch. I am having trouble making the speaker stop at the end though.

*/
 #include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_C3,NOTE_C3, NOTE_G3,NOTE_G3, NOTE_A3,NOTE_A3, NOTE_G3,NOTE_F3, NOTE_F3, NOTE_E3, NOTE_E3, NOTE_D3, NOTE_D3, NOTE_C3,NOTE_G3,NOTE_G3, NOTE_F3, NOTE_F3,NOTE_E3, NOTE_E3, NOTE_D3,NOTE_G3,NOTE_G3, NOTE_F3, NOTE_F3,NOTE_E3, NOTE_E3, NOTE_F3, NOTE_E3, NOTE_D3,NOTE_C3,NOTE_C3, NOTE_G3,NOTE_G3, NOTE_A3,NOTE_A3, NOTE_G3,NOTE_F3, NOTE_F3, NOTE_E3, NOTE_E3, NOTE_D3, NOTE_D3, NOTE_C3};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,8,8,4,4,4,4,4,4,4,4,2,4,4,4,4,4,4,2 };
int led = 13;

void setup() {
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 55; thisNote++) {

    // to calculate the note duration, take one second 
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
   
    
    digitalWrite(led, HIGH);
   delay (noteDuration);
  digitalWrite (led, LOW); 
  delay(noteDuration);}
  
    // stop the tone playing:
  noTone(8)
  
  
}
  void loop() {
    
}

The code I posted does exactly what you want.

I could help looking at this and it give me what I need to make my song play on my led!!! it work great but one question how can I make it play on the loop (keep playing) ?