╔══════════════════════════════════════════════════╗ ║ ║ ║ 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) ──────────────────────────────────────────────────────────────────