将LilyPond源文件自动转换为多个键的最佳方法是什么?

时间:2009-04-28 21:10:32

标签: scheme m4 lilypond typesetting music-notation

问题

我正在使用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支持嵌入式方案,我宁愿不使用预处理的宏。还有其他人想出解决同样问题的方法吗?

3 个答案:

答案 0 :(得分:19)

您可以参考旋律变量并将其转换为所需的键:

melody = \relative c' { c8 e c e g4 g }
\score {
  \transpose c d \melody
}
\score {
  \transpose c e \melody
}
% etc.

如果要将转置输出为单独的文件,请将它们嵌入\ book blocks。

答案 1 :(得分:3)

如果要创建同一片段的两个副本,一个转置而另一个不转换,则可以使用\displayLilyMusic。例如,

{
  \displayLilyMusic \transpose c a, { c4 e g a bes }
}

将显示

{ a,4 cis e fis g }

复制此输出并将其粘贴到您想要的任何位置。

答案 2 :(得分:0)

使用免费Frescobaldi editor for lilypond。 它提供了强大的换位工具。