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.
- A cursor can have any one of the standard SVG shapes (line, rectangle etc.), whereby areas (rectangles, ellipses etc.)
could be used where the order of the events in the area is uncertain.
- Independently of their shape, specific cursor types also have specific behaviours. (Not all cursors are vertical lines that
move from left to right as time progresses.) Specific cursor type definitions need to be re-usable in different situations, so
they need to be put in one or more re-usable software libraries. (I’m initially developing a single library, so as to
share code across cursor types, and thus investigate the relations between them all.)
- All cursors can spring arbitrarily from place to place in the graphics (e.g. springing to previously visited positions
in order to repeat sections of a score). The space-time link is therefore not simply one-to-one: A cursor can only be in one
place at a time, but a particular position can be related to many times.
The following applications were written as tests for the first cursor types to be defined in my (Javascript) cursors library.
The
score of Fauré’s Après un rêve used in this demonstration is a revised version of
a raw SVG of page 1 of the piece in the W3C Community Group’s GitHub repository.
I’ve only used the first eight bars of the original, completely
re-structuring them and strongly typing the elements. (More precisely: I’ve created and used an SVG <defs> section,
added a
"cwmn" namespace, identified the elements, and given them
"class" attributes).
This demonstration application synchronizes the new score with:
- Four different, external audio files (mp3s, extracted from YouTube recordings).
- A cursor moving at the note, crotchet and measure levels, using a timer running at 50 crotchets/minute.
- A cursor that repeatedly jumps backwards in the score. This simulates the synchronization of repeated sections. There is actually no information about repeats in the score.
There is no playback information (e.g. MIDI) in the score, so the latter two demonstrations are silent.
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.
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.
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/June 2018