MusicFileDefs: CEDAR DEFINITIONS = BEGIN versionID: INTEGER = 3; ID: TYPE ~ MACHINE DEPENDENT {nullID(0), scoreID(1), eventID(2), noteID(3), chordHeapID(4), chordID(5), beamHeapID(6), beamID(7), viewID(8), tieID(9), (CARDINAL.LAST)}; EventFormat: TYPE = MACHINE DEPENDENT RECORD[ identifier: ID _ eventID, time: LONG INTEGER _ 0, type: EventTypeFormat _ notes, ignore: BOOLEAN _ FALSE, -- do not use this bit spare1: [0..1000) _ 0, value: INTEGER _ 0, -- may be a time signature spare2: CARDINAL _ 0, length: CARDINAL _ 0 -- followed by: ]; TimeFormat: TYPE = LONG INTEGER; EventTypeFormat: TYPE = MACHINE DEPENDENT { notes, measure, repeat1, repeat2, endMeasure, doubleMeasure, m5, timeSignature, keySignature, metronome, staves, clef, octava1, octava2, spare5, spare6, spare7, spare8, spare9, spare10, spare11, spare12, spare13, spare14 }; SheetFormat: TYPE = MACHINE DEPENDENT RECORD[ junk: LONG CARDINAL _ 0, -- garbage filler height: INTEGER _ 0, offset: INTEGER _ 0, sl: CARDINAL _ 0, staff: ARRAY [0..6) OF StaffFormat _ ALL[[]] ]; StaffFormat: TYPE = MACHINE DEPENDENT RECORD[ pitch: INTEGER _ 0, -- pitch of note on bottom line y: INTEGER _ 0 -- height relative to bottom line ]; NoteFormat: TYPE = MACHINE DEPENDENT RECORD[ identifier: ID _ noteID, pitch: INTEGER _ 40, voice: CARDINAL _ 0, value: NoteValueFormat _ unknown, --3 bits spelled: AccidentalFormat _ inKey, --3 bits rest: BOOLEAN _ FALSE, dotted: BOOLEAN _ FALSE, doubleDotted: BOOLEAN _ FALSE, grace: BOOLEAN _ FALSE, stemUp: BOOLEAN _ FALSE, exception: BOOLEAN _ FALSE, embellish: EmbellishmentFormat _ none, --3 bits tie: BOOLEAN _ FALSE, -- if TRUE, a TieFormat follows show: BOOLEAN _ FALSE, spare4: [0..2000) _ 0, staff: [0..16) _ 1, spare2: CARDINAL _ 0, --legato, stacatto, accents spare3: CARDINAL _ 0, toc: LONG CARDINAL _ 0, duration: CARDINAL _ 0 ]; NoteValueFormat: TYPE = MACHINE DEPENDENT { whole, half, quarter, eighth, sixteenth, thirtysecond, sixtyfourth, unknown }; AccidentalFormat: TYPE = MACHINE DEPENDENT { doubleSharp, sharp, natural, inKey, flat, doubleFlat }; EmbellishmentFormat: TYPE = MACHINE DEPENDENT { none, trill, mordent1, mordent2, e1, e2, e3, e4 }; ChordFormat: TYPE = MACHINE DEPENDENT RECORD[ identifier: ID _ chordID, stemUp: BOOLEAN _ FALSE, exception: BOOLEAN _ FALSE, spare1: [0..16000) _ 0, exceptionPTR: CARDINAL _ 0, spare2: INTEGER _ 0, length: CARDINAL _ 0 ]; BeamFormat: TYPE = MACHINE DEPENDENT RECORD[ identifier: ID _ beamID, tilt: REAL _ 0, beamed: BOOLEAN _ FALSE, exception: BOOLEAN _ FALSE, ntuple: [0..128) _ 0, against: [0..128) _ 0, height: INTEGER _ 0, invisible: BOOLEAN _ FALSE, spare1: [0..1024) _ 0, staff: [0..32) _ 0, spare2: CARDINAL _ 0, length: CARDINAL _ 0 ]; TieFormat: TYPE = MACHINE DEPENDENT RECORD[ identifier: ID _ tieID, height: INTEGER _ 0, heap: CARDINAL _ 0, index: CARDINAL _ 0 ]; RelativePTR: TYPE = MACHINE DEPENDENT RECORD[ heap: CARDINAL, index: CARDINAL ]; beams: CARDINAL = 64000; -- used in RelativePTR chords: CARDINAL = 64001; -- used in RelativePTR ViewFormat: TYPE = MACHINE DEPENDENT RECORD[ identifier: ID _ viewID, scale: INTEGER _ 0, accidental: BOOLEAN _ FALSE, notehead: BOOLEAN _ FALSE, sync: BOOLEAN _ FALSE, display: DisplayModeFormat _ physical, noCarry: BOOLEAN _ FALSE, hardcopy: BOOLEAN _ FALSE, spare1: [0..512) _ 0, sheet: INTEGER _ 0, --will later be made obselete speed: INTEGER _ 0, --will later be made obselete key: INTEGER _ 0, --will later be made obselete spare5: INTEGER _ 0, spare6: INTEGER _ 0 ]; DisplayModeFormat: TYPE = MACHINE DEPENDENT {physical,logical,graphical}; END. ÒMusicFileDefs.mesa Copyright (C) 1983, 1984 Xerox Corporation. All rights reserved. Author: John Maxwell Last Edited by: Maxwell, November 18, 1983 2:12 pm Last Edited by: Doug Wyatt, June 11, 1984 4:07:48 pm PDT This module gives the format for the file on the disk. Changing this module may make old music files obsolete. MusicDefs imports from here whenever its types exactly match these. MusicFile is just a conceptual tool to help one understand the file format. the identifiers are used to make sure that the file has been read in correctly. (You may wish to eliminate these, but then old files will no longer work.) MusicFile: TYPE = MACHINE DEPENDENT RECORD[ version: INTEGER, score: RECORD[ id: ID _ scoreID, events: SEQUENCE length: CARDINAL OF EventFormat ], chordHeap: RECORD[ id: ID _ chordHeapID, chords: SEQUENCE length: CARDINAL OF ChordFormat ], beamHeap: RECORD[ id: ID _ beamHeapID, beams: SEQUENCE length: CARDINAL OF BeamFormat ], spare1: ID _ nullID, ++ spare identifiers. spare2: ID _ nullID, ++ all spares are set to zero until needed spare3: ID _ nullID, ++ these spares are for: ties, slurs, spare4: ID _ nullID, ++ eventExeptions, noteExceptions, and strings. spare5: ID _ nullID, spare6: ID _ nullID, spare7: ID _ nullID, spare8: ID _ nullID, spare9: ID _ nullID, view: ViewFormat ]; notes: ARRAY [0..length) OF NoteFormat OR sheet: SheetFormat depending on 'type' notePTRs: ARRAY [0..length) OF RelativePTR; chordPTRs: ARRAY [0..length) OF RelativePTR; ÊR˜™J™@Jšœ™Jšœ2™2Jšœ8™8Jšœ6™6Jšœ7™7JšœC™C—J˜JšœÏkœ ˜ Jšœ˜J˜Jšœ œ˜J˜š œœœ œ|œœ˜¨J˜—JšœK™KJšœO™OJšœJ™JJ˜š œ œœ œœ™+Jšœ œ™šœœ™Jšœœ ™Jšœœ œœ ™0Jšœ™—šœ œ™Jšœœ™Jšœœ œœ ™0Jšœ™—šœ œ™Jšœœ™Jšœœ œœ ™.Jšœ™—Jšœœ ™*Jšœœ5™?Jšœœ1™;Jšœœ:™DJšœœ ™Jšœœ ™Jšœœ ™Jšœœ ™Jšœœ ™Jšœ™Jšœ™J˜—š œ œœ œœ˜-Jšœ œ ˜Jšœœœ˜J˜JšœœœÏc˜/J˜Jšœœž˜/Jšœœ˜šœœž˜%Jšœœ œ ™)Jšœ&™&—Jšœ˜—J˜Jšœ œœœ˜ šœœœ œ˜+JšœA˜AJ˜WJ˜CJ˜J˜—š œ œœ œœ˜-Jšœœœž˜*Jšœœ˜Jšœœ˜Jšœœ˜Jšœœœœ˜,Jšœ˜—J˜š œ œœ œœ˜-Jšœœž˜3Jšœœž!˜0J˜J˜—š œ œœ œœ˜,Jšœ œ ˜Jšœœ˜Jšœœ˜Jšœ#ž˜+Jšœ#ž˜+Jšœœœ˜Jšœœœ˜Jšœœœ˜Jšœœœ˜Jšœœœ˜Jšœ œœ˜Jšœ'ž˜/Jšœœœž˜5Jšœœœ˜J˜J˜Jšœœž˜1Jšœœ˜Jšœœœ˜Jšœ œ˜Jšœ˜—J˜šœœœ œ˜+JšœK˜KJšœ˜—šœœœ œ˜,Jšœ4˜4Jšœ˜—šœœœ œ˜/Jšœ/˜/Jšœ˜—J˜š œ œœ œœ˜-Jšœ œ ˜Jšœœœ˜Jšœ œœ˜J˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœ+™+Jšœ˜J˜—š œ œœ œœ˜,Jšœ œ ˜Jšœœ˜Jšœœœ˜Jšœ œœ˜J˜J˜Jšœœ˜Jšœ œœ˜J˜J˜Jšœœ˜Jšœœ˜Jšœ,™,Jšœ˜J˜—š œ œœ œœ˜+Jšœ œ ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœ˜J˜—š œ œœ œœ˜-Jšœœ˜Jšœ˜Jšœ˜—J˜Jšœœ ž˜0Jšœœ ž˜1J˜š œ œœ œœ˜,Jšœ œ ˜Jšœœ˜Jšœ œœ˜Jšœ œœ˜Jšœœœ˜J˜&Jšœ œœ˜Jšœ œœ˜J˜Jšœœž˜2Jšœœž˜2Jšœœž˜0Jšœœ˜Jšœœ˜Jšœ˜—J˜Jšœœœ œ˜IJ˜Jšœ˜—…— .