FORMAT FOR CCARH S-FILES (source files) --------------------------------------- November 21, 1990 (rev. 09-28-92) (rev. 03-20-94) (rev. 10-13-94) (rev. 02-23-97) &dA &d@ Revised May 5, 1993 with the purpose of adding the &dA &d@ capability to represent information relevant to the &dA &d@ production of sound files. This includes information &dA &d@ on: transpositions (and doublings), performance of &dA &d@ trills and other ornaments, placement and timing of &dA &d@ grace notes. &dA &d@ Further revised June 8, 1993 with the purpose of adding &dA &d@ the capability to represent multiple voices or multiple &dA &d@ instruments in one part (file). &dA &d@ Further revisions in 1994, 1995, and 1996. &dA &d@ Revised Feb. 23, 1997 to allow selective suggestions &dA &d@ for music printing. A CCARH S-file is organized as a set of variable length records. Each S-file describes the music in one &dDmusical part&d@ of a musical work. A musical part may consist of one or more lines of music. For example, Oboe I and Oboe II may be combined on one staff and therefore be considered as one musical part (Oboes). Music on the grand staff may be considered 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. An S-file has three sections: a header, the main section containing the primary musical data, and an auxiliary section containing footnote data. The third section of the S-file is optional. The first nine records of the S-file header provide infor- mation on the encoding process (date and encoder), the musical work (work and movement numbers and titles), and the source of the data. Record 10 identifies the part groups to which this part belongs. For example, there may be files for Oboe I, Oboe II and Oboe I,II combined. Oboe I,II would belong to the group called "fullscore," whereas the Oboe I and Oboe II parts by themselves would belong to the group called "parts" (but not to fullscore). In addition, if the Oboe parts are musically independent, they might belong to a group called "tracks." The names and arrange- ments of the groups and parts is left to the encoder. For each group to which a part belongs, there is a record (starting with record 12) giving the group name and the sequence number of that part in that group. The arrangement of the parts into various groups allows flexibility in printing full scores, short scores, and individual instrumental parts. It makes possible the repre- sentation of vocal soloist parts both as separate parts (for analysis) and combined with other soloists (e.g., as in recitatives). It makes possible the representation of keyboard works both as single files (for printing) and as separate tracks (for analysis). &dDHeader Format&d@ 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] or [number in group] record 13: ... ... (as needed) The main section of an S-file follows directly after the header. The end of the main section is marked by a special end-of-movement record consisting of the five characters, "/FINE". All records between the header and the /FINE record are data records (with the exception of records between comment designator flags). The order of these records is an integral part of the information contained in the file. The first character in each data record functions as a control code, describing the type of information contained in the record. For certain data types, such as notes, the first character also contains data information. This system of describing record types with a control code allows for significant future expansion of the the S-file format. At the moment, there are twenty-one control codes and twelve data types. The optional footnote section begins after the /FINE record. The end of an S-file is marked by a special end-of-file record consisting of the four characters, "/END". If there is no footnote section, the /FINE record may be omitted. The format of the footnote section is left up to discretion of the encoder. The footnote section may contain musical data. In this case, a record with an exclamation mark (!) in column one is used to signal that records in the musical data format will follow. A second record with an (!) in column one will signal that the the following records are no longer in the musical data format. S-file data may come from several sources. There may be more than one original source, and there may also be one or more levels of editorial additions/corrections to the musical data. It is important that the S-file format be able to dis- tinguish between these various sources and levels of information. Because of the complicated nature of this problem, several methods are provided for tagging data according to source. 1. Level numbers The principal technique for distinguishing between sources and/or levels of editing are the level numbers. Each data record has a column set asside for labelling that record as belonging to a particular level. In this manner, any musical attributes (e.g. time signature, key, tempo designation), any musical directives (e.g. dynamics, tempo changes, etc.), any musical notes or bar lines may be identified with a particular source or level of editing. In addition, a wide variety of musical notations which are attached to a note such as ornaments, articulations, slurs, phrase markings, fingerings, local dynamics, etc., may assigned a level number. In this way, the same note may have editorial markings from several different levels attached to it. There are 35 possible levels, and the assignment of meaning to these levels is the responsibility of the encoder. 2. Footnotes Every data record has a column set asside for specifying a footnote. The set of characters used in the footnote column and the assignment of their meaning is left to the discretion of the encoder. The purpose of the footnotes is to provide the encoder the opportunity to add additional information at various points in the data file. Such information might include alternate readings, additional measures of music, written out ornaments, or any discussion of the sources or the editorial process. 3. Font designators One way that editions distinguish between the various levels of editing is by using different fonts. For example, upright as opposed to italic fonts may be used to indicate designations which appear in the orignal source. Source distinctions may also be indicated through the use of different font sizes. The S-file font designator provides a method of specifying different fonts and thereby distinguishing the sources of information. The font designator is a one digit number, the interpretation of which is left up to the encoder. In cases where the font designator is introduced as part of a line of ASCII data (e.g., "un poco f", with the "f" being in a different font from the "un poco"), the character "!" followed immediately by the font number is used (e.g., un poco !1f, where 1 in this example might be the encoder's designator for the standard music font). Data Types At the moment there are &dAfourteen&d@ data types: 1. musical attributes 2. musical directions 3. bar lines 4. regular notes and rests 5. extra note in a regular chord 6. grace notes and cue notes 7. extra grace/cue note in a chord 8. figured harmony 9. forward or back space in time 10. continuation line 11. comments 12. end of music/end of file 13. sound directions 14. print suggestions &dDData Format&d@ -- control code in column one 1. Musical attributes: control code = $ column 1: "$" column 2: level number (optional) column 3: footnote column columns 4--80: attribute fields 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 absence of a number indicates staff number one. 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 (def = 1) number of instruments represented I: integer (def = 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 = alla 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 positive integer between 1 and 85. The tens digit of the code specifies the clef sign and the ones digit specifies the staff line to which the clef sign refers. clef sign codes: 0 = G-clef 1 = C-clef 2 = F-clef 3 = G-clef transposed down (modern clef for tenors) 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 transposing part: This integer (positive or negative) indicates a transposing interval, if there is one, 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.) 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 by the parts. 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 by the 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. 2. Musical directions: control code = * column 1: "*" columns 2-5: blank columns 6-8: optional forward offset (measured in units of 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. columns 9-12: blank columns 13-15: footnote and level information column 13: footnote flag (blank = none) column 14: level number (optional) column 15: track number (necessary if two or more wedges, sets of dashes, 8va transpositions, etc.) column 16: blank columns 17-18: type of direction (one or two letters) 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 8va) V = shift notes down (usually by 8va) 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. &dE &d@ 8. tie terminators &dE &d@ X = tie terminator (generates a Mark object) &dE &d@ The pitch of the tie being terminated appears starting &dE &d@ in column 25 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) for types E and F: wedge spread for types U and V: shift size (when not 8va) Wedge spread is measured in tenths of staff line space. 10 units = space between two staff lines column 24: staff number (' ' = 1) Used in the case of music represented on more than one staff. columns 25..: ASCII word string used in A,B,C,D,G and X Examples: 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 3. Bar line: control code = m column 1: "m" columns 2-7: "easure" = regular bar line "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 column 8: empty columns 9-12: optional bar number for this bar (left justified) columns 13-15: footnote and level information column 13: footnote flag (blank = none) column 14: level number (optional) column 15: blank column 16: blank columns 17-80: flags: * = non-controlling bar line ~ = continue ~~~ across 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 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 &dDMinuet&d@ 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. 4. Regular note/rest control code = A,B,C,D,E,F,G or r columns 1-4: pitch or rest, Cff0 to B##9, C4 = middle C column 5: blank columns 6-8: duration (right justified) column 9: tie flag " " = no tie "-" = tie From the data in columns 1 to 9, (i.e., pitch and duration), it is possible to reproduce aural output of the musical part) &dE &d@ Note: Normally a note with a tie must be followed &dE &d@ immediately by another note of the same pitch &dE &d@ (in that pass). It can happen that a tie goes &dE &d@ nowhere (e.g. in first endings or da capos). &dE &d@ In this case you must use an "X" type musical &dE &d@ direction to terminate the tie. columns 10-12: blanks columns 13-15: footnote and level information, track # column 13: footnote flag (blank = none) column 14: level number (optional) column 15: track number (optional) 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. column 16: blank columns 17-22: note description column 17: note type L,b,w,h,q,e,s,t,x,y,z (Longa to 256th note) B,A,9,8,7,6,5,4,3,2,1 (Longa to 256th cue-size) column 18: dot flag " " = no dot "." = single dot ":" = double dot ";" = triple dot "!" = quadruple dot column 19: actual accidental flag # = sharp X = sharp-sharp n = natural & = flat-flat f = flat S = natural-sharp x = double sharp F = natural-flat columns 20-22: designation of time modification 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. column 23: stem direction d = down u = up " " = no stem column 24: staff number (" " = 1) Used in the case of music represented on more than one staff. column 25: blank columns 26-31: beams (up to six levels = 256th note) [ = start beam = = continue beam ] = end beam / = forward hook \ = backward hook column 26 is for eighth beams, 27 for sixteenth, ... columns 32-43: other notations Codes are read from left to right. The character "&", followed by a digit (1..9,A..Z), is used to indicate a specified data level. All codes to the left of the first "&" belong to the base data level. 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 but may be augmented and/or altered to meet the special requirements of the music being encoded. for more on ties and slurs, see type 14, "print suggestions" Ties, Slurs, Tuples Articulations and Accents -------------------- -------------------------- - = tie A = vertical accent (/\) ( = open slur1 V = vertical accent (\/) ) = close slur1 > = horizontal accent [ = open slur2 . = staccato ] = close slur2 _ = legato { = open slur3 = = line with dot } = close slur3 under it z = open slur4 i = spiccato x = close slur4 , = breath mark * = start tuplet ! = stop tuplet Accidentals on ornaments (must follow directly after ornament) -------------------------------- Ornaments s = sharp (ss = double sharp) ---------- h = natural t = tr. b = flat (bb = double flat) r = turn u = next accidental is below rather k = delayed turn than above ornament. In case w = shake accidentals appear above and ~ = wavy line (trill) below ornament, the accidental c = continue wavy line above should be encoded first. M = mordent j = slide Other Indications and Codes --------------------------- S = arpeggiate (chords) F = upright fermata E = inverted fermata &dE &dK &d@ G = G. P. (grand pause) p = piano (pp, ppp, etc.) Technical Indications f = forte (ff, fff, etc., fp) --------------------- m = mezzo (mp, mf) v = up bow Z = sfz (also sf) n = down bow Zp = sfp o = harmonic R = rfz 0 = open string ^ = accidental above note Q = thumb position (cello) + = cautionary/written 1,2,3,4,5 = fingering out accidental : = next fingering is a substitution e.g., 5:42:1 = 5-4 2-1 columns 44-80: text: multiple lines of text set off by | example: Deck|See|Fast 5. Extra note in a chord control code = ' ' (blank) column 1: blank columns 2-5: pitch (see regular note) columns 6-8: blanks column 9: tie flag columns 10-42: same as for regular note 6. Grace notes, cue-notes control code = g or c column 1: g = grace note c = cue note (grace size, but written in time) columns 2-5: pitch/rest (see regular note) columns 6-7: blanks column 8: note type 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 column 9: blank columns 10-80: same as regular notes 7. Extra Grace/Cue note in a chord column 1: g or c (same as 7 above) column 2: blank columns 3-6: pitch (see regular note) column 7: blank column 8: note type (same as 7 above) column 9: blank columns 10-80: same as other grace and cue notes 8. Figured harmony control code = f column 1: f = figured harmony column 2: number of figure fields columns 3-5: blanks columns 6-8: advance of figure division pointer 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. columns 9-12: blanks columns 13-15: footnote and level information column 13: footnote flag (blank = none) column 14: level number (optional) column 15: blank column 16: blank columns 17--: figure fields 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 2 represented in the first field. figures, signs and modifiers: 1 # = sharp 2 n = natural 3 f = flat 4 x = double sharp 5 + = augment (used with fig. nos. 2,4,5, and 6) 6 \ = diminish (used with fig. nos. 6 and 7) 7 - = short line in 8 _ = long line from previous figure 9 b = blank 10 ... 9. Forward and Back space in time control code = i,b columns 1-5: "irst " = forward space (invisible rest) (or "irest") "back " = backspace columns 6-8: duration to skip forward or back up columns 9--12: blanks columns 13-15: footnote and level information column 13: footnote flag (blank = none) column 14: level number (optional) column 15: blank column 16: blank column 17: pass number (optional) This feature can be used to express parallel action in the same part (e.g., keyboard music). 10. Continuation line control code = a column 1: a = append to previous line columns 2-16: blanks columns 17-80: continuation of previous line 11. Comments control codes = & and @ column 1: @ = this line is a comment & = enter comment mode. All subsequent 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. 12. End of music data or end of file control code = / column 1: / columns 2-5: "FINE" = end of music data "END" = end of file In the case where there is no footnote section, the "/FINE" record may be omitted. 13. Sound directions column 1: S A Sound Direction record can follow any record that produces a sound or influences time in some way. This includes types 4 to 8: regular notes and rests, extra note in a regular chord, grace notes and cue notes, extra grace/cue note in a chord, and figured harmony. Sound information can be given on a variety of attributes connected with a note. This is a complicated subject, for which I am not yet ready to attempt a full description. I am inclined to suggest the following mechanism, as a first pass at the problem: 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 musical attributes ($). In this case, each field is introduced by a capital "C", followed immediately by a number and a colon, e.g., "C8:" or "C23:". The meaning is that the data following this designation (all columns up to the next field designation or to the end of the record), will apply to the item in the specified column number of the previous record. For example, if the previous record were a note, and there were a trill indicated by a "t" in column 33 of that record, then C33: would indicate a sound direction field containing data on how that trill should be realized in a sound file. Of course, each ornament, or pitch, or duration, will have a different set of needs regarding its sound specification, and these will have to receive further definition as the specification for this type of record develops. At the moment, our specific need relates to specifying information 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 controlling note, even though the time may not be stolen from this note. The controlling note is the first regular note following the grace note. In the case where the grace note comes just before a bar line, the first note in the next measure is used as the controlling note. 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 two limitations that must be observed. 1. The total amount of time added must be representable by divisions in all parts. For example, if a particular part has 4 divisions per quarter note and a total of 25 divisions are added to a measure using C1:m records, then this is the equivalent of adding 25 sixteenth notes. In this case, all other parts 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 $ Q:4 record must be inserted at the beginning of this measure, and all durations in the measure must be doubled. A $ Q:2 record must 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. For example, if there are 2 oboes and the first oboe has a cadenza (as in the first movement of Beethoven's 5th Symphony), then the oboes may 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 and 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 "/FINE" 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 elements: 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 the programs constructing MIDI performance files assign a flat value of 90 to the velocity byte. Occasionally we may want to change this value either to bring out a part or to suppress a part. MIDI plus compilations (for data transmission) are not affected by this feature. Note: This must be the only data element in this sound record. 14. Print suggestions column 1: P A Print suggestion record can follow any record that contributes to the printed output of the music. This includes types 2 through 8: 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. &dE &d@ columns 2... until a blank is encountered: &dE &dE &d@ Codes indicating the type of printing for which this suggestion &dE &d@ applies. A space " " in column 2 means that the suggestion is &dE &d@ universal; it applies to all printing. Codes for selective &dE &d@ suggestions: &dE &d@ "p" = parts &dE &d@ "s" = score &dE &d@ "t" = short score (piano vocal) Print suggestions, like sound directions, use a multiple field field system. Each field is introduced by a capital "C", followed immediately by a number and a colon, e.g., "C8:" or or "C23:". The meaning is that the data following this designation (all columns up to the next field designation or to the end of the record), will apply to the item in the specified column number 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. At the moment, we can give print suggestions in the following situations: A print suggestion which has a code C0: is a general suggestion and not related to any specific column in a previous record. 1. Position of slurs Field designator: C32: to C43: (depending on location of 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. Tuplet and tuplet bracket (default is no bracket) Field designator: C32: to C43: (depending on location of tuplet starter) Data elements: [ = use continuous square bracket ( = use continuous slur bracket : = use square bracket and break in the middle ; = use slur bracket and break in the middle i = place tuplet number inside bracket (below, if tips are down; above if tips are up). Default is outside. i has meaning only when combined with [ or ( &dA &dK &d@ x<#> = shift x position of tuplet &dA &dK &d@ # > 0: right --> tenths of interline distance) &dA &dK &d@ # < 0: left <-- &dA &dK &dA &dK &d@ y<#> = shift y position of tuplet &dA &dK &d@ # > 0: down tenths of interline distance) &dA &dK &d@ # < 0: up 4. Suggestions modifying the printing of note, rest and figure objects Field designator: C1: Data elements: x<#> = shift default x position (units are in tenths # > 0: right --> of interline distance) # < 0: left <-- y<#> = shift default y position (units are in tenths # > 0: down of interline distance) # < 0: up Y<#> = y position relative to staff line. (units are in tenths of interline distance) p<#> = printout modifier # = 0: (default) no-print suggestions # = 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 5. 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 # > 0: right --> of interline distance) # < 0: left <-- y<#> = shift default y position (units are in tenths # > 0: down of interline distance) # < 0: up Y<#> = y position relative to note object. (units are in tenths of interline distance) a = place notation above note object (over-ride default) b = place notation below note object (over-ride default) Notations for which this works ------------------------------ ornaments: turns, trills, shakes, mordents, wavy lines (trill) 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, cautionary accidentals arpeggiated chords, tuplets, ped *, 6. 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. 7. Suggestions for musical directions Field designator: C17: or C18: (depending on location of the musical direction) Data elements: x<#> = shift default x position (units are in tenths # > 0: right --> of interline distance) # < 0: left <-- y<#> = shift default y position (units are in tenths # > 0: down of interline distance) # < 0: up Y<#> = y position relative to staff line. (units are in tenths of interline distance) Field designator: C25: and greater (depending on location of the font change). Multiple font changes are allowed in the same line. f<#> = font number for ASCII text in the specified column and subsequent columns to the right (until a new change is encountered). Used with direction types A,B,C,D,G. The use of this suggestion will remove the need to place the font number in the ASCII string of the musical direction. 8. General print suggestions Field designator: C0: &dE &d@ Suggestion codes: d<#> = default height for time words and other &dE &d@ musical designations. # is measured &dE &d@ in scale steps above the top line of &dE &d@ the staff. Default is 6 scale steps. &dE &dE &d@ f<#> = default font for musical directions. &dE p<#> = minimum distance between notes (expressed as percent of the default). q<#> = duration which is assigned the minimum distance 0 = recompute default (from this point onward) 1 = whole notes ... . . . 8 = eighth notes 16 = sixteenth notes, etc r<#> = placement of rests 0 = use default placement (default) 1 = always place on middle line 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 tuplet near note heads # = 2: place tuplet near note stems (beams) # = 3: place all tuplets above notes # = 4: place all tuplets below notes &dE &d@ n<#> = numbering measures &dE &d@ # = 0: stop numbering measures &dE &d@ # > 0: start numbering measures with <#> &dL &d@ 15. Tag records (used only internally and confidentially) &dL &dL &d@ column 1: t &dL &dL &d@ The purpose of tag records is to allow us to make &dL &d@ (internally documented) modifications to our stage2 &dL &d@ files which (hopefully) will not distort the data too &dL &d@ badly and will allow us to identify unauthorized &dL &d@ publication or other unauthorized use of our compilations. &dL &dL &d@ Ignoring (or skipping) all tag records in a file will &dL &d@ yield the original, unmodified data. &dL &dL &d@ Essentially, tags can be of two types: (1) tags which &dL &d@ instruct an "output" program to skip (omit) one or &dL &d@ more records which follow, and (2) tags which add &dL &d@ or replace records which have been omitted. &dL &dL &d@ Tags of the first type will have a "t" in column 2. &dL &d@ Column 3 will contain the number of following records &dL &d@ to omit from output processing. This means that an &dL &d@ "omit" tag can specify from 1 to 9 records to be skipped. &dL &dL &d@ Tags of the second type can be used to add records of &dL &d@ the data types listed below: &dL &dL &d@ 2. musical directions &dL &d@ 3. bar lines &dL &d@ 4. regular notes and rests &dL &d@ 5. extra note in a regular chord &dL &d@ 6. grace notes and cue notes &dL &d@ 7. extra grace/cue note in a chord &dL &d@ 8. figured harmony &dL &d@ 9. forward or back space in time &dL &dL &d@ Notice that the formats for all of these types have a &dL &d@ blank in column 16. Therefore a tag record of one of &dL &d@ these types will have a "t" in column 1, and columns &dL &d@ 2-16 will contain what would be in columns 1-15; i.e., &dL &d@ the data in the first 15 columns as shifted over one &dL &d@ column. Columns from 17 on will be the same as in &dL &d@ the specified data types. &dL &dL &d@ It may be desirable to specify different types of tagging &dL &d@ for different sorts of output; e.g., graphical vs. sound, &dL &d@ etc. For this purpose, column 14 of all tag records is &dL &d@ reserved for a class number. This permits ten different &dL &d@ classes of tags (0 through 9). Notice that for type-two &dL &d@ tags, column 14 would normally contain the "shifted" &dL &d@ column 13, which was otherwise set asside for use as a &dL &d@ "footnote flag". This means that tag records will not &dL &d@ support footnotes. &dL &dL &d@ &dA &d@ &dA10-07-93&d@ modifications for MIDI output will use class 9 tags &dL &d@ &dA &d@ &dL &d@ &dA &d@ &dA10-08-93&d@ data records that should not be exported to any &dL &d@ &dA &d@ output files will use class 0 tags. This &dL &d@ &dA &d@ includes experimental situations, as well as &dL &d@ &dA &d@ in-house printing and sound modifications. &dL &dL &dL &d@ The adding of tags is actually a very sophisticated &dL &d@ process, musically speaking. It calls for a certain &dL &d@ level of knowledge of musical notation and the various &dL &d@ ways it can be modified to produce essentially the same &dL &d@ result; it calls for a good musical understanding of kinds &dL &d@ of changes to notes (pitches and durations) which will &dL &d@ have a minimal effect on performance and analysis; &dL &d@ and it calls for a certain level of creativity, so that &dL &d@ the tags will be unpredictable and hard to identify and &dL &d@ remove; e.g., figuring out how to make tags "blend in" &dL &d@ with other idosycracies in a particular score. &dDSummary of Control codes&d@ ' ' = extra note in chord $ = controlling musical attributes & = comment mode toggle switch * = musical directions A = regular note B = " " C = " " D = " " E = " " F = " " G = " " / = end of music or end of file @ = 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 &dA &d@ S = sound directions &dA &d@ P = print suggestions &dL &d@ t = tag records