// Melody (frequencies in Hz, mapped as per your original NOTE_XX constants)
// Rests are represented as 0
// NOTE_ frequencies, as per the standard pitches.h:
// NOTE_E4  = 329.63
// NOTE_F4  = 349.23
// NOTE_G4  = 392.00
// NOTE_A4  = 440.00
// NOTE_AS4 = 466.16
// NOTE_B4  = 493.88
// NOTE_C5  = 523.25
// NOTE_D5  = 587.33
// NOTE_E5  = 659.25
// NOTE_F5  = 698.46
int melody[] = {
  349.23, 349.23, 349.23, 349.23, 698.46, 698.46, 698.46, 698.46, // F4 f4 F5 f5
  659.25, 659.25, 523.25, 587.33, 659.25, 659.25, 698.46, 698.46, // E5 e5 C5 D5 E5 e5 F5 f5
  466.16, 466.16, 466.16, 466.16, 587.33, 587.33, 587.33, 587.33, // AS4 as4 D5 d5
  523.25, 523.25, 523.25, 523.25, 523.25, 523.25, 523.25, 523.25, // C5 c5
  587.33, 587.33, 587.33, 587.33, 466.16, 466.16, 466.16, 466.16, // D5 d5 AS4 as4
  440.00, 440.00, 349.23, 392.00, 440.00, 440.00, 493.88, 493.88, // A4 a4 F4 f4 G4 g4 A4 a4 B4 b4
  392.00, 329.63, 349.23, 392.00, 440.00, 440.00, // G4 E4 F4 G4 A4 A4
  349.23, 349.23, 349.23, 349.23, 349.23, 349.23, 523.25, 523.25, // F4 F4 F4 F4 F4 F4 C5 C5
  440.00, 523.25, 440.00, 523.25, 440.00, 523.25, 440.00, 523.25, // A4 C5 A4 C5 A4 C5 A4 C5
  466.16, 523.25, 466.16, 523.25, 466.16, 523.25, 466.16, 523.25, // AS4 C5 AS4 C5 AS4 C5 AS4 C5
  587.33, 587.33, 587.33, 587.33, 587.33, 587.33, 587.33, 587.33, // D5 D5 D5 D5 D5 D5 D5 D5
  587.33, 587.33, 587.33, 587.33, 587.33, 587.33, 523.25, 523.25, // D5 D5 D5 D5 D5 D5 C5 C5
  440.00, 523.25, 440.00, 523.25, 440.00, 523.25, 440.00, 523.25, // A4 C5 A4 C5 A4 C5 A4 C5
  493.88, 587.33, 493.88, 587.33, 493.88, 587.33, 493.88, 587.33, // B4 D5 B4 D5 B4 D5 B4 D5
  659.25, 659.25, 659.25, 659.25, 659.25, 659.25, 659.25, 659.25, // E5 E5 E5 E5 E5 E5 E5 E5
  392.00, 392.00, 392.00, 392.00, 466.16, 466.16, 466.16, 466.16, // G4 G4 G4 G4 AS4 AS4 AS4 AS4
  349.23, 349.23, 349.23, 349.23, 698.46, 698.46, 698.46, 698.46, // F4 F4 F4 F4 F5 F5 F5 F5
  659.25, 659.25, 523.25, 587.33, 659.25, 659.25, 698.46, 698.46, // E5 E5 C5 D5 E5 E5 F5 F5
  466.16, 466.16, 466.16, 466.16, 587.33, 587.33, 587.33, 587.33, // AS4 AS4 AS4 AS4 D5 D5 D5 D5
  523.25, 523.25, 523.25, 523.25, 523.25, 523.25, 523.25, 523.25, // C5 C5 C5 C5 C5 C5 C5 C5
  587.33, 587.33, 587.33, 587.33, 466.16, 466.16, 466.16, 466.16, // D5 D5 D5 D5 AS4 AS4 AS4 AS4
  440.00, 440.00, 349.23, 392.00, 440.00, 440.00, 493.88, 493.88, // A4 A4 F4 G4 A4 A4 B4 B4
  392.00, 329.63, 349.23, 392.00, 440.00, 440.00, // G4 E4 F4 G4 A4 A4
  349.23, 349.23, 349.23, 349.23, 349.23, 349.23, 523.25, 523.25, // F4 F4 F4 F4 F4 F4 C5 C5
  440.00, 523.25, 440.00, 523.25, 440.00, 523.25, 440.00, 523.25, // A4 C5 A4 C5 A4 C5 A4 C5
  466.16, 523.25, 466.16, 523.25, 466.16, 523.25, 0, 0,             // AS4 C5 AS4 C5 AS4 C5 rest rest
  493.88, 523.25, 587.33, 659.25, 698.46, 698.46, 698.46, 698.46,   // B4 C5 D5 E5 F5 F5 F5 F5
};
// Durations: 4 = quarter note, 8 = eighth note, etc. (based on L:1/8 and M:4/4)
// For simplicity, let's map 8 -> eighth, 4 -> quarter, 2 -> half, etc.
int noteDurations[] = {
  4,4,4,4,4,4,4,4, // F4 f4
  2,2,2,2,2,2,2,2, // Am e2 cd e2 f2
  4,4,4,4,4,4,4,4, // Bb F4 d4
  8,8,8,8,8,8,8,8, // F c8
  4,4,4,4,4,4,4,4, // Bb D4 Bbm B4
  2,2,2,2,2,2,2,2, // F A2 FG A2 Gm B2
  2,2,2,2,2,2,     // G2 EF C7 G2 F A2
  8,8,8,8,8,8,2,2, // F8 or F6 c2
  2,2,2,2,2,2,2,2, // F AcAc AcAc
  2,2,2,2,2,2,2,2, // Bb BcBc Bbm BcBc
  4,4,4,4,4,4,4,4, // Dm d4 d4
  2,2,2,2,2,2,2,2, // d6 F c2
  2,2,2,2,2,2,2,2, // AcAc AcAc
  2,2,2,2,2,2,2,2, // E7 =BdBd BdBd
  4,4,4,4,4,4,4,4, // Am e4 e4
  4,4,4,4,4,4,4,4, // Gm g4 Bb d4
  4,4,4,4,4,4,4,4, // F4 f4
  2,2,2,2,2,2,2,2, // Am e2 cd e2 f2
  4,4,4,4,4,4,4,4, // Bb F4 d4
  8,8,8,8,8,8,8,8, // F c8
  4,4,4,4,4,4,4,4, // Bb D4 Bbm B4
  2,2,2,2,2,2,2,2, // F A2 FG A2 Gm B2
  2,2,2,2,2,2,     // G2 EF C7 G2 F A2
  8,8,8,8,8,8,2,2, // F6 c2
  2,2,2,2,2,2,2,2, // AcAc AcAc
  2,2,2,2,2,2,2,2, // Bb BcBc Bbm z4 (rest)
  2,2,2,2,4,4,4,4, // Gm B2 C c2 Gm d2 C e2 F f8
};
const int notes = sizeof(melody) / sizeof(melody[0]);
const int buzzerPin = 8; // Change as needed
void setup() {
  Serial.begin(9600);
  Serial.println("");
  delay(3000);
}
int thisNote=0;
void loop() {
    int noteDuration = 750 / noteDurations[thisNote];
      if(melody[thisNote]>0) {
        tone(buzzerPin, melody[thisNote], noteDuration);
      } else {
        noTone(buzzerPin);
      }
      Serial.print(0);
      Serial.print(",");
      Serial.print(800);
      Serial.print(",");
      Serial.print(melody[thisNote]);
      //Serial.print(",");
      //Serial.print(noteDuration);
      Serial.println("");
      delay(noteDuration * 1.1); // Add a slight pause between notes
      thisNote=(thisNote+1) % notes;
}