Unicode Piano Roll (UPR)
For more detailed documentation, see:
Scores


...wherein:
-
D̅
is single-column shorthand forD♯
-
D̲
is single-column shorthand forD♭
Performances
Unicode Piano Roll can also express performances of scores, where each note in the score is given a timestamp and an intensity value.
-
Each timestamp is on a discrete time scale of whatever precision you choose
-
Each note intensity is an integer in the range [0, 127] (for now)
In addition to those precise numbers (encoded as hex of varints of deltas), a visual overview of the note intensities is included:

This makes use of codepoints from the Block Elements block of Unicode, so:
-
Showing a chord's average intensity can use four glyphs per note (e.g.
███▌
) to express the intensity with 32-possible-values precision -
Showing a chord's relative distribution of intensity can use one glpyh per note in the chord (with 8 possible vertical values each). For example,
▄▇
shows at a glance that the higher note in this 2-note chord is about 40% more intense.
You will also, optionally, be able to include a visualization of each note's delta between when it was predicted to be played and when it was actually played.
(predicted based on the score plus the context of the performance up to that point)
Performing a score
...with evenly-distributed note intensity in the chords:
Using any of:
-
a MIDI keyboard
+the command-line tool
(using CoreMIDI/etc) -
a MIDI keyboard
+the VSCode extension
(using CoreMIDI/etc) -
a MIDI keyboard
+a browser supporting the Web MIDI API
+a webshit version of the command-line tool
(via compilation to WASM)
...you can press any key on the left half of your MIDI keyboard to play the next chord that's tee'd up in the score for the left hand.
This means that as a novice, without having to worry about pressing the correct keys on the keyboard you can:
-
focus on learning how to play the rhythm well
-
enjoy performing the piece, exploring what various timing and intensity subtleties sound like
When you trigger the playing of a chord:
-
Virtual MIDI events will immediately be sent to your system, so the notes can be played as audio from a virtual instrument in GarageBand, MainStage, or any other such app
-
If you wish, the preformance data will be logged. It can be logged to a separate performance file in the background, or you can have the program update the UPR text on the screen as you perform your way through the score, adding performance annotations in the right margin
...with a non-uniform distribution of note intensity in the chords:
Instead of having the entire left half of the keyboard correspond to "play the next chord for the left hand", this is a little more complicated.
You can designate a specific list of MIDI keys on the left half of the keyboard (e.g. F♯ 1 G♯ 1 A♯ 1 C 2 ) to correspond, respectively, to the first, second, third, and fourth notes of whatever chord is being played.
As soon as you press each key, the program will play the corresponding note of the chord.
When you have played each note of the chord, the program is ready to advance to the next chord for the left hand of the score.