MusicXML(4R) 形式について

MusicXML(4R) 形式について
2006年6月2日
野池賢二
目次
• MusicXML と MusicXML(4R) の違い
• 表情情報つきの MusicXML の作り方
• Rencon キットについて
MusicXML とは
• MusicXML とは,XML というデータ表現形式を用いた
「楽譜を記述するための記述仕様」である.主に,西洋
音楽の五線譜やタブ譜を記述することを目的としてい
る
• http://www.recordare.com/
• MusicXML のチュートリアル(入門書)は,
http://www.recordare.com/xml/musicxml-tutorial.pdf
である.楽譜の記述方法についての基本的な事項が
解説されている
• MusicXML の全仕様は,MusicXML の DTD にコメン
トとして書かれている
• http://www.recordare.com/downloads.html#DTD
MusicXML(4R) とは
• MusicXML(4R) とは,MusicXML の仕様のうち,表情
情報の記述方式を MIDI 指向に変更した仕様のこと
• MusicXML の表情情報の記述形式は,チュートリアル
ではなく,DTD にだけ書かれている.(note.dtd)
• MusicXML(4R) の表情情報の記述形式は,
•
•
•
•
Keiji Hirata, Kenzi Noike, and Haruhiro Katayose:
Proposal for a Performance Data Format,
IJCAI-03 Rencon Workshop, 2003.
http://www.brl.ntt.co.jp/people/hirata/Papers/ijcai03-rencon-xml.pdf
• に書かれている
MusicXML の基本構造
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE score-partwise PUBLIC
"-//Recordare//DTD MusicXML 1.0 Partwise//EN"
"http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise>
<part-list>
パート構成の情報
<score-part id="P1">
<part-name>Music</part-name>
</score-part>
</part-list>
パートひとつ分の情報
<part id="P1">
<measure number="1">
小節ひとつ分の情報
<attributes>
四分音符あたりの
<divisions>1</divisions>
時間分解能
<key>
<fifths>0</fifths> 調号の #(+), b(-) の数
</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>
(”Hello World” in MusicXML, MusicXML 1.1
Tutorial,http://www.recordare.com/xml/musicxml-tutorial.pdf,
pp.11-14, 2006. から引用,加筆)
表情情報の記述形式
•
表情情報は,音符や休符の属性値として記述する




•


属性 attack
演奏打鍵時刻の楽譜打鍵時刻からのずれをデルタタイムで記述
属性 release
演奏離鍵時刻の楽譜離鍵時刻からのずれをデルタタイムで記述
属性 dynamics
Note-On Velocity 値をそのまま記述 (MusicXML(4R) 仕様)
属性 end-dynamics
Note-Off Velocity 値をそのまま記述 (MusicXML(4R) 仕様)
dynamics, end-dynamics には,Rencon の現在の聴き比べ用音
源である MIDI 音源に適した表現を用いる
(オリジナルの MusicXML の dynamics, end-dynamics は,
Velocity 値 90 に対する比を記述する (dyn=100/90×Vel))
デルタタイムの基準値は,要素 <divisions> で定義された四分
音符あたりの分解能値
オリジナルの記述形式を修正した理由
•
•
•
•
Velocity 値 90 が,dynamics=“100”
dynamics 値 Dyn と,Velocity 値 Vel の関係は,
Dyn = 100/90 × Vel
Dyn から Vel を逆算したときに,計算誤差によって,もとの
Vel とは異なる可能性がある
• ↓
• 演奏音源が MIDI 音源である場合,Vel の値が 1 異なった
だけで,意図と異なる音波形が使われる可能性がある
• ↓
• エントリ者の音源と聴き比べ用音源とで,意図の異なる音に
なる
弱い音用の音波形
1
強い音用の音波形
Dyn から得た値↑ ↑元の値
Vel = 64
Vel = 65
127
Vel →
MusicXML では曖昧な
属性 release の定義の明確化
音
強
音符の duration は元のまま
+48 遅れて打鍵する
release は,+48 か 0 か?
(attack=“+48”)
時刻
MusicXML:
release=“+48” なのか release=“0” なのか DTD の記述からは曖昧
MusicXML(4R):
release=“+48”
MusicXML(4R)記述例
(a)
dynamics
(b)
+30
-46
112
t
<note dynamics="112" attack="+30" release="-46">
<pitch>
<step>E</step>
<octave>4</octave>
Note-Off Velocity 情報がないときは,
</pitch>
end-dynamics 属性を書かなくてもよい
<duration>960</duration>
<voice>1</voice>
<type>half</type>
<stem>up</stem>
</note>
演奏速度(テンポ)の記述形式



演奏速度は,要素 <sound tempo=“QBPM”>で記述
する
(QBPM: Quarter note Beat / Minute,(例)♩=120)
いつ,どのように記述するのかは,MusicXML(4R)
でも未定義




