I couldn't quite figure out what the musical notes meant, but I did find out how it sounds. Unfortunately, I'm a programmer, not a musician, so I couldn't play the music on the piano. The best I could do was to quickly write some Java code that could reproduce the music using MIDI:
import java.io.FileOutputStream;
import javax.sound.midi.MetaMessage;
import javax.sound.midi.MidiEvent;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.ShortMessage;
import javax.sound.midi.Track;
public class PuzzlingSound {
enum Note {
C, C_SHARP, D, D_SHARP, E, F, F_SHARP, G, G_SHARP, A, B_FLAT, B
}
public static void main(String[] args) throws Exception {
Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();
Sequence seq = new Sequence(Sequence.PPQ, 4);
Track t = seq.createTrack();
//set tempo to 203
t.add(new MidiEvent(new MetaMessage(0x51, new byte[] {0x04, (byte) 0x82, (byte) 0x8E}, 3), 0));
//add notes to sequence
addNote(t, Note.D, 5, 100, 1, 3);
addNote(t, Note.E, 5, 100, 4, 1);
addNote(t, Note.E, 5, 100, 5, 1);
addNote(t, Note.G, 4, 100, 6, 1);
addNote(t, Note.D, 5, 100, 7, 2);
addNote(t, Note.D, 5, 100, 9, 3);
addNote(t, Note.G, 5, 100, 12, 1);
addNote(t, Note.F, 5, 100, 13, 2);
addNote(t, Note.F, 4, 100, 15, 1);
addNote(t, Note.F, 5, 100, 16, 1);
addNote(t, Note.D, 5, 100, 17, 4);
addNote(t, Note.D, 5, 100, 21, 1);
addNote(t, Note.D, 5, 100, 22, 3);
addNote(t, Note.D, 5, 100, 25, 2);
addNote(t, Note.F, 5, 100, 27, 2);
addNote(t, Note.F, 4, 100, 29, 2);
addNote(t, Note.C, 6, 100, 31, 2);
addNote(t, Note.F, 5, 100, 33, 3);
addNote(t, Note.G, 5, 100, 36, 0.5);
addNote(t, Note.G, 5, 100, 36.5, 0.5);
addNote(t, Note.A, 5, 100, 37, 0.5);
addNote(t, Note.F, 5, 100, 37.5, 0.5);
addNote(t, Note.G, 5, 100, 38, 0.5);
addNote(t, Note.E, 5, 100, 38.5, 0.5);
addNote(t, Note.D, 5, 100, 39, 1);
addNote(t, Note.F, 5, 100, 40, 1);
addNote(t, Note.E, 5, 100, 41, 1);
addNote(t, Note.F, 5, 100, 42, 2);
addNote(t, Note.F, 5, 100, 44, 1);
addNote(t, Note.F, 5, 100, 45, 2);
addNote(t, Note.F, 4, 100, 47, 1);
addNote(t, Note.D, 5, 100, 48, 1);
addNote(t, Note.C, 5, 100, 49, 1);
addNote(t, Note.B_FLAT, 4, 100, 50, 1);
addNote(t, Note.A, 4, 100, 51, 1);
addNote(t, Note.G, 4, 100, 52, 1);
addNote(t, Note.A, 4, 100, 53, 1);
addNote(t, Note.B_FLAT, 4, 100, 54, 1);
addNote(t, Note.D, 5, 100, 55, 1);
for(double i = 0; i < 1; i += 0.25)
addNote(t, Note.F, 4, 100, 56 + i, 0.25);
addNote(t, Note.F, 5, 100, 57, 3);
addNote(t, Note.D, 5, 100, 60, 1);
addNote(t, Note.F, 5, 100, 61, 0.5);
addNote(t, Note.A, 5, 100, 61.5, 0.5);
addNote(t, Note.E, 5, 100, 62, 1);
addNote(t, Note.F, 5, 100, 63, 1);
addNote(t, Note.G, 5, 100, 64, 1);
addNote(t, Note.D, 5, 100, 65, 1);
addNote(t, Note.D, 5, 100, 66, 0.5);
addNote(t, Note.D, 5, 100, 66.5, 0.5);
addNote(t, Note.F, 4, 100, 67, 2);
MidiSystem.write(seq, 0, new FileOutputStream("C:\\Users\\redacted\\OneDrive\\Puzzling.mid"));
//play sequence on computer
sequencer.setSequence(seq);
sequencer.start();
}
/**
* Adds a note to the musical sequence.
* @param t the musical track
* @param note the note
* @param octave the octave
* @param velocity how fast the note is hit
* @param when when to strike the note in the sequence
* @param time how long to keep the note held
* @throws Exception if an exception is thrown by code this calls
*/
public static void addNote(Track t, Note note, int octave, int velocity, double when, double time) throws Exception {
ShortMessage on = new ShortMessage();
on.setMessage(ShortMessage.NOTE_ON, 1, getNote(note, octave), velocity);
t.add(new MidiEvent(on, (int) (4 * when)));
ShortMessage off = new ShortMessage();
off.setMessage(ShortMessage.NOTE_OFF, 1, getNote(note, octave), velocity);
t.add(new MidiEvent(off, (int) (4 * (when + time))));
}
/**
* Returns MIDI note based on piano note and octave. Helper called by {@link #addNote}.
* @param note the note
* @param octave the octave (Middle C on octave 4)
* @return the MIDI note
* @throws IllegalArgumentException if octave is beyond piano range (-1 to 9)
*/
public static int getNote(Note note, int octave) {
if(octave < -1 || octave > 9)
throw new IllegalArgumentException();
return 12 * (octave + 1) + note.ordinal();
}
}
This was the MIDI file that this code outputted.