問題
LilyPondを使用して、教会の合唱団が演奏する楽譜をタイプセットしています。週に誰が利用できるかに応じて、曲はさまざまなキーで再生されます。私たちには、何でも演奏できる素晴らしいピアニストがいて、ギタリストはたいてい別のコードを鉛筆で書きます。
では、いろはを歌うとしましょう。まず、利用可能なソース トランスクリプションをすべて取得し、それを LilyPond スクリプトに入力します。
melody = \relative c' {
c c g g
a a g2
f f e e
d d c2 }
これを自動的に移調する機能が必要なので、すべてを 'G' にしたい場合は、次のように \transpose 呼び出しで曲をラップします。
melody = \transpose c g \relative c' {
c c g g
a a g2
f f e e
d d c2 }
私が本当に欲しいのは、「g」を何かに置き換えて、メロディーの出力を複数回生成することです。単純な LilyPond 変数はここでは機能しないようです。これまでのところ、これを行うためのスキーム関数を定義することに成功していません。
今のところ私が頼っているのは、上記のファイルを取得して、twinkle.ly と呼び、twinkle.ly.m4 という名前の M4 スクリプトに変換することです。その内容は次のようになります。
melody = \transpose c _key \relative c' {
c c g g
a a g2
f f e e
d d c2 }
次に、次の行を実行して while をコンパイルします。
> m4 -D _key=g twinkle.ly.m4 > twinkle_g.ly && lilypond twinkle_g.ly
これを行うための Makefile を作成し、持っているすべての曲と関心のあるすべてのキーのルールを定義しました。
質問 これについてもっと良い方法があるはずです。Lilypond が組み込みスキームをサポートしていることを考えると、Lilypond で前処理されたマクロを使用したくないと思います。他の誰かがこの同じ問題の解決策を思いつきましたか?