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つのファイル形式があります。
- 非圧縮形式(拡張子.xml / .musicxml): これまで見てきたような、テキストのXMLファイルそのものです。
- 圧縮形式(拡張子.mxl): XMLファイルをZIPコンテナに格納した形式です。ZIPの中には本体のXMLファイルに加えて、どのファイルが本体かを示す<container.xml>というファイルがMETA-INF/container.xmlというパスで格納されます。画像などのリソースを同梱できる利点があり、配布用のファイルとしてはこちらが広く使われています。
ルート要素
<score-partwise>要素がルート要素です。すべての要素はこの<score-partwise>要素の中に含まれます。 <score-partwise>のほかに<score-timewise>というルート要素もありますが、こちらは小節を主軸に、その中にパートを並べる時間軸優先の構造になっています。
- <score-partwise>: part > measure > note の順に階層化(パート優先)
- <score-timewise>: measure > part > note の順に階層化(小節優先)
両者は同じ情報を異なる階層順序で表現しているだけで、XSLTによって相互に変換可能です。実際に使われるファイルの大部分は<score-partwise>形式です。
スコアヘッダー
ルート要素の直下、パートの記譜データより前に書かれる部分がスコアヘッダーです。
<work>と<identification>
- <work>: 作品情報を表します。作品名を表す<work-title>や作品番号を表す<work-number>などを持ちます。
-
<identification>: 作品のメタ情報を表します。
- <creator>: 作曲者・編曲者・作詞者などをtype属性(composer, arranger, lyricistなど)で区別して記述します。
- <rights>: 著作権表示。
- <encoding>: どのソフトウェアでいつ変換されたかを表す<software>や<encoding-date>、対応している機能を示す<supports>などを持ちます。
-
: 原典・底本の情報。 - <miscellaneous>: 上記に当てはまらない任意の付加情報。
<defaults>と<credit>
- <defaults>: 楽譜全体のデフォルトの見た目を定義します。<scaling>(五線の実寸とミリメートル換算)、<page-layout>、<system-layout>、<staff-layout>、<music-font>や<word-font>などのフォント指定を含みます。
- <credit>: 楽譜の表紙・各ページに印字される任意のテキスト(タイトル、作曲者名、ページ番号など)の内容と配置位置を表します。<credit-type>で種類(title, composer, rightsなど)を区別できます。
<part-list>
<part-list>要素は楽譜に含まれるパート(楽器・声部)の一覧を定義します。
- <score-part>: 1つのパートに対応する要素で、id属性で各<part>要素と対応付けます。パート名を表す<part-name>、パート略称を表す<part-abbreviation>、使用する楽器情報を表す<score-instrument>、再生用のMIDI情報を表す<midi-instrument>などを持ちます。
- <part-group>: 複数のパートをブレース(ピアノの大譜表など)やブラケット(弦楽器セクションなど)でまとめて表示するための要素です。symbol属性でbrace・bracket・line・squareなどのグループ記号の種類を指定し、number属性で開始(start)と終了(stop)のペアを対応付けます。
楽譜データの階層構造
楽譜データの本体は<part>要素の中に記述されます。
- <part>要素は複数存在することができ、各パートごとに1つずつ<part>要素が対応します。id属性で<part-list>内の<score-part>と対応付けられます。
- <part>要素の中には<measure>要素があり、各小節ごとに1つずつ<measure>要素が対応します。number属性で小節番号を持ち、implicit="yes"を指定すると弱起(アウフタクト)の小節のように、小節番号のカウントに含まれない小節として扱えます。
- <measure>要素の中には、後述する<attributes>・<note>・<direction>・<barline>などの要素が、演奏順に並びます。
<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>は調号を表します。
- 一般的な調号(五度圏で表現できる調)は<fifths>で表します。0はハ長調/イ短調、正の値は#系(1=ト長調、2=ニ長調...)、負の値は♭系(-1=ヘ長調、-2=変ロ長調...)の調号を表します。<mode>を併記すると長調・短調などの旋法を明示できます。
- 五度圏で表現できない非通例的な調号(旋法や特殊な調号)は、<key-step>・<key-alter>・<key-accidental>の組を繰り返すことで、変化させる音とその変化量を1つずつ列挙して表現します。
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
- <staves>: そのパートが持つ五線の数を表します。ピアノパートのように1つの<part>が大譜表(ト音記号とヘ音記号の2段)を持つ場合に2を指定します。
- <clef>: 音部記号を<sign>(G, F, C, percussion, TABなど)と<line>(五線上の位置)の組で表します。numberを指定すると<staves>で分かれた各五線のどれに適用するかを指定できます。
- <transpose>: 移調楽器(クラリネットやホルンなど)について、記譜されている音と実際に鳴る音の差を<diatonic>・<chromatic>・<octave-change>で表します。
staff-details・part-symbol・measure-style
- <staff-details>: 五線の本数やタブ譜の弦数・チューニングなど、五線の詳細を定義します。
- <part-symbol>: <part-group>とは別に、単一パート内の大譜表に表示する連結記号を指定します。
- <measure-style>: 反復記譜(演奏効果は同じだが記譜を簡略化する表記)を指定します。<multiple-rest>(複数小節休止の1段まとめ表示)、<measure-repeat>(前の小節の繰り返し記号)、<beat-repeat>(拍単位の繰り返し記号)、<slash>(リズムスラッシュ記譜)などがあります。
<note>要素
<note>要素は1つの音符または休符に対応し、次のような子要素を持ちます。
<note>
<pitch>
<step>C</step>
<octave>4</octave>
</pitch>
<duration>4</duration>
<type>whole</type>
</note>
音高: pitch・rest・unpitched
- <pitch>: 音高。<step>(音名A-G)、<alter>(半音単位の変化量。#なら1、♭なら-1。省略可)、<octave>(オクターブ番号。中央ハを含むオクターブが4)から構成されます。
- <rest>: 休符であることを示します。<pitch>と排他的で、<note>の中に<rest/>があれば休符、<pitch>があれば実音として扱われます。measure属性をyesにすると全休符(小節を丸ごと休む)として扱われます。
- <unpitched>: 打楽器譜のように、特定の高さを持たない音符の五線上の見た目上の位置を<display-step>・<display-octave>で表します。
音価: duration・type・dot・time-modification
- <duration>: 音符の長さ。<attributes>で定義した<divisions>を基準単位とした整数値で表します。上の例ではdivisions=1なので、duration=4は全音符に相当します。休符でない和音の追加音(<chord/>を持つ音符)にもdurationは必要です。
- <type>: 音符の見た目上の種類(whole, half, quarter, eighth, 16thなど)を表します。durationとは独立した情報で、記譜上の表示のために使われます。
- <dot>: 付点を表します。複付点の場合は<dot/>を2つ並べます。
- <time-modification>: 連符を表すための要素で、実際に記譜される音符数を表す<actual-notes>と、その音価が本来占めるべき音符数を表す<normal-notes>の比率で表現します。たとえば3連符は<actual-notes>3、<normal-notes>2となり、8分音符3つで4分音符2つ分の時間を占めることを示します。
durationは演奏上の長さ、typeは記譜上の見た目という役割分担になっている点がMusicXMLの特徴です。
声部・和音・複数五線: voice・chord・staff
- <voice>: 声部番号を表します。同じ<measure>の中で複数の声部(たとえばソプラノとアルトが同じ譜面上に書かれる場合など)を区別するために使われます。
- <chord/>: この音符が直前の音符と同時に鳴る和音の構成音であることを示します。<duration>は省略できず、和音を構成する各<note>すべてに同じ長さを記述します。
- <staff>: <staves>で複数の五線を持つパートにおいて、この音符がどちらの五線に属するかを表します。
見た目の詳細: stem・notehead・beam・grace
- <stem>: 符尾の向き(up/down/double/none)を表します。
- <notehead>: 符頭の形(normal, x, triangle, diamondなど)を指定します。パーカッション譜や特殊記譜法で使われます。
- <beam>: 連桁(八分音符以降をつなぐ横線)の描画方法を、begin(開始)・continue(継続)・end(終了)・forward hook / backward hook(部分連桁)というvalueで音符ごとに指定します。numberでレベル(何段目の連桁か)を区別します。
- <grace/>: 装飾小音符(前打音・後打音)であることを示します。slash属性をyesにすると斜線付きの装飾小音符(アッチャカトゥーラ)になります。装飾小音符は<duration>を持たず、演奏上の時間を消費しません。
<notations>要素
<notations>要素は、音符に付随する演奏指示や記譜上の装飾をまとめて格納する要素です。主なものは次の通りです。
- <tied>: タイの見た目上の表示(start/stop/let-ring)。演奏上の結合を表す<note>直下の<tie>要素とは独立しており、<tie>は再生用、<tied>は記譜用という役割分担になっています(durationとtypeの関係と同じ考え方です)。
- <slur>: スラー(タイと異なり、異なる高さの音符をなめらかに演奏する指示)。
- <tuplet>: 連符の括弧・数字の表示。<time-modification>が演奏上のデータであるのに対し、<tuplet>は見た目の表示を制御します。
- <articulations>: スタッカート(<staccato/>)、アクセント(<accent/>)、テヌート(<tenuto/>)など。
- <ornaments>: トリル(<trill-mark/>)、ターン(<turn/>)、モルデント(<mordent/>)など。
- <technical>: 楽器固有の奏法指示。運指(<fingering>)、弦(<string>)、ハーモニクス(<harmonic/>)、ピック方向(<up-bow/>・<down-bow/>)、タブ譜のフレット(<fret>)など。
- <dynamics>: 強弱記号(<f/>, <p/>, <mf/>など)。<direction>要素内の<dynamics>とほぼ同じ内容を、特定の音符に直接紐づけたい場合に使います。
- <fermata>: フェルマータ。
- <arpeggiate/>と<non-arpeggiate/>: 和音のアルペジオ奏法の指示。
- <glissando>と<slide>: 滑らかな音高変化の指示。
<lyric>要素
<lyric>要素は歌詞を音符に紐づけます。
- <syllabic>: この音節が単語の中でどの位置にあるか(single, begin, middle, end)を表し、ハイフンの表示を制御します。
- <text>: 歌詞のテキスト本体。
- <elision>: 1音符に複数音節をつなげて歌う場合(母音融合など)の連結記号。
- <extend>: 歌詞の母音を伸ばす指示(タイの下に引く伸長線)。
<direction>要素
<direction>要素は、テンポや強弱記号、リハーサルマークなど、音符そのものに従属しない演奏指示全般を表します。 <direction-type>の中に、次のような具体的な指示を1つ以上記述します。
- <rehearsal>: リハーサルマーク(A, B, 1, 2など)。
- <segno>と<coda>: セーニョ・コーダ記号。
- <words>: フリーテキストによる指示(rit., accel., dolceなど)。
- <dynamics>: 強弱記号。
- <wedge>: クレッシェンド・デクレッシェンドを表すくさび線。
- <dashes>と<bracket>: 破線・角括弧による範囲指定(rit.の範囲などを示す)。
- <pedal>: ピアノのペダル指示。
- <metronome>: メトロノーム記号によるテンポ表示。
- <octave-shift>: オクターブ記号(8va, 8vbなど)による移調範囲の指定。
- <harp-pedals>、<damp>、<scordatura>、<accordion-registration>、<staff-divide>など、特定楽器のための指示。
<direction>要素はoffset要素によって、記譜上の位置から演奏上のタイミングを微妙にずらすことができます。 また、再生に関わる情報は<sound>要素にまとめられ、<tempo>(1分間の四分音符数)や<dynamics>(演奏音量)などのプレイバック用の値を指定できます。これは見た目としての<metronome>や<direction-type>とは独立した、再生専用の情報です。
<barline>要素
<barline>要素は小節線に関する情報を表します。location属性で小節の左端(left)・右端(right)・中間(middle)のどこにあるかを指定します。
- <bar-style>: 小節線の見た目(light-heavy=終止線、light-light=二重線、heavy-light、dashed、dottedなど)。
- <repeat>: 反復記号。direction属性でforward(繰り返し開始)/backward(繰り返し終了)を指定し、backwardの場合times属性で繰り返し回数を指定できます。
- <ending>: 反復括弧(1回目・2回目で異なる小節を演奏する記譜)。number属性で括弧の番号、type属性でstart/stop/discontinueを指定します。
- 小節線上に置かれたセーニョ・コーダ・フェルマータも<barline>内の要素として表現されます。
<harmony>要素とコードシンボル
<harmony>要素はギターやポップスの譜面で使われるコードシンボル(和音記号)を表します。
- <root>: 根音を<root-step>・<root-alter>で表します。
- <kind>: 和音の種類(major, minor, dominant, augmented, diminished, suspended-fourthなど)を表します。
- <bass>: オンコード(分数コード)のベース音。
- <degree>: テンションノートの追加(add)・変更(alter)・削除(subtract)を表します。
- : ギターのフレットダイアグラム(押弦位置)を表します。
<harmony>は<note>とは独立して小節中に配置され、実際の演奏音とは別に、コード進行の情報を保持する役割を持ちます。
<figured-bass>要素
通奏低音(バロック音楽などで使われる、低音部に数字で和声を指示する記譜)を表す要素です。<figure>の中に<prefix>・<figure-number>・<suffix>を組み合わせて、6や6/4といった数字表記を表現します。
<print>要素とレイアウト情報
<print>要素は改行・改ページや小節番号の表示方法など、視覚的なレイアウトを制御します。
- <page-layout>・<system-layout>・<staff-layout>: それぞれページ・システム(段)・五線ごとのマージンや間隔を定義します。<defaults>内で楽譜全体のデフォルト値を、個々の<print>要素で小節ごとの上書き値を指定できます。
- new-system属性・new-page属性: この小節から改行・改ページを行うかどうかを明示的に指定します。
- <measure-numbering>: 小節番号をどの小節に表示するか(none, measure=毎小節, system=段の先頭のみ)を指定します。
サウンド・再生情報
記譜情報とは別に、MIDI再生などのための情報も定義されています。
- <score-instrument>と<midi-instrument>: <part-list>内で楽器の音色(MIDIプログラム番号<midi-program>)やチャンネル、パン(<pan>)、音量(<volume>)などを定義します。1つのパートが複数の楽器(打楽器セットなど)を持つ場合、<midi-instrument>を複数記述しid属性で<note>から参照します。
- <sound>要素: 前述の通りテンポや強弱の再生値を指定します。tempo属性やdynamics属性のほか、特定の楽器だけを鳴らす/消音する<midi-instrument>内のplayback関連の指定と組み合わせて使われます。
<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レベルで指定できます。
バージョン履歴
- 1.0(2004): Recordareにより発表。
- 1.1〜2.0(2005-2007): DTDベースでの機能拡張。
- 3.0(2011): MakeMusicによる管理下で、打楽器・タブ譜・レイアウト関連の機能を強化。
- 3.1(2015): W3C Music Notation Community Groupへ管理移管後、最初のマイナーリリース。
- 4.0(2021): W3Cコミュニティグループ勧告として公開。XML Schemaの正式サポート、既存要素の整理などを実施。
まとめ
MusicXMLは「記譜(見た目)」と「演奏(音響)」を明確に分離しつつ1つのファイルに収める設計になっており、<type>と<duration>、<tied>と<tie>のような対を成す要素にその思想が表れています。 階層構造としては score-partwise(またはscore-timewise) > part > measure という入れ子の中に、<attributes>・<note>・<direction>・<barline>・<harmony>などの要素が演奏順に並ぶ、という骨格を理解しておけば、仕様書の各要素の詳細も読み解きやすくなります。
なお、楽譜を画面やページ上に実際に描画するには、ここで定義された記譜情報を五線・音符・記号としてレンダリングする必要があります。そのための音楽フォントの標準規格についてはSMuFLをご覧ください。