about Study 2b   about Study 2     about Study 2a    about Study 2c


Study 2b has 3 Scores: Study 2b1, Study 2b2 and Study 2b3.

Study 2b1 was completed in October 2010 and, like Study 2a, was composed by adjusting the inputs to a version of the Assistant Composer while listening to the Assistant Performer's output on the reference Microsoft GS Wavetable Synth synthesizer.
The Assistant Composer wrote the score of Study 2b1 in standard notation (CapXML). The corresponding MIDI files were written using the Assistant Performer.

Study 2b was originally intended to be a simple re-write of Study 2a. I wanted to remove some technical inconsistencies, sort out the control texts, and further debug the Assistant Composer and Assistant Performer software. But after completing 2b1, I decided to write two radically new scores of this piece using SVG and non-standard notations (Studies 2b2 and 2b3). I wanted to teach the Assistant Composer a more powerful way to notate tempoless music, and thus make the creation of new composition algorithms easier.

This has been my first SVG project, and I would especially like to thank David Dailey of Slippery Rock University for his great introduction in An SVG Primer for Today's Browsers. Doubtless I will have made a few beginner's mistakes. If so, and anyone has any good advice, please let me know!
SVG obviously has much more to offer than the small subset I needed for this project. In particular, I think that the interactivity which it enables is going to become increasingly important for scores as they find their feet on the web.


The performances presented here were created by the Assistant Performer from the final version of Study 2b2 in May 2011. The temporal and MIDI information in 2b3 is identical, and the information in 2b1 (albeit derived from the graphics) is not different enough to warrant publishing it separately.

Four machine performances

These four recordings were all created using the Assistant Performer alone, without a live performer. The “speed notated in the score” means the absolute duration specified for each chord. In Study 2b1, the durations of the chords in staves 2 and 3 are derived from the durations notated in staff 1 (where the d-control contains millisecond values coming from the palettes). In 2b2 and 2b3, the durations are calculated for, and notated inside, all the chord and ornament objects inside the file. There is no “tempo”. The first recording is of the score “as notated”. The others demonstrate the effect of using the performance options for speed and minimum ornament-component duration (see Performance Options dialog). These options can be used to prevent MIDI overloading or distortion when going beyond MIDI's limits.

1. speed as notated in the score, minimum ornament chord duration set to 1 millisecond.
This is the recording presented with the three scores: 2b1, 2b2, and 2b3.
(Study2b speed1.0 minduration1.mp3)
2. speed as notated in the score, minimum ornament chord duration set to 100 milliseconds.
(Study2b speed1.0 minduration100.mp3)
3. speed twice as fast as notated in the score, minimum ornament chord duration set to 1 millisecond.
(Study2b speed2.0 minduration1.mp3)
4. speed twice as fast as notated in the score, minimum ornament chord duration set to 100 milliseconds.
(Study2b speed2.0 minduration100.mp3)

Two assisted performances

In both these assisted recordings, the Performance Options were set so that the Assistant Performer performed the top staff, while staves 2 and 3 were performed (conducted) live.

MIDI Originals
1. Study 2b live1, speedRelative minduration1.mid
2. Study 2b live2, speed1 minduration10.mid
Note: Quicktime's performance of these MIDI files is misleading (30.4.2011). See MIDI, “Authenticity” and MP3 files.
1. the assistant’s speed is relative to the live performer’s most recently performed durations.
The minimum ornament chord duration was set to 1 millisecond.
(Study2b live1, speedRelative%20minduration1.mp3)
2. the assistant’s durations are set to those notated in the score.
The minimum ornament chord duration was set to 10 milliseconds.
(Study2b live2+3, speed1 minduration10.mp3)


