INTERMEDIATE FILES FOR MUSIC PRINTING
November 28, 1990
(revised 5-28-93)
(revised 11-11-93)
(revised 9-15-94)
(revised 9-27-94)
(revised 8-09-95)
I. File Structure
Variable length ASCII records
Fields separated by blanks
II. Types of I-files
The first step is to generate an I-file for each individual
part. These "source" I-files are non-page-specific; i.e. the clef,
key and time signatures occur only at the beginning of the file,
and there are no line breaks or page breaks. The reason for this
type of representation is that we may want to generate a printed
part, or we may want to generate a score.
The generation of a single part will lead to a page-specific
I-file for this part. The generation of a full score will lead to
a page-specific I-file for the score. There will be some slight
variation in representation for these page-specific files:
1. Lines will be broken and located on the page.
2. Clef, key and time signatures will be placed
at the begining of every line.
3. The hyphens betwen syllables of text underlay
locations.
4. Ties, slurs and extended hyphens will be
continued across line and page boundaries.
III. Record Types
Source Files Page Specific (additional)
------------ --------------------------
Music Lines Systems
Objects Music Lines (page specific)
Sub-objects End of Music Line
Text (form of sub-object) System Bar
Words (form of sub-object) Page Text
Attribute (form for sub-object)
Super-objects
IV. Record Formats
A. Music Lines
Field 1: Identifier = L
Field 2: 0 = single staff; # = vertical offset of second staff
Field 3: vertical displacement of text line
Field 4: part name (ASCII string)
_NP
B. Objects
Field 1: Identifier = J
Field 2: type of object 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 (mostly for superobjects)
Field 3: object code
Bar line: x = measure number if there be one, else zero
Clef: x = clef code
Key: x = key code
Time sig: x = time code (100 * tnum + tden)
Directive: 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: 0 = not 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: x = note type
Rests: x = rest type
Grace note: x = note type
Cue note: x = note type
Figure: 0
Isolated: same as for Directives
Mark: 0
Field 4: horizontal displacement measured in 32-bit precision
from beginning of piece
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.
_NP
Field 5: vertical displacement from top staff line
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 second (or greater)
staff of the grand staff, 1000 (2000) 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 more than one staff
an amount equal to 1000 times (n-1) where n is the
number of staves is added to the bar line code
Field 6: print code (or if < 32, number of sub-objects)
Field 7: space node number
1. Multiple rests -- number = measures of rest
2. Everything else -- number = division number
This number will indicate the division within the
measure to which the object belongs. The measure
is divided into 6912 (27 x 256) parts. Divisions
run from 1 to 6912. It is possible for several
objects to have the same space node number. These
objects will have separate numbers in the page-
specific format.
Field 8: distance increment flag. This flag describes the
distance from the preceding object, as well as an
attribute of the node:
0 = preceding distance should remain fixed
at print time
# = preceding distance may vary at print time;
parameter is the duration of the preceding
node, measured in units such that
576 = quarter note.
10000 = object will be centered between bar lines
(used only with whole measure rests)
Field 9: number of super-objects associated with this object
Fields 9a,b...,: super-object numbers
_NP
C. 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
D. Text (a form of sub-object attached to note or rest)
Field 1: Identifier = T
Field 2: horizontal displacement of text, relative to object
Field 3: vertical code (text line number) or offset from staff line
If field 3 is between 1 and 10, it is interpreted as text
line number; if greater than 10, it is interpreted as
an offset + 1000. Normally this field will contain the text
line number; this allows all texts to be moved by simply
changing paramter 3 in the Line (L) record. When the
vertical position of a word of text is specifically
specified, this has the effect of "uncoupling" the word
from the rest of the text.
Field 4: ASCII string
Field 5: indication of forward hyphen or underline character
- = forward hyphen
_ = forward underline character
. = " " " followed by .
, = " " " " " ,
: = " " " " " :
; = " " " " " ;
! = " " " " " !
? = " " " " " ?
* = nothing
Field 6: space taken up by ASCII string
E. 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 font designations)
_NP
F. 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 page
specific i-files to SCORE pmx files, we need to know the precise
duration of all notes. The only foolproof way to convey this
information is in an attribute. Attributes are typically 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.
G. 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
B = beam
T = tie
S = slur (dotted slur)
X = tuple/bracket
W = wedge
D = word plus dashes
E = ending
R = long trills
V = octave transposition
F = figure extension
N = null super-object (no action)
Fields 4--: depend on the super-object type
1. Beams (type = B)
Fields 4 and 5:
Case I: location undetermined
Field 4: 0 = beam above first object
1 = beam below first object
Field 5: 0 or 1 = stem directions are all the same
> 1 = binary representation of stem direction.
If field 4 = 0, then bit set = stem up;
if field 4 = 1, then bit set = stem down;
Example: if field 4 = 1, then 101001010 =
down, up, down, up, up, down, up, down, up
Case II: location determined
Field 4: length of first stem (positive = stem up)
Field 5: slope of beam
Field 6: font number
Field 7: number of associated objects
Fields 7a, b,... beam codes
beam code = up to 6 digit number
0 = no beam
1 = continue beam
2 = begin beam
3 = end beam
4 = forward hook
5 = backward hook
6 = begin repeated beam
7 = 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
_NP
2. Ties (type = T)
Fields 4--6: locations of note heads to be tied
Field 4: vertical position of tied notes (position
measured in dots (300/inch) from top staff
line)
For ties on the virtual 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)
Fields 7--9: parameters for tie shape and placement
(calculated at print time)
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: reset parameter flag (used in cases where
post-editing has specified non-standard parameters)
value action
----- ------
0 recompute position and font (normal setting)
1 do not recompute position
2 do not recompute font
3 do not recompute position or font
_NP
3. Slurs (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
(*) 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
_NP
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)
Field 5: tuplet 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
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
_NP
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
_NP
10. Figure extension (type = F)
Field 4: level 1,2,3 or 4
Field 5: horizontal displacement from
associated object one
Field 6: horizontal displacement from
associated object two
_NP
V. Record Formats for Page Specific Record Types
A. Systems
Field 1: Identifier = S
Field 2: 0
Field 3: x co-ordinate of system on page
Field 4: y co-ordinate of system on page
Field 5: horizontal length of system
Field 6: vertical length of system
Field 7: number of lines in system
Field 8: control string in double quotes (null string allowed)
B. Music Lines (page specific)
Field 1: Identifier = L
Field 2: y off-set in system
Field 3: text off-set from line
Fields 4--7: parameters carried over from previous line
Field 4: dyoff
Field 5: uxstart
Field 6: backloc
Field 7: xbyte
Field 8: y off-set to virtual staff line (0 = none)
C. End of Music Line
Field 1: Identifier = E
Field 2: xbyte at end of line
D. 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
E. Page Text
Field 1: Identifier = X
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
VI. Header Information (required for all MPG page specific files)
Field 1: Identifier = Z
Field 2: information type
Example 1
──────────────────────────────
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
Example 2
──────────────────────────────
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
Example 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
Field 3: actual data