On Cursors

These two applications were written during discussions with the W3C Music Notation Community Group about the synchronization of scores (graphical information) with performances (temporal information).

Cursors are the lowest level at which time and space can be linked, so its important to be precise about their other characteristics.
The following applications were written as tests for the first cursor types to be defined in my (Javascript) cursors library.

1: Synchronizing multiple audio files with common western music notation

This demo application synchronizes four different performances of Fauré’s Après un rêve with the first page of the score.
The score is a copy of the page in the W3C Music Notation Community Group’s GitHub repository .
The audio files are extracts from the following recordings found on YouTube:

2: A performance score of Dennis Bathory-Kitsz’ Aurora Cagealis

May 2018: This performance score is only guaranteed to work in the Chrome and Firefox browsers.
Other browsers will also work if and when they implement the required standards.

Performance instructions

This performance score (HTML and Javascript) is for up to 6 players. To view all six star-fields, use the browser's zoom, scroll and full-screen commands.
This score has no synchronized audio, but could be used in live performances. In that case, each player would have their own computer, and set the display to contain just their own star field.
On a signal, the players would click their individual start buttons, and perform the score according to the original performance instructions while following their individual cursors.
A real performance should be at the original (x1) speed. The other speed options are just for demonstration or rehearsal purposes.

Technical realization

According to the original performance instructions, the cursor’s speed should be constant along the staves, so the angular velocity increases as the cursor moves inwards.
In this performance version, each cursor's speed is related to Javascript's performance.now() function, which returns the number of (floating point) milliseconds since the browser started up. That value is used to calculate the time elapsed since the performer clicked the start button, and thus to calculate each cursor’s current position on the star-field. Time thus flows constantly, in direct proportion to the changing value of performance.now().
Other, non-constant time-flows could easily be arranged (for other scores) by making the rate of flow dependent on the elapsed time. It would also be possible to realize a “conducting option” by completely replacing performance.now() with some other form of global time control. See the conducting option for the Assistant Performer.


Many thanks to Dennis Bathory-Kitsz for permission to use his score, and for his help during the realization of this version. A recording of the first peformance (by an ad hoc ensemble at the 1992 Vermont Composers Festival), can be found on his web site here.

ji www May 2018