本篇会着重解决钢琴曲谱中音符输入的常见问题。示例片段均来自肖邦的降E大调华丽大圆舞曲。(Valse Brilliante, op.18)
本篇的学习要点有:
- 如何使用隐藏音符和隐藏式休止符
- 如何调整符干朝向,进一步了解
_
和^
的使用方法以及其他记号的方向调整 - 解决多声部乐段的一些常见问题
不知道看到这两个小节乐谱,你会不会感到头疼:
上述片段选自示例乐谱的第16、17小节。这个片段即使是常见的打谱软件也需要挺多调整。本篇教程结束,你就能用LilyPond解决这两个小节乐谱的输入了,你会发现它解决这个问题的逻辑是多么自然。
1 隐藏音符和隐藏式休止符
隐藏音符和隐藏式休止符提供了一种非常便利的方式来调整乐谱的音符。它们虽然都是把音符“藏”起来,但是使用起来还是有细微的区别。
1.1 隐藏式休止符
添加隐藏式休止符有两种方式:\skip
和s
。它们有如下不同点:
\skip
本质上是命令(command),s
本质上是音符(note)\skip
后面必须跟一个时值,有无空格隔开都可以。而s
跟音符一样,可以省略时值,如果添加时值,则必须连在一起。比如c4 \skip 2 c8
和c4 s 2 c8
的显示完全不一样,但是和c4 s2 c8
以及c4 \skip2 c8
一样\skip
不会影响LilyPond记录的时值,而s
与其他音符一样,会影响时值。比如c4 \skip2 c
中后面的c
时值为4,但c4 s2 c
中后面的c
时值为2s
可以添加力度记号,演奏记号等多种记号,但是\skip
不可以
1.2 隐藏音符
隐藏音符将使用指令\hideNotes
完成,如果要还原则使用指令\unHideNotes
。它跟隐藏式休止符有两点不同:
- 隐藏式休止符在midi中不会播放,但隐藏音符即便不在乐谱中显示,也同样会播放。
- 隐藏式休止符无法添加圆滑线和连音线,但隐藏音符可以添加。而且得到的圆滑线和连音线,跟音符未隐藏时添加的记号位置一样。
PS:隐藏音符很多时候是用来调整圆滑线的权宜之计,但由于它有时会严重影响乐谱的显示,这里仅作介绍
2 \xxxUp
和\xxxDown
指令
2.1 全局指令
LilyPond可以用\xxxUp
和\xxxDown
指令临时调整符干朝向或其他记号的上下位置。下面是几种常用的:
\stemUp
和\stemDown
用来调整符干的朝向,\stemUp
表示符干朝上;\stemDown
表示符干朝下。\dynamicUp
和\dynamicDown
用来调整力度记号,\dynamicUp
表示放在上面;\dynamicDown
表示放在下面。\slurUp
和\slurDown
调整圆滑线(即(
)的上下位置。\tieUp
和\tieDown
调整连音线(即~
)的上下位置。\tupletUp
和\tupletDown
调整连音符数字的上下位置。\phrasingSlurUp
和\phrasingSlurDown
调整外层圆滑线(即\(
)的上下位置
指令的作用范围是它之后的所有记号。如果要还原到默认状态,使用指令\xxxNeutral
。
2.2 临时指令
使用下划线_
和上三角^
可以对记号作临时调整。跟前面教程提到的一样,_
表示放在下面,^
表示放在上面。(这个记法和LaTex的逻辑是一样的)
很多记号都可以使用临时指令调整位置。比如\relative c'{ c_. d^( e) f_[ g] a^\p b_\> c\! }
得到的乐谱如下:
3 多声部乐段的一些调整
3.1 符头合并
在多声部乐段中,LilyPond会自动合并音高和时值一样的符头。如下例所示:
\score {
\relative c'{
<< {c4 d e f} \\ {c4 b a g} >>
}
}
但对于音高一样但时值不一样的音符,LilyPond和大多数打谱软件一样默认错开显示。下面有两个指令来控制符头合并:
\mergeDifferentlyHeadedOn
指令会使音高一样但时值不一样的音符符头合并。但四分音符和附点四分音符不会合并,因为一旦合并会比较难分清两个声部的旋律,但有的乐曲仍然要求它们合并,于是可以采用下一个指令。\mergeDifferentlyDottedOn
指令会针对附点音符对符头进一步合并,详细可看下面的示例:
\score {
\relative c'{
<< %第一小节
\relative {
c''8 d e d c d c4
} \\
\relative {
c''2 c8. b16 c4
}
>>
<< %第二小节
\relative {
\mergeDifferentlyHeadedOn
c''8 d e d c d c4
} \\
\relative {
c''2 c8. b16 c4
}
>>
<< %第三小节
\relative {
% \mergeDifferentlyHeadedOn 在示例中这行可以不加,因为上一段的指令仍在起作用
\mergeDifferentlyDottedOn
c''8 d e d c d c4
} \\
\relative {
c''2 c8. b16 c4
}
>>
}
}
3.2 控制音符偏移
为了避免音符打架,LilyPond会自动将音符左右偏移。指令\shiftOn
和\shiftOff
可以控制这一操作。默认情况下第一声部和第二声部不会偏移(即默认\shiftOff
开启),但第三声部开始就会发生偏移。(即默认\shiftOn
开启)
下面是示例:
\score {
\relative c'{
<<
{f'2 g | f g}
\\
{g,2 a | g a}
\\
{d2 d | \shiftOff d d}
>>
}
}
需要注意的是,有时候这个指令会不起作用(比如三个声部“打架”的时候),如果还要强制调整,需要更复杂的方式。
4 总结
最后,我们采用下列示例代码来还原文章开头乐谱的右手部分:
\version "2.20.0"
\language english
\score {
\relative c'{
\key ef \major
\time 3/4
<df' g bf>4.
<<
\mergeDifferentlyHeadedOn
\relative c' {
\slurUp s8 df'4 | df2 s4 |
}
\\
\relative c' {
\slurUp <g'' bf>8[( df8 <g bf>8]) |
df8 bf' c bf <c, af'>4 |
}
\\
\relative c'{
\hideNotes \shiftOff
s4. | af''2^( \stemUp af4)
}
>>
}
}
得到的乐谱如图所示:
需要提醒,上述代码会给midi文件多加一个额外的音符(虽然乐谱显示正常)。另外由于\shiftOff
的局限,有些圆滑线还是不能通过隐藏音符完美实现。还可以有其他更合适的方式来调整圆滑线,只能留待后面来介绍了。