MakeMusic
SmartMusic Finale Garritan MusicXML

Poster Session

Representing Music Using XML

Michael Good
Recordare

Poster Session presented at the
International Symposium on Music Information Retrieval
October 23-25, 2000
Plymouth, Massachusetts, USA
Abstract also online

Copyright © 2000 Michael Good

Why Use XML to Represent Musical Scores?

  • People need a more powerful interchange format than MIDI
  • XML provides a simple, common, text format for complex structured data
  • Like HTML and MIDI, simple to learn with real-world power
  • Uses Unicode for multilingual data
  • Huge momentum behind using XML for data interchange within the computer industry
  • Many software development tools available

MusicXML: An Interchange Language

  • Supports notation, analysis, retrieval, and performance applications
  • Based on MuseData and Humdrum
  • Designed for common western musical notation, both classical and popular
  • Current Windows software:
    • Reads/writes 100% of MuseData
    • Writes to Standard MIDI, Sibelius, Finale
    • Reads from Finale ETF and NIFF

MusicXML Example (first note of logo)

Recordare logo in 2000

    <?xml version="1.0" standalone="no" ?>
    <!DOCTYPE score-partwise PUBLIC
        "-//Recordare//DTD MusicXML Partwise//EN"
        "http://www.musicxml.org/dtds/partwise.dtd">
    <score-partwise>
        <part-list>
            <score-part id="P1">
                <part-name>Mezzo-soprano</part-name>
            </score-part>
        </part-list>
        <part id="P1">
            <measure number="1">
                <attributes>
                    <key>
                        <fifths>-1</fifths>
                    </key>
                    <divisions>2</divisions>
                    <clef>
                        <sign>G</sign>
                        <line>2</line>
                    </clef>
                </attributes>
                <note>
                    <pitch>
                        <step>A</step>
                        <octave>4</octave>
                    </pitch>
                    <duration>4</duration>
                    <tie type="start"/>
                    <type>half</type>
                    <stem>up</stem>
                    <notations>
                        <slur type="start" number="1"/>
                        <tied type="start"/>
                    </notations>
                </note>

clear

MusicXML DTD Sample: pitch and slur

    <!ELEMENT pitch (step, alter?, octave)>
    <!ELEMENT step (#PCDATA)>
    <!ELEMENT alter (#PCDATA)>
    <!ELEMENT octave (#PCDATA)>

    <!-- Slur is an empty element with attributes -->
    <!ENTITY % beam-level "(1 | 2 | 3 | 4 | 5 | 6)">
    <!ENTITY % start-stop "(start | stop)">
    <!ELEMENT slur EMPTY>
    <!ATTLIST slur type %start-stop; #REQUIRED>
    <!ATTLIST slur number %beam-level; "1">

clear

Duration Distribution in Bach BWV 6, 2nd Movement

Screenshot of duration distribution program

Sample of Distribution Analysis Code in Visual Basic

    Set oNodes = oRoot.selectNodes("//note | //divisions")
    Do    ' nDivisions already computed as a product of all divisions
        Set oNote = oNodes.NextNode
        If oNote Is Nothing Then Exit Do
        If oNote.tagName = "divisions" Then
            nMultiplier = nDivisions \ CLng(oNote.Text)
        Else
            Set oTmp = oNote.selectSingleNode("duration")
            If Not oTmp Is Nothing Then  ' Exclude grace and cue notes
                nDuration = CLng(oTmp.Text) * nMultiplier
                nCounts(nDuration) = nCounts(nDuration) + 1
            End If
        End If
    Loop

clear