ソフトのデザイン上避けるべき点
楽譜作成ソフトによる出来栄えが十分で、お守りの必要が無いとしたら素敵です。 LilyPondの目的はそういうシステム、美しい楽譜("譜面")を自動的に作るプログラム、を作ることでした。
ちょっと見には、楽譜の記譜は直線的な階層構造に従います。 次の2小節からなる2段譜の例を見てみましょう。
ソフトを書くということは階層構造を見つけ、現実世界を木構造でモデリングすることじゃ無かったでしょうか? 単純なプログラマーにとっては、上の楽譜の断片は安直に入れ子になった箱に抽象化されます。
<score>
<staff>
<measure id="1">
<chord length="1/2">
<pitch name="c">
</chord>
<chord>
....
</measure>
</staff>
</score>
端的に、このモデルは明白で簡単、すっきりしています。 多くのソフトで使われているフォーマットです。しかし残念ながら、それは間違っています。 多くの単純な音楽には、階層構造による表現が使えますが、高度なものだと破綻します。 次の事例を考えてみましょう。
この例では、前述のモデルのいくつかの仮定が崩れています。 段が途中で終わったりまた始まったりしていますし、声部が違う段に移動したり、時々2つの段に跨っています。
音楽の記譜は、音楽そのものとは大変違います。 楽譜は音楽の概念を視覚化する為の記号図式による言語で、簡単な音楽を表すのに複雑な表現になることがしばしばあります。 ですので、ソフトはこの2つの違いを反映する必要があります。
次は分割と統治、自動楽譜作成の設計図。