Assistant Performer

Introduction to Moritz Assistant Composer Assistant Performer Krystals 4.0


This is an experimental Web MIDI application that gives a single performer control over the performance of a music score displayed in a browser.
The application uses MIDI input and output devices, and scores stored in a special SVG format which has been enhanced to contain MIDI information.
It is written in HTML5 and Javascript, and is being developed as open source software on GitHub.

The application is normally tested in the latest version of Chrome on Windows 10.
Firefox testing will resume when they have completed their implementation of the Web MIDI API (currently in the pipeline).

In a related project, I am currently developing a Resident Sf2 Synth (also on GitHub). This is a software synthesizer that can be sent MIDI messages by any host software, providing that the host and the synth reside on the same web site. The synth uses the Web Audio API, but implements the MIDIOutput interface of the Web MIDI API, so it can be used even if the browser does not support the Web MIDI API.  (There is, however, currently an issue with Firefox's timing...)

Browser support for the APIs can be checked at check Web MIDI API and check Web Audio API.

Note that it is not possible to display or play scores in this application unless a MIDI output device has been selected.
Scores and recordings can however be found via the link that appears when a score is selected.
Currently, the only scores that can be played on the Resident Sf2 Synth are the Pianola Music (1967) and Study 1 (2005). All the other scores require hardware or software output devices that are (or depend on) plugins.
The free Virtual MIDI Synth can be installed and used on Windows.

The user's (hardware or plugin) MIDI input and output devices can be accessed as follows:
In Chrome: "out of the box". Chrome (v43 and later), supports the Web MIDI API natively.
In Firefox: by installing the Jazz plugin. (This is not currently being tested.)
Firefox does not currently implement the Web MIDI API natively. Users need to install the Jazz plugin (which works with Chris Wilson's Web MIDI API Polyfill). The polyfill is included with the Assistant Performer's code.

A description of how the MIDI information is embedded in the (SVG) score files can be found in a Moritz issue on GitHub. The SVG Score Extensions document is not currently up to date (22.03.2017).
Note that Moritz' Assistant Composer automatically creates two versions of each score: as a continuous scroll, and on separate pages. The scroll version uses space more efficiently on screen in the Assistant Performer, the separate pages are useful for printing (e.g. from a browser). The Assistant Performer can, however, play both score types.


When a score and a MIDI output device have been selected, a clickable Start button appears below the selectors.
An input device can only be selected if the score was designed for use with a MIDI input device.
The MIDI information contained in a score can be performed even if the score was designed for use with a MIDI input device, and no such device has been selected.

When the Start button is clicked, the opening page disappears, and the score is displayed with the following controls at the top of the screen (from left to right): If an input device has been selected when the Start button is clicked, the program assumes that the device is going to be used immediately, so the Go button is clicked automatically. The program then waits for live MIDI input events. If the controls need to be changed, just click the Stop button, set the controls and click the Go button again.

Introduction to Moritz Assistant Composer Assistant Performer Krystals 4.0