文章开头第一句加入:本文已参与「新人创作礼」活动,一 起开启掘金创作之路。
2.4.1 (定义变量) Organizing pieces with variables
与可视化打谱软件相比LilyPond更像一种脚本编程语言。LilyPond具备了定义、引用变量的特性。通过使用变量可以是使我们的乐谱具有更强的可读性,同时使用变量可以避免对于重复的音乐片段进行反复编写。
我们可以 变量名 = { 音乐片段 } 的格式来定义变量 使用 \变量名来引用变量。
violin = \new Staff {
\relative {
a'4 b c b
}
}
cello = \new Staff {
\relative {
\clef "bass"
e2 d
}
}
在上面一段代码中,我们定义了violin 、cello 两个变量而当我们编译上面一段代码的时候,并没有输出任何乐谱
这是因为变量没有被引用,下面我们修改代码
violin = \new Staff {
\relative {
a'4 b c b
}
}
cello = \new Staff {
\relative {
\clef "bass"
e2 d
}
}
%开始引用变量
{
<<
\violin
\cello
>>
}
我们得到了输出的乐谱
现在我们要使用变量输入下面一段乐谱
我们会发现,被标注的区域,在两个小节中,反复出现了8次,因此我们可以通过定义变量来完成乐谱
tripletA = \relative {%定义三连音(图片中标注的片段)
\tuplet 3/2 { c'8 e g }
}
barA = { %定义第一小节,引用变量tripletA
\tripletA \tripletA \tripletA \tripletA
}
{%定义乐谱,引用小节
\barA \barA
}
当然变量还有更多的用处例如:
myWidth = 60 % 定义一个变量,来储存智障宽度
myName = "Wendy" % 定义一个变量,来储存上标
aFivePaper = \paper { #(set-paper-size "a5") }%定义纸张类型
\paper {
\aFivePaper
line-width = \myWidth
}
{
c4^\myName
}
2.4.2 设置标题 (Adding titles)
title : 乐谱标题,composer:作曲家 ,opus:作品编号等信息,需要编写在 \header{...} 中,通常 \header 模块被写在 \version 的下一行
\version "2.22.2"
\header {
title = "我的乐谱"
composer = "xxx"
opus = "Op. 9"
}
\relative{
c'' d e f
}
更多乐谱头信息请参考官方手册: Creating titles headers and footers
2.4.3 使用固定音高 (Absolute note names)
在之前的案例中,我们一直使用 \relative 模式来撰写乐谱,当我们不再写入\relative命令后,音符就变成了绝对音高模式,即: c'指定为中央C(middle C)以此类推 d' 就被指定为比 c'高两个半音的d'。
{
\clef "bass"
c'4 b g, g, |
g,4 f, f c' |
}
在使用固定音高模式撰写高音谱时,我们需要为几乎每个音写入 ' 这样书写很不美观,而且容易使人感到混乱。
{
\key a \major
\time 6/8
cis''8. d''16 cis''8 e''4 e''8 |
b'8. cis''16 b'8 d''4 d''8 |
}
针对上述情况可们可以使用关键词 \fixed 来定义 c 的音高
\fixed c'' {
\key a \major
\time 6/8
cis8. d16 cis8 e4 e8 |
b,8. cis16 b,8 d4 d8 |
}
在这个示例中,使用 \relative 模式下也不需要书写太多的 '因为其音高的浮动范围不会超过上下3跟谱线。然而在很长的旋律中,或者音高浮动剧烈的旋律中使用\relative模式,一个音符音高的错误会影响到后续旋律。同时会让debug变得很困难。
\relative {
\key a \major
\time 6/8
cis''8. d16 cis8 e4 e8 |
b8. cis16 b8 d4 d8 |
}
我为了解决上述问题,我们可以使用 \relative { \relative{} } 即,在 \relative{} 中嵌套\relative{}这样我们可以减少音符间的相互影响。
\relative { c'4 \relative { f'' g } c }
同样我们也可以使用 \fixed 来定义旋律也能达到相同的目的。
\relative {
c'4 \fixed c { f'' g'' } c |
c4 \fixed c'' { f g } c
}