💾 Archived View for spam.works › mirrors › textfiles › music › smdl-t.ech captured on 2023-06-16 at 19:19:45.
-=-=-=-=-=-=-
X3V1.8M/SD-7 Journal of Development Standard Music Description Language Part Two: Technical Description and Formal Definition Editor: Alan D. Talbot, New England Digital Corporation June 4, 1988 June 16, 1988 - 2 - CONTENTS 0 Introduction 4 0.1 Purpose of the Document 4 0.2 Development Methodology 4 0.3 Editorial Conventions 5 1 Scope and Field of Application 5 1.1 Scope 5 1.2 Field of Application 6 3 References 6 4 Definitions 6 5 Notation 8 6 Structure and Content 8 7 Work 9 7.1 Work Segment 10 7.2 Work Segment Reference 11 8 Core 11 8.1 Thread 12 8.1.1 Core Event Sequence 13 8.1.2 Core Event Group 14 8.1.3 Core Events 14 8.1.3.1 Notes and Rests 14 8.1.3.2 Graced Events 15 8.1.3.3 Special Events 16 8.1.4 Core Event References 16 8.2 Time 16 8.2.1 Beat 16 8.2.2 Duration 17 8.3 Stress 17 8.3.1 Beat Number 17 8.3.2 Stresses 18 8.3.3 Meter 18 8.4 Tempo Sequence 18 8.4.1 Tempo 18 9 Gestural Domain 20 9.1 Track 21 9.1.1 Gestural Event Sequence 21 9.1.2 Gestural Event Group 21 9.1.3 Gestural Event 22 9.1.4 Gestural Event Reference 22 9.2 Click Track 22 10 Visual Domain 23 10.1 Part 23 10.1.1 Visual Event Sequence 24 10.1.2 Visual Event Group 24 10.1.3 Visual Event 24 10.1.4 Visual Event Reference 25 10.2 Space 25 11 Analytical Domain 25 11.1 Voice 26 11.1.1 Analytical Event Sequence 26 11.1.2 Analytical Event Group 27 11.1.3 Analytical Event 27 June 16, 1988 - 3 - 11.1.4 Analytical Event Reference 27 12 Bibliographic 27 12.1 Theme 28 13 Conformance 28 Annex A 30 Annex B 40 B.1 General Application 40 Annex C 42 C.1 Definitions 42 C.2 Structure 42 C.3 Segregation 42 C.4 Language 43 Annex D 44 D.1 Structure 44 D.2 Punctuation 44 Annex E 45 June 16, 1988 - 4 - 0 Introduction This is the second part of a two part document describing the work of ANSI X3V1.8M, the Music Information Processing Standards Committee (MIPS). The parts are known collectively as the Journal of Develop- ment. "Part One: Objectives and Methodology" describes the objectives of the project and the development methodology employed. "Part Two: Technical Description and Formal Definition" describes the language design itself, and provides a formal definition. This document and the other Standing Documents comprise the output of the committee, while the other documents and material presented at the meetings provide the input. NOTES 1. The Journal of Development is maintained in two parts only to facilitate maintenance by separate individuals; the two parts should always be read as a single document. There is much in Part Two, for example, that may seem confusing or contentious if it is not read in the context established by Part One. 2. This introduction appears in both parts of the Journal of Development. 3. General information about the MIPS committee, including a guide to participation, can be found in committee document X3V1.8M/SD- 0. 0.1 Purpose of the Document The Journal of Development describes the status of the Standard Music Description Language (SMDL) being developed by the Music Information Processing Standards (MIPS) Committee. It is intended as the technical and methodological design specification which will ultimately evolve into a Standard. 0.2 Development Methodology Both parts are revised by their respective editors after each meeting of the committee. As a result, the documents never represent text that has been agreed on in detail by the committee, but only the edi- tors' best efforts to express the committee's ideas. Moreover, the ideas in the journal are subject to further study and revision and do not represent a final design. Eventually, the design work will reach a point where all aspects of the language have been addressed, although not necessarily finalized. At that point, the Journal of Development will cease to be the vehicle that expresses the current language design. Instead, the committee will produce one or more successive "working drafts", consisting of June 16, 1988 - 5 - text that has been agreed to. During the Journal of Development and working draft stages, public comment is sought and considered, but the process is informal. When, eventually, the committee is satisfied with a working draft, it will recommend that X3V1.8 process the document as a "draft proposed Ameri- can National Standard". There will then commence a formal public review and ballot, during which all comments received will be responded to in writing. 0.3 Editorial Conventions Formal standards can be complex documents in which every word has both legal and technical significance. They may also need to be translated into other languages. For these reasons, editorial conventions have been established to assure precision, accuracy, and clarity (albeit often at the expense of readability by the general public). The key principles are: 1. Precise and consistent definitions of terms. 2. Distinguishing real requirements from mere commentary, explana- tions, and examples -- and from definitions. 3. Avoidance of redundancy. (Repetition of a requirement is nor- mally expressed as a note, to avoid the question of which text governs if the "repetition" is imperfect.) Part Two of the Journal of Development observes some of the editorial conventions of a formal standard, but not yet with the strictness and consistency that will be required in the final document. (See Annex C of Part 2 for details.) 1 Scope and Field of Application This section defines the range of applicability of the Standard. It specifies the limits of what the Standard can be expected to represent, and what is outside the design criteria. NOTE: In order to proceed in a timely fashion, we found it necessary to choose a subset of all possible music for the scope of the Stan- dard. As the design matures, we expect to expand the scope to meet any further needs of its users. 1.1 Scope This Standard defines a language for the representation of music information, either alone, or in conjunction with text, graphics, or other information needed for publishing or business purposes. The language is known as the "Standard Music Description Language", or "SMDL". NOTE: The Standard Music Description Language is an SGML application conforming to International Standard ISO 8879 -- Standard Generalized June 16, 1988 - 6 - Markup Language. The SMDL is capable of representing many (but not all) genres of music, and most (but not necessarily all) instances of works in those genres. The primary focus is on music that can reasonably be expressed in Standard Western Musical Notation. NOTE: The scope as defined should encompass the vast majority of music. It does not exclude the use of special symbols that can be placed in the score, nor of modern notational practices. The only cri- terion is that the music be capable of representation as notes on a staff, regardless of whether it was actually written down that way, or even written down at all. The SMDL is designed for flexibility and extensibility. There are no technical prohibitions against the use of some components without the whole, or against the use of user-defined components in conjunction with standardized ones. The Standard includes a conformance clause that identifies minimum and higher levels of support in terms of standardized language components and options for user extensions. 1.2 Field of Application Pieces that are composed on computer devices, pieces that exist as printed scores, pieces that are performances recorded in a manner that permits machine transcription, and pieces that are already represented in some language, are all within the field of application of this Standard. Pieces that have other sources, such as digital audio recordings, can be associated and synchronized with pieces described in SMDL. They can exist as elements in the same document as SMDL works, but will have their own representation (document type definition and data content notations). 3 References ISO 8879, Information processing -- Text and office systems -- Stan- dard Generalized Markup Language (SGML). X3V1.8M/SD-6 Journal of Development -- Standard Music Description Language -- Part One: Objectives and Methodology 4 Definitions The following items are used in a number of places in the text but are not explicitly defined. They are essential to the understanding of the Standard, and many have been assigned meanings which differ from com- mon usage. 4.1 analytical domain: The portion of a work which contains music theoretical analyses. 4.2 analysis: A music theoretical analysis of the piece, such as a June 16, 1988 - 7 - Shenkerian analysis. An examination of the piece as opposed to a ren- dition of the piece. 4.3 beat: A relative time unit that is used for measuring durations in the core. NOTE: It should be the "felt" beat (tactus) if known. Otherwise, it can be chosen for convenience; for example, the smallest or most com- mon note value in the piece (i.e., 1/4, 1/8, 1/16, etc.) 4.4 bibliographic data: Identification information used to catalog and archive pieces of music (or any other works.) 4.5 core: The portion of a work that represents the basis of all of the performances, scores, and analyses. The logical musical material as opposed to the performance or score specific material. NOTE: The core can be thought of mechanistically as the information which is most convenient to share in common among the other domains, and among multiple instances in the same domain. Philosophically, it can be thought of as the information that is necessary (and in the case of conventional Western music, sufficient) to distinguish the piece from all others. 4.6 gestural domain: The portion of a work that represents live per- formance data such as precise timing and dynamic fluctuation. 4.7 logical: The basic musical content of a piece of music, such as the time values, pitch values, and basic groupings such as chords and tuplets. 4.8 logical domain: The core. 4.9 markup minimization: The elimination of redundant verbiage in the actual representation of a work. NOTE: SGML has been designed to allow this to happen naturally, so it is not necessary to consider it in the initial design of the Standard. 4.10 MIPS: Music Information Processing Standards Committee; ANSI X3V1.8M. 4.11 performance: A particular realization of a piece, either by mechanical means or by a musician. 4.12 piece: A musical composition. 4.13 real time unit: The basic unit of measurement of time in a work; the smallest representable division of time. 4.14 SGML: Standard Generalized Markup Language; a text markup language and structured design tool. SGML is an International Standard and is fully defined and described in ISO 8879-1986. June 16, 1988 - 8 - 4.15 SMDL: Standard Music Description Language; this Standard. 4.16 score: A printed piece of music; an edition. 4.17 tuplet: A group of notes which occur in a different time frame than the surrounding notes; a time anomaly. NOTE: A triplet, a quintuplet, and a duplet in compound meter are all tuplets. 4.18 visual domain: The portion of a work which represents the score; the music engraving information. 4.19 work: The SMDL representation of a piece. NOTE: A work has four domains: core, gestural, visual, and analytical. In addition, bibliographic data can be associated with the work as a whole or with instances of any of the domains. 5 Notation This Standard is expected to be an SGML application, and the develop- ment is proceding using SGML as a design tool. For this reason, the formal syntactic and structural definitions in this document are in SGML. A brief discussion of SGML syntax and semantics can be found in Annex D. A complete and definitive treatise on SGML is found in ISO 8879-1986. It is intended that the text describing each element and attribute will be a complete definition and explanation, but the formal language of the SGML coding provides the rigorous definitions underlying the text descriptions, and will show the mechanism behind each technique that is presented. For this reason, excerpts of the SGML encoding have been interspersed with the text at strategic points. It is recommended that the reader refer to the SGML in the text and in Annex A while reading the technical definitions. NOTE: In the case of conflict between the SGML excerpts in the text and the formal specification in Annex A, the SGML in Annex A will govern. 6 Structure and Content The Standard will be based on a hierarchical structure which describes a piece in terms of four basic sections: the underlying musical form, a set of performances (presumably to be reproduced by a machine), a set of scores in the form of Standard Western Music Notation, and a set of theoretical analyses. We feel this structure best reflects the conceptual divisions inherent in music in light of the uses to which the Standard will be put. These divisions may not represent the philo- sophically most elegant approach to the expression of musical ideas, but we feel they will they will be maximally useful. This separation of the whole into performance and score, and the extraction of the logical musical concepts, seems an unavoidable outcome of the way June 16, 1988 - 9 - music has come to be performed and notated, and has long been present in Western music. This hierarchical structure will be codified in terms of elements. Elements are basic structural building blocks which provide a frame- work and a means to relate and collect information. Each element has a related information set consisting of attributes. These will contain much of the actual data, as the element itself is basically a place holder. For instance, an event is an element, and may represent a note, in which case it will have attributes describing pitch, dura- tion, and possibly dynamic level. Attributes can be defined by the user as well as the designer. This allows almost unlimited flexibility in representing unusual material that may not have been foreseen dur- ing the design. The representational scheme is based on the separation of the basic musical content (pitch, rhythm, harmony, etc.) from the purely perfor- mance oriented information (intonation, rhythmic interpretation) and the purely score oriented information (page layout, horizontal spac- ing, clef). This means simply that some process or machine must be able to separate the work into one or more of these categories for this Standard to represent it. (These divisions are discussed in detail in the following clauses.) This is not to say that the piece must originate in a separated form, only that it can be separated for the purpose of encoding in the Standard. While it is possible to ima- gine pieces which are not separable in this way, almost all works in all genres are in fact easily separable. 7 Work NOTE: This and the following clauses are devoted to a detailed defini- tion of each element of the structure, and the information it con- tains. (A description of the applications of these elements is found in Annex B.) Some of the attributes have been defined and are described below, but some have not yet been addressed. The assumption is that every element will have an attribute list, containing at least an identification mark for reference by other elements. Additional items will be added to the attribute list as they are defined, but in the interests of top down design, we are concentrating on the overall structure first, leaving the myriad and obfuscating details for later. The work is the top level of the hierarchy. The work encompasses the entire document, and is defined as the logical musical information, and all of the performances, scores, and analyses that stem from that musical information. If a "piece" actually has several versions which differ in basic ways, those versions must each be a separate work. All of the remaining elements are contained within the work. The source is an attribute of a work which indicates what form the piece originated from. It distinguishes between a piece which was cap- tured from a MIDI stream, a piece which was entered from a printed score, and a piece which was composed and entered as logical informa- tion. June 16, 1988 - 10 - The composer analysis attribute, if present, indicates an analysis which was created by the composer. NOTE: The intent is to label that information which is definitive as opposed to that which represents an opinion. The rtu base is a time reference which specifies the order of magni- tude of the timing in the work. It specifies the number of real time units (rtu) per second. NOTE: The intent is to allow a wide range of pieces to be realized with an implementation of limited precision. If 32 bits are used to hold time values, for instance, setting rtubase to 1 will give about 100 years of time measurable to 1 second accuracy. Setting it to 1,000,000 will give about 1 hour at 1 microsecond accuracy. <!-- 7 Work as a Whole --> <!ELEMENT work -- Musical composition, piece, etc. -- - - (bibdata?, workseg+, analysis*) > <!ATTLIST work source -- Origin of this representation of the work -- (core | analysis | perform | score) #REQUIRED companal -- Composer's analysis (may include core-like controlling factors that distinguish the work)-- IDREF #IMPLIED -- ID of analysis -- rtubase -- Real Time Units per second (0=100,000,000) -- NUMBER 10000 > 7.1 Work Segment The work segment is a structural device for dividing the work along major boundaries. Workseg is defined self-referentially so that repetitions and other constructs can be easily represented. Movements of a symphony would be placed in separate segments, as would acts in an opera or any other divisions that affect all aspects of the piece (i.e. all parts, all instruments, etc.) The segment will also be used for making global changes such as key changes, time signature changes and instrumentation changes. If the piece changes key or time signature, that often affects every part and instrument, and indicates a major turning point in the music. In such cases, the material before the change should be in one segment, and the material after in another. One very important use of the work segment will be in cases where the instrumentation changes. If the piece starts out with full orchestra, and later proceeds with only strings, then two segments should be used to separate the sections. This will greatly assist in maintaining a useful relationship between the threads in the core, the parts in the score, and the tracks in the performance. Another use is to indicate the composer's intent. If the composer or the editor wants a major division in the work, the work segment can be used to indicate the division even though none of the above situations June 16, 1988 - 11 - apply. The class is a label indicating the use of the workseg. It is coded as a text string, not as a machine interpretable value. The delay indicates the expected pause (if any) between the workseg and any following workseg. It is coded as a text string, not as a machine interpretable value. <!-- 7.1 Work Segment --> <!ELEMENT workseg -- Sequential segment of a work: movement, act, etc. -- O O ((workseg, (workseg | worksegr)+) | (bibdata?, core, perform*, score*)) > <!ATTLIST workseg id ID #IMPLIED class -- E.g., movement, section, coda -- CDATA #IMPLIED -- don't care -- delay -- E.g., 15 minute intermission -- CDATA #IMPLIED -- don't care -- > 7.2 Work Segment Reference The work segment reference is a structural tool to allow a work seg- ment to reference other work segments. This provides flexibility in creating repeats and loops, and allows analyses to refer to work seg- ments. <!-- 7.2 Work Segment Reference --> <!ELEMENT worksegr -- Work segment reference -- - O EMPTY > <!ATTLIST worksegr idr IDREF #REQUIRED -- ID of any work segment -- > 8 Core The core is the basis for a work, and a work has one and only one core. The core contains such information as pitch, note value, har- monic groupings, phrasings, tuplets, etc. A piece for which a core is not producible can not be represented, and a piece with more than one core must be represented as more than one work. We will see, however, that several interpretations of the same basic piece can reside in the same work if they derive from the same core. Let us take the example of a simple piano piece. We have a performance captured by a MIDI sequencer, and the score from which the performance was played. The core will contain an element for each note and rest in the score, thus representing the logical basis of the work. A given measure in the core may contain no notes, and the corresponding spot in the score may say "ad lib". At that point in the performance, there are several improvised notes. It is possible that another performance with a different improvised section, and another score which specifi- cally details a cadenza, might be included in this work and be based June 16, 1988 - 12 - on the same core. The normalized attribute states whether the core has been normalized. It may often be desirable that the core have a canonical (normalized) form. That is, that there be one particular form which will always be used for a given piece. (Note that the definition of the core does not provide orthoganality, so there are many ways that a given piece could be represented.) For such situations, an algorithm can be applied which translates any arbitrary core into a given canonical form. The user may create such an algorithm to fit the needs of the application, or the Standard Canonical Form can be generated using the Standard Algorithm. We plan to provide this Standard Algorithm both as a way of providing consistency between applications and as a model for other algorithms. The normalization algorithm attribute states which algorithm has been used to normalize the core. If "standard" is used, it is expected that implementations will access the Standard Algorithm. If another algo- rithm is used it can be identified here, and may be implementation specific. <!-- 8 Core --> <!ELEMENT core -- The essential music, common to all domains -- - O (stress*, temposeq+, thread+) > <!ATTLIST core norm -- Is core timing normalized? (7.5) -- (norm | nonnorm) nonnorm > 8.1 Thread The thread is a sequence of musical events which lasts for the dura- tion of the piece. It is analogous to a track in a sequencer or on a multi-track tape deck. The purpose of the thread is to allow the core to be sectioned into concurrent streams of notes and other events, mostly for the sake of convenience. There is no assumption made about how the piece will be divided into threads, but logic suggests that parts in a score, tracks in a sequence, or voices would be the best choices of thread allocation. The tempo sequence attribute indicates which tempo sequence is to be used for this thread. The nominal instrument attribute records for posterity the instrument that the composer had in mind (in case anybody cares.) The point is that the gestural section, which contains the timbral information, may be an interpretation by someone other than the composer. This will be encoded as a text string, not as coded timbral data such as is found in the gestural section. June 16, 1988 - 13 - <!-- 8.1 Thread --> <!ELEMENT thread -- Voice-like time-ordered sequence of events -- - O (ces) > <!ATTLIST thread id ID #IMPLIED temposeq IDREF #IMPLIED nominst CDATA #IMPLIED -- Nominal instrument -- -- TO DO: other attributes -- > 8.1.1 Core Event Sequence A core event sequence is a collection of core events, other core event sequences, and core event groups. A core event sequence groups sequen- tial events, as in movements, measures or tuplets. These groups may be nested to any depth and combined in any way. Each thread is made up of a structure of core event sequences which is as complex as is neces- sary to represent the music completely. The time factor attribute is a fraction which describes the relation- ship of the beat inside a given sequence and the beat surrounding (or underneath) the sequence. Time anomalies (such as triplets) will be represented by setting the time factor to the correct fraction. For example, if the beat of a piece falls on the quarter note (so quarter notes have a time value of 1) and an eighth note triplet is encoun- tered, the triplet could be expressed as a sequence of three notes of value 1 with a time factor of 1/3, or as a sequence of three notes of value 1/2 with a time factor of 2/3. It may turn out to be desirable to specify that every event sequence must contain an integral (non- fractional) number of beats. This would not be limiting since a common denominator can be found for any situation. The stress id attribute is a reference to a stress pattern to use for this sequence. The stress beat attribute is the offset (in beats) into the stress pattern at which the sequence starts. A common use for this would be for an anacrusis (pick-up measure). The ornamentation style attribute is a text string which allows the composer or editor to record remarks on the ornamentation style of the sequence. NOTE: This attribute should perhaps modify stress instead. June 16, 1988 - 14 - <!-- 8.1.1 Core Event Sequence --> <!ENTITY % FRAC "NUMBERS" -- fraction: numerator, denominator? (=1) -- > <!ENTITY % m.ces "(ces|ceg|note|rest|grcevent|special|cer)*" > <!ELEMENT ces -- Core event sequence -- O O (chordnm?, %m.ces;) > <!ATTLIST ces id ID #IMPLIED factor -- ces beats / sum of subelement beats -- %FRAC "1 1" stressid -- Beat cycle dynamic stress pattern -- IDREF #IMPLIED -- Default: no change -- stressbt -- Beat # of stress pattern on which ces begins -- NUMBER 1 -- Not 1 only if anacrusis -- ornstyle -- Ornamentation style: e.g., period -- CDATA #IMPLIED -- Default: no ornamentation -- > 8.1.2 Core Event Group The core event group is a collection of events or sequences which are initiated simultaneously. A chord is a group which contains events (notes). A section of a thread may well be a group containing a sequence for each of several parallel voices. This is an alternative to placing each voice in a separate thread. <!-- 8.1.2 Core Event Group --> <!ELEMENT ceg -- Core event group -- - - %m.ces; > <!ATTLIST ceg id ID #IMPLIED -- TO DO: other attributes -- > 8.1.3 Core Events The core event is the basic unit of the structure. Notes and rests are examples of core events, but other occurrences may also be represented as events. In general an event is some occurrence or item which has a single definable starting point in time, and a definable duration. 8.1.3.1 Notes and Rests The note and the rest are the most common musical events. They are very similar in that they are simple events (as opposed to compound events like the graced event). The note has a pitch attribute which specifies its scale tone and octave. June 16, 1988 - 15 - <!-- 8.1.3.1 Notes and Rests --> <!ELEMENT (note | rest) -- Conventionally pitched time-stamped event -- - O EMPTY > <!ATTLIST (note | rest) id ID #IMPLIED %a.ctime; -- TO DO: other attributes -- > 8.1.3.2 Graced Events The graced event is a compound event in that it consists of a main event ornamented by a "grace" modifier. The modifier is an event sequence which can either precede or follow the main event, and which will not consume time as will a normal sequence. The preceding grace modifier is an event sequence which starts at a given time and proceeds until finished, at which time the grace sub- ject is started. The grace subject is the main event. It starts after the preceding modifier and continues until the end of its duration, or until the start of a posterior modifier. The posterior grace modifier starts at a given time after the main event has started, and proceeds until finished. The grace synchronization attribute specifies the starting time offsets of the preceding and posterior modifiers. It is measured from the start time of the subject, and the end time of the subject, respectively. <!-- 8.1.3.2 Graced Event --> <!ELEMENT grcevent -- Graced core event -- - O ((grcpre, grcsubj) | (grcpre?, grcsubj, grcpost))> <!ATTLIST grcevent id ID #IMPLIED > <!ELEMENT (grcpre | grcpost) -- Core event whose duration is not counted -- - O %m.ces; > <!ATTLIST (grcpre | grcpost) id ID #IMPLIED -- Synchronization with subject: start-time in the case of grcpre end-time in the case of grcpref -- grcsync (lead | lag) lead > <!ELEMENT grcsubj -- Grace sequence subject: that which is graced -- O O (note | rest | special | cer) > June 16, 1988 - 16 - 8.1.3.3 Special Events The special event contains user defined information about timed events other than conventional musical occurrences. Its content (other than starting time and duration) will be application specific. <!-- 8.1.3.3 Special Events --> <!ELEMENT special -- User-defined time-stamped event: content describes it -- - O (#PCDATA) > <!ATTLIST special id ID #IMPLIED %a.ctime; -- TO DO: other attributes -- > 8.1.4 Core Event References Core events are accessed through core event references. These are pointers which allow the core to be referred to in arbitrarily complex ways by the performance, score, and analysis sections of the piece. This process will be explored in more depth in Theory of Use. This structure yields a very flexible system for organizing and referring to events. <!-- 8.1.4 Core Event Reference --> <!ELEMENT cer -- Reference to core event, sequence, or group -- - O EMPTY > <!ATTLIST cer idr IDREF #REQUIRED -- ID of ces|ceg|ce -- shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > 8.2 Time It is in the core that the time of the piece is represented. By time we mean the rhythmic relationship of each event to all other events. This is not to be confused with tempo, which refers to the rate of progress of the piece. The time model has several components which combine to form a system which we hope will account for any situation within the scope of the Standard. 8.2.1 Beat All time must be measured in relation to some base which is not open to interpretation. That base will be called the beat. The beat is defined to be that time interval which, at any given point in the piece, is small enough to divide without remainder into all existing subdivisions of the sequence, excluding time anomalies. This beat will only be assigned an absolute value in the gestural section; in the core it is simply a common reference. If the beat changes in meaning as the piece progresses, then the core will be sectioned into more than one sequence. Each sequence will specify the relation of its beat to an overall reference beat. June 16, 1988 - 17 - Since the beat is a relative measurement, the performance can be linked to any time base that is appropriate. The beat can be assigned a fixed duration, an algorithmically generated variable duration, or be related to a live recorded click track. Similarly the score can use any appropriate time signature for a given passage. The same piece could, for example, be scored in 4/4 as triplets or in 12/8 as straight eighths. Indeed, a score representation in each meter could refer to the same core. 8.2.2 Duration Each core event will have a music duration (note value) attribute which is stated as a fraction of a beat. The time consumed by a core event sequence will be the sum of the durations of its events in beats. Accumulated time is therefore represented as the sum of dura- tional time, necessitating the definition of events which sound (notes), and events which do not (rests). The model will support single events or tied events. Tied events are strings of events which are taken together to represent one event with a duration that is the sum of each of the individual durations. When a note starts sounding in one event sequence and continues into the next, the note is split into two tied events of the appropriate dura- tion. The tie attribute indicates that the event is tied, and to which subsequent event it is tied. <!-- 8.2 Time --> <!ENTITY % BEATS "%FRAC;" -- Measure of music time (fractional) -- > <!ENTITY % a.ctime -- Core event time attributes (7.2) -- "musicdur %BEATS #CURRENT tie IDREF #IMPLIED" > 8.3 Stress The stress element indicates how a passage is to be stressed dynami- cally. It consists of a set of template sequences that indicate which beats are to receive what stress. Stress can be dynamic, agogic (tempo related), or can be related to other user specified parameters. The beat count attribute indicates the number of beats in the template cycle. <!-- 8.3 Stress --> <!ELEMENT stress -- Beat cycle definition; dynamic stress pattern -- - O (beatnum, stresses)+ > <!ATTLIST stress id ID #IMPLIED beatcnt NUMBER #REQUIRED -- Number of beats in cycle --> 8.3.1 Beat Number The beat number element marks a particular beat in a stress cycle as June 16, 1988 - 18 - receiving stress. <!ELEMENT beatnum -- Beat number receiving agogic or dynamic stresses -- O O (#PCDATA) > 8.3.2 Stresses The stresses element contains information on what kind of stress is to be applied to the beat with which it is associated. <!ELEMENT stresses -- Stresses applied to specified beat -- O O (#PCDATA) > 8.3.3 Meter The concept of meter is expressible in the core by creating a stress template which models a measure. In 4/4 time, a template may have 4 beats, and may mark the first as having maximum stress, and the third as having moderate stress. In the case of a complex metric situation, such as a measure of five which is felt as two and three, a nested structure of stress templates can be used to accurately indicate the feel. If ambiguity is desired however, the measure can be represented as simply five beats. NOTE: The inclusion of the meter in the core reflects the philosophy that measures are a basic logical concept in music, rather than strictly a score related issue. This is certainly not true of all music, but the facility must be there for those pieces for which it is important. 8.4 Tempo Sequence The tempo sequence element is a list of time stamped tempo modifica- tions which govern the tempo of the piece. Each thread refers to a particular tempo sequence; there can be several if the piece involves conflicting tempi. <!-- 8.4 Tempo --> <!ELEMENT temposeq -- Relates music time to real time (may be imprecise) -- - O (tempo+) > <!ATTLIST temposeq id ID #IMPLIED > 8.4.1 Tempo The tempo element is the basic building block of the tempo sequence. It specifies a tempo change from the current tempo to a target tempo. June 16, 1988 - 19 - (The current tempo is the tempo in effect infinitesimally before the start time of the tempo element. The target tempo is the tempo in effect infinitesimally before the start time of the next tempo ele- ment.) The attributes have been defined to give a large degree of flexibility in specifying changes over time, and maintaining ambiguity and imprecision when desired. The music duration attribute specifies the life of this tempo setting (the time until the next change) in beats. The set value attribute specifies a precise target tempo, either abso- lutely in rtu's per beat or as a percentage of the current tempo. The set text attribute specifies an imprecise target tempo. The value is represented as a text string, and presumably will be a common musi- cal expression such as "presto" or "moderato". The rate value attribute specifies a precise formula for reaching the target tempo from the current tempo. It can be specified as "immedi- ate" (instant change at the start time of the tempo element), "linear" over the duration of the tempo element, or represented by a mathemati- cal formula in the form of a text string. The rate text attribute specifies an imprecise formula for reaching the target tempo from the current tempo. The value is represented as a text string, and presumably will be a common musical expression such as "accelerando" or "ritardando". The hold duration attribute specifies a precise pause in the counting of music time. Its value is absolute in beats. It can be used for a fermata, a full stop, or any other pause or interruption of the normal time flow of the piece, such as an unaccompanied solo cadenza. The hold starts at the starting time of the tempo element, and the tempo duration begins at the completion of the hold. The hold type attribute specifies an imprecise pause in the counting of music time. It can be specified as "full stop", "long", "medium", "short", "none", in non-increasing order of length. The actual time value of these specifiers is implementation dependant. The hold starts at the starting time of the tempo element, and the tempo duration begins at the completion of the hold. The strictness attribute specifies the precision with which the tempo should be followed during a realization of the piece. It is specified as "strict tempo", or represented by a text string containing a common musical expression such as "rubato". June 16, 1988 - 20 - <!ELEMENT tempo -- Real time units per beat -- - O (#PCDATA) > <!ATTLIST tempo id ID #IMPLIED musicdur -- Duration of tempo setting in music time -- %BEATS #CURRENT setval -- Precise final tempo: RTUs/beat (integer #RTU) or % of earlier tempo (%FRAC idref) -- CDATA #CURRENT settext -- Imprecise final tempo: moderato -- CDATA #IMPLIED -- Default: use setval -- rateval -- Precise rate of reaching final tempo -- -- Format: (LINEAR | FORMULA data) -- CDATA #IMPLIED -- Default: immediate -- ratetext -- Imprecise rate specification: accel, ritard -- CDATA #IMPLIED -- Default: use rateval -- strict -- Strictness of interpretation: rubato -- CDATA #IMPLIED -- Default: strict tempo -- holdtype -- Imprecise extension of counted duration -- (fullstop|long|medium|short|none) none holddur -- Precise duration of hold -- %BEATS #CURRENT > 9 Gestural Domain The gestural section of the piece contains the performances. While each work has only one core, it may have several gestural sections, each a different performance (and hence different interpretation) of the piece, and each linked to a particular score The gestural section refers to the core for the majority of its musical material, but may have events of its own. Usually these events will be ad lib notes and performance control information such as volume or timbre selection. The gestural section is intended to represent data for an automated performance of the piece. That data could be generated by a live per- formance or by non-real-time composition, then returned to a syn- thesizer for realization. The performance is the top level gestural element. Each performance typically realizes the entire piece. The score attribute identifies a score in the visual domain which represents the edition which produced this performance, if such a score exists. The closure attribute indicates whether every event in the core was realized in this performance. June 16, 1988 - 21 - <!-- 9 Gestural Domain --> <!ELEMENT perform -- The gestures of a performance (MIDI) -- - O (bibdata?, clicktrk*, track+) > <!ATTLIST perform id ID #IMPLIED score IDREFS #IMPLIED closure -- Are all core events referenced? -- (closed, open) open > 9.1 Track The track is analogous to the thread in the core. It will be used to drive one channel of sound output, or one instrument. It is the pre- cise counterpart of a track on a multi-track. Unlike the thread, the division of music into tracks may need to follow certain restraints imposed by the device that will perform the piece. For example a track may have to be limited to events which are to sound in the same tim- bre. A track is made up of gestural event sequences, which are made up of gestural events, gestural event references, and core event references. It is through these core event references that the core becomes the basis of the gestural section. While it would be possible through the use of gestural events to represent a performance that was unrelated to the core, the intention is that the track will contain mostly per- formance control information, and refer to the core for most or all of the notes, rests, and other basic conceptual material. <!-- 9.1 Track --> <!ELEMENT track -- One instrument's time-ordered sequence of gestures -- - O (ges) > <!ATTLIST track id ID #IMPLIED instrum CDATA #IMPLIED clicktrk IDREF #IMPLIED -- TO DO: other attributes -- > 9.1.1 Gestural Event Sequence <!-- 9.1.1 Gestural Event Sequence --> <!ENTITY % e.ge "ge" -- TO DO: replace with real element types -- > <!ENTITY % m.ges "(ges | geg | %e.ge; | ger | gcer)*" > <!ELEMENT ges -- Gestural event sequence (has core references) -- O O %m.ges; > <!ATTLIST ges id ID #IMPLIED -- TO DO: other attributes -- > 9.1.2 Gestural Event Group June 16, 1988 - 22 - <!-- 9.1.2 Gestural Event Group --> <!ELEMENT geg -- Gestural event group (has core references) -- - - %m.ges; > <!ATTLIST geg id ID #IMPLIED -- TO DO: other attributes -- > 9.1.3 Gestural Event <!-- 9.1.3 Gestural Event --> <!ENTITY % SECONDS "NUMBERS" -- Format: (seconds?, Real Time Units) -- > <!ELEMENT (%e.ge;) -- Gestural event: e.g., controller setting, ad lib note -- - O EMPTY > <!ATTLIST ge id ID #IMPLIED start -- Start time (Default: derived from core) -- %SECONDS #IMPLIED duration -- (Default: derived from core) -- %SECONDS #IMPLIED -- TO DO: other attributes -- > 9.1.4 Gestural Event Reference <!-- 9.1.4.1 Gestural Domain Reference to Gestural Event --> <!ELEMENT ger -- Gestural event reference (includes geg|ges) -- - O EMPTY > <!ATTLIST ger idr IDREF #REQUIRED -- ges|ge|geg same perform -- start -- Start time (Default: derived from core) -- %SECONDS #IMPLIED duration -- (Default: derived from core) -- %SECONDS #IMPLIED shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > <!-- 9.1.4.2 Gestural Domain References to Core Events --> <!ELEMENT gcer -- Gestural domain core event reference -- - O EMPTY > <!ATTLIST gcer idr IDREF #REQUIRED -- ces|ce|ceg in core -- start -- Start time (Default: derived from core) -- %SECONDS #IMPLIED duration -- (Default: derived from core) -- %SECONDS #IMPLIED shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > 9.2 Click Track The click track is a gestural event sequence with an event to mark each beat in the piece. This element will provide a means for relating beats in the core to real time. Click tracks can have arbitrarily spaced events, so any kind of expressive performance can be June 16, 1988 - 23 - represented. The click track will usually be generated by a transcrip- tion program in the process of creating a work from a live perfor- mance. Note that a click track does not need to be present, since a rhythmically exact performance can be generated from the core alone. <!-- 9.2 Click Track --> <!ELEMENT clicktrk -- Click track: ordered table of event start-times -- - O (#PCDATA) > <!ATTLIST clicktrk id ID #IMPLIED -- Default: generated -- nextbeat -- Track and time of next beat -- NMTOKENS #IMPLIED > 10 Visual Domain The visual section of the piece contains the scores. While each work has only one core, it may have several scores, each a different edi- tion (and hence a different interpretation of the piece), and each linked to a particular performance. The visual section refers to the core for the majority of its musical material, but may have events of its own. Usually these events will be symbols that appear on the score aside from notes, rests, and accidentals. Such items as phrase markings, beams, accents, dynamic markings, and lyrics would be found here. The visual section is intended to represent the printed score in Standard Western Music Notation. The score could be generated by a music printing system and returned to such a system for printing or display. The score element is the top level of the visual domain. Each score is a presumably complete edition of the piece. The performance attribute specifies a performance in the gestural domain which was generated from this particular score (edition), if such a performance exists. The closure attribute indicates whether every event in the core was notated in this score. <!-- 10 Visual Domain --> <!ELEMENT score -- Visual representation of work (a la DARMS, MUSTRAN...) -- - O (bibdata?, part+) > <!ATTLIST score id ID #IMPLIED perform IDREFS #IMPLIED closure -- Are all core events referenced? -- (closed, open) open > 10.1 Part The part is analogous to the thread in the core. It will be used to print one part of the score for one instrument. It is the precise counterpart of a staff in a score. The division of music into parts June 16, 1988 - 24 - will be based on the desired appearance of the score. A part is made up of visual event sequences, which are made up of visual events, visual event references, and core event references. It is through these core event references that the core becomes the basis of the visual section. While it would be possible through the use of visual events to represent a score that was unrelated to the core, the intention is that the part will contain mostly visual symbols, and refer to the core for most or all of the notes, rests, and other basic conceptual material. <!-- 10.1 Part --> <!ELEMENT part -- One instrument's portion of the system -- - O (ves) > <!ATTLIST part id ID #IMPLIED clef NAMES "treble bass" -- TO DO: other attributes -- > 10.1.1 Visual Event Sequence <!-- 10.1.1 Visual Event Sequence --> <!ENTITY % e.ve "ve" -- TO DO: replace with real element types -- > <!ENTITY % m.ves "(ves | veg | %e.ve; | ver | vcer)*" > <!ELEMENT ves -- Visual event sequence (has core references) -- O O %m.ves; > <!ATTLIST ves id ID #IMPLIED tuplet -- Triplet (etc.) indicator for sequence -- CDATA #IMPLIED -- Not a tuplet -- cue IDREF #IMPLIED -- ID of ves -- tsinst NUMBERS #IMPLIED -- Time sig for instrument -- tscond NUMBERS #IMPLIED -- Time sig for conductor -- -- TO DO: other attributes -- > 10.1.2 Visual Event Group <!-- 10.1.2 Visual Event Group --> <!ELEMENT veg -- Visual event group (has core references) -- - - %m.ves; > <!ATTLIST veg id ID #IMPLIED -- TO DO: other attributes -- > 10.1.3 Visual Event June 16, 1988 - 25 - <!-- 10.1.3 Visual Event --> <!ELEMENT (%e.ve;) -- Visual event: e.g., phrase mark, bar line -- - O EMPTY > <!ATTLIST (%e.ve;) id ID #IMPLIED -- TO DO: other attributes -- > 10.1.4 Visual Event Reference <!-- 10.1.4.1 Visual Domain Reference to Visual Event --> <!ELEMENT ver -- Visual event reference (includes veg|ves) -- - O EMPTY > <!ATTLIST ver idr IDREF #REQUIRED -- ves|ve|geg same score -- shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > <!-- 10.1.4.2 Visual Domain Reference to Core Event --> <!ELEMENT vcer -- Visual domain core event reference -- - O EMPTY > <!ATTLIST vcer idr IDREF #REQUIRED -- ces|ce|ceg in core -- shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > 10.2 Space The unit of space will be defined relative to the size of the staff and note heads. The actual size of the printed staff is not defined except perhaps as a global attribute of the visual section. A unit of one staff space for the vertical and one note head width for the hor- izontal will provide the basis for all spatial measurements. Spatial relationship will be representable in several ways: as an absolute position on a line (staff), as a relative position from another object, and as a relative position from a logical (time) posi- tion on a staff. Furthermore, for each of these possibilities there will be an explicit position (specified in spatial units) and an implicit position. The implicit position will take the form of a non-numerical relationship to some other object, such as "above the staff" or "between this note head and the one to the left". 11 Analytical Domain The analytical section of the piece contains any analyses that may have been produced. A work may have several analytical sections, each a different analysis (and hence a different interpretation of the piece.) The analytical section refers to the core for the majority of its musical material, but may also refer to performances and scores. The analytical section is intended to represent a structuring of the piece based on any style of analysis. The analysis could be generated June 16, 1988 - 26 - by a specialized music printing/editing system and returned to such a system for printing or display, or might take the ultimate form of a written document. It might even be generated automatically by a com- puter system. The analysis element is the top level of the analysis structure. It represents a presumably complete analysis of the piece, by a particu- lar analyst. If several analyses by different analysts exist, they will each be is a separate analysis. The analysis can refer freely to any other elements of a work, thus allowing complex relationships to be represented. <!-- 11 Analytical Domain --> <!ELEMENT analysis -- An analysis of a work -- - O (bibdata?, voice+) > <!ENTITY % a.anal "core IDREFS #IMPLIED perform IDREFS #IMPLIED score IDREFS #IMPLIED" > <!ATTLIST analysis id ID #IMPLIED %a.anal; > 11.1 Voice The voice is analogous to the thread in the core. It will be used to represent one voice or melodic line of the piece. It is the counter- part of a passage of notes that have the same stem direction. The division of music into voices will be based on the voicing of the piece intended by the composer or analyst. A voice is made up of analytical event sequences, which are made up of analytical events, analytical event references, and core event refer- ences. It also can contain gestural event references and visual event references. It is through these references that the analytical section can arbitrarily structure any aspect of the piece in order to illus- trate a music theoretical idea. <!-- 11.1 Voice --> <!ELEMENT voice -- A single melody line (possibly polyphonic) -- - O (aes) > <!ENTITY % a.voice "" > <!ATTLIST voice id ID #IMPLIED %a.voice; > 11.1.1 Analytical Event Sequence June 16, 1988 - 27 - <!-- 11.1.1 Analytical Event Sequence --> <!ENTITY % e.ae "ae" -- TO DO: replace with real element types -- > <!ENTITY % m.aes "(aes | aeg | %e.ae; | aer | ver | ger | cer)*" > <!ELEMENT aes -- Analytical event sequence (multi-domain refs) -- O O %m.aes; > <!ENTITY % a.aes "class (motif | epmotif | esmotif | elision) motif" > <!ATTLIST aes id ID #IMPLIED %a.aes; > 11.1.2 Analytical Event Group <!-- 11.1.2 Analytical Event Group --> <!ELEMENT aeg -- Analytical event group (multi-domain refs) -- - - %m.aes; > <!ENTITY % a.ae "" > <!ATTLIST aeg id ID #IMPLIED %a.ae; > 11.1.3 Analytical Event <!-- 11.1.3 Analytical Event --> <!ENTITY % m.ae "(%e.ae;|%e.ge;|%e.ve;)*" > <!ELEMENT (%e.ae;) -- Analytical event -- - O %m.ae; > <!ATTLIST (%e.ae;) id ID #IMPLIED %a.ae; > 11.1.4 Analytical Event Reference <!-- 11.1.4 References --> <!ELEMENT aer -- Analytical event sequence reference -- - O EMPTY > <!ENTITY % a.aer "" > <!ATTLIST aer idr IDREF #REQUIRED -- ID of aes -- %a.aer; > 12 Bibliographic The bibliographic entry is found at the top level (as an element of work) and can also be used at lower levels. It contains much of the bibliographic and discographic data necessary for the cataloging of a piece.The bibliographic entry will contain the information necessary to make the Standard useful. Such items as title, author, issuer (pub- lisher), date, and copyright will all be explicitly defined. In addi- tion, a miscellaneous area will be available which can contain any information that is not defined elsewhere. If desired, a bibliographic entry may be made for each performance in the gestural section, or for June 16, 1988 - 28 - each edition in the visual section. The attributes are explained in the SGML code comments. NOTE: We have not attempted to form an exhaustive structure for the representation of complete library cataloging information. Such a structure would extend the scope of the Standard beyond where we feel it should go at present. Since we are utilizing the machinery of SGML to implement this Standard, another committee could easily create such a complete bibliographic element, and it could be readily included in music documents. We in fact strongly urge the Library community to initiate such a project. <!-- 12 Bibliographic Data --> <!ENTITY % e.bib "title | author | date | issuer | descript | copr"> <!-- Explanation of bibliographic elements: title Title of work, performance, score, or analysis author Work: composer, librettist, computer Performance: performer, arranger Score: editor, copyist, arranger Analysis: theorist issuer Access information: e.g., publisher, catalog number date Date of work, performance, score, or analysis copr Copyright notice descript Miscellaneous descriptive data: e.g., performance time --> <!ENTITY % d.bib "<!ELEMENT (%e.bib;) - O (#PCDATA)>"> %d.bib; <!ENTITY % m.bib "(%e.bib; | theme)*"> <!ELEMENT bibdata -- Bibliographic data applying to work as a whole -- - O %m.bib; > 12.1 Theme The theme will contain references to the core which pinpoint key pas- sages (or famous passages) for the purpose of identification of the work. It will allow a cataloging application, for instance, to quickly locate and then display or perform a well known section. This will make it easy for the user to verify that the correct piece has been retrieved. <!-- 12.1 Theme --> <!ENTITY % a.theme ""> <!ELEMENT theme -- Themes that best identify the work (e.g., incipit) -- - O EMPTY > <!ATTLIST theme idr IDREFS #REQUIRED -- ID of analysis -- %a.theme; > 13 Conformance The Standard will define several levels of conformance to allow June 16, 1988 - 29 - applications to implement subsets of the language. There will be a canonical form and a "standard" level described. NOTE: The issue of conformance will be developed further at a later date. June 16, 1988 - 30 - Annex A Formal Definition (This annex is normative and will become an integral part of the Standard.) This annex contains the formal definition of a work, expressed as an SGML document type definition. NOTES Because the SMDL is still under development, the SGML document type defini- tion (DTD) is presently incomplete in a number of respects. These are listed below, and will be updated with the SGML Formal Definition. 1. Little detail is provided on the actual encoding of an instance of a work. As we are first attempting to identify the potential events and to define their properties (attributes), the DTD acts as though all events will be encoded with start-tags and end-tags, with all properties specified using the SGML attribute notation. The result is a lopsided definition in which there is only structure and no actual data. This convention is satisfactory (even advantageous) while we are designing the structure and semantics of the SMDL. It allows relationships to be seen easily and requirements to be evaluated, without the intrusion of cod- ing considerations. Once the design is complete and we understand all of the information that must be represented, we will create a concise coding scheme to replace the lower levels of the structure. (In SGML, such a scheme is known as a "data content notation".) 2. Most attributes have not yet been defined. As a result, many of the ATTLIST declarations appear identical to one another. In such cases, we expect that the lists will be differentiated by attributes that will be defined later. 3. The lowest-level gestural, visual, and analytical event elements (ge, ve, and ae) are temporary placeholders for lists of distinct element types (for example, bar lines, clefs, etc.). Eventually, the entity refer- ences to lists of the distinct types will be completed to replace these element names. For now, only the lowest-level core events have been defined. Moreover, as we are first attempting to define those attributes which all events have in common, a single ATTLIST is used in each domain. Eventu- ally, each event may have its own ATTLIST declaration. 4. There are many elements that have common content models and, at least for the moment, common attribute lists. As a matter of development methodology, we felt it better to assume that elements that represent dif- ferent semantic constructs (e.g., tracks and parts) are likely to have dif- ferent attributes when the design is complete, even though they may have identical structures. If the presumption proves incorrect in any instance, we will of course remove the redundancy when finalizing the design, but premature optimization might cause us to overlook vital differences. June 16, 1988 - 31 - 5. For attributes that have been defined, particularly those whose domain is a list of specific values, we have typically provided only a nom- inal list of values. We expect that once the overall structure is firm, experts will be able to contribute more complete lists. Such attribute domains can also be made user-extensible if that is desirable. <!-- Public document type definition for music representation. Typical invocation: <!DOCTYPE work PUBLIC "-//ANSI X3V1.8M//DTD Musical Work//EN"> NOTE: The section heading comments identify the corresponding clause numbers in the body of this document. --> <!-- 7 Work as a Whole --> <!ELEMENT work -- Musical composition, piece, etc. -- - - (bibdata?, workseg+, analysis*) > <!ATTLIST work source -- Origin of this representation of the work -- (core | analysis | perform | score) #REQUIRED companal -- Composer's analysis (may include core-like controlling factors that distinguish the work)-- IDREF #IMPLIED -- ID of analysis -- rtubase -- Real Time Units per second (0=100,000,000) -- NUMBER 10000 > <!-- 7.1 Work Segment --> <!ELEMENT workseg -- Sequential segment of a work: movement, act, etc. -- O O ((workseg, (workseg | worksegr)+) | (bibdata?, core, perform*, score*)) > <!ATTLIST workseg id ID #IMPLIED class -- E.g., movement, section, coda -- CDATA #IMPLIED -- don't care -- delay -- E.g., 15 minute intermission -- CDATA #IMPLIED -- don't care -- > <!ELEMENT worksegr -- Work segment reference -- - O EMPTY > <!ATTLIST worksegr idr IDREF #REQUIRED -- ID of any work segment -- > <!-- 8 Core --> <!ELEMENT core -- The essential music, common to all domains -- - O (stress*, temposeq+, thread+) > <!ATTLIST core norm -- Is core timing normalized? (7.5) -- (norm | nonnorm) nonnorm > June 16, 1988 - 32 - <!-- 8.1 Thread --> <!ELEMENT thread -- Voice-like time-ordered sequence of events -- - O (ces) > <!ATTLIST thread id ID #IMPLIED temposeq IDREF #IMPLIED nominst CDATA #IMPLIED -- Nominal instrument -- -- TO DO: other attributes -- > <!-- 8.1.1 Core Event Sequence --> <!ENTITY % FRAC "NUMBERS" -- fraction: numerator, denominator? (=1) -- > <!ENTITY % m.ces "(ces|ceg|note|rest|grcevent|special|cer)*" > <!ELEMENT ces -- Core event sequence -- O O (chordnm?, %m.ces;) > <!ATTLIST ces id ID #IMPLIED factor -- ces beats / sum of subelement beats -- %FRAC "1 1" stressid -- Beat cycle dynamic stress pattern -- IDREF #IMPLIED -- Default: no change -- stressbt -- Beat # of stress pattern on which ces begins -- NUMBER 1 -- Not 1 only if anacrusis -- ornstyle -- Ornamentation style: e.g., period -- CDATA #IMPLIED -- Default: no ornamentation -- > <!-- 8.1.2 Core Event Group --> <!ELEMENT ceg -- Core event group -- - - %m.ces; > <!ATTLIST ceg id ID #IMPLIED -- TO DO: other attributes -- > <!-- 8.1.3.1 Notes and Rests --> <!ELEMENT (note | rest) -- Conventionally pitched time-stamped event -- - O EMPTY > <!ATTLIST (note | rest) id ID #IMPLIED %a.ctime; -- TO DO: other attributes -- > June 16, 1988 - 33 - <!-- 8.1.3.2 Graced Event --> <!ELEMENT grcevent -- Graced core event -- - O ((grcpre, grcsubj) | (grcpre?, grcsubj, grcpost))> <!ATTLIST grcevent id ID #IMPLIED > <!ELEMENT (grcpre | grcpost) -- Core event whose duration is not counted -- - O %m.ces; > <!ATTLIST (grcpre | grcpost) id ID #IMPLIED -- Synchronization with subject: start-time in the case of grcpre end-time in the case of grcpref -- grcsync (lead | lag) lead > <!ELEMENT grcsubj -- Grace sequence subject: that which is graced -- O O (note | rest | special | cer) > <!-- 8.1.3.3 Special Events --> <!ELEMENT special -- User-defined time-stamped event: content describes it -- - O (#PCDATA) > <!ATTLIST special id ID #IMPLIED %a.ctime; -- TO DO: other attributes -- > <!-- 8.1.4 Core Event Reference --> <!ELEMENT cer -- Reference to core event, sequence, or group -- - O EMPTY > <!ATTLIST cer idr IDREF #REQUIRED -- ID of ces|ceg|ce -- shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > <!-- 8.1.5 Chord Name --> <!ENTITY % d.chord "<!ELEMENT chordnm - O (#PCDATA)>"> %d.chord; <!-- 8.2 Time --> <!ENTITY % BEATS "%FRAC;" -- Measure of music time (fractional) -- > <!ENTITY % a.ctime -- Core event time attributes (7.2) -- "musicdur %BEATS #CURRENT tie IDREF #IMPLIED" > <!-- Explanation of core time attributes: musicdur Duration of event in music time. tie Succeeding event to which this one is tied (Default: not tied).--> June 16, 1988 - 34 - <!-- 8.3 Stress --> <!ELEMENT stress -- Beat cycle definition; dynamic stress pattern -- - O (beatnum, stresses)+ > <!ATTLIST stress id ID #IMPLIED beatcnt NUMBER #REQUIRED -- Number of beats in cycle --> <!ELEMENT beatnum -- Beat number receiving agogic or dynamic stresses -- O O (#PCDATA) > <!ELEMENT stresses -- Stresses applied to specified beat -- O O (#PCDATA) > <!-- 8.4 Tempo --> <!ELEMENT temposeq -- Relates music time to real time (may be imprecise) -- - O (tempo+) > <!ATTLIST temposeq id ID #IMPLIED > <!ELEMENT tempo -- Real time units per beat -- - O (#PCDATA) > <!ATTLIST tempo id ID #IMPLIED musicdur -- Duration of tempo setting in music time -- %BEATS #CURRENT setval -- Precise final tempo: RTUs/beat (integer #RTU) or % of earlier tempo (%FRAC idref) -- CDATA #CURRENT settext -- Imprecise final tempo: moderato -- CDATA #IMPLIED -- Default: use setval -- rateval -- Precise rate of reaching final tempo -- -- Format: (LINEAR | FORMULA data) -- CDATA #IMPLIED -- Default: immediate -- ratetext -- Imprecise rate specification: accel, ritard -- CDATA #IMPLIED -- Default: use rateval -- strict -- Strictness of interpretation: rubato -- CDATA #IMPLIED -- Default: strict tempo -- holdtype -- Imprecise extension of counted duration -- (fullstop|long|medium|short|none) none holddur -- Precise duration of hold -- %BEATS #CURRENT > <!-- 9 Gestural Domain --> <!ELEMENT perform -- The gestures of a performance (MIDI) -- - O (bibdata?, clicktrk*, track+) > <!ATTLIST perform id ID #IMPLIED score IDREFS #IMPLIED closure -- Are all core events referenced? -- (closed, open) open > June 16, 1988 - 35 - <!-- 9.1 Track --> <!ELEMENT track -- One instrument's time-ordered sequence of gestures -- - O (ges) > <!ATTLIST track id ID #IMPLIED instrum CDATA #IMPLIED clicktrk IDREF #IMPLIED -- TO DO: other attributes -- > <!-- 9.1.1 Gestural Event Sequence --> <!ENTITY % e.ge "ge" -- TO DO: replace with real element types -- > <!ENTITY % m.ges "(ges | geg | %e.ge; | ger | gcer)*" > <!ELEMENT ges -- Gestural event sequence (has core references) -- O O %m.ges; > <!ATTLIST ges id ID #IMPLIED -- TO DO: other attributes -- > <!-- 9.1.2 Gestural Event Group --> <!ELEMENT geg -- Gestural event group (has core references) -- - - %m.ges; > <!ATTLIST geg id ID #IMPLIED -- TO DO: other attributes -- > <!-- 9.1.3 Gestural Event --> <!ENTITY % SECONDS "NUMBERS" -- Format: (seconds?, Real Time Units) -- > <!ELEMENT (%e.ge;) -- Gestural event: e.g., controller setting, ad lib note -- - O EMPTY > <!ATTLIST ge id ID #IMPLIED start -- Start time (Default: derived from core) -- %SECONDS #IMPLIED duration -- (Default: derived from core) -- %SECONDS #IMPLIED -- TO DO: other attributes -- > <!-- 9.1.4.1 Gestural Domain Reference to Gestural Event --> <!ELEMENT ger -- Gestural event reference (includes geg|ges) -- - O EMPTY > <!ATTLIST ger idr IDREF #REQUIRED -- ges|ge|geg same perform -- start -- Start time (Default: derived from core) -- %SECONDS #IMPLIED duration -- (Default: derived from core) -- %SECONDS #IMPLIED shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > June 16, 1988 - 36 - <!-- 9.1.4.2 Gestural Domain References to Core Events --> <!ELEMENT gcer -- Gestural domain core event reference -- - O EMPTY > <!ATTLIST gcer idr IDREF #REQUIRED -- ces|ce|ceg in core -- start -- Start time (Default: derived from core) -- %SECONDS #IMPLIED duration -- (Default: derived from core) -- %SECONDS #IMPLIED shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > <!-- 9.2 Click Track --> <!ELEMENT clicktrk -- Click track: ordered table of event start-times -- - O (#PCDATA) > <!ATTLIST clicktrk id ID #IMPLIED -- Default: generated -- nextbeat -- Track and time of next beat -- NMTOKENS #IMPLIED > <!-- 10 Visual Domain --> <!ELEMENT score -- Visual representation of work (a la DARMS, MUSTRAN...) -- - O (bibdata?, part+) > <!ATTLIST score id ID #IMPLIED perform IDREFS #IMPLIED closure -- Are all core events referenced? -- (closed, open) open > <!-- 10.1 Part --> <!ELEMENT part -- One instrument's portion of the system -- - O (ves) > <!ATTLIST part id ID #IMPLIED clef NAMES "treble bass" -- TO DO: other attributes -- > <!-- 10.1.1 Visual Event Sequence --> <!ENTITY % e.ve "ve" -- TO DO: replace with real element types -- > <!ENTITY % m.ves "(ves | veg | %e.ve; | ver | vcer)*" > <!ELEMENT ves -- Visual event sequence (has core references) -- O O %m.ves; > <!ATTLIST ves id ID #IMPLIED tuplet -- Triplet (etc.) indicator for sequence -- CDATA #IMPLIED -- Not a tuplet -- cue IDREF #IMPLIED -- ID of ves -- tsinst NUMBERS #IMPLIED -- Time sig for instrument -- tscond NUMBERS #IMPLIED -- Time sig for conductor -- -- TO DO: other attributes -- > June 16, 1988 - 37 - <!-- 10.1.2 Visual Event Group --> <!ELEMENT veg -- Visual event group (has core references) -- - - %m.ves; > <!ATTLIST veg id ID #IMPLIED -- TO DO: other attributes -- > <!-- 10.1.3 Visual Event --> <!ELEMENT (%e.ve;) -- Visual event: e.g., phrase mark, bar line -- - O EMPTY > <!ATTLIST (%e.ve;) id ID #IMPLIED -- TO DO: other attributes -- > <!-- 10.1.4.1 Visual Domain Reference to Visual Event --> <!ELEMENT ver -- Visual event reference (includes veg|ves) -- - O EMPTY > <!ATTLIST ver idr IDREF #REQUIRED -- ves|ve|geg same score -- shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > <!-- 10.1.4.2 Visual Domain Reference to Core Event --> <!ELEMENT vcer -- Visual domain core event reference -- - O EMPTY > <!ATTLIST vcer idr IDREF #REQUIRED -- ces|ce|ceg in core -- shift NUTOKEN 0 -- Transposition in steps -- -- TO DO: other event modifier attributes -- > <!-- 11 Analytical Domain --> <!ELEMENT analysis -- An analysis of a work -- - O (bibdata?, voice+) > <!ENTITY % a.anal "core IDREFS #IMPLIED perform IDREFS #IMPLIED score IDREFS #IMPLIED" > <!ATTLIST analysis id ID #IMPLIED %a.anal; > <!-- 11.1 Voice --> <!ELEMENT voice -- A single melody line (possibly polyphonic) -- - O (aes) > <!ENTITY % a.voice "" > <!ATTLIST voice id ID #IMPLIED %a.voice; > June 16, 1988 - 38 - <!-- 11.1.1 Analytical Event Sequence --> <!ENTITY % e.ae "ae" -- TO DO: replace with real element types -- > <!ENTITY % m.aes "(aes | aeg | %e.ae; | aer | ver | ger | cer)*" > <!ELEMENT aes -- Analytical event sequence (multi-domain refs) -- O O %m.aes; > <!ENTITY % a.aes "class (motif | epmotif | esmotif | elision) motif" > <!ATTLIST aes id ID #IMPLIED %a.aes; > <!-- 11.1.2 Analytical Event Group --> <!ELEMENT aeg -- Analytical event group (multi-domain refs) -- - - %m.aes; > <!ENTITY % a.ae "" > <!ATTLIST aeg id ID #IMPLIED %a.ae; > <!-- 11.1.3 Analytical Event --> <!ENTITY % m.ae "(%e.ae;|%e.ge;|%e.ve;)*" > <!ELEMENT (%e.ae;) -- Analytical event -- - O %m.ae; > <!ATTLIST (%e.ae;) id ID #IMPLIED %a.ae; > <!-- 11.1.4 References --> <!ELEMENT aer -- Analytical event sequence reference -- - O EMPTY > <!ENTITY % a.aer "" > <!ATTLIST aer idr IDREF #REQUIRED -- ID of aes -- %a.aer; > <!-- 12 Bibliographic Data --> <!ENTITY % e.bib "title | author | date | issuer | descript | copr"> <!-- Explanation of bibliographic elements: title Title of work, performance, score, or analysis author Work: composer, librettist, computer Performance: performer, arranger Score: editor, copyist, arranger Analysis: theorist issuer Access information: e.g., publisher, catalog number date Date of work, performance, score, or analysis copr Copyright notice descript Miscellaneous descriptive data: e.g., performance time --> <!ENTITY % d.bib "<!ELEMENT (%e.bib;) - O (#PCDATA)>"> %d.bib; <!ENTITY % m.bib "(%e.bib; | theme)*"> <!ELEMENT bibdata -- Bibliographic data applying to work as a whole -- - O %m.bib; > June 16, 1988 - 39 - <!-- 12.1 Theme --> <!ENTITY % a.theme ""> <!ELEMENT theme -- Themes that best identify the work (e.g., incipit) -- - O EMPTY > <!ATTLIST theme idr IDREFS #REQUIRED -- ID of analysis -- %a.theme; > June 16, 1988 - 40 - Annex B Theory of Use (This annex is informative and will not form an integral part of the Stan- dard.) As a language, the Standard can be put to a wide variety of uses ranging >from the highly appropriate to the completely pathological. It was, how- ever, designed with a particular set of applications in mind, and will be most effective if used for these. Knowing the design assumptions will also facilitate application of the Standard to unforeseen or unusual situations. It is hoped that this annex will answer many of the questions that will arise concerning applicability. NOTE: This section will be developed further at a later date. B.1 General Application In general, the Standard is intended as a storage and interchange for- mat for musical ideas. It is designed to be somewhat human readable so that a piece could theoretically be created by using a word processor and entering the encoded material directly. However, it is expected that it will be used mainly for automated processing in such areas as music printing, library cataloging and storage, multimedia presenta- tions, teaching, and research. For other situations, such as live per- formance or sound recording, other formats are likely to be more applicable. A piece to be represented can originate from almost any source. An automated composition program might generate a core and an associated gestural section. An interactive music printing system might generate a core and a visual section. A sequencer might capture a live perfor- mance and transcribe it into a core and performance section, and then turn the piece over to a music printing system for the creation of the visual and analytical sections. There is much flexibility in the way the Standard can be used and the situations to which it can be applied. The only common element is the core, the others need not even be present. The gestural section is designed to be used for the representation of computer instrument sequences. This does not mean that it is a sequencer format for internal use by sequencers. In fact it would be poorly suited for that application. It is for archiving and transport- ing music that has been, or will be, processed in some way by a com- puter system. A performance may be captured on a synthesizer, it may be interpreted from a MIDI stream, or it may be translated from another language, such as a MIDI sequence file format or MUSIC V. A sequencer might read a piece in the Standard, translate it into an internal data format, and then realize it in real time. The visual section will be used for representing scores of all kinds. The score may have an accompanying performance or it may not. The score may be entered or captured using a music printing system, or it June 16, 1988 - 41 - may be translated from DARMS or MUSTRAN. It might be retrieved as a display on a screen, a printed page, or translated into another language. Most importantly it will allow systems of all kinds to interchange scores easily and accurately. The analytical section will be used to represent theoretical ideas in a structural format. Any sort of layering and grouping will be possi- ble, so various styles of analysis will be supported. A given piece may have several analyses (i.e. one Shenkerian, one classical), which could even refer to each other. An analysis of a piece with a circular score could refer to the score and the performance in an attempt to relate the music to the shape of the score to the vertiginous effect on the performer. June 16, 1988 - 42 - Annex C Explanation of Editorial Conventions (This annex is informative and will not form an integral part of the Stan- dard.) This document observes some of the editorial conventions of a for- mal standard, but not yet with the strictness and consistency that will be required in the final document. Those conventions that are observed in this revision are listed. C.1 Definitions Definitions are contained in a separate clause. Ours is presently incomplete and will probably remain that way for a while. Also, some of the definitions in it are not as precise as they should be. When the clause is complete, the definitions will refer to one another in a top-down hierarchical order, without tautologies, and will define each term fully. C.2 Structure Part Two is structured like a standard in that it observes the follow- ing conventions: Clause 0 is an informative introduction (that is, it does not contain requirements.) Clause 1 states what the standard includes, and its expected uses. Clause 3 contains references to related standards. Clause 4 contains the definitions. Clause 5 describes the notational conventions used in the remain- ing clauses. The clauses from 6 until the end contain the actual requirements. There are also annexes (appendixes) containing information that was segregated from the body of the standard for convenience. C.3 Segregation Requirements are distinguished from definitions, examples, and expla- natory notes and comments. Anything identified as a "NOTE" is there to aid in understanding the standard, but does not change the requirements. At present, we also use notes to discuss matters relating to the development of the stan- dard. June 16, 1988 - 43 - Annexes are designated either "normative" or "informative". The former contain requirements and have the same force and effect as if they were in the body of the standard. The latter are extended notes or tutorial information. C.4 Language Some words have formal implications that may differ from casual usage. Those that are used in this document are as follows: C.4.1deprecated: Technically allowed, but only in rare situations a sensible thing to do. The opposite of "should". C.4.2must: Required by the language; unavoidable. C.4.3shall: Required by definition. (But not necessarily unavoid- able syntactically or semantically in the language.) C.4.4should: Recommended, but not mandatory. The opposite of "deprecated." (Within a requirement, it is used in place of "shall" where there is some rare situation in which it wouldn't work or where it was too burdensome to check for compliance.) June 16, 1988 - 44 - Annex D Guide to SGML Notation (This annex is informative and will not form an integral part of the Stan- dard.) For those unfamiliar with SGML, the following brief explanation will assist in understanding the code that appears in this document. For a more in- depth explanation, the ISO standard (ISO 8879-1986) is the definitive tutorial and reference on the subject. NOTE: This description is currently "brief" to the point of opacity. We plan to expand this section at a later date. D.1 Structure SGML consists of three basic structural components. It is the usual intent that these structures will contain data, but in our application there is only structure for the moment. Elements are structural build- ing blocks which can be defined to contain data or other elements. An attribute list is associated with an element and contains values which describe the element. Entities are a structural tool which allow por- tions of code to be referenced by a label from one or more places in the code. D.2 Punctuation There are several punctuation marks that are important. Declarations (definitions) are surrounded by <! ... > and comments to the reader are surrounded by -- ... --. For the purposes of this document, the marks - - and -O can be ignored. In each declaration, the following marks may occur: , this followed by the next, & this and the next, | this or the next, ? optional, + one or more, * zero or more. June 16, 1988 - 45 - Annex E Status Report (This annex is informative and will not form an integral part of the Stan- dard.) In the first meetings, the committee concentrated on the overall structure of the SMDL. Many issues were touched upon to ensure that the basic design would be flexible and powerful enough to handle the wide range of material demanded by the requirements specification. More recently, the concentration has focused on the core and related issues, as this seemed the logical starting place. Subsequent work will have to build from a basically finished core section. As of the most recent meeting (February 1 - 4, 1988) we have developed the core substantially, although some work remains. We expect to finish this section at the next meeting, and proceed to the gestural and visual sections. It is assumed that further revisions of the core will be necessary after development of the other sections. Because the work has focused on a particular area, the preceding document is uneven. Some areas have been discused down to minute detail, and some are as yet merely suggestions of the direction in which to proceed. In par- ticular the core section is considerably fleshed out, but the others are unfinished. As the meetings continue, we expect this document (parts 1 and 2) to grow into a Draft Standard which will be complete in all areas. %%% 30 %%% June 16, 1988