╔══════════════════════════════════════════════════╗
║ ║
║ T H E M P G F I L E F O R M A T ║
║ ════════════════════════════════════════════ ║
╚══════════════════════════════════════════════════╝
┌────────────────────────────────────────┐
│ <shft> F1 = Toggle to regular window │
└────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│ │
│ If you are reading this document for the first time and │
│ are unfamiliar with the commands for scrolling the text, you │
│ should be aware that <ctrl> ▲ (hold down the <ctrl> key and │
│ push the cursor UP key) will scroll the text UP and <ctrl> ▼ │
│ will scroll the text DOWN. You can also use the PageUp and │
│ PageDown keys to scroll quickly through the document. │
│ │
└──────────────────────────────────────────────────────────────────┘
1.1 MPG stands for Music Page File. Files with the .mpg extention
are supposed to be music page files and to follow a specific format.
A music page file represents an (ASCII) encoded version of a page
of musical notation. The Dmuse program has a utility for
constructing musical notation from music page files.
1.2 A music page file is basically a list of glyphs (characters)
from a set of music fonts. The musical notation is constructed
from this list of glyphs. If you are printing music, the music
fonts must first be downloaded to the printer; if you are
displaying music, the display utility puts the glyphs on the
screen in the same manner that the printer puts them on the
page.
1.3 To construct a page of music, you need to have a list of
glyphs (characters) together with their location on the page.
A musical note, for example, consists of a note head, one or
more pieces of stem, possibly a flag, possibly an accidental,
possibly some leger lines, etc., etc..
1.4 Since the HP PCL3 printer language is a full page language,
the order of glyphs in the list is not relevent. But for
purposes of editing, some choices of ordering are better than
others. Let us imagine, for example, that we want to move the
musical note described in the previous paragraph to a new (x,y)
position on the page. In order for the note to stay together,
we must move all parts of it by the same amount. It makes
sense, therefore, to think of the note as a single unit, even
though it has several parts.
1.5 To implement this concept, we define something we call an
object. The object is the basic unit of musical notation. The
object may consist of several glyphs, as in the case of a note.
We call each of these glyphs, sub-objects, because they are
members of the thing we call an object. The position of
sub-objects is specified in relation to the object to which
they belong. This way, if we want to move a note, we simply
move the object, and all the parts of it (the sub-objects) will
move together.
1.6 All basic units of musical notation (objects) are attached
to a staff line (in our system of representation). It therefore
makes sense to specify the location of an object in relation to
the staff line to which it belongs. This way, if we want to
move a staff line, all notes and other notation connected with
that line will move together.
1.7 All staff lines belong to a system. A system may have one
or more staff lines associated with it. As before, it makes
sense to specify the location of a staff line in relation to
the system to which it belongs.
1.8 Systems represent the highest level in the location hierarchy
on the page. The location of a system is therefore specified by
absolute (x,y) co-ordinates on the page.
1.9 To summarize, let us take the example of a sharp (♯) attached
to a note. The absolute (x,y) of that sharp will be:
The absolute location of the system (x,y), plus
the (⌂x,⌂y) offset to the staff line in the system, plus
the (⌂x,⌂y) offset to the note on the staff line, plus
the (⌂x,⌂y) offset to the sharp (♯) from the note.
1.10 Much of musical notation can be represented in the manner
described thus far: notes, rests, text attached to a note,
musical ornaments, single articulation marks, dynamics, musical
directions, bar lines, time signatures, key signatures, clefs,
basically anything that stands by itself on the muscal page.
There is a class of things, however, that cannot be represented
as objects, because the position of these things depends on
the position of more than one object. Items in this class
include: ties, beams, slurs, endings, long trills, transposition
lines, figure contination lines, tuplets (and their brackets),
dynamic wedges, and dashes associated with changes in dynamics,
tempo, etc. We call this class of things, super-objects,
because their position (and shape) depend on more than one
object.
1.11 In actual fact, most super-objects are printed using
glyphs from the music fonts; however, they are not represented
in the music page file in this manner, because, if we move
a object which has a super-object associated with it, the
position and the shape of that super-object (and therefore
the glyphs that comprise it) will change.
──────────────────────────────────────────────────────────────────
2.1 A music page file consists of list of variable length
records. The order of the records is an integral part of
the representation. There are 14 types of records. The
character in column of a record identifies its type.
Record Type Identifier (column 1)
────────────────────────────── ─────────────────────
Header Record Z
Page oriented text X or Y
System (page oriented) S
Staff Line L
Objects J
Sub-objects K
Text (form of sub-object) T
Words (form of sub-object) W
Attribute (form for sub-object) A
Super-objects H
End of Music Line E
System Bar B
Comment record @
2.2 The basic location hierarchy is: System ─► Line ─►
Object ─► Sub-object. The order of records in the music page
file reflects this hierarchy. A system record remains active
in the list until a new system record is encountered. A staff
line record remains active until an End of Music Line record is
encountered. Objects on a staff line are listed in the time
order (left to right) in which they occur on the staff line.
The sub-objects that belong to an object are listed directly
below the object. System bars are listed after the last staff
line of a system has been fully represented. Page oriented
text should be listed before or between systems. Header records
belong at the beginning of the file.
──────────────────────────────────────────────────────────────────
┌─────────────────┐
│ Record Formats │
└─────────────────┘
Each record in the file consists of two or more fields.
All fields in a record are deliniated by a single space.
Fields which contain text usually occur at the end of a record.
In specifying (x,y) locations and offsets, x increases as you
move to the right; y increases as you move down. This is not
the normal convention for (x,y) co-ordinates. All distances
and offsets are measured in dots. For the moment, all music is
represented at 300 dots = 1 inch.
I. Header Information (required for all MPG page specific files)
Field 1: Identifier = Z
Field 2: information type (a number from 1 to 7)
Field 3: actual data
Examples
════════════
1. In this example we have the full score of Beethoven's
5th Symphony, sub-divided by movements. This file
represents the first page of the first movement.
The resolution is 300 dots/inch, and the interval
between staff lines is 14 dots.
Field 2 Field 3
───────────── ─────────────────────────
1 = Composer: Ludvig van Beethoven
2 = Work: Symphony No. 5 in C minor
3 = Sub-division: Movement 1
4 = Representation: Full Score
5 = Resolution: 300 dots/inch
6 = Notesize: 14 dots per staff line
7 = Page: 1
2. In this example we have a set of parts for Beethoven's
5th Symphony, sub-divided by instruments. This file
represents the first page of the first violin part.
Field 2 Field 3
───────────── ─────────────────────────
1 = Composer: Ludvig van Beethoven
2 = Work: Symphony No. 5 in C minor
3 = Sub-division: Violin I
4 = Representation: Complete Parts
5 = Resolution: 300 dots/inch
6 = Notesize: 14 dots per staff line
7 = Page: 1
3. In this example we have the first violin part for
Beethoven's 5th Symphony, sub-divided by movements.
This file represents the first page of the first
movement.
Field 2 Field 3
───────────── ─────────────────────────
1 = Composer: Ludvig van Beethoven
2 = Work: Symphony No. 5 in C minor
3 = Sub-division: Movement 1
4 = Representation: Violin I
5 = Resolution: 300 dots/inch
6 = Notesize: 14 dots per staff line
7 = Page: 1
The point of these examples is to show various ways in
which a data set can be sub-divided. At the present time,
only one level of sub-division is possible. In the second
example above, we cannot sub-divide the Violin I part by
movements, because the Violin I is already a sub-division
of the catagory, "Complete Parts." If we want to sub-divide
the instrumental parts by movements, then we must have a
separate data set for each instrumental part.
(End of Header Information)
II. Page oriented text
Field 1: Identifier = X or Y
Field 2: font number
Field 3: x co-ordinate of beginning of text
Field 4: y co-ordinate of text line
Field 5: ASCII text
When the Field 1 identifier is "Y" (possible tagged text),
Field 2 may contain the value 0, in which case the line is
neither displayed nor printed. This feature is useful for,
among other things, tagging page numbers which are not printed
(beginnings of chapters, etc.)
Field 3 is normally terminated by a blank, but in some cases it
may be terminated by the 'C' character or the 'R' character, in
which case the 'C' means center the string on the given x
co-ordinate, and the 'R' means end the string on the given x
co-ordinate.
The ASCII text may contain font change instructions. The
sequence is the "!" character, followed by a two digit number
between 31 and 48 followed by the "|" character, which serves
as a terminator to the font change instruction.
Special case: If the page text record has only two fields, the
letter X and a number, then the number is interpreted as a new
value for notesize.
Tagged Page Text: If the field 1 identifier is Y, this record
may contain a system of tagged fields. Listed below are the
tagging sequences and their functions.
\< = begin tag structure. A tag structure has two components:
the tag, and the data field being tagged. The tag
comes first and may contain any ASCII characters
except the "|" character, which is interpreted as
"End of Tag." Immediately following the "|" is the
data field. This is terminated by the "end tag
structure" sequence.
\> = end tag structure.
\] = break tag structure. It is possible for a tag data field
to continue over to a line or page boundary. In this
case, the tag structure must be broken at the end of
the line and restarted at the beginning of the next
line.
\[ = restart tag structure. A tag structure can only be
restarted if it was broken on the previous line (or
last line of the previous page). It is a requirement
that the tag (first component of the tag structure) be
restated. In theory, the software could reconstruct
the tag, but in the case where the data field extends
over several lines, this could prove cumbersome.
Therefore, following the "\[" sequence comes the tag,
followed by the "|" character, followed by a
continuation of the data field.
Under this structure, nested tags are also possible.
III. Systems (page oriented)
Field 1: Identifier = S
Field 2: 0
Field 3: x co-ordinate of the system on the page
Field 4: y co-ordinate of the system on the page
Field 5: horizontal length of the system
Field 6: vertical length of the system
Field 7: number of lines (L) in the system
Field 8: control string in double quotes (null string allowed)
The control string describes how the lines of the system
are bound together on the left, and where bar lines stop
and start between the staff lines. The control string
consists of the following elements:
[ = start bracket
] = end bracket
{ = start brace
} = end brace
( = start bar line
) = end bar line
. = part with a single staff line
: = part with a grand staff (piano)
What defines a system (holds it together) is a single
vertical line on the left. To the left of this line can
appear an arrangement of brackets and braces, which help
the reader group the lines in the systme.
The bar lines in a system have their own (vertical) pattern
of starting and stopping. These are indicated in the comtrol
string by the placement of the '(' and ')' characters. The
'(' character indicates the start of a bar line on the top
staff line of the part indicated by the next dot (or ,:;);
and the ')' character indicates the end of a bar line on the
bottom staff line of the part indicated by the previous
dot (,:;).
Examples: (.) creates a bar line through one set of
staff lines
(:) creates a bar line through a grand staff
(two sets of staff lines)
(.) creates a bar line which starts at the top
of the first staff line and ends at the
bottom of the second staff (i.e., two
independent parts with a bar line
connecting them together).
(.)(.) creates a bar line through each of the
staff ;omes separately, with no
connection between them.
All segments of a system bar line must be specified. The
control string "{..}" will produce a brace on the left, but
no bar lines will appear. In this case, one must either
specify "{(.)(.)}", meaning two bar lines with no connection,
or "{(..)}", meaning one bar line crossing both staff lines.
As a short cut for convenience, the '[' character also doubles
as a '(' character, and the ']' character also doubles as a ')'
character. This allows one to write "[....]" as a shortcut for
"[(....)]".
The staff lines in a system are normally of the same size, but
it is possible to combine staff lines of different note sizes
in the same system. When this is done, the print and display
software must decide what fort size to use for printing the
various bar line, braces, and brackets. At the moment, the
decision is made in the following way:
1. The left line, and all braces and brackets are printed
using the same font size. The default is to use the font
size from the bottome staff line. If the size from a
different staff line is desired, this should be indicated
by replacing the dot for that staff line witha comma, or
in the case of the grandstaff, replacing the colon with
a semi-colon. If more than one comma/semi-colon appears,
the largest of the indicated sizes will be used.
2. As stated above, bar lines can run through one or more
staff lines, and they can be printed in different sizes
(widths).
(a) If a bar line run through only one staff, then it
is pritned in the font size of that staff.
(b) If a bar line run through multiple staves of the
same font size, then it is printed in that font size.
(b) If a bar line connects staves of different font sizes,
the default size for the bar line is given by the size
of the bottome staff. If the size of another staff
is desired, this in indicated by replacing the dot
for that staff line with a comma, or in the case of
the grand staff, replacing the colon with s semi-colon.
If more than one comma/semi-colon appears, the largest
of the indicated sizes will be used.
The control string for a score of a piano concerto with
four woodwinds, timpani, paino and strings might look as
follows: "[(....)(.)(:)({..}...)]"
(End of Systems)
IV. Staff lines (system oriented)
Field 1: Identifier = L
Field 2: y offset in the system. (y = 0 for top line)
Field 3: text offset(s) from line (up to 10, separated by |)
The text offset is the vertical distance between the top
line of the staff and the base line of the text. We are
talking here about text underlay, i.e., text that goes
with the music. The representation permits up to 10
lines (verses) of text.
Fields 4--7: parameters carried over from this line (musical
part) on previous system.
Field 4: dyoff(s)
Field 5: uxstart(s)
Field 6: backloc(s)
Field 7: xbyte(s)
The parameters in fields 4 to 7 relay certain information
required for the printing of text underlay. If this part
on the previous system of music (which might be on a
previous page and therefore not even part of data in this
file) ended with text that was being extended by dashes
( - - -) or a heavy line ( _____ ), these dashes or the
heavy line would need to be continued under the present
line of music. xbyte, contains the terminating punctuation
for a heavy line.
In the case of fields 4, 5 and 6, the parameters are
numeric and if there is more than one line of text, there
will be multiple parameters, separated by |. Field 7 is
a character, and if there is more than one line of text,
there will be multiple characters in this field.
Field 8: y offset to second line of grand staff line (0 = none)
Field 9: notesize (optional; 0 = no information supplied)
(End of Staff lines)
V. Objects
Field 1: Identifier = J
Field 2: type of object (a letter code)
B = bar line
C = clef
K = key signature
T = time signature
D = directive (e.g. time word, etc)
S = other symbol
N = note
R = rest
G = grace note
Q = cue note
F = figures
I = isolated directive or symbol (not
associated with a note, rest, or figure)
M = mark (a dummy object used mostly for
starting or ending super-objects such
as ties or slurs that extend beyond the
line)
Field 3: object code (# = number)
The meaning of this number depends on the type of object.
Object type
───────────
Bar line: # = measure number if there be one,
otherwise zero.
Clef: # = clef code
4 = treble clef (G-clef on line 4)
13 = alto clef (C-clef on line 3)
12 = tenor clef (C-clef on line 2)
22 = base clef (F-clef on line 2)
34 = transposed treble clef (tenor
voice clef)
Key: # = key code
0 = no flats or sharps
1 = 1 sharp (etc.)
-1 = 1 flat (etc.)
Time sig: # = time code (100 * tnum + tden)
tnum = time numerator
tden = time denominator
special cases:
1 1 = common time
0 0 = alle breve
2 0 = simple 2
3 0 = simple 3
Directive: # = print flag
0 = print always (parts and score)
bit 0 set = print in parts
bit 1 set = print in score
bit 2 set = print if top part in score
bit 3 set = print if bottom part in score
(bit 1 over rides bits 2 and 3)
Symbol: # = symbol type
0 = not specifically identified
4 = extended rest
6 = whole measure rest
From the standpoint of typesetting for
a score the major difference between a
directive and a symbol is that a symbol
will always be printed whether or not
the part stands alone or is part of a
score (e.g., letter dynamics), whereas
a directive can be "made invisible" in
parts that are not at the top or the
bottom of a score (e.g., the segno
sign).
Notes: # = note type
Rests: # = rest type
Grace note: # = note type
Cue note: # = note type
Note types
───────────────────────────────────────
11 = longa 5 = sixteenth note
10 = breve 4 = 32nd note
9 = whole note 3 = 64th note
8 = half note 2 = 128th note
7 = quarter note 1 = 256th note
6 = eighth note 0 = undefined
Figure: # = 0 always
Isolated: # = same as for Directives
Mark: # = 0 always
Field 4: horizontal displacement from beginning of line
For objects which are groups of notes (chords),
the x co-ordinate is the position of the notes
which fall on the proper side of the stem. For
stem up, the object's position is that of the
note heads to the left of the stem; for stem down,
the object's position is that of the note heads
to the right of the stem.
Field 5: vertical displacement from the first line
of the staff.
For objects which are groups of notes (chords), the
y co-ordinate is the position of the note which is
farthest from the note-end of the stem (and hence
closest to a beam, if there be one). This is impor-
tant for the proper setting of beams at print time.
For objects to be placed on the lower staff of the
grand staff, 1000 will be added to the displacement.
This means that the print program must check the
range of the displacement before placing the object.
For Bar type objects, which always have a
y co-ordinate of 0, this field contains instead
the bar line code:
1 = single light bar
2 = single heave bar
3 = dotted bar
5 = double light bar
6 = light-heavy double bar
9 = heavy-light double bar
10 = heavy-heavy double bar
In case the bar object extends to the lower staff of
the grand staff, 1000 is added to the bar line code.
Field 6: print code (or if < 32, number of sub-objects)
If this object can be printed with one glyph (character),
then this field contains the glyph number (which will be
32 or greater). Otherwise, this field contains the
number of sub-objects required to represent this object.
Field 7: space node number
This field is used to line up notes in a score. The
measure is is divided into 6912 (27 x 256) parts.
Divisions run from 1 to 6912. Each object is assigned
the division number which most closely approximates
it time location in the measure.
Field 8: distance increment flag.
This flag describes the distance from the preceding
object, as well as an attribute of the object.
0 = preceding distance should remain fixed
at print time
# = preceding distance may vary at print time;
parameter is the notated duration of the preceding
object on this line, measured in units such that
576 = quarter note.
10000 = object will be centered between bar lines
(used only with whole measure rests)
Fields 7 and 8 do not effect the actual display and
printing of the music, but they play an important role
in the automatic editing of music (a possible future
application for Dmuse).
Field 9: number of super-objects associated with this object
Fields 9a,b...,: super-object numbers
A Super-object record will appear in the file after all
objects that relate to the super-object have appeared.
For example, a group of notes (note objects) may be
connected by a beam. After the last of these note
objects has appeared as a record in the file, the
super-object record representing the beam itself will
appear.
(End of Objects)
VI. Sub-objects (these must follow directly after their associated
objects)
Field 1: Identifier = K
Field 2: horiz. displacement, relative to object co-ordinate
Field 3: vertical displacement, relative to object co-ordinate
Field 4: print code of sub-object (glyph number)
VII. Text (a form of sub-object attached to a note or rest)
Field 1: Identifier = T
Field 2: horizontal displacement of text, relative to object
Field 3: vertical code (text line number between 1 and 10)
The vertical code may be followed by the "|" character
and a y offset. The interpretation of the offset is
a displacement from the normal position of the line.
This allows us to move individual words (syllables) up
or down relative to the normal height of the line.
Field 4: ASCII string (blanks represented by "_" character)
If this field = "~" (the tilda character), this means
that this note is the termination of a forward underline.
Field 5: single byte field indicating presence of a forward
hyphen or underline character
Byte code Meaning
───────── ──────────────────────────────
- forward hyphen
_ forward underline character alone
. " " " followed by .
, " " " " " ,
: " " " " " :
; " " " " " ;
! " " " " " !
? " " " " " ?
* no forward hyphon or underline (normal case).
Field 6: space required by ASCII string (in dots)
Strictly speaking, this field is unnecessary, since Dmuse
can calculate this space from the ASCII string in field 4.
But it saves time to have this information, so it is
included.
(End of Text)
VIII. Words (a form of sub-object attached to symbol)
Field 1: Identifier = W
Field 2: horizontal displacement of word(s), relative to
directive or symbol object
Field 3: vertical displacement
Field 4: font number
Field 5: ASCII string (includine additional font designations)
IX. Attributes (a form of sub-object attached to notes/rests)
The purpose of attributes is to communication information
about an object that is not represented precisely by
purely graphical information. An example is the duration
of tuplets. The tuplet super-object (H . X) references
only the end points of a tuplet; there is no precise way
to determine the remaining objects whose duration might
be effected by the tuplet. When converting music page
files to SCORE pmx files, we need to know the precise
duration of all notes. The only foolproof way to convey
this information is with an attribute. Attributes are
ignored in the printing process.
Field 1: Identifier = A
Field 2: type of attribute
1. D = duration
Field 3: numerator of duration
Field 4: denominator of duration
Duration is represented as a proper fraction.
1/4 = quarter note
1/2 = half note
etc.
In terms of divisions (from stage2 source representation)
the numerator is the number of divisions, and the
denominator is four times the divisions per quarter.
Field 5: tie (if present)
(no field) = situation not determined (older files)
0 = no tie
1 = tie to following note
2 = tie appended to selected pitches (nultiple pitches only)
Note: In the case of a rest, field 5 may be used (optionally)
to indicate that the next duration in this track is
also a rest (a tied rest, in effect)
NOTE: Field 5 was introduced in Feb-2006 and might be absent
from some older .mpg files.
2. P = Pitch
Field 3; track number (normally 1)
Field 4; base-40 pitch number (C4 = 163) (0 = rest)
Field 5: tie (in case of multiple pitches and ties)
0 = no tie
1 = tie to following note
NOTE: In case of multiple pitches, there will be multiple
A P ... records. A P ... records should not precede
A D ... records
(End of Attributes)
X. Super-objects (these are things whose shapes depend on the
locations of more than one object. They generally follow
after all of their associated objects have been described.
Field 1: Identifier = H
Field 2: super-object number
Field 3: type of super-object
There are currently eleven types of super-objects. Since
these represent quite different types of musical notation,
the description of the remaining fields for each type of
super-object will be given separately.
Types of super-objects
─────────────────────────────────────────────────────
B = beam E = ending
T = tie R = long trills
S = slur (dotted slur) V = octave transposition
X = tuple/bracket F = figure extension
W = wedge N = null super-object (no action)
D = word plus dashes
Fields 4--: depend on the super-object type
1. Beams (type = B)
Field 4: length of first stem (positive = stem up)
Field 5: slope of beam
Field 6: font number (full size vs. que size)
Field 7: number of associated objects
Fields 7a, b,... beam codes
beam code = from 1 to 6 digits
0 = no beam
1 = continue beam
2 = begin beam
3 = end beam
4 = forward hook
5 = backward hook
6 = single stem repeater
7 = begin repeated beam
8 = end repeated beam
1's digit = eight level beams
10's digit = 16th level beams
100's digit = 32nd level beams
1000's digit = 64th level beams
10000's digit = 128th level beams
100000's digit = 256th level beams
Example: 2 21 33 = ╒═════╤═══╕
│ ╞═══╡
│ │ │
▐█▌ ▐█▌ ▐█▌
2. Ties (type = T)
Field 4: vertical position of tied notes (position
measured in dots (300/inch) from top staff
line)
For ties on the lower grand staff, 1000 will
be added to this value.
Field 5: horizontal displacement of first note head from
associated object (non-zero only with chords)
Field 6: horizontal displacement of second note head from
associated object (non-zero only with hords)
Field 7: horizontal displacement from note head one
Field 8: vertical displacement from note head one
Field 9: font number
Field 10: situation flag
interference tips down tips up
stem staff space line space line
----- ----- ----- ---- ----- ----
no yes 1 5 9 13
no no 2 6 10 14
yes yes 3 7 11 15
yes no 4 8 12 16
Field 11: zero
3. Slurs (and dotted slurs) (type = S)
Field 4: situation flag
bit clear bit set
-------------- -------------
bit 0: full slur dotted slur
bit 1: stock slur custom slur
bit 2: first tip down first tip up
(*) bit 3: second tip down second tip up
(+) bit 4: compute stock slur hold stock slur
bit 5: print slur don't print slur
(*) used on custom slurs only
(+) used on stock slurs only
Field 5--8: position fields:
For stock slurs, these are displacements added to
the note positions before the slur number is
calculated. Displacements are measured in dots
(300/inch). Horizontal positive is forward to
the right; vertical positive is down.
For custom slurs, these displacements are the actual
starting point and ending points of the slur
relative to the first and second objects.
Field 5: (extra) horizontal displacement from
associated object one
Field 6: (extra) vertical displacement from
associated object one
Field 7: (extra) horizontal displacement from
associated object two
Field 8: (extra) vertical displacement from
associated object two
Field 9--10: parameter fields:
Stock slurs: Field 9: post adjustment to curvature
Field 10: beam flag 1 = set slur above beam
2 = set slur below beam
Custom slurs: Field 9: vertical height parameter
Field 10: length of flat portion as a
percent of span between end
points
Field 11--12: more parameters
Stock slurs: Field 11: post adjustment to x-position
negative = left; positive = right
Field 12: post adjustment to y-position
negative = up; positive = down
4. Tuplets/brackets (type = X)
Field 4: situation flag
bit clear bit set
-------------- -------------
bit 0: no tuplet tuplet
bit 1: no bracket bracket
bit 2: tips down tips up
bit 3: 0 tuplet aligns with beam
bit 4: tuple near notes tuple near beam
(bit 4 has meaning only if bit 3 is set)
bit 5: break bracket for number bracket is continuous
(bit 5 has meaning only if bit 0 is set)
bit 6: number outside bracket number inside bracket
(bit 6 has meaning only if bit 1 is set)
bit 7: bracket is square bracket is curved
(bit 7 has meaning only if bit 1 is set)
Field 5: tuplet number: value = 1000 * [second number] +
first or single number.
Fields 6--10: parameters
Case I: bit 3 of sitflag = 0 (tuple not aligned with beam)
or bit 3 of sitflag = 1 and bit 4 of sitflag = 0
(tuple aligned with notes of beam)
Field 6: horizontal displacement from
associated object one
Field 7: vertical displacement from
associated object one
Field 8: horizontal displacement from
associated object two
Field 9: vertical displacement from
associated object two
Field 10: not used
Case II: bit 3 of sitflag = 1 (tuple aligned with beam)
Field 6: horizontal post adjustment to tuple
Field 7: vertical post adjustment to tuple
Field 8: horizontal post adjustment to tuple
Field 9: vertical post adjustment to tuple
Field 10: beam super-object number with which tuplet
aligns
5. Wedges (type = W)
Field 4: wedge size at left end (measured in dots)
Field 5: wedge size at right end
Field 6: horizontal displacement from associated object one
Field 7: vertical displacement from top of staff
Field 8: horizontal displacement from associated object two
Field 9: vertical displacement from top of staff
6. Word(s) plus dashes (type = D)
Field 4: horizontal displacement from associated object one
Field 5: horizontal displacement from associated object two
Field 6: vertical displacement from staff lines
Field 7: spacing parameter
Field 8: font designator
7. Endings (type = E)
Field 4: situation flag
0 = ending with no number
1 = first ending
2 = second ending
3 = third ending
4 = fourth ending
11 = transposed 8av down
12 = transposed 8av up
Field 5: horizontal displacement from associated object one
Field 6: horizontal displacement from associated object two
Field 7: vertical displacement from staff lines
Field 8: length of left vertical hook
Field 9: length of right vertical hook
8. Long trills (type = R)
Field 4: situation 1 = no trill, 2 = trill
Field 5: horizontal displacement from associated object one
Field 6: horizontal displacement from associated object two
Field 7: vertical displacement from associated object one
9. Octave transposition (type = V)
Field 4: situation 0 = 8ve up, 1 = 8ve down
2 = 15 up, 3 = 15 down
Field 5: horizontal displacement from associated object one
Field 6: horizontal displacement from associated object two
Field 7: vertical displacement from associated object one
Field 8: length of vertical hooks
10. Figure extension (type = F)
The figure extension is a solid line indicating that a
particular figure carries over to succeeding notes.
There can be from 1 to 4 figures alligned vertically.
Field 4: level 1,2,3 or 4
Field 5: horizontal displacement from associated object one
Field 6: horizontal displacement from associated object two
11. Null super-object (type = N)
No additional fields
(End of Super-objects)
XI. End of Music Line
Field 1: Identifier = E
Field 2: xbyte(s) at end of line
xbyte is the punction found at the end of a solid line
( ____ ). * = no solid line (or no text).
XII. System Bar
Field 1: Identifier = B
Field 2: bar type Single bars Double Bars
----------- -----------
1 = simple 5 = double light
2 = heavy 6 = light-heavy
3 = dotted 9 = heavy-light
10 = heavy-heavy
25 = heavy-light with
99 = no bar repeat dots
Field 3: x off-set from beginning of line
Field 4: number of breaks in line (to avoid interference with
text and other designations)
Fields 5--: parameter pairs, beginning and ending of breaks
XIII. Meta-data records
These records are ignored by the display/print software, but
they may contain important information relating to the
description or structure of the data.
Field 1: Identifier = @
Some uses of @-records:
1. Source IS.
Field 2: "SOURCE:"
Field 3: <File ID>
Field 4: <[md4sum: ... ]>
The idea is to represent all of the sources that contributed to
making this page (or musical example). The Source ID records
should normally folow the Z-header records. In cases where
there are no Z-header records, the Source ID record should
appear before the first system (and before any @ SYSTEM:
records).
2. Movement ID. + Info
Field 2: "MVT:"
Field 3: Type of data
N = name Field 4: = movement name
P = part Field 4: = part number
Field 5: = <sub-part numbers> enclosed in carrot
bracket numbers separated by commas,
null-set allowed
Filed 6: = part name
L = line Field 4: = line index number
Field 5: = <part numbers for each track> enclosed
numbers separated by commas, no null set
allowed. If the first field inside the
<..> string is an "x", this indicates a
keyboard part, which is non-divisible and
multi-track. The numbers that follow,
e.g., "<x,#,#,..>" are the part numbers
assigned tp tje various keyboard tracks.
Filed 6: = line name
Note: "part" means any part or group of parts. If there are
oboes, then there are likely to be three parts:
oboe-1, oboe-2, and oboes.
"line" means any line compiled by the solfware for
purposes of make a score. For the bass strings,
thre are often three lines: cello, basso, and
cello + basso. These three lines never appear in
the same system; either the cello and bassp appear
as separate lines, or they appear combined on the
same, single line.
3. System ID.
Field 2: "SYSTEM:"
Field 3: ASCII string
The purpose of this record is to identify the composer,
work, and movement to which this system belongs. This
information (if present) will be used by search programs
to identify "hits." This record should be located just
above the System record to which it applies.
There is an option t include a bar line number in this
ASCII string. If this is ot be used, the number must
occur at the beginning of the string, and must be enclosed
in < > brackets, e.g., ,28., with no space following.
4. Line ID.
Field 2: "LINE:"
Field 3: line index number (for joining lines between systems)
Field 4: ASCII string
The purpose of this record is to identify the instrument(s)
or the voice represented on this staff line. This information
(f present) will be used by the search program to identify
"hits." This record should be located just above the Line
record to which it applies.
5. Line Text(s)
Field 2: "TEXT:"
Field 3: ASCII string
The purpose of this record is to provide a searchable ASCII
string containing the text (underlay) represented on the
line. This record should be located just below the Line
record to which it applies. in cases where there is
multiple text underlay (e.g., some Bach chorals), there
will be multiple @ TEXT: records.
5. Comment
Field 2: "COMMENT:"
Field 3: ASCII string
(End of Meta-data records)
──────────────────────────────────────────────────────────────────
4.1 Nothing yet has been said about what shapes the glyph numbers
represent. The glyph numbers appear mainly as the fourth field
of sub-ojbects. Occasionally one finds a glyph number in field 6
of an ojbect. The table below shows the shapes assigned to
the various glyph numbers.
Glyph Numbers for the Music Font
════════════════════════════════════
Lower numbers Higher numbers
═════════════ ══════════════
1. large clefs 1. small clefs
─────────── ───────────
33 treble (top) 161 treble (top)
34 treble (bottom) 162 treble (bottom)
35 C-clef 163 C-clef
36 bass 164 bass
2. large time signatures 2. small time signatures
───────────────────── ─────────────────────
37 common time 165 common time
38 alle breve time 166 alle breve time
167 duple
168 triple
3. full-size note heads
────────────────────
39 longa 3. grace/que-size note heads
40 breve ─────────────────────────
41 whole 169 whole
42 half 170 half
43 quarter 171 quarter
4. full-size dot, leger line 4. grace/que-size dot, leger line
───────────────────────── ──────────────────────────────
44 dot 172 dot
45 leger line 173 leger line
5. full-size rests 5. que size rests
─────────────── ──────────────
46 whole 174 whole
47 half 175 half
48 quarter 176 quarter
49 eighth 177 eighth
50 add-eighth 178 add-eighth
6. full size flags 6. cue size flags
─────────────── ──────────────
51 short up-eighth 179 up-eight + slash
52 short down-eighth 180 down-eight + slash
53 up-eighth 181 up-eighth
54 down-eighth 182 down-eighth
55 up-sixteenth 183 up-sixteenth
56 down-sixteenth 184 down-sixteenth
57 up-add-flag 185 up-add-flag
58 down-add-flag 186 down-add-flag
7. full size stems 7. cue size stems
─────────────── ──────────────
59 full length up 187 full length up
60 full length down 188 full length down
61 notesize up 189 notesize up
62 notesize down 190 notesize down
8. accidentals 8. small accidentals
─────────── ─────────────────
63 sharp 191 sharp
64 natural 192 natural
65 flat 193 flat
66 double sharp 194 double sharp
9. editorial brackets 9. editorial brackets
────────────────── ──────────────────
67 square left 195 que square left
68 square right 196 que square right
69 round left 197 que round left
70 round right 198 que round right
10. big numbers 10. fingering/figured numbers
─────────── ─────────────────────────
71 0 199 0
72 1 200 1
73 2 201 2
74 3 202 3
75 4 203 4
76 5 204 5
77 6 205 6
78 7 206 7
79 8 207 8
80 9 208 9
11. staff lines 11. staff lines
─────────── ───────────
81 full-size staff 209 que-size staff
12. vertical lines 12 & 13. other figures
────────────── ─────────────
82 full length bar 210 small plus for figures (+)
83 quarter length bar 211 small x for figures (x)
84 full leng. thick bar 212 2+
85 qtr. length thick bar 213 sharp
86 full leng. dotted bar 214 4+
87 thick vertical top 215 5+
88 thick vertical bottom 216 6/
217 7\
13. horizontal lines 218 natural
──────────────── 219 flat
89 begin/end hook 220 small place holder
90 solid line (30 dots) for figures (-)
91 dash line (30 dots)
92 heavy line (30 dots)
14. articulations (10) 14. tuple numbers (10)
────────────────── ──────────────────
93 horizontal accent 221 0
94 ^ accent 222 1
95 v accent 223 2
96 staccato dot 224 3
97 v stricht 225 4
98 ^ stricht 226 5
99 - legato 227 6
100 , breath 228 7
101 fermata up 229 8
102 fermata down 230 9
15. repetition (5) 15. octave (5)
────────────── ──────────
103 ./. 231 big upright 8
104 solid / 232 little upright 8
105 empty / 233 big italic 8
106 signet sign 234 little italic 8
107 circle + cross sign ┼ 235 big italic 15
16. dynamics (6) 16. ornaments
──────────── ─────────
108 p 236 tr.
109 m 237 ~~
110 f 238 mordent
111 s 239 shake
112 z 240 shake from above
113 r 241 shake from below
242 turn from above
17. performance indications 243 turn from below
─────────────────────── 244
114 Ped. 245
115 * (end pedal) 246
116 up bow 247
117 down bow 248
118 pedal heel 249 colon for tuples
119 pedal toe 250 (blank)
120 arpegiate 251 (editorial piano)
121 repeat notes 252 (editorial mezzo)
122 harmonic a 253 (editorial forte)
123 harmonic b 254 (editorial trill)
124 thumb position 255
18. miscellaneous
─────────────
125 stem repeater (for quarters, etc.)
126 stem repeater (for eights, etc.)
127 stem repeater (for whole notes)
──────────────────────────────────────────────────────────────────