问题
我正在使用LilyPond为教堂合唱团排版乐谱。根据在任何给定星期有空的人,歌曲将以不同的键播放。我们有一位了不起的钢琴家,可以弹奏我们扔给她的任何东西,吉他手通常会在交替和弦上用铅笔画,但我想通过在我们想要的任何键上提供精美的排版乐谱来让事情变得更容易。
所以说我们要唱我们的ABC。首先,我将获取任何可用的源转录并将其输入到 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 支持嵌入式方案,我宁愿不使用对其进行预处理的宏。有没有其他人想出解决同样问题的方法?