楽譜XMLを策定する 2 (音程)

前回は楽譜の横軸について考えてみたので、今回は縦軸について。
楽譜では縦軸を音程と考えて線一本分が一音という間隔となる。間に入れると半音階。ということで、半音階を基準にXMLで持てば良いことになる。ではどのように表現するのが好ましいのか。
MIDIでは基準の音を決めてノート名+オクターブ数という表記となっている。「C3」が中心で「E1」とか「F5」といった具合。ただし、これは音名表記であってシステム的には「C3=60」となっていて数字で管理されている。
そもそも楽譜では音程の限界がない。紙面の許す限り上にも下にも無限に音程を表記できる。これをシミュレートするなら基準音からプラスマイナスが現実的かと思われる。つまり、ト音記号の楽譜で中心のドといえばピアノではここという位置付けが決まっているので、そのポイント(MIDIでいうC3)を0として、あとは半音階にプラスマイナスで表現する。
例えば、中心のドから始めてミ・ソ・ドと上昇で続く場合は以下のような具合。

0  >  4  >  7  >  12
C  >  E  >  G  >  C

逆に下降での場合は以下の具合となる。

0  > -5  > -9  > -12
C  >  G  >  E  >  C

これならばシステム的に見てもIntegerのキャパだけの音程を保持できるので実際の楽譜とほぼ同等の機能を提供できる。
只、この案を採用するとXMLを見たときにどの音程か直感的にわからない。常にツールか対応表かで変換を行わないと理解できない。これは問題だと考える。では、MIDIの「C3」という表記のような発想で、中心を0にすればどうか。仮に上の下降の例を表現してみると以下のようになる。

C0 > G-1 > E-1 > C-1
C  >  G  >  E  >  C

判り難い。マイナスなのかハイフンなのか判らない。ノート名と音程は別に切り分けたほうが良いかもしれない。例えば、以下のようなXMLで表現してみる。

<note name="C" octave="0"/>
<note name="G" octave="-1"/>
<note name="E" octave="-1"/>
<note name="C" octave="-1"/>

これでは半音階が表現できないので、シャープ・フラット・ナチュラル(ダブルシャープやダブルフラットも同様の要領なので今は割愛)に相応する変化記号を別の属性として持つ。上の下降の例を半音上げで表現すると以下のようになる。

<note accidental="#" name="C" octave="0"/>
<note accidental="#" name="G" octave="-1"/>
<note name="F" octave="-1"/>
<note accidental="#" name="C" octave="-1"/>

フラットは「b」で良さそうだけど、ナチュラルをどのような文字で表現するべきか判らない。只、まだまだ概念レベルの話なので文字コードの選択は保留するとして、この要領でいけば同音でもシャープなのか調に沿っているので変化記号が不要なのかというような区別がつくし、XMLを直接みても判りやすい。音程をプラスマイナスで表現することにはどうしても違和感があるけれど、代替案が今のところ思い付かない。

コメントする

メールアドレスが公開されることはありません。