问题
我正在使用 LilyPond 排版供教堂唱诗班表演的乐谱。 根据每周有空的人员,歌曲将以不同的调进行播放。我们有一位出色的钢琴家,她可以演奏我们向她扔的任何东西,而吉他手通常会用铅笔写出替代和弦,但我想通过提供我们想要的任何调的精美排版乐谱来让事情变得更容易。
所以说我们要唱我们的ABC。 首先,我将获取任何可用的源转录并将其输入 LilyPond 脚本中:
melody = \relative c' {
c c g g
a a g2
f f e e
d d c2 }
我希望能够自动转置它,所以如果我想要“G”中的整个内容,我会将歌曲包装在转置调用中,如下所示:
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 支持嵌入式方案,我宁愿不使用对其进行预处理的宏。 有其他人想出解决同样问题的方法吗?
您可以引用旋律变量并将其移调到所需的调中:
旋律= 相对 c' { c8 e c e g4 g } \分数 { 转置 c d \旋律 } \分数 { 转置 c e \旋律 } % ETC。
如果您想将转置输出为单独的文件,请将它们嵌入到 ook 块中。
如果您想创建同一片段的两份副本,一份转置,一份未转置,您可以使用
\displayLilyMusic
。例如,
{
\displayLilyMusic \transpose c a, { c4 e g a bes }
}
将会显示
{ a,4 cis e fis g }
复制此输出并将其粘贴到您想要的任何位置。
使用免费的 Frescobaldi 编辑器用于 lilypond。 它提供了强大的转置工具。
这是我的方法。为您感兴趣的每个目标键定义一些文件。例如:
target_key = bes
\include "init.ly"
你的分数:
\transpose \tonality c ...
然后你可以像这样调用 Lilypond :
lilypond --init=c.ly --output=score_bes score.ly
make 规则可能如下所示:
%_bes.pdf: %.ly bes.ly
lilypond --init=bes.ly --output=$*_bes $<