As described above and in about Study 2, there are three scores of Study 2b.
Study 2b1 was written in standard notation (CapXML), using the Assistant Composer. It was tidied up, using the capella editor to make it more legible for human readers, but no new logical information has been added since it was originally produced. The improvements make no difference to the Assistant Performer.
Generally, capella's automatic spacing is quite good, but noteheads and accidentals do sometimes collide and/or overlap, and some chords have noteheads which are wrongly placed on the stem. Unfortunately, I have no access to capella’s rendering engine, so there is nothing I can do about that.
It would of course be possible to export a MusicXML file to a more powerful editor, and tweak it there.
Moritz’s algorithm for writing standard notation is actually quite powerful, deciding such things as whether to use sharps or flats when spelling chords, when to write a new dynamic symbol etc.
The improvements made to this score in capella were:
Study 2b2 was written by the Assistant Composer, and consists of two SVG pages embedded in an HTML file. The SVG contains simple, custom graphic symbols, each of which contains its own specific timing and MIDI information (see SVG Score Extensions). The extensions are not visible in the score, but are present in the SVG source code, where they can be read and performed by appropriate software. This information is logically identical to the background controls in 2b1, and is completely identical to the timing and MIDI information in 2b3.
Simple symbols are useful when clarifying/illustrating particular aspects of a form. In this case, each chord symbol's size is related to its MIDI velocity, its height is related to its lowest pitch, and its colour intensity is related to its octave. Shapes are used to show that the staves use different chords. Information about the internal structure of each chord event (ornament  information) is not included in the visible score. Some of the symbols in the top staff denote complex ornaments.
This is, perhaps, the easiest score to follow with the recording because the reduction in the amount of information presented makes it easier to see an overall picture of what is going on.
Study 2b3 was also written by the Assistant Composer, and consists of three SVG pages embedded in an HTML file. The SVG contains standard chord symbols on conventional staves. Again, the chord and ornament symbols contain explicit timing and MIDI information inside the SVG files (identical to the SVG Score Extensions in 2b2). Software for performing the temporal and MIDI information does not have to read the graphics.
At first sight, the notation looks very similar to standard notation, but there is a major difference: The bars do not “add up” (so there are no time-signatures), and there is no way to make them do so by adding little (tuplet) numbers to the score. Duration classes are allocated according to the band of possible durations to which the event's duration belongs:
2400ms >= > 1200ms >= > 600ms >= > 300ms >= > 150ms >= > 75ms >= > 0ms

This results in a notation capable of describing durations of any size. The standard notation definition of the duration classes (as simple rational values) is a special case within this paradigm.
The Assistant Composer uses sophisticated horizontal and vertical justification algorithms related both to the sizes and shapes of the symbols and to their durations. The notation can be reformatted simply by reading new formatting options (see the dialog below). The 2b3 score presented here has not been altered since it was created. It could, however, be edited or further annotated using an SVG editor such as Inkscape.


I worked on Study 2b from August 2010 until early May 2011.
The Assistant Composer's dialog windows evolved during this time, but all the Study 2 scores continue to use essentially the same input information. Notable changes in the opening dialog include page formatting options and the use of new clef types. I learned a lot while working on Study 2: The Assistant Composer and Assistant Performer now communicate via the extended SVG-format, which means that a much more flexible use of logical durations is possible. The latest version of the dialogs should be more intuitive to use, and allow greater use of the resulting, more flexible durations to be made.
The current state of Moritz’ Assistant Composer dialogs will be documented on its main page, but the state on completion of Study 2b was as follows:

Opening dialog:


Study 2b uses the same three krystals as Study 2a, and it uses them in the same way to control the chords on single staves.
Each krystal has the same number of strands (=bars), which have been permuted so as to give similar motion within each bar.
(m-numbers in the following krystal listings correspond to bar numbers in Study 2b.)


Each of the above krystals is associated with a particular palette containing values specially designed for its particular staff.
Staff 1 was constructed by associating pk4(12)-2.krys with the following palette:
Staff 2 was constructed by associating pk4(12)-3.krys with the following palette:
Staff 3 was constructed by associating pk4(12)-1.krys with the following palette:
Again, compulsory fields have brown labels, optional fields have bracketed labels.
Each value in the krystal named at the top of the palette is used to index values in the palette’s fields.
For example, a value of 3 in the krystal associated with the staff 3 palette results in a chord having:
Differences with respect to Study 2a are:

