Assistant Composer

Introduction to Moritz v3 Assistant Composer Assistant Performer Krystals 4.0

The Assistant Composer is part of Moritz (an open-source Visual Studio Solution, written in C#), and is a Windows Desktop application that creates scores that can be read in browsers. The scores are designed to be read and interpreted using the Assistant Performer.
The compositions will obviously be related to my personal history and taste, but Moritz is also intended to be a platform in which useful concepts (and software libraries) can be developed for use in other contexts.

Assistant Composer Usage:

When the load settings button is clicked in Moritz' opening dialog, a file dialog appears asking the user for a score's settings file.
Score settings files have an .mkss suffix, and are located in the folder in which the completed score will be eventully be saved. Score folders are kept at a special location that can be found in Moritz' preferences.
The settings file contains layout and other information necessary for creating a particular score. The settings file's name is the name of the score's algorithm, and is independent of the name of its containing folder. This means that the same algorithm can be associated with different layouts: New score settings files (layouts) can be created for an existing algorithm simply by duplicating an existing score folder, and then editing the layout in the Assistant Composer.
Algorithms contain no spatial information, but define the MIDI information for a score, including the number of channels. They are written (in C#) in a restricted part of Moritz, where I am developing the classes for a high-level musical grammar.
When a new algorithm is written, its name is added to a list of available algorithms inside Moritz. A new settings file can then be created by renaming a duplicate of an existing one inside a new score folder.

When the settings file opens, the Assistant Composer knows both the name of the score's algorithm and the path to the folder in which it should create the score.
In the case of the standard layout for Study 2c3.1, the main Assistant Composer window looks like this:


The name in the title bar is the name of the folder containing the settings file. There is only one folder containing a Study 2c3.1 settings (.mkss) file, but that is not necessarily the case.
There are three main sections at the top of the dialog: notation, krystals and palettes (see below), and initially four activated buttons at the bottom:


1. General

2. voices per staff
This is where the voices (MIDI channels) provided by the algorithm are allocated to staves.
With Study 2c3.1 loaded, the dialog looks like this:
with Study 3 sketch 2.1 loaded, it looks like this:
The help text that can be opened by right-clicking the text on the right, is as follows:

3. clefs per staff
Clefs are allocated to staves in top to bottom order, according to the left-right order in this input field.
The number of staves is deduced from the above voices per staff input field. There is no difference here between output and input staves. Input staves are always on the right (at the bottom of the system).
Using the number of staves defined above, the clefs per staff section looks like this for:
Study 2c3.1:
Study 3 sketch 2.1:
The following clefs are available when using standard chords: The 'n' clef is always available. This is like a percussion clef, vertically centred in the staff no matter how many stafflines it has.

4. stafflines per staff
Staves are in top-bottom order again. All clefs except 'n' must have 5 stafflines.
Using the number of staves defined above, the stafflines per staff section looks like this for:
Study 2c3.1:
Study 3 sketch 2.1:

5. staff groups
Each system is given a continuous first barline. After that, barlines are only drawn through staff groups. Using the number of staves defined above, the stafflines per staff section looks like this for:
Study 2c3.1:
Study 3 sketch 2.1:

6. staff names
The names to be printed to the left of each staff.
Using the number of staves defined above, the stafflines per staff section looks like this for:
Study 2c3.1:
Study 3 sketch 2.1:

7. system start bar numbers
The bar numbers of the bars that begin each system.
The algorithm determines the number of bars — which are simply the places at which systems can be broken. If an attempt is made to create a score with too many bars on a system, a warning message is displayed, telling the user which system is causing the problem.
This input field looks as follows for:
Study 2c3.1:
Study 3 sketch 2.1:


This section of the main Assistant Composer form lists the krystals that are going to be used by the algorithm when the score is created:
Study 2c3.1 Study 3 sketch 2.1 Song Six

The show selected krystal and remove selected krystal buttons are enabled when a krystal is selected in the list. Krystals are actually created using the Krystals 4.0 program.
Krystals browsers can display both heredity and content information about all the available krystals.
Here is one that is about to return pk4(12)-2.krys — the krystal used for the top voice in Study 2c3.1:


The palettes section lists the palettes used by the algorithm when creating the score.
A palette contains a list of MIDIChord definitions, each of which contains temporal information that can be associated with a single, standard chord symbol. A standard chord symbol can have an attached ornament symbol (such as or ), so a MidiChord can contain a sequence of unornamented MIDI chords.
See Why ornaments? below.
Palettes are currently created and edited here inside the Assistant Composer, and their definitions are stored in the current score settings file. That is not the best solution. Ideally, palettes should be edited and stored externally in the way that krystals are. That way, it would be possible to develop libraries of interrelated palettes and MIDIChords that could be used in any score.
Currently, palettes can be copied from one score to another by editing settings files directly (they are XML text files), but that is obviously not the ideal solution.

Palettes are edited using two main forms: If there is an Ornaments Form linked to the palette, the text ': ornaments' is added to the palette's name in the main Assistant Composer form's list:
Study 2c3.1 Study 3 sketch 2.1 Song Six

The show selected palette and delete selected palette buttons are enabled when a palette is selected in the list.

Palettes Form

This form defines a set of chords that can be written in standard notation without the use of ornaments.
If any chord is to be ornamented, it will have a non-zero value in the ornament numbers field, and there will be a linked Ornaments Form defining the ornament. The combined result of the two forms is a list of MidiChord definitions.
A Palette Form has:  palette 1 of Study 2c3.1 contains 12 MidiChord Definitions, and looks like this:
Input fields:

The lower part of this dialog contains a percussion check-box, various buttons and help texts:

Ornaments Form

There have been major changes to this form since the previous version of the Assistant Composer: Ornament values in the lower part of the form are now entered directly, rather than being related to krystals.
I have updated all the current Assistant Composer compositions by copying the previously used krystal values here, so that the compositions themselves have not changed.
The screenshot below is The Ornaments Form associated with Study 2c3.1.
This form defines a set of ornaments that are used by the MidiChord definitions in the linked palette form. The settings in the upper box define a set of abstract basic chord defs that can be used relatively to any of the definitions in the main palette form. These settings are very like some of the settings in the palette form, but basic chord defs have neither envelopes nor ornaments.
Each value in the ornament definitions below the box is the number of one of the basic chord defs.
The maximum number of both basic chord defs and ornaments is 12. The other blue help texts adjust dynamically to the values in the appropriate fields. In the dialog below, for example, the range of possible values in the ornament definitions is given as 12, which is the number of basic chord defs.
When the number of ornaments is set, the correponding help text in the linked palette is also adjusted.
There are simplified help texts at the bottom of the dialog, but a more complete explanation below the following screenshot.
Input fields:

Why ornaments?
Ornaments describe the level of information, below the chord level, normally dealt with by signal processing software such as Max/MSP or SuperCollider. It is important that this boundary is not too sharply drawn.
Also (and equally important): The smallest events notated in humanly readable music notation are chords. These are the smallest logical units which can be used to create musical forms. Adding information (ornaments) to them makes them more recognizable, and the entire form more comprehensible.
Compare the situation with the examples in the (archived) Moritz’ Ornaments documentation in which the following diagram serves as a ‘score’. Colouring the individual values enables them to be found more easily, and the krystal’s (i.e. the recorded example’s) form to be better understood.

Introduction to Moritz v3 Assistant Composer Assistant Performer Krystals 4.0