いわゆる楽譜エディタも、作る必要がある。リアルタイム録音での譜面入力は今のところ考えていない。
それができるようなら、クラビノーヴァのお部屋を借りろって話だw
あくまで、RPPの補助ツール的位置づけで考えている・・・
音符貼り付け型のスコアエディターでピアノロールはひとまず考えない。
画面の中で・・・
五線をひいて・・・底に音符を貼り付けていく・・・
まず、全音符とか、2分音とか、音符一つ一つを入力するだけなら簡単なんだよなぁ・・・
しかし、和音入力とか、連符の連桁などを考えるととたんに難しくなる・・・
どうしたモノか・・・
もっといえば、符尾の長さにも色々ルールがあるらしい。基本は1オクターブ分だが、それが音階によっては短くなったり長くなったりする。
さらに、基本8分音符の連符の下に2分音符がいたりするやつもあったりする。
まー市販のMIDIシーケンサーでも、そのあたりの入力が思うようにできない場合も結構あるのだが・・・
別にFINALEのような美しい楽譜を作ることを目指しているわけでもないのだが・・・
なんか上手いこと考えられないモノか考えてしまうわけである・・・
たとえば、楽譜を作るマークアップ言語を考えてみる・・・
単独の音符は・・・
L1920 全音符
L1440 付点2分音符
L960 2分音符
L720 付点4分音符
L480 4分音符
L360 付点8分音符
L240 8分音符
L180 付点16分音符
L120 16分音符
L90 付点32分音符
L60 32分音符
L0 は同じ長さのステップタイムを持つ和音とする
単独音の場合はS{}で表現する
Cn{}で囲むとそこは連符になるとする。nはその合計のステップタイム
単独の音符の場合はなにも付けない
音階番号はN0~N127までを想定する
大文字も小文字も区別しないものとする。
A4=N69だ
G4=N67
F4=N65
E4=N64
D4=N62
C4=N60
休符はN0とする
楽符の音符の並びは基本的には次の音符までのステップタイムを意味する。
発音時間の長さをダイレクトに表現することは少ない。
表記上、ゲートタイムは表示しないモノと考える。
Rn{}はレイヤーでnはレイヤーの番号を意味する。番号は0が一番上に見えて、それよりも下の場合は休符を表示させないモノとする。
Rn{}の中では必ず、音符と休符で合わせて拍子が帳尻を合うようにしなければならない。
ある一小節を表現する
R0{L480n60L0n64L0n67 L240n60L0n64L0n67 L240n60L0n64L0n67 L480n0
C480{L160n60L160n64L160n67}}
R1{L960 n72 L960 n0}
とりあえず、これで
タイは+で表現する。
たとえば4分音符と16分音符のタイは
L480n60+L120n60
で表現する。
C480{L160n60L160n64L160n67}
符尾の長さは各音階毎にデフォルト値を決めておく。
やはり連符のアタマとおしりの音符については符尾の長さを指定できるものとするが、基本はデフォルトの符尾の長さを適用する。
正の数値は上向きの、負の数値は下向きを意味するとする・・・
こんなイメージを作って仕様書にまとめてみようと思っているが...なかなか形にならない・・・
プログラムにする場合には音符ごとに構造体変数としてこれらの値を持つことになるとは思う。
なんかアタマが過熱してきたから考えるのはやめる。