Staff 1 is the only staff to have ornaments. Its ornament settings palette looks like this:
These input fields correspond closely to the ornament options controls described in the Control Texts documentation.
Differences with respect to the Study 2a ornament settings palette include:

Control texts in the score of Study 2b1

The Assistant Composer wrote all the Study 2b scores using the values set in the above dialogs.
When writing Study 2b1 (CapXML, standard music notation), the information was stored in control texts attached to chord symbols in the score, using a small, light-grey font for texts which do not have to be read in real time by a live performer. Using an inconspicuous font made the texts available to the Assistant Performer (and for debugging and illustration purposes) without them getting in the way at performance time. It is easy to imagine an option which would make such controls completely invisible.

In Studies 2b2 and 2b3 (SVG scores), the same information was written into the SVG file itself, and can be accessed there (more easily than in 2b1) by the Assistant Performer. The information stored in the SVG files is logically the same as in the control texts, and is attached locally to the relevant symbols (chords, staves etc.) but in some cases it has been further processed. (For example, inside SVG files, the vertical velocity factor, attached to a chord symbol in CapXML, is written out as a separate velocity for each MIDI note in the chord.)
Currently, not all the available controls are used by the Assistant Composer, but this may change in future. The updated reference document for all currently available control texts can be found here.
The first system of Study 2b1 (CapXML, standard notation) looks like this: Study2b1System1.large.png
Chord-level controls are attached to individual chords. Those in use here are:
~[integer] An ornament (large black text).
The ornament number is used to construct the ornament itself (see below).
d[integer] The default duration of the chord in milliseconds.
In 2b1, only chords in the top staff in a score can have this control. Chords on other staves have derived durations related to their logical positions. In 2b2 and 2b3, every chord and rest is given an explicit duration.
All chord durations depend on whether a live performer is involved, and on the corresponding performance option setting. They can either be the durations notated in the score or durations relative to the live performer’s current speed.
These values are always overidden when a live performer is in control of timings.
E[integer list] The chord’s envelope, controlled by MIDI expression.
vvf[float] The vertical velocity factor. Subject to the maximum possible MIDI velocity value, the velocity of the top note in a chord is found by multiplying the velocity of the chord’s lowest note (as given by its dynamic - see below) by this value. The velocities of intermediate notes are interpolated. This value can be used to adjust the apparent brilliance of a chord.
i[integer] The General Midi Instrument number (zero-based) used to play this chord.
i24 is a nylonstringguitar in General Midi.
See General Midi Instrument Names
pan[float] The pan position (left-right position) of this chord. 0 is completely left, 100 is completely right.
pw[float] The position of the synthesizer’s pitch wheel. 0 is as low as possible, 50 is centred, 100 is as high as possible. [The chord-level pitchwheel deviation (pwd) is only set once per staff in this piece — below the first clef.]
mod[float] The position of the synthesizer’s modulation wheel.
dynamic[float] The Assistant Performer uses the small, light grey texts attached to the dynamic symbols to set the chord’s basic MIDI velocity. Such values are, as always in Moritz, percentages. 100 means MIDI velocity 127. The dynamic symbols are allocated to ranges of possible values.
Note that dynamic symbols are suppressed if they have no effect (the dynamic does not change). In 2b3, where the control texts are not displayed, this can look a little strange.

Ornament-level controls all begin with the ‘~’ character. In Study 2b1 they are all contained in the large block of text attached to the first chord:
In Studies 2b2 and 2b3, this information has been processed so that it can be included directly in the ornament symbol definitions.

