16

問題

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 で前処理されたマクロを使用したくないと思います。他の誰かがこの同じ問題の解決策を思いつきましたか?

4

3 に答える 3

20

melody 変数を参照して、目的のキーに移調できます。

melody = \relative c' { c8 ece g4 g }
\スコア {
  \transpose cd \melody
}
\スコア {
  \transpose ce \melody
}
%など

転置を別のファイルとして出力したい場合は、それらを \book ブロックに埋め込みます。

于 2009-05-08T08:27:09.350 に答える