MusicXMLの仕様

MusicXMLは楽譜(記譜情報)をXMLで表現するためのフォーマットで、現在はW3Cが仕様を管理しています。 ドキュメントはMusicXML 4.0で公開されています。 この記事では、公式チュートリアルのHello Worldの例に手を加えたものを元に、仕様全体をできるだけ網羅的に見ていきます。

MusicXMLとは

MusicXMLは2004年にMichael GoodによってRecordare社から発表されたフォーマットです。 Finale、Sibelius、MuseScoreなど主要な記譜ソフト間で楽譜データを交換するための共通形式として設計されました。 その後Recordareの資産はMakeMusic社(Finaleの開発元)に移管され、2015年にW3Cの下に設立されたMusic Notation Community Groupに仕様の管理が移されました。 2021年にMusicXML 4.0がW3Cのコミュニティグループ勧告として公開され、現在に至ります。

MusicXMLは「記譜(見た目)」と「演奏(音響)」の両方の情報を1つのファイルに保持できる点が特徴です。 たとえば音符の長さは、記譜上の見た目を表す<type>と、演奏上の時間的長さを表す<duration>という2つの独立した要素で表現されます。 これにより、楽譜として正しく表示することと、MIDIなどで正しく再生することの両方を1つのファイルで両立させています。

なお、次世代フォーマットとしてW3C Music Notation Community GroupはMNXの開発を進めていますが、2026年現在MusicXMLが実務上のデファクトスタンダードです。 学術・研究分野で使われる対抗規格としてはMEI (Music Encoding Initiative)があり、MusicXMLより厳密な音楽学的記述を目的としています。

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ファイルであることを明示するために書いておくのが一般的です。 MusicXML 4.0からはDTDに加えてXML Schema (XSD) による定義も公式に提供されており、より厳密な検証をしたい場合はXSDを使うこともできます。

ファイル形式

MusicXMLには大きく2つのファイル形式があります。

ルート要素

<score-partwise>要素がルート要素です。すべての要素はこの<score-partwise>要素の中に含まれます。 <score-partwise>のほかに<score-timewise>というルート要素もありますが、こちらは小節を主軸に、その中にパートを並べる時間軸優先の構造になっています。

両者は同じ情報を異なる階層順序で表現しているだけで、XSLTによって相互に変換可能です。実際に使われるファイルの大部分は<score-partwise>形式です。

スコアヘッダー

ルート要素の直下、パートの記譜データより前に書かれる部分がスコアヘッダーです。

<work>と<identification>

<defaults>と<credit>

<part-list>

<part-list>要素は楽譜に含まれるパート(楽器・声部)の一覧を定義します。

楽譜データの階層構造

楽譜データの本体は<part>要素の中に記述されます。

<attributes>要素

<measure>要素の先頭には<attributes>要素を置くことができ、その小節以降に適用される調号・拍子・音部記号などを定義します。 Hello Worldの例では次のようになっています。

<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>

divisions

<divisions>は四分音符を何分割するかを表す値で、後述する<duration>の基準単位になります。 たとえばdivisions=4であれば、四分音符のdurationは4、八分音符のdurationは2、十六分音符のdurationは1として表現できます。 divisionsは楽譜中で最小の音価を割り切れる数であれば任意に設定でき、曲の途中で<attributes>を再度置くことで変更することもできます。

key(調号)

<key>は調号を表します。

time(拍子)

<time>は拍子を<beats>(1小節あたりの拍数)と<beat-type>(1拍の音価の分母)の組で表します。 複合拍子や混合拍子は<beats>・<beat-type>の組を複数回繰り返すことで表現できます(<interchangeable>要素を使うと記譜上の見た目を変えつつ実質同じ拍子を示すこともできます)。 拍子記号を数字ではなくシンボルで表示したい場合はsymbol属性でcommon(4/4のC記号)やcut(2/2のC/記号)を指定します。拍子が定まらない曲(グレゴリオ聖歌など)には<senza-misura>を使います。

