notation.se

How it works

A MIDI file records when each key went down and came up. Sheet music needs much more than that: where the beats and barlines are, which hand plays what, how each note is spelled, and which rhythm a musician would write for what was played. Turning one into the other is guesswork, and the guessing is hardest when someone played freely, without a click.

Two kinds of MIDI file

Grid files were recorded to a click or written in a sequencer. The beat is already in the file, and notation.se reads it from there. Free-played files come straight off a digital piano or were played without a click. Their timing has nothing to do with the file’s grid, so the beat has to be inferred from the playing. notation.se tells you which kind you dropped in.

What runs today

The first version uses MuseScore’s MIDI importer and engraver, compiled to run inside your browser (webmscore). It does well on grid files. On free-played files it does about as well as MuseScore itself, which is not well enough. Our own model, trained on synthetic performances of public-domain and original music, is the next step.

How we measure

We score every engine on the same tests: 59 recorded piano performances used in published research (the ASAP test set), and our own set of pop, jazz, waltz, funk and 6/8 pieces in three versions each. Errors are counted the way the research literature counts them: wrong or missing notes, plus how many rhythm and note-length corrections it takes to turn the output into the right score. Lower is better.

EngineTestAverage error
MuseScore 4 importer (today’s engine)Grid files, our set6.8
MuseScore 4 importer (today’s engine)Free-played, our set15.2
MuseScore 4 importer (today’s engine)Concert performances (ASAP)22.7
Best published research system (2024)Concert performances (ASAP)11.3*

*As reported by its authors, measured with their own tool. Our numbers use our own implementation of the same metric, which reproduces the authors’ MuseScore result to within a point (22.7 against 23.4).

Privacy

Everything happens on your device. See privacy.