MusicXML 再び (3)

次に,音符や休符などを実際に指定していく Note ブロックについてみていきます.

Note ブロック

Note ブロックはかなり複雑です.note 自体にいくつかの属性値を書くことができるようですが,ひとまずは使わずに譜面が書けるようなので,ここでは割愛します.また Notes ブロックの中に記述できるブロックは数多くあり,全部見るのは大変のようです.

  • pitch/unpitched/rest: いずれかひとつだけを必ず書かなければなりません.pitch を記述すると音符に,rest を記述すると休符になります.unpitched は打楽器などの音程のない音符を記述するために使います.
  • duration: 音符または休符の長さを自然数で指定します.基準となる音符の長さは attributes の divisions で指定した数に依存します.詳しくは attributes の項目を参照してください.このブロックは必ず記述しなければなりません.
  • tie: タイの開始,終了を指示します.
  • type: 音符または休符を表示するとき,どの種類の音符として表示するかを指定します.例えば,全音符,二分音符,四分休符などを指定します.
  • dot: 付点をつけます.
  • accidental: 音符の前につける嬰・変記号などを指定します.
  • time-modification: 表記の音符と実際に演奏される音符の長さが違うときに使うようです.
  • stem: 桁をつける方向(上か下か)を指定します.
  • notehead: 音符の玉の形を指定します.
  • beam: 連桁の形や横線の本数などを指定します.
  • notations: 音符に付帯して表示するスタッカート,スラー,フェルマータなどの装飾記号の指定を行います.
  • staff: 1つのパートが複数の五線譜に分かれているとき,何番目の五線譜に音符を書くかを指定します.
  • lyric 歌詞の表示に使います.

	
		C
		4
	
	4
	whole

この中から,ひとまずよく使いそうなブロックについてだけ見ていくことにしましょう.

pitch

pitch では音程を指定します.音程は,音名 (step) とオクターブ (octave) で指定するようになっています(いずれも必須です).step としては C, D, E, F, G, A, B からいずれかを,オクターブとしては 0 から 9 までの値を指定できます.ピアノでいうところの真ん中のドは,オクターブ 4 の C の音になります.


	C
	4

このほかに alter というブロックで,変や嬰の音を指定できます.具体的には -1 で変,1 で嬰を指定したことになります.ただ,この alter ブロックではあくまで演奏する音として,シャープやフラットをつけた音を出すという意味であって,画面上にシャープやフラットを表示させるには accidental で別途指定しないといけないようです(おそらく).また pitch は調性の影響を受け,alter で -1 や 1 を指定しなくとも,演奏するときは自動的に調性にあった音として演奏されます(されるように実装しないといけない,ということでしょう).

rest

rest では休符を表示すべき位置を,音程で指定します.具体的には display-step ブロックで,音名 (C, D など) で指示します(必須).オクターブも変えたい場合は display-octave ブロックでさらに指定することもできます.


	G

duration

音符,または休符の長さを指定します.divisions で4分音符の長さをあらわす数字を指定しておき,duration でその何倍の長さの音符であるかを指定します.たとえば divisions が 4 なら,duration が 4 に指定されている note が四分音符です.この場合,duration が 2 なら八分音符,1 なら十六分音符となり,三十二分音符の長さは表現できません.divisions を 8 に指定しておくと,四分音符が duration 8, 八分音符が duration 4 となり,三十二分音符は 1 となります.このとき,二分音符は duration 16, 全音符は 32 です.付点四分音符は 6 です.三連符を表したければ,最初から divisions を 3 の倍数にしておかなければなりません.divisions を 12 にしておけば,duration 3 が十六分音符で,duration 4 なら三連符相当の長さになります.

このことから,少なくとも曲に出てくる「最小の長さの音符」の長さをあらかじめ把握しておく必要があることがわかります.また,三連符がある場合はあらかじめ divisions を 3 の倍数にしておかなければなりません.五連符があれば,5 の倍数にする必要があります.このあたりは結構面倒ぽいです.何か回避方法はあるかもしれませんが・・

4