staves・clef・transpose

staff-details・part-symbol・measure-style

<note>要素

<note>要素は1つの音符または休符に対応し、次のような子要素を持ちます。

<note>
  <pitch>
    <step>C</step>
    <octave>4</octave>
  </pitch>
  <duration>4</duration>
  <type>whole</type>
</note>

音高: pitch・rest・unpitched

音価: duration・type・dot・time-modification

durationは演奏上の長さ、typeは記譜上の見た目という役割分担になっている点がMusicXMLの特徴です。

声部・和音・複数五線: voice・chord・staff

見た目の詳細: stem・notehead・beam・grace

<notations>要素

<notations>要素は、音符に付随する演奏指示や記譜上の装飾をまとめて格納する要素です。主なものは次の通りです。

<lyric>要素

<lyric>要素は歌詞を音符に紐づけます。

<direction>要素

<direction>要素は、テンポや強弱記号、リハーサルマークなど、音符そのものに従属しない演奏指示全般を表します。 <direction-type>の中に、次のような具体的な指示を1つ以上記述します。

<direction>要素はoffset要素によって、記譜上の位置から演奏上のタイミングを微妙にずらすことができます。 また、再生に関わる情報は<sound>要素にまとめられ、<tempo>(1分間の四分音符数)や<dynamics>(演奏音量)などのプレイバック用の値を指定できます。これは見た目としての<metronome>や<direction-type>とは独立した、再生専用の情報です。

<barline>要素

<barline>要素は小節線に関する情報を表します。location属性で小節の左端(left)・右端(right)・中間(middle)のどこにあるかを指定します。

<harmony>要素とコードシンボル

<harmony>要素はギターやポップスの譜面で使われるコードシンボル(和音記号)を表します。

<harmony>は<note>とは独立して小節中に配置され、実際の演奏音とは別に、コード進行の情報を保持する役割を持ちます。

<figured-bass>要素

通奏低音(バロック音楽などで使われる、低音部に数字で和声を指示する記譜)を表す要素です。<figure>の中に<prefix>・<figure-number>・<suffix>を組み合わせて、6や6/4といった数字表記を表現します。

<print>要素とレイアウト情報

<print>要素は改行・改ページや小節番号の表示方法など、視覚的なレイアウトを制御します。

サウンド・再生情報

記譜情報とは別に、MIDI再生などのための情報も定義されています。

<grouping>要素

<grouping>要素は、スラーや連桁のような記譜上の結合とは別に、複数のパートを横断するような音楽的なまとまり(フレーズなど)を抽象的に表すための要素です。type属性でstart/stopを指定し、number属性で複数のグルーピングを区別します。実際の利用頻度は他の要素に比べて低めです。

拡張性

MusicXMLの多くの要素には<other-direction>、<other-notation>、<other-articulation>のような「その他」を表す要素が用意されており、標準で定義されていない記譜法をベンダー独自に拡張する余地が残されています。 また、多くの要素にはprint-object属性(表示するかどうか)やcolor属性、font-family/font-size/font-style/font-weightといった書式属性が共通して用意されており、細かな見た目の調整もXMLレベルで指定できます。

バージョン履歴

まとめ

MusicXMLは「記譜(見た目)」と「演奏(音響)」を明確に分離しつつ1つのファイルに収める設計になっており、<type>と<duration>、<tied>と<tie>のような対を成す要素にその思想が表れています。 階層構造としては score-partwise(またはscore-timewise) > part > measure という入れ子の中に、<attributes>・<note>・<direction>・<barline>・<harmony>などの要素が演奏順に並ぶ、という骨格を理解しておけば、仕様書の各要素の詳細も読み解きやすくなります。

なお、楽譜を画面やページ上に実際に描画するには、ここで定義された記譜情報を五線・音符・記号としてレンダリングする必要があります。そのための音楽フォントの標準規格についてはSMuFLをご覧ください。