Such instructions apply per staff, from their position in the score onwards. In this score, only the top staff has ornaments, and their settings do not change.
Moritz defines each staff in a CapXML file to be a MIDI channel. Each staff can (as in capella) have up to six parallel voices, but only the top voice in each staff-channel can have ornaments.
Instructions in use here are (in bottom to top order in the above block):
~[krystalName]:[level] The ornaments krystal and the ornament level inside the krystal.
The ornament level determines, for the krystal, how many ornaments it contains. The ornament number (the chord-level ‘~’ control) selects a series of krystal values from the krystal. For example: a ~1 ornament control on a chord will select the first series of krystal values at the given level. The list of krystal values is used to select values from the following ornament parameter lists. A concrete example is given below.
~d[integer list] Durations to be used inside the ornament.
The values corresponding to the known krystal values are spread proportionally over the duration of the ornament. The duration of the ornament as a whole depends on the corresponding performance option setting. It can either be the duration notated in the score, or a duration relative to a live performer’s current speed. The durations of chords inside ornaments are subject to the "minimum performed duraton" set in the performance options. If the resulting ornament is too long, it is truncated at its defined duration.
~t[integer list] Transposition values to be used inside the ornament.
The chord notated in the score is transposed by one of these values to create each chord inside the ornament.
~pwd[float] The pitch wheel deviation setting to be used inside ornaments.
This setting overrides the chord-level setting for ornamented chords.
~pw[float list] The pitch wheel values to be used inside ornaments.
These values are in the range [0..100] and are relative to the chord-level pitchwheel setting. A value of 0 sets the synthesizer’s pitchwheel to its lowest value. 50 sets the pitchwheel to its chord-level value. 100 sets it to its maximum value. Other values are interpolated.
~pan[float list] The pan positions to be used inside the ornaments.
These values are in the range [0..100] and are relative to the chord-level pan setting. A value of 0 sets the synthesizer’s pan position completely to the left. 50 sets the pan position to its chord-level value. 100 sets the pan position completely to the right. Other values are interpolated.
~i[integer list] The General Midi Instrument numbers (zero-based) to be used inside the ornaments.
These values override the chord-level setting.
~cd[integer list] The chord densities of chords to be “added” to the chord notated in the score (“Boulez-addition”). The notated chord is first transposed using the ~t control, then each of the transposed pitches is used as the root of a chord defined here and by the following two controls.
~ri[integer list] The root inversion of chords to be used inside ornaments. These are the semitone intervals which are stacked in the root inversion (inversion 1).
This list is not indexed, but simply defines the pitches in a chord.
~vvf[float list] The vertical velocity factor. Subject to the maximum possible MIDI velocity value, the velocity of the top note in an ornament-chord addition is found by multiplying the velocity of the original note (as given by its original dynamic and chord-level vertical velocity factor) by this value. The velocities of intermediate notes in the ornament-chord are interpolated. This value can be used to adjust the apparent brilliance of a chord.

Ornament construction

~xk4(7.12.4)-6.krys:3 is defined as one of the ornament level controls above.
At level 3, xk4(7.12.4)-6.krys contains 28 value sequences, so ornament numbers are in the range 1..28.
~1 has 28 values:
~2 has 49 values:
~3 has 35 values:
etc... ~12 has 28 values:
etc... ~28 has 28 values:

~12 (attached to the third chord in staff 1, bar 2) thus uses the krystal value sequence:
1, 9, 6, 12, 10, 4, 8, 5, 11, 3, 7, 9, 6, 10, 8, 12, 9, 7, 11, 5, 2, 4, 10, 8, 6, 9, 1, 7
to index into the ornament control lists.
This produces the following sequences for ~12:
o-values 1 9 6 12 10 4 8 5 etc.
~d 345 600 900 300 500 678 700 789 etc.
~t 1 9 6 12 10 4 8 5 etc.
~pw 50 90 70 60 60 70 90 70 etc.
~pan 50 90 70 60 60 70 90 70 etc.
~i 12 12 12 12 12 12 12 12 etc.
~cd 4 4 4 4 4 4 4 4 etc.
~ci 1 1 3 4 2 4 1 4 etc.
As noted above, the minimum duration of chords inside ornaments can be set (for example, to reduce any distortion or MIDI overloading) in the performance options. This causes the number of chords in the ornament to be reduced (by truncating the right end of the sequence) until the output is satisfactory.