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

   
    ──────────────────────────────────────────────────────────────────