Information is communicated to FOMUS through the definition of “objects” (i.e., in a .fms file or in a programming environment like Lisp or SAL).
Examples of objects are parts, instruments, notes, measures and the score itself, which must all be defined to give FOMUS a complete set of instructions for notating a score.
Object definitions may contain one or more “settings” which directly affect how the objects are processed or interpreted.
Examples of settings are beat
, which determines how note events are spelled rhythmically, and keysig
, which
determines what key signature appears in a measure. Object definitions may also contain parameters (e.g., id
and template
)
that aren't actually settings (settings have a specially defined behavior, as explained below)
but are instead part of the structural makeup of the object itself.
One of the most important of these parameters is id
.
If an object is defined with a unique ID, other objects can then use that ID to refer to it.
If two objects of the same class are defined with the same ID, the later definition replaces the earlier one
(more specifically, the old one still exists but can't be referred to anymore since it's ID has been moved to another object).
FOMUS's objects are arranged hierarchically and “contain” other objects or refer to other objects in some way
(e.g., parts refer to instruments via the inst
parameter or
instruments can optionally contain one or more percussion instruments using the percinsts
parameter).
When one object contains or refers to another, you must either use an ID or define the sub-object inline inside the parent object.
Also, the id
parameter is mandatory when defining an object at the “top level” (i.e., when an object is not part of or embedded in another object).
Settings in “container” objects (like parts or measures) generally affect everything that's contained in that object.
If you set the keysig
setting in a measure, for example, it only affects that measure. If you set keysig
in a part, though, it affects all measures in that part (unless overriden by another keysig
setting in an individual measure).
In the same way, setting keysig
in the score object affects all parts and measures in the entire score.
Setting values are thus inherited in smaller objects from larger ones.
Many settings can be set in any object class while some can only be set in specific places (e.g., the score).
The Settings section of the reference contains information on how individual settings may be used and which objects they may
appear in.
Following is a complete list of FOMUS's object classes and their parameters:
global
(settings)
fomus
external is created.
part
id
inst
(+ settings)
measdefs
and events in that part including measures, notes, rests and marks.
Settings in the inst
object it is associated with also affect the part and everything inside it.
Parts generally appear in the score in the same order that they are defined in. If the layout-def
or layout
setting is defined,
the order and grouping changes according to the layout
(though parts based on the same instrument still appear in their defined order).
inst
id
template
percinsts
If percussion instruments are used, the clef for the instrument should be set to ‘percussion’. A pre-defined instrument with ID ‘percussion’
exists with appropriate settings for use as a template.
staves
imports
export
(+ settings)
inst-defs
so that you can reuse it.
The setting inst-defs
functions as a library of predefined instruments.
Add your own instruments to this library by placing a line like ‘inst-defs += (<id: inst1 ...> <id: inst2 ...> ...)’
in your .fomus
file.
percinst
id
template
imports
export
(+ settings)
name
setting) can also appear in the score
wherever a change occurs. By changing the settings in percussion instruments and moving them around
between different instruments, it is easy to change how percussion parts appear in the score and how they are divided up among
players.
If you find yourself defining a percussion instrument from scratch over and over, it might be useful to add your definition to percinst-defs
so that you can reuse it.
The setting percinst-defs
functions as a library of predefined percussion instruments.
Add your own instruments to this library by placing a line like ‘percinst-defs += (<id: percinst1 ...> <id: percinst2 ...> ...)’
in your .fomus
file.
metapart
id
parts
partmaps
, each of which contains a reference to a part or metapart. Partmaps
contain instructions for copying events from metaparts to actual parts.
(+ settings)
At a certain point in FOMUS's processing, metapart events are copied into their proper parts and the metaparts themselves are destroyed. The instructions for copying events are contained in the metapart and partmap settings. Each partmap basically contains a reference to one part/metapart and describes how note events are distributed (and possibly transposed or doubled).
Metaparts currently don't have instruments associated with them (this might change in future releases).
Metapart settings only affect measures and note events up until when they are copied
to their new locations, at which point the settings of the new part/instrument take effect.
measdef
id
(+ settings)
measdef
is a definition for a measure event or group of measure events.
The difference between a measure definition and a measure event is that the latter has a time and duration, appears in the score and may inherit settings from the former,
while the former is just a collection of settings and values.
When you create a measure event, you may refer to a measdef
which contains all of the settings for that measure.
Measure definitions are mostly useful in .fms files where they are used to avoid redundancy when defining measure events.
The typical usage is to define a few measdef
s at the top of the file and refer to them by ID when creating new measures.
In most other environments it's easier to include all of the settings inside the measure itself rather than bother with defining measure definitions separately.
staff
clefs
(+ settings)
clef
objects.
clefs
(+ settings)
A keyboard instrument might, for example, contain two staff
objects, each of which
contain two clef
objects, one treble and one bass. The settings in the four clef objects
would then influence how they are chosen and how notes should be laid out on either staff.
import
(+ settings)
See MIDI Import Examples for examples of using import objects.
export
(+ settings)
See TODO for examples of using export objects.
partmap
part
metapart
(+ settings)
part
parameter.
Typical partmap
settings are from-voice
, which designates the voice or voices events are being
copied from and to-voice
, which designates the voice or voices events are being copied to. Multiple partmaps can copy the same events to multiple places. They can also
transpose note events and do other simple modifications as they are being copied.