候補1:曲頭で 1 度だけ記述できるようにする
候補2:小節ごとに記述できるようにする
どちらでも,お互いに,完全に変換可能
実際の使いやすさについては,Kagurame-II が実装して
評価してくださると思われる
表情情報つきの MusicXML の作り方
• 表情情報の編集,演奏,出力ができる既存のソフト
ウェアがない(なさそう)
• 既存のソフトウェアやツールで表情情報なしの
MusicXML を出力しておき,それに対して自作の
ツールで表情情報を付加する方法が簡単
MusicXML を
出力できる
ソフトウェア
(例:Dolet for Finale)
表情情報なし
MusicXML
MusicXML を入力とし,
それに表情情報を
付加するソフトウェア
(例:4Ru)
表情情報つき
MusicXML
2006年5月26現在での
既存の MusicXML 対応ソフトウェア
読み書き
書き出しだけ
読み込みだけ
http://www.recordare.com/software.html
既存のソフトウェアの評価(独断)
• Finale
• Sibelius
–
–
–
–
読み書き対応
GUI
Recordare がプラグインソフト作成に力を入れている
ユーザが多く,よく使われているようだ
• abc ツール群
– 読み込みだけ?
– abc と呼ばれる MML を使ったツール群.コマンドラインツールが多
い
– 京大奥乃研ではよく使っているらしい?
• SCOREMAKER
– 書き出しだけ対応(岡さんに確認済み)
– 河合楽器の楽譜認識ソフト.GUI.
• Igor Engraver
• LilyPond
• Rosegarden
– シェアウェア.GUI.
– 入力(読み込み)だけ対応
MusicXML(4R) に対応した研究ツール
• 4Ru
–
–
–
–
http://noike.info/~kenzi/research/4Ru/4Ru.html
入力,表示,演奏,簡易編集
既存の MusicXML に表情情報を付加することはできる
新規に MusicXML を生成することは(まだ)できない
• xml2mp3
– http://noike.info/~kenzi/cgi-bin/xml2mp3/
– SMF, MP3 に変換
• Kagurame-II
– 芝浦工大の清水 厚志さん,対応作業中
• Ha-Hi-Hun
– 関西学院大学の伊藤洋介さん,対応作業中?
• COPER (対応予定?)
• Yutaka (対応予定?)
MusicXML(4R) 処理プログラミング
• 規模の小さな加工,変換
– XSLT
– SAXによるプログラミング
• 通常の読み書き
– DOM によるプログラミング
• Xerces
– Java, C++, Perl など
• libxml2
– C
Rencon キットについて
• 表情付けコンテスト Rencon のための共通学
習データ,共通評価データのセット
• MusicXML(4R) 形式にて配布予定
– 片寄研 演奏 Deviation DB を変換予定
– 収録曲目未定(ショパン? ドビュッシー?)
• ライブラリ,ツール?
– ピアノロール表示 Java Applet
– ???
直近での Rencon 開催が可能な機会
• 8 月 SIG-MUS の若手デモセッション
• 10 月 CrestMuse デモ
• MusicXML(4R) に対応した演奏表情付けシステ
ムが複数あれば,同じ楽譜データに対する表情付
けコンテストが試行できる
– Kagurame-II は,境界情報 XML を手書き追加すれば,
可能になるらしい
– Ha-Hi-Hun は?
– COPER は?
– Yutaka は?
おわりに
• Rencon キットの記述形式である MusicXML(4R)
の仕様を,MusicXML との違いという観点で述べ
た
メモ
XML 仕様差異図
オリジナルの MusicXML
表情情報の dynamics, end-dynamics
属性に,MIDI Velocity 90 を 100(%) と
したときの比の値を書く.
Dolet for Finale (MusicXML Plug-in)
MusicXML 仕様のサブセットが読み書き
できる(一部のタグや属性に見対応).
表情情報の編集,表示,それを反映した
演奏ができない
MusicXML(4R)
表情情報の dynamics, end-dynamics
属性に MIDI Velocity 値をそのまま書く.
release 属性の仕様を厳密に定めてあ
る.
dynamics, end-dynamics
音
強
四分音符
MIDI Velocity 64
時刻
MusicXML:
dynamics=“71”
dyn = 100/90 × Vel = 71.111… ≒ 71
MusicXML(4R): dynamics=“64”
attack, release
メトロノーム速度 ♩=120 (♩=500msec.) で division = 480 とすると,
音
強
四分音符
500msec
100msec
MusicXML: attack=“+48”
release=“+48” なのか release=“0” なのか曖昧
(「flow of duration に基づく音符の stop time」に対して
複数通りの解釈が可能)
MusicXML(4R): attack=“+48” release=“+48”
時刻