The purpose of MUSEDATA code is to represent the logical content of musical scores in a software-neutral fashion. The code is currently being used in the constuction of "full text" databases of music for several composers, including J.S. Bach, G.F. Handel, A. Corelli, P. Telemann, J. Haydn, W.A. Mozart, and L. van Beethoven. It is intended that these full text databases be used for music printing, music analysis, and production of electronic MIDI sound files. MUSEDATA is a relatively young encoding system. To date, it has been successfully tested on a selection of keyboard, instrumental and vocal music from the seventeenth through the early nineteenth centuries. New works are being encoded at the rate of about 300 music pages per month. As we encode new works, we occasionally encounter situations which call for additions to the MUSEDATA code specifications. These additions and modifications are part of our overall development plan for MUSEDATA. Rather than trying to anticipate all possible notational situations that can occure in the notation of Western Music, our philosophy has been to build a system with maximum flexibility and expandability, which could easily grow to accomodate new situations (begin italics)as they arise(end italics). So far, this philosophy has worked very well, and the system has shown no signs of becoming overloaded or "boxed in" by its own structure. On the other hand, we have yet to test the system on the more complicated scores of the late nineteenth century or on the vastly expanded notation of twentieth century music. MUSEDATA code is intended to be software-neutral. However, in order to test its effectness, we have developed software for printing scores and parts from the data, for compiling MIDI files from the data, and for conducting highspeed searches of the data for specific rhythm, melodic, and harmonic patterns. To further demonstrate the software neutrality of the system, we have developed software to generate SCORE parameter files and DARMS input files from the data. Work is in progress on programs to convert to other representations as well. All software currently runs on x86 architechtures running the DOS operating system. MUSEDATA code is designed to represent both notational and sound information, but in both cases the representation is not intended to be fully complete. It is envisioned that MUSEDATA files would serve as (begin italics)source files(end italics) for generating page-specific graphics files and MIDI sound files, which might then be further edited as the user sees fit. The reasons for this are two fold: (1) When we encode a musical work, what we are encoding is not the score itself but the logical content of the score. To encode the score would mean encoding the exact position of every note on the page; but our view is that such an encoding would actually contain more information than the composer intended to convey. When Bach made a fair copy of one of his works, he may have reproduced all of the notes in their proper order, but he surely did not put them in the exact same place on the page as they had occupied in the composing copy. What we seek to encode, then, is the same information that Bach would have transferred from a composing copy to a fair copy, and that his copists would have transferred to various instrumental parts from the score. (2) We cannot anticipate all of the uses to which this data might be put, but we can be fairly sure that each user will have his or her own special needs and preferences. It doesn't make sense, therefore, to try to encode detailed information about how a graphic realization of the data should look or how a sound realization of the data should sound. On the other hand, it doesn't hurt and sometimes can be helpful to make suggestions about how the graphics and the sound should be realized. The important thing is to identify the suggestions as a separate data type, which can easily be ignored by application software or stripped entirely from the data. Our own software makes use of these print and sound suggestions in the process of generating SCORE parameter and MIDI sound files. We now begin a detailed description of MUSEDATA code. There are two major parts to this description: (1) how files are organized, and (2) how the specific elements of music are represented by a records in a file. We will begin with (2). Description of Records ---------------------- MUSEDATA files consist of set of time-ordered, variable length ASCII records. The order of the records is essential to the representation. The first character in each record is called the control key, and this key determines the nature and function of the record. There are at the moment 23 valid keys. This leaves 73 vacancies for adding new types of records to the representation, which is a significant factor in sytem's ability to expand. The most common type of record is the (begin underline)regular note or rest(end underline) record. This is really the heart of the representation. This type of record can be identified by one of the following eight keys: (begin underline)A(end underline),(begin underline)B(end underline), (begin underline)C(end underline),(begin underline)D(end underline), (begin underline)E(end underline),(begin underline)F(end underline), (begin underline)G(end underline), and (begin underline)r(end underline). The format for these records is as follows: (indent .5 inch) (begin underline)Colmuns 1 to 9(end underline) contain precise information about pitch and duration. Pitch is specified by a capital letter, A through G, followed by zero, one, or two sharps (#) or flats (f), followed by an octave range number, 0 to 9. Duration is specified in units called divisions. The number of divisions per quarter note is specified in an earlier "$" type record. Duration means the complete duration of a pitch, not a shortened or articulated duration. Duration also refers to the intended duration, not the notated duration of a pitch. Bach, for example, often notated a long-short triplet pattern with a dotted eighth and sixteenth note. The intended duration in this case would be the long-short triplet pattern. (indent .8 inch) column 1-4: pitch or rest, Cff0 to B##9, C4 = middle C column 5: blank column 6-8: duration (right justified) column 9: tie flag ' ' = no tie '-' = tie (indent 1.4 inch) From the data in columns 1 to 9, (i.e., pitch and duration), it is possible to construct sound output of the musical part. (indent .8 inch) columns 10-12: blanks columns 13-15: footnote and level information, track number (indent 1.0 inch) column 13: footnote flag (blank = none) column 14: level number (optional) column 15: track number (optional) (indent 1.2 inch) Where more that one musical line is represented in a part (e.g., Oboe I,II, or keyboard music), it is essential for purposes of analysis to know for each note (or chord) the musical line or "track" to which the note belongs. In some cases this is "interpretive" information, provided as a service by the encoder. (indent .8 inch) column 16: blank (indent .5 inch) (begin underline)Columns 17 to 43(end underline) contain information about the notation of the pitch and duration. As pointed out above, this information will sometimes conflict with the information in columns 1 to 9. (indent .8 inch) columns 17-22: note description (indent 1.0 inch) column 17: note type (Longa to 256th note) L,b,w,h,q,e,s,t,x,y,z B,A,9,8,7,6,5,4,3,2,1 (cue-size) column 18: dot flag ' ' = no dot '.' = single dot ':' = double dot column 19: actual accidental flag (indent 2.1 inch) # = sharp X = sharp-sharp n = natural & = flat-flat f = flag S = natural-sharp x = double sharp F = natural-flat (indent 1.0 inch) columns 20-22: designation of time modification (indent 2.3 inch) Two digits, separated by a colon (:) For standard cases, such as triplets (3:2),the colon and the second digit are usually omitted. The numbers 10--35 are represented by the letters A--Z. (indent .8 inch) column 23: stem direction d = down u = up ' ' = no stem column 24: staff number (' ' = 1) (indent 1.2 inch) Used in the case of music represented on more than one staff (e.g., the grand staff) (indent .8 inch) column 25: blank column 26-31: beams codes (up to six levels = 256th note) (indent 2.8 inch) [ = start beam = = continue beam ] = end beam / = forward hook \ = backward hook (indent 2.4 inch) column 26 is for eighth beams, 27 for sixteenth, ... (indent .8 inch) columns 32-43: other notations (indent 1.2 inch) Codes are read from left to right. The character "&", followed by a digit (1..9,A..Z), is used to indicate a specified editorial level. All codes to the left of the first "&" belong to the lowest editorial level (least edited). The following codes are somewhat arbitrary. They have been chosen for representing common musical notation for Western music from the 16th through the 19th centuries. The encoding scheme is not complete and may be augmented and/or altered to meet the special requirements of the music being encoded. (indent 1.0 inch) Ties, Slurs, Tuples The designations, slur1, -------------------- slur2, slur3 and slur4 are - = tie arbitrary. The point is that ( = open slur1 it is possible for slurs to ) = close slur1 overlap timewise in a part [ = open slur2 (e.g., in piano music) and ] = close slur2 therefore necessary to have { = open slur3 several open-slur, close- } = close slur3 slur pairs available. z = open slur4 Tuple numbers are not printed x = close slur4 unless specified by a "*" in * = start tuplet the first record of the group ! = stop tuplet and a "!" in the last record of the group. Ornaments It is possible to combine a ---------- trill (t) with a wavy line (~). t = tr. A wavy line is understood to r = turn terminate at the next note k = delayed turn record, unless continued by w = shake the continue (c) code. ~ = wavy line (trill) c = continue wavy line M = mordent j = slide Technical Indications Fingerings are represented --------------------- from the top down. v = up bow 5 n = down bow 531 = 3 o = harmonic 1 0 = open string Fingering substitutions are Q = thumb position represented using the ":" 1,2,3,4,5 = fingering character. : = next fingering is a 5:42:1 = 5-4 substitution 2-1 Articulations and Accents -------------------------- A = vertical accent (/\) V = vertical accent (\/) > = horizontal accent . = staccato _ = legato = = line with dot under it i = spiccato , = breath mark Accidentals on ornaments (must follow directly after ornament) -------------------------------- s = sharp (ss = double sharp) h = natural b = flat (bb = double flat) u = next accidental is below rather than above ornament Other Indications and Codes The "Z" character means --------------------------- sforzando. Whether this S = arpeggiate (chords) is printed as "sfz" or F = upright fermata "sf" is not specified E = inverted fermata here. The same goes p = piano (p, pp, etc.) for re-sforzando. f = forte (f, ff, etc., fp) "+" indicates an m = mezzo (mp, mf) accidental on the Z = sfz same level as its Zp = sfp note; "^" indicates R = rfz an accidental above ^ = accidental above note the note. + = cautionary/written out accidental (indent .8 inch) columns 44-80: text: multiple lines of text set off by (indent 2.5 inch) the "|" character. For the Christmas carol "Deck the halls with boughs of holly," which has three verses, the text for the first note would be (begin underline)Deck|See|Fast(end underline) (indent 0.0 inch) It is instructive to point out the types of information (begin underline)not(end underline) represented in the regular note or rest record. In the case of ties and slurs, nothing is specified about their orientation (tips up vs. tips down) or their placement. The arrangement of basic beam components is fully described, but nothing is said about the orientation of the beam (length of stems, etc.). No provision is made for describing repeated notes or repeated note pairs under beams (repeaters). No information concerning the horizontal distance between successive notes is given; in fact, no horizontal information of any kind is specified. The position of a note within a measure is implied by its position in the file, i.e., by the sum of previous durations within the measure. There is also no explicit information on vertical placement. The vertical position of note heads relative to staff lines can be inferred from note pitch and from the controlling clef (specified earlier in a "$" type record), but the vertical position of rests is completely unspecified. The position of ornaments, technical indications, articulations and accents, and other indications and codes attached to notes is also unspecified. All graphical information describe above can be represented in MUSEDATA using print suggestion records. In most cases, however, this is not necessary. Intelligent software can deduce this type information correctly most of the time. Print suggestions are generally reserved for those cases where software might not place graphical elements correctly. The representation of ornaments and other symbols attached to notes (codes for columns 32 to 43) is very incomplete at the present time. 53 character codes have been defined thus far, leaving room for 42 additional definitions. Rather than try to assign these codes now, we have chosen to leave them available for future uses. In the case of sound, other than specifying basic pitch and duration, regular note records contain no specific sound information. Dynamics are encoded (ff, pp, etc.) but not quantified. Ornaments are specified, but their execution is not. Articulation information is present in the form of slurs, dots, etc. but no quantitative information is given. MUSEDATA does provide a means for including specific information for sound realization, but this information takes the form of suggestions and is not considered part of the primary data (see section on (begin italics)sound records(end italics) below). Nothing has been said thus far about representing chords, grace notes or cue-size notes. This is the next topic in this discussion. A regular note may be followed by additional chord tones. A chord is thus made up of one regular note and one or more (begin underline)extra chord notes(end underline). The key for an extra chord note is " " (blank). The format for this type of record is as follows: (indent .8 inch) column 1: blank columns 2-5: pitch (see regular note) columns 6-8: duration or blanks column 9: tie flag columns 10-42: same as for regular note (indent 0.0 inch) If the duration field (columns 6-8) is blank, it is understood that the extra chord note has the same duration as the regular note. The duration of the extra notes need not be the same as the that of the regular note, but must not exceed that of the regular note. (The situation of different durations arises sometimes with string double stops). If all durations in the chord are the same, the pitches may be encoded in any order (any of the pitches may be encoded as the regular note). For purposes of analysis, it is O.K. to assign different notes of a chord to different tracks (column 15). There are three types of small size notes: small size regular notes (explained above), (begin underline)cue notes(end underline), and (begin underline)grace notes(end underline). Small size regular note and cue notes line up time-wise with regular notes in a score, whereas grace notes have space of their own and are attached to a following regular note or to the end of a measure. Small size regular notes should be used to represent accompaniments and other musical material which is intended to be played. Cue notes should be used to represent notes that show in one part what is going on in another part or to represent a variant to regular notes. An instrumental cadenza, expressed as small notes in a score and executed essentially in free time would probably be represented with grace notes. If, on the other hand, the cadenza extended for several measures and were executed basically in measured time, it would probably be represented with regular notes, at either small or full size. The control keys for grace notes and cue-notes are (begin underline)g(end underline) and (begin underline)c(end underline), respectively. The format for these are is as follows: (indent .8 inch) column 1: g = grace note c = cue note (grace size, but written in time) column 2-5: pitch/rest (see regular note) columns 6-7: blanks column 8: note type (indent 2.6 inch) 0 = eighth note with slash 1 = 256th note 2 = 128th note 3 = 64th note 4 = 32nd note 5 = 16th note 6 = 8th note 7 = quarter note 8 = half note 9 = whole note A = breve (indent .8 inch) column 9: blank column 10-80: same as regular notes (indent 0.0 inch) Grace notes and cue-notes may include extra chord tones. In this case the same keys ((begin underline)g(end underline) and (begin underline)c(end underline)) are used and the records have the following formats. (indent .8 inch) column 1: g or c (same as for single notes) column 2: blank columns 3-6: pitch (see regular note) column 7: blank column 8: note type (same as for single notes) column 9: blank column 10-80: same as other grace and cue notes (indent 0.0 inch) The MUSEDATA system supports the representation of figures for (begin underline)figured harmony(end underline). The control for this type of record is (begin underline)f(end underline). The format is as follows: (indent .8 inch) column 1: f = figured harmony column 2: number of figure fields columns 3-5: blanks column 6-8: advance of figure division pointer (indent 1.1 inch) Figures take their position from the first regular note that follows the figure records. In the case where the figures change during the duration of a note, the advancing parameter (columns 6-8) is used to indicate the elapsed time between changes. In the case where a figure appears after a note has sounded, the "blank" figure is used as a place holder to advance the figure division pointer. (indent .8 inch) columns 9--12: blanks columns 13-15: footnote and level information (indent 1.0 inch) column 13: footnote flag (blank = none) column 14: level number (optional) column 15: blank (indent .8 inch) column 16: blank columns 17--: figure fields (indent 1.0 inch) The figure fields are set off by one or more blanks. Figure numbers may extend from 1 to 19. They may be modified in front by #,n,f, and x. They may be modified afterward by #,n,f,+,\,/ and x. The #,n,f and x signs may stand alone as figures. A "b" indicates a blank figure. This is used as a place holder in a list and also to start a continuation line with no figure. The first figure field is for the top of the figure list. 6 For example, in the figure list #4 , the 6 would be in 2 represented in the first field. (indent 1.8 inch) figures, signs and modifiers: 1 # = sharp 2 n = natural 3 f = flat 4 x = double sharp 5 + = augment 6 \ = diminish 7 / 8 - = short line in 9 _ = long line from previous figure 10 11 b = blank etc. (indent 0.0 inch) In order to represent two musical parts simultaneously on one stave, and also to represent music on the grand staff (keyboard music) in a single data file (i.e., as a single musical part), it is necessary for the representation to have a (begin underline)backup command(end underline). This command essentially subtracts a specified number of divisions from the division counter in a measure, thereby allowing simultaneous musical tracks to be represented. If it is possible to make the division counter smaller by means of the backup command, then we must also have a means for making it bigger, without printing a rest. We call this record type an (begin underline)invisible rest(end underline). The controls keys for the backup command and the invisible rest are (begin underline)i(end underline) and (begin underline)b(end underline), respectively. The format is as follows. (indent .8 inch) columns 1-5: "irest" = forward space (invisible rest) "back " = backspace columns 6-8: duration to skip forward or back up columns 9--12: blanks columns 13-15: footnote and level information (indent 1.0 inch) column 13: footnote flag (blank = none) column 14: level number (optional) column 15: blank (indent .8 inch) column 16: blank column 17: pass number (optional) (indent 1.1 inch) This feature can be used to express parallel action in the same part (e.g. keyboard music). (indent 0.0 inch) The final length of a measure (in divisions) is given by the furthest extent of the division counter. It is good encoding practice to advance the division counter to the end of the measure, if it is not already there when the final note in the measure has been encoded (Our own software requires this). Measure breaks (or (begin underline)measure lines(end underline)) have their own record type in MUSEDATA. The control key is (begin underline)m(end underline), and the format is as follows: (indent .8 inch) column 1: "m" columns 2-7: "easure" = regular bar line (indent 2.3 inch) "dotted" = dotted bar line "double" = (light) double bar line "heavy1" = heavy bar line "heavy2" = light-heavy double bar "heavy3" = heavy-light double bar "heavy4" = heavy-heavy double bar (indent .8 inch) column 8: empty columns 9-12: optional bar number for this bar (left justified) columns 13-15: footnote and level information (indent 1.0 inch) column 13: footnote flag (blank = none) column 14: level number (optional) column 15: blank (indent .8 inch) column 16: blank columns 17-80: flags: * = non-controlling bar line (indent 3.0 inch) ~ = continue wavy line trill across this bar line A = segno sign at bar F = fermata sign over bar line E = fermata sign under bar line start-end# = start ending # stop-end# = stop ending # disc-end# = discontinue ending # line :| = repeat backward |: = repeat forward (indent 1.1 inch) Flags need not be separated by blanks, doing so adds to the readability of the code. Bar lines are divided into two types: controlling and non-controlling. Controlling bar lines are lines which run through an entire score. In this respect, they mark the beginning of a new global measure. Non-controlling bar lines need not have this property. Non-controlling bar lines may not serve for line breaks or page breaks. The designation of a bar line as non-controlling is to some extent left to the discretion of the encoder, e.g. in the case of a double bar in the middle of a normal measure, this could be controlling or non controlling. However, in a case such as the (begin underline)Minuet(end underline) from the Mozart opera "Don Giovanni," where the score uses three different meters simultaneously, the non-aligned bar lines must be designated as non-controlling. (indent 0.0) Musical directions which are not attached to specific notes have their own record type. The control key is (begin underline)*(end underline), and the format is as follows: (indent .8 inch) column 1: "*" columns 2-5: blank columns 6-8: optional forward offset (measured in units of (indent 2.5 inch) duration and right justified in the field). Use of this field allows the encoder to place a musical direction at a division that does not otherwise contain a musical record. (indent .8 inch) columns 9-12: blank columns 13-15: footnote and level information (indent 1.0 inch) column 13: footnote flag (blank = none) column 14: level number (optional) column 15: track number (necessary if two or more wedges, sets of dashes, 8-up transpositions, etc.) (indent .8 inch) column 16: blank columns 17-18: type of direction (one or two letters) (indent 1.0 inch) 1. rehearsal numbers/letters A = segno sign 2. directions expressed in words B = right justified ASCII string C = centered ASCII string D = left justified ASCII string (may be combined with types E,F,G,H,J) 3. wedges E = begin wedge F = end wedge (may be combined with types B,C,D,G) 4. letter dynamics G = letter dynamics (given in ASCII string) (may be combined with types B,C,D,E,F,H,J) 5. dashes ( - - - - - ) H = begin dashes (after words) J = end dashes (may be combined with types B,C,D,G) 6. pedal (pianoforte) P = begin pedal: Ped Q = release pedal: * 7. octave shifts (in the printing process) U = shift notes Up (usually by 8ve) V = shift notes Down (usually by 8ve) W = stop shift (notes that are difficult to notate because they are very low (usually in bass clef) are shifted up; notes that are difficult to notate because they are very high (usually in treble clef) are shifted down.) (indent .8 inch) column 19: location flag (optional) ' ' = indication below line + = indication above line (may be used by types A,B,C,D,E,F,G,H) column 20: blank columns 21-23: numerical parameter (optional) (indent 1.3 inch) for types E and F: wedge spread for types U and V: shift size (when not 8ve) for types A,B,C,D,G: optional font designator (indent 1.7 inch) (The inclusion of a font designator in this record actually runs counter to the philosophy of the representation. We no longer use this feature, but use a print suggestion record instead to specify a font. For the moment, however, several hundred existing data files still include this feature). (indent 1.3 inch) Wedge spread is measured in tenths of staff line space. 10 units = space between two staff lines (indent .8 inch) column 24: staff number (' ' = 1) (indent 1.2 inch) Used in the case of music represented on more than one staff. (indent .8 inch) columns 25--: ASCII word string used in A,B,C,D, and G (indent .5 inch) Examples: (indent .8 inch) 1. cresc. - - - - - - - - ff Starting record: DH cresc. Ending record: JG ff 2. f p Starting record: GE 15 f Ending record: FG 0 p 3. p Starting record: E 0 Ending record FG 15 p (indent 0.0 inch) Occasionally it is necessary to change a font in the middle of an ASCII string. For example, the direction piu(accent) f might call for (begin underline)piu(accent)(end underline) to be in italics and (begin underline)f(end underline) to be the forte character from the music font. We indicate a font change in a string with an explanation mark, followed by a number. By convention, the number "1" is reserved for the music font. In this case the ASXII string would read piu !1f. This example also illustrates the necessity of being able to represent accents and other diacritical marks over letters. Since the ASCII character set is reliable only for values in the range of 32 to 127, we must use an escape sequence to represent these other characters. We use the backslash character to initiate the sequence. This is followed by a number, and then by the letter being effected. The table below shows the escape sequences for various letter/diacritical mark combinations. All combinations except \2s also apply to capital letters. (begin table: four columns) (column 1 at 1.3 inch) \1n = n(with ~ sign) \1o = o(with ~ sign) \3a = a(umlaut) \3e = e(dot-dot) \3i = i(dot-dot) \3o = o(umlaut) \3u = u(umlaut) \3y = y(dot-dot) (column 2 at 2.3 inch) \2c = c(cidillian) \2o = o(with line through) \2s = German etzet (B) \7a = a(accent, northeast) \7e = e(accent) \7i = i(accent) \7o = o(accent) \7u = u(accent) \7y = y(accent) (column 3 at 3.3 inch) \4a = † \8a = a(grave, northwest) \8e = e(grave) \8i = i(grave) \8o = o(grave) \8u = u(grave) (column 4 at 4.3 inch) \5s = s(hachet) \9a = a(hat) \9e = e(hat) \9i = i(hat) \9o = o(hat) \9u = u(hat) (end of table) (indent 0.0) In the example given above, the final string would be (begin underline)pi\7u !1f(end underline). Escape sequences can be useful in representing other characters and symbols which are not part of the "lower ASCII" set. Over the course of our work, we have defined the following sequences. (begin table: two columns) (column 1 at .3 inch) \0! = upside down ! \0" = upside down " \0$ = British pound \0' = upside down ' \0* = SS sign \0+ = allision character \0- = dash (--) \0/ = B (German etzet) same as \s2 (column 2 at 4.0 inch \00 to \09 = footnote numbers \0< = << \0> = >> \0? = upside down ? \0y = ae \0Y = AE (end table) (indent 0.0 inch) Because it is sometimes hard to remember whether the number or the letter comes first after the escape character (\), we have defined the sequences both ways. \1n = \n1; \1o = \o1; \2s = \s2; etc. The backslash character is represented by two backslashes \\. Musical attributes, such as time signatures, clefs, etc. are encoded in (begin underline)musical attribute(end underline) records, whose control key is (begin underline)$(end underline) and whose format is as follows: (indent .8 inch) column 1: "$" column 2: level number (optional) column 3: footnote column columns 4--80: attribute fields (indent 1.0 inch) The record may contain one or more fields; fields are initiated by the field identifier and terminated by a blank. In the case of clefs and directives, the field identifier may contain a number, which is the staff (1 or 2 at the moment) to which the clef or directive belongs. The absense of a number indicates staff number one. (indent .8 inch) field field field type identifier data type ---------------------- ---------- --------- key K: integer divisions per quarter note Q: pos. int. time designation T: two integers clef C: integer clef C#: integer transposing part X: integer number of staves for part S: integer (default = 1) number of instruments represented I: integer (default = 1) directive (last field on line) D: ASCII string directive (last field on line) D#: ASCII string example: K:-2 Q:8 T:3/8 C:4 C2:22 D: Allegro ma non troppo key code: The numbers -7 to +7 are reserved for standard key signatures. Minus numbers are for flats; Positive numbers are for sharps. Other integer codes may be assigned at the discretion of the encoder. time designation: Time designation is given by two non-negative integers separated by a slash (/). The first integer is normally the time numerator and the second integer is normally the time denominator. Special codes for time signatures are shown below: 1 1 = common time 0 0 = alle breve 2 0 = simple 2 3 0 = simple 3 Other codes with a 0 denominator may be devised by the encoder to represent special time notations. divisions per quarter note: This parameter can only be specified at the beginning of a piece or directly after a controlling bar line. Specifying it at other locations makes it difficult to combine separate parts for printing and for MIDI output. clef code: The standard clefs are represented by a positiveinteger between 1 and 85. The tens digit of thecode specifies the clef sign and the ones digitspecifies the staff line to which the clef signrefers. clef sign codes: 0 = G-clef 1 = C-clef 2 = F-clef 3 = G-clef transposed down 4 = C-clef " down 5 = F-clef " down 6 = G-clef " up 7 = C-clef " up 8 = F-clef " up line numbers: 1 = highest line 5 = lowest line examples: 4 = treble clef 13 = alto clef 22 = bass clef 34 = treble clef for tenors transposing part: This integer (positive or negative) indicates a transposing interval (if one exists) and/or a doubling of the part an octave lower. The base-40 system is used. 23 means the music sounds a fifth higher than it is written; -23 means the music sounds a fifth lower than it is written. Adding 1000 to the number indicates a doubling of the part an octave lower (e.g., vc and bass on the same part or 8' and 16' sound on an organ pedal line.) In the base-40 system, the minor 2nd has a value of 5 and the major 2nd has a value of 6. All other interval sizes can be computed from these numbers. number of staves: This integer (1 or 2 at the moment) indicates the number of staves the part or parts will be written on. This number can change within a movement. The number of staves will automatically be set to 2 if a "C2:" or a "D2:" is encountered. number of instruments represented: This integer (1 or more) indicates the number of independent instruments represented in the file. If this number is more than one, certain printing conventions will hold. (1) notes with the same stem direction will be combined into one chord (2) if more than one voice is represented in a measure on a staff, then each voice will follow its own set of accidentals within the measure. directive: This ASCII string data group is terminated bythe end of the record. For this reason, if a record contains a directive, the directive must be the last field of the record. Directives may contain font designators. As of this time, we have not settled on a standized system for specifying forts. (indent 0.0 inch) It is possible to include (begin underline)comments(end underline) in a MUSEDATA file. There are two ways to do this; either with a single line comment, initiated by the control key (begin underline)@(end underline); or with the comment toggle switch, indicated by the control key (begin underline)&(end underline). (indent .8 inch) column 1: @ = this line is a comment (indent 1.2 inch) & = enter comment mode. All subsequent (indent 2.5 inch) records are comments until another record with a & in column 1 appears. "&" in column one acts like a toggle switch between "data" mode and "comment" mode. (indent 0.0 inch) The normal maximum length of a MUSEDATA record is 80 columns. If more columns are needed, these may be added with a (begin underline)continuation record(end underline), whose control key is (begin underline)a(end underline) and whose format is as follows: (indent .8 inch) column 1: a = append to previous line columns 2-16: blanks columns 17-80: continuation of previous line (indent 0.0 inch) The end of musical data and the end of a file is specified by an (begin underline)end type record(end underline), whose control key is (begin underline)/(end underline) and whose format is as follows: (indent .8 inch) column 1: / columns 2-5: "FINE" = end of music data "END" = end of file (indent 1.0 inch) Following the end of music data (the /FINE record), is possible to include footnote data. In the case where there is no footnote section, the /FINE record may be omitted. (indent 0.0 inch) Earlier we alluded to a type of record used for communicating suggestions for printing. We call these records (begin underline)print suggestions(end underline). The control key is (begin underline)P(end underline) and the various formats are explained below. (indent .6 inch) column 1: P A Print suggestion record can follow any record that contributes to the printed output of the music. This includes musical directions, bar lines, regular notes and rests, extra notes in a regular chord, grace notes and cue notes, extra grace/cue notes in a chord, and figured harmony. Print suggestions use a multiple field system. Each field is introduced by a capital "C", followed immediately by a number and a colon, e.g., "C8:" or "C23:". The data following this designation (all columns up to the next field or to the end of the record), will apply to the item in the specified column of the previous (non Sound) record. For example, if the previous record were a note, and there were a slur starting on that note indicated by a "(" in column 33 of that record, then C33: would start a field containing one or more suggestions on how that slur should be printed. A print suggestion which has a code C0: is a general suggestion and is not related to any specific column in a previous record. At the moment, we can offer print suggestions in the following situations: 1. Position of slurs Field designator: C32: to C43: (depending on location of the slur) Data elements: o = place slur over the note in question u = place slur under the note in question These suggestions are needed only when the standard algorithms fail to place the slur properly, as sometimes happens with multiple parts on a stave or with double stops in the strings. 2. Orientation of ties Field designator: C32: to C43: (depending on location of tie) Data elements: o = over-hand tie (tips down) u = under-hand tie (tips up) These suggestions are needed only when the standard algorithms fail to place the tie properly, as sometimes happens with multiple parts on a stave or with double stops in the strings. 3. Suggestions modifying the printing of note, rest and figure objects Field designator: C1: Data elements: x<#> = shift default x position (units are in tenths of interline distance) # > 0: right --> # < 0: left <-- y<#> = shift default y position (units are in tenths of interline distance) # > 0: down # < 0: up X<#> = x position relative to default position (units are in tenths of interline distance) Y<#> = y position relative to staff line. (units are in tenths of interline distance) p<#> = printout modifier # = 0: (default) suggestions for not printing the note # = 1: leave space, don't print object # = 2: leave space, print a dot suggestions extending note length # = 3: print object, no dot # = 4: print object, add extension dot # = 5: double note length, no dot # = 6: double note length, print dot # = 7: quadruple note length, no dot 4. Suggestions for location of notations attached to notes Field designator: C32: to C43: (depending on column location of the notation) Data elements: x<#> = shift default x position (units are in tenths of interline distance) # > 0: right --> # < 0: left <-- y<#> = shift default y position (units are in tenths of interline distance) # > 0: down # < 0: up X<#> = x position relative to note. (units are in tenths of interline distance) Y<#> = y position relative to note. (units are in tenths of interline distance) a = place notation above note (over-ride default) b = place notation below note (over-ride default) Notations for which this works ------------------------------ ornaments: turns, trills, shakes, mordents articulations: spiccato, staccato, line over dot, legato, horizontal accent, vertical accents technical: up bow, down bow, string harmonic, thumb position, open string, fingerings dynamics: combinations of letter dynamics other: fermatas Notations for which this feature doesn't work at the moment ------------------------------------------------------------ slurs, ties, wavy lines (trill), cautionary accidentals arpeggiated chords, tuplets, ped *, 5. Suggestions for representing beamed notes with repeaters Field designator: C26: or C27: Data elements: a = use repeater for next beam only. A = use repeaters for all beams which follow. b = return to normal beaming (used to cancel A) Note: Print suggestions for beams normally precede the beginning of beams. If the field designator is C26:, this indicates that the maximum use of repeaters is desired; if the field designator is C27:, then the "top" beam should not be represented as a repeater. 6. Suggestions for musical directions Field designator: C17: or C18: (depending on location of the musical direction) Data elements: f<#> = font number, for musical direction types A,B,C,D,G. The use of this suggestion will remove the need to place the font number in the numerical parameter field (columns 21-23) of the musical direction, thus freeing this field for the exclusive use of wedges and transpositions. x<#> = shift default x position (units are in tenths of interline distance) # > 0: right --> # < 0: left <-- y<#> = shift default y position (units are in tenths of interline distance) # > 0: down # < 0: up X<#> = x position relative to default (units are in tenths of interline distance) Y<#> = y position relative to staff line. (units are in tenths of interline distance) 7. General print suggestions Field designator: C0: Suggestion codes: p<#> = minimum distance between notes (expressed as percent of the default). q<#> = duration which is assign the minimum distance 0 = recompute default (from this point onward) 1 = whole notes ... . . . 8 = eight notes 16 = sixteenth notes, etc s<#> = space between grand staffs measured in multiples of leger lines times 10; e.g. 100 = 10 leger lines t<#> = global tuplet placement # = 0: use default # = 1: place tuplets near note heads # = 2: place tuplets near note stems (beams) # = 3: place all tuplets above notes # = 4: place all tuplets below notes (indent 0.0 inch) Earlier we alluded to a type of record used for communicating suggestions for compiling sound (MIDI) files. We call these records (begin underline)sound records(end underline). The control key is (begin underline)S(end underline) and the various formats are explained below. (indent .6 inch) column 1: S A sound record can follow any record that produces a sound or influences time in some way. This includes regular notes and rests, extra notes in a regular chord, grace notes and cue notes, extra grace/cue notes in a chord, and figured harmony. Sound information can be given for a variety of attributes connected with a note. Since sound directions may apply to a wide variety of musical attributes, e.g., (1) the attack and dynamic envelope of a note, (2) the time of attack and length of a note (or rest), and (3) directions for performing ornaments, it makes sense to use a multiple field system, similar to the one used for print suggestions (see above). To illustrate this with an example, suppose in the previous note record there were a trill indicated by a "t" in column 33. In this case we would use (begin underline)C33:(end underline) in a sound record to introduce information on how that trill should be executed in a sound file. Of course, each ornament, or pitch, or duration, will have a different set of needs regarding its sound specification. At the present time, sound information can be provided for the following situations:. 1. Onset and length of grace notes Field designator: C1: Data elements: p = steal time from previous note f = steal time from following note (default) m = don't steal time; make time (free cadenzas, etc.) t<#> Case 1: stealing time = percentage (0 to 100) of time to steal for this note. The time is specified as a percentage of the duration of the first regular note that follows the grace note, even though the time may not be stolen from this note. In the case where the grace note(s) come(s) just before a bar line, the first note or rest in the next measure is used to define the duration scale. t<#> Case 2: making time = number of real-time divisions for this note. There is no limit to the number used. All regular notes sounding at this point will play out their sound and then wait while these grace notes "do their thing." Notes on adding time: If time is added by specifying "m" type grace notes, there are a two limitations that must be observed. 1. The total amount of time added must be representable in all of the parts (files) that are to be combined with this part (file) in making a sound file. For example, if a particular part has 4 divisions per quarter note and a total of 25 divisions are being added to a measure using C1:m records, then this is the equivalant of adding 25 sixteenth notes at this point in the music. In this case, all of the other parts (files) must be able to represent the time interval of a sixteenth in this measure. If there is a part which has 2 divisions per quarter, then a (begin underline)$ Q:4 (end underline) record must be inserted at the beginning of this measure, and all durations in the measure must be doubled. A (begin underline)$ Q:2 (end underline) record would then be inserted at the beginning of the next measure to restore the original parameter. 2. A part which has extra time added must be assigned to its own midi channel at the time sound is being compiled. For example, if there are 2 oboes and the first oboe has a cadenza (as happens in the first movement of Beethoven's 5th Sympnony), then the oboes should not be assigned to the same midi channel. 2. Onset and length of trills, turns, shakes, and wavy lines Field designator: C32: to C43: (depending on where the ornament is indicated) Data elements: u = start on upper note (default) m = start on main note w = whole-step trill (default) h = half-step trill j = unison trill e = include a two note turn at the end of the trill (whole step) f = include a two note turn at the end of the trill (half step) a = accelerate trill slightly n<#> = number of beats (min is 2, default is 4) s<#> = percentage point for landing on second beat of trill (default is 25) t<#> = percentage point for landing on last beat of trill (default is 75) The default trill (uwn4s25t75) is a four note trill starting on the upper whole step and having four equal beats. 3. Onset and length of (inverted) mordents Field designator: C32: to C43: (depending on where the ornament is indicated) Data elements: m = start on main note (default) b = start on note below main note w = whole-step mordent (default) h = half-step mordent a = accelerate mordent slightly n<#> = number of beats (minimum is 2, default is 3) s<#> = percentage point for landing on second beat of trill (default is 12) t<#> = percentage point for landing on last beat of trill (default is 24) The default mordent (mwn3s12t24) is a three-note snap starting on the main note and going down a whole step. 4. Alternate instrument (pizz. for strings) Field designator: C2: (to distinguish it from grace note information) Data elements: a = pizzicato for this note (this designation must be contained in a sound record which follows directly after the note in question.) A = pizzicato for this note and every regular note that follows in the file, until cancelled. b = arco (used to cancel A) 5. Da Capo direction, Segno sign and implied |: Field designator: C0: (because this does not relate to a column number) Data elements: d = da capo to beginning of movement or to Segno sign. Normally this record would directly precede the "/END" or "/FIN" record. S<#> = segno sign: da capo to this point in the file. # = divisions per quarter (for information of sound and MIDI generating programs) |> = implied forward repeat dots (usually follows a bar line) 6. Fine signs (written or implied) Field designator: C8: Data element: F<#> = Fine sign (written or implied) This record should follow any final note or rest in a movement which has a "da capo" direction. # = actual duration of the final note or rest. This is needed because some "fines" are indicated only by a fermata, and these can be over notes of different durations in different parts! In the case where there is more than one active track in the measure with the "Fine" (i.e., there is a backspace command in the measure), all final notes must have their durations specified by a "Fine" sound record. In the case of chords, the "Fine" sound record should follow the last chord tone record. 7. Tempo Changes Field designator: C0: (because this does not relate to a column number) Data elements: W<#> = new tempo in quarter notes per minute. If parameter <#> = 0, this means that the Sound generating programs must ask the user for a value At the time of compiling a sound (MIDI) file. Note: This must be the only data element in this sound record. 8. Changes in dynamics Field designator: C0: (because this does not relate to a column number) Data elements: V<#> = dynamic level (velocity) measured as a percent of the default (which is forte). Normally our programs to construct MIDI performance files assign a flat value of 90 to the velocity byte. Occasionally we may want to change this value to either bring out a part or to suppress a part. Note: This should be the only data element in this sound record. This completes the description of the various types of records found in a MUSEDATA file. A (begin underline)summary of the control key(end underline) is listed below: (begin table: two columns) (column 1 at .3 inch) $ = controlling musical attributes & = comment mode toggle switch * = musical directions A = regular note B = " " C = " " D = " " E = " " F = " " G = " " ' ' = extra note in chord / = end of music or end of file (column 2 at 4.1 inch) @ = single line comment a = append to previous line b = backspace in time c = cue size note f = figured harmony g = grace note i = invisible rest m = bar line r = regular rest S = sound directions P = print suggestions (end of table) (indent 0.0 inch) The organization of MUSEDATA files is an integral part of the MUSEDATA representation. Each MUSEDATA file represents the encoding of one (begin underline)musical part(end underline) from a movement of piece. A musical part may be one line of music or more than one line. For example, if a movement has two oboe parts, Oboe I and Oboe II, these may be encoded as separate parts, or they may be combined on one staff and encoded as a single musical part, namely Oboes I & II. They may be encoded both ways, since a score might call for both oboes on one staff, but the players might want to play from separate parts. Music on the grand staff may be encoded as one or two parts. If musical notation or symbols cross between the staves of the grand staff, then the music on the grand staff must be treated as one musical part. Every MUSEDATA file begins a series of (begin underline)header records(end underline). The format and contents of these records are as follows: (indent .3 inch) record 1: free record 2: free record 3: free record 4: [date] [encoder] record 5: WK#:[work number] MV#:[movement number] record 6: [source] record 7: [work title] record 8: [movement title] record 9: [name of part] record 10: free (we put in [mode], [movement type] and [voice]) record 11: Group memberships: [name1] [name2] ... record 12: [name1]: part [x] of [number in group] record 13: ... ... (as needed) (indent 0.0 inch) Record 11 contains a list of names, which are the application groups to which this file belongs. The group names can be anything the encoder wishes them to be. In our data files, we use names that have an obvious connection to their associated application: e.g., score, parts, sound, tracks, shortscore, data, etc. For each name listed in record 11, there is a record that starts with that name and specifies the order or ranking in the group to which it belongs. The idea is that all files for a particular movement should be placed in the same directory. This way, a program designed to compile a score would simply check every file in the directory and identify for use those belonging to the group called "score." The order in the group would determine the top-to-bottom order in the score. A program designed to compile MIDI sound files would identify for use those belonging to the group called "sound." The same method would apply for other applications such as printing parts, printing short scores, and compiling track data for melodic and harmonic analysis. Our database currently consists of more than 6,000 MUSEDATA files. When complete, the database could exceed 100,000 files. We currently use the directory tree structure (common to DOS, OS/2 and UNIX) to organized these files. Thus far, the system outlined below has worked quite well. In this outline, you must imagine real composer names for COMPOSER1, COMPOSER2; real source names for SOURCE1, SOURCE2; and real work titles for WORK1, WORK2. MUSEDATA/ (indent .2 inch) COMPOSER1/ COMPOSER2/ ... COMPOSERn/ (indent .4 inch) INDEX: file specifying: (indent 1.4 inch) list of works in the database what sources they appear under (could be multiple) what stage of progress they are in whether or not they are checked out, etc. (indent .4 inch) SOURCE1/ SOURCE2/ ... SOURCEn/ (indent .6 inch) WORK1/ WORK2/ ... WORKn/ (indent .8 inch) STAGE1/ contains data for pitch and duration only (i.e., note and rest records, columns 1-9) (indent 1.0 inch MVT1/ MVT2/ ... MVTn/ (indent .8 inch) STAGE2/ full data (indent 1.0 inch) MVT1/ MVT2/ ... MVTn/ (indent 1.2 inch) many data files: (indent 1,4 inch) STAGE2 will have files which will belong to one or more of the following groups: (indent 1.6 inch) 1. sound used to compile MIDI sound files 2. score used to print scores 3. parts used to print parts 4. short used to print short scores 5. tracks used for analysis 6. midi data specifically used to compile MIDI files (e.g., channel assignments and instrument assignments) 7. data anything and everything (indent 1.4 inch) The MUSEDATA system puts no restrictions on the names of various files in the movement directory. We use the following naming conventions so that we can tell at a glace what a file contains and what its use may be. (indent 1.8 inch) Files which have membership in the "sound" group are named 01, 02, 03 ... Files which do not have membership in the "sound" group, but have membership in the "score" group are named S01, S02, S03 ... Files which do not have membership in the "sound" or "score" groups, but have membership in the "parts" group are named P01, P02, P03 ... Files which do not have membership in the above three groups, but have membership in the "shortscore" group are named H01, H02, H03 ... Files which do not have membership in the above four groups, but have membership in the "tracks" group are named T01, T02, T03 ... Files having membership in the "midi" group are exclusive members of this group; that is, they belong only to this group. These files are called MCHAN1, MCHAN2 ... Occasionally it is necessary to modify a file in the sound group or one of the graphic application groups to achieve a desired effect. In this case, an unmodified version of the file is created and assigned to the "data" group. Files belonging exclusively to this group are called D01, D02, ... (indent 1.4 inch) It is important to remember that the file names do not carry definitive membership information; this system of naming is mainly a "traffic cop" to keep file names from "running into each other." The definitive information on membership, as well as the order with a particular group is contained in records 11ff. of each file. (indent .8 inch) OUTPUTS/ (internal to CCARH) (indent 1.0 inch) PARTS/ SCORE/ SHSKORE/ SOUND/ (indent .8 inch) DISTRIB/ data files for distribution (indent 1.0 inch) MIDI/ SCORE/ DARMS/ KERN/ MUSED/ (indent 0.0 inch) Displayed below are the five MUSEDATA files which comprise the encoding of the first 16 bars of the second trio from Mozart's Clarinet Quintet, K581 Note that each of these files belongs to two groups: sound and score. Note also that the clarinet part is encoded at (begin underline)notated(end underline) pitch, not (begin underline)sounding(end underline) pitch. The fact that the part is a transposing part is indicated in the (begin underline)X:(end underline) field of the first "$" type record. A value of -11 means that all pitches in this part must be transposed down a minor third when compiling sound files. Files for Mozart Trio =========================== >>>> File 1 >>>> File 2 >>>> File 3 >>>> File 4 >>>> File 5 The second example (from Mozart's piano music) illustrates several features of the MUSEDATA representation. The music is encoded into one file with two staves. The backup command (back) is used to encode simultaneous musical tracks. Print suggestion records are used to shift the orientation of the slurs in the lower staff; the program default placed them under rather than over the notes. The chord arpeggiation is encoded, but our printing software cannot yet typeset this symbol. File for Mozart piano music ================================ >>>> File 1 The third example (Telemann Aria) illustrates the handling of text underlay, the coding of small size regular notes and cue notes, and the use of print suggestions. It also shows the degree to which musical typesetting can be done directly from the represnetation without further human intervention. The typeset example is not perfect; nor does it place simultaneous notes in exactly the same order as in the original, but it is a very good approximation of the original and would need only a small amount of manual editing to correct these minor defects. Files for Telemann Aria ============================= >>>>> file 1 >>>>> file 2 We have chosen not to illustrate the Saltarello as an example. The principle question it raises is the treatment of of bar numbers in first and second endings. Our view of bar numberings is that these are an editorial addition and are somewhat arbitrary. As a matter of convention, we begin numbering bars at the first full measure. Bars numbers under a first ending are given the suffix "a", under the second ending "b", etc. If an ending has no termination, e.g., "second ending and continue," no suffixes are used. Bar numbers for sub-movements of movements (e.g., Trios of Minuets) might or might not restart at one. Ending numbers are encoded as 1, 2, 3, etc., but the software that prints the music might use other notations. The unmeasured chant example and the Binchois (begin italic)Magnificat(end italic) contain notations (ligatures, incipits) which are outside the current range of MUSEDATA specifications. In the second paragraph of this article, we mentioned some of the software programs we have developed for working with the CCARH database and the MUSEDATA representation. The primary purpose of this software has been to test the various elements of the MUSEDATA representation as to their practicality and completeness. As part of this testing process, we have used MUSEDATA code as a source for producing performance materials (scores and parts). Works include Messiah, Susanna, Cantata Nos. ###, etc. At the moment, all of our software is written in a non-standard language called Ibex (developed originally by David Woodley Packard for use in the study of ancient languages, Classics, etc.). Ibex is implemented on the x86 architecture as part of a special research environment called TenX (developed by Walter B. Hewlett). TenX (also called the "Monster" in our office) is similar to Microsoft Windows in that it runs on top of DOS and implements 32-bit, protected mode, programming. Programs written in Ibex can take advantage of the full power of the x86 processor and can directly address the entire high memory of the machine (memory over 1 Megabyte). For music applications, Ibex supports direct communication to Roland compatable Midi cards. The native display mode of TenX is character mode (not graphics, as is the case for MS Windows), but the Ibex language includes commands that switch to graphics mode and can display bitmaps of any size. At the moment, TenX supports Video graphics up to 1200 x 1048 in size. From our point of view, the Ibex language and the TenX environment are ideal for developing database applications in music. As with any specialized environment, however, there is a rather steep learning curve, which our experience suggests is more arduous than most casual users would care to attempt. Adding to this problem is a paucity of good documentation for both Ibex and TenX. Rather than promote the environment as it currently exists, we believe a better approach would be to develop an Ibex-to-C conversion program, which, coupled with a generic "front end," would allow our various software programs to stand alone and run under either MS Windows or DOS. For our own research, however, we will continue to use the TenX environment, and we would recommend the same for anyone willing to invest the time it takes to learn to use it.