楽譜のデジタル表現 -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>がよく使われます。
スコアヘッダー
次の部分からがスコアヘッダーの記述です。
この例では次のタグが記述されています。
- <work>: 作品情報、作品名や作品番号など
- <identification>: 作曲者や編曲者の情報
- <part-list>: 楽器の名前など
- <part>: 楽譜情報
楽譜データ
楽譜データの本体は<part>要素の中に記述されます。
<part>要素は複数存在することができ、各パートごとに1つずつ<part>要素が対応します。
<part>要素の中には<measure>要素があり、各小節ごとに1つずつ<measure>要素が対応します。
<measure>要素の中には<note>要素があり、各音符ごとに1つずつ<note>要素が対応します。