楽譜のデジタル表現 -MusicXML, SMuFL, Dorico-

楽譜をデータとして扱うのに現代で一番普及しているフォーマットがMusicXmlです。
MusicXmlを理解することで、Doricoなどの楽譜作成ソフトやMusic21の設計思想を深く理解できます。
Music21はMusicXmlの構造をそのまま反映したクラス設計になっているので、。

MusicXmlの基本構造

MusicXmlはW3Cが仕様を定めていて、ドキュメントはこちらにあります。
MusicXML 4.0
こちらのチュートリアルのHello Worldの例に、少し追記したものを元に見ていきます。

        
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE score-partwise PUBLIC
    "-//Recordare//DTD MusicXML 4.0 Partwise//EN"
    "http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise version="4.0">
    <work>
        <work-number>Op.1</work-number>
        <work-title>Only C</work-title>
    </work>
    <identification>
        <creator type="composer">J.S.Bach</creator>
    </identification>
    <part-list>
        <score-part id="P1">
        <part-name>Violin</part-name>
        </score-part>
    </part-list>
    <part id="P1">
        <measure number="1">
        <attributes>
            <divisions>1</divisions>
            <key>
            <fifths>0</fifths>
            </key>
            <time>
            <beats>4</beats>
            <beat-type>4</beat-type>
            </time>
            <clef>
            <sign>G</sign>
            <line>2</line>
            </clef>
        </attributes>
        <note>
            <pitch>
            <step>C</step>
            <octave>4</octave>
            </pitch>
            <duration>4</duration>
            <type>whole</type>
        </note>
        </measure>
    </part>
</score-partwise>
            
        
MusicXML 4.0 - Hello World Tutorialを元に作成

XML宣言とDTD

まず一番最初の

            
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE score-partwise PUBLIC
    "-//Recordare//DTD MusicXML 4.0 Partwise//EN"
    "http://www.musicxml.org/dtds/partwise.dtd">
            
        
という部分はXMLの宣言とDOCTYPE宣言です。
ここは省略しても問題ありませんが、XMLファイルであることを明示するために書いておくのが一般的です。

ルート要素

次に<score-partwise>要素がルート要素です。
すべての要素はこの<score-partwise>要素の中に含まれます。
<score-partwise>のほかに<score-timewise>というルート要素もありますが、こちらは時間軸に沿った表現をするためのものです。
一般的には<score-partwise>がよく使われます。

スコアヘッダー

次の部分からがスコアヘッダーの記述です。
この例では次のタグが記述されています。

楽譜データ

楽譜データの本体は<part>要素の中に記述されます。
<part>要素は複数存在することができ、各パートごとに1つずつ<part>要素が対応します。
<part>要素の中には<measure>要素があり、各小節ごとに1つずつ<measure>要素が対応します。
<measure>要素の中には<note>要素があり、各音符ごとに1つずつ<note>要素が対応します。