流行乐曲自然少不了歌词,本篇我们把目光放在如何添加歌词上。下面给出示例(代码放在这里):
本篇的学习要点有:
- 如何构建完整的声音-歌词代码框架
\lyricmode {...}
的运作方式- 如何在设定跟踪旋律(
\lyricsto
)后编写歌词
1 声音-歌词代码框架
尽管LilyPond提供了\addlyrics {...}
这种简单的歌词添加方式,但我建议在实际应用中尽量使用完整的代码框架(就像第五篇教程——钢琴独奏片段II中那样),以方便后续编辑和管理。
下面是我示例代码的简化版本:
\version "2.20.0"
\language english
\header {
... %抬头信息
}
melody = \relative c' {...} %旋律部分
lyric = \lyricmode {...} %歌词部分
\score {
\layout {...} %版面设定(后续介绍)
<<
\new Staff {
\new Voice = "melody" {
\melody
}
\new Lyrics \lyricsto "melody" {
\lyric
}
>>
\midi {}
}
读者只需要在melody
部分编辑好旋律,lyric
部分编辑好歌词即可。
2 歌词输入模式
LilyPond使用\lyricmode {...}
代表歌词,大括号中填入的内容会被识别为歌词。
2.1 音节
LilyPond的歌词是按音节输入的,跟音符相似,完整的歌词输入包含音节和时值两个部分。它们分别有如下要求:
- 音节为一个由**英文字母或标点符号(不含双引号)**组成的字符串
- 时值与音符要求一致,可以附点。
LilyPond会按照时值安排相应的音节,一般来讲,它会将音节居中安排在乐谱对应音符位置。关于音节有下面一些部分要注意:
- 音节如果要包含数字,请在字符串外加上双引号,否则会跟时值混淆引起歧义。比如开头
1.Dash
在歌词模式下需要写成“1.Dash”
,编译完成后双引号不会显示到乐谱中。 - 音节如果要包含双引号或下划线,请在字符串外加上双引号的基础上,将音节中的双引号或下划线前面加一个反斜杠。比如,想在乐谱中显示音节
"I'm
,该音节需要在代码中写成"\"I'm"
。 - 音节如果要包含空格,请在字符串外加上双引号,否则LilyPond会将空格后面的部分识别为下一个音节。当然,关于添加空格还有别的方法,在下一小节中将会介绍。
- 相同的时值同样可以省略,其原则可以参照音符输入的方式。
- 音节同样支持其他语言,比如中文字符、特殊拉丁字符、日语假名等,只需在保存时注意保存为相应编码即可(在LilyPond编辑器和Frescobaldi下编辑则直接保存即可)。
- 如果你不确定某些特殊标点符号会不会对编译造成影响,请一律给字符串加上双引号。
2.2 设定跟踪旋律
音节+时值固然是精确的,但在实际应用中不是很方便,LilyPond提供了一些方便的指令,帮助我们更好地安排歌词。在此之前我们先了解如何设定跟踪旋律。
首先我们要命名旋律。参考前面的声音-歌词代码框架,找到你要添加歌词的旋律,在开头\new Voice
后面加上 = “名字”
。名字可以由你自己决定(虽然我没有尝试过,但建议最好还是使用英文字母和数字来命名)这样一来,后面大括号包含的旋律就被命名了。
设定相关旋律有两种方式:
- 使用
\lyricsto "旋律名" { ... }
,大括号中的内容直接按歌词模式输入即可。如果你没有打算在一开头存到别处,可以不多套一层\lyricmode {...}
- 在歌词输入过程中,可以随时加入
\set associatedVoice = "旋律名"
。它能在歌词进行到的位置开始跟踪新设定的旋律(这在多声部的时候很有用)
2.3 跟踪旋律后添加歌词
当你设定好跟踪旋律,所有时值都可以省略。LilyPond会自动根据旋律走向添加音节。LilyPond会根据旋律,在每个音符下面自动添加一个音节,但是一旦遇到圆滑线或连音线,LilyPond会自动跳到线性记号结束后的下一个音符添加音节。总的来说,可以粗略理解为LilyPond会在每一个连续的音上添加音节。
当然,仅仅这样还是不够,LilyPond提供了一些特殊标识,以帮助我们更好地完成歌词添加的任务:
- 在音节中间插入下划线
_
表示在加入空格,加入的空格会显示到乐谱上,但不影响后面音节对齐旋律。 - 使用
\skip 时值
表示跳过某个时值的音符。(注意如果当前大括号用\lyricsto
来设定跟踪旋律,时值会被忽略,而只会跳过一个音符,此时常常会用\skip 1
) - 单独一个音节
__
表示将前一个音节拉长,它会在前一个音节后面加上一条长下划线。它不占据音符,不影响后面音节对齐旋律 - 单独一个音节
--
表示在前后两个音节之间加上短横线。它不占据音符,不影响后面音节对齐旋律。LilyPond会自动根据位置决定是否添加短横线。 - 当然,如果要加入数字或引号等,请参照上文的方法添加双引号或反斜杠。
下面是示例:
<<
\new Voice = "melody" \relative {
\time 3/4
f''4 g8( f e f) | e8( d e2)
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e __
}
>>
得到的乐谱:
需要注意,在用\lyricsto
设定跟踪旋律之后,时值不起作用。有些问题可能需要别的方式来处理。比如,圆滑线下要唱多个音节的情形,需要别的指令或者通过添加隐藏声部来解决。(指令参见官方手册,而隐藏声部将在后面的教程中介绍)
另外,对于变奏结尾,LilyPond会自动往后跟踪,或者也可以使用\repeat volta 次数{...} \alternative{ {...} }
来解决,使用方式和音符输入一样。
2.4 多段歌词
如果只是单纯给旋律配多段歌词,可以采用下列方式
<<
\new Staff {
\new Voice = "melody" {
...
}
\new Lyrics \lyricsto "melody" {
...
}
\new Lyrics \lyricsto "melody" {
...
}
... %如果还有第三段歌词以此类推
>>
如果是在歌词中间分成多段,后面还会合并,可以采用下列方式
<<
\new Staff {
\new Voice = "melody" {
...
}
\new Lyrics \lyricsto "melody" {
... %分段之前的歌词
<<
{...}
\new Lyrics { \set associatedVoice = "melody" ... }
\new Lyrics \lyricsto "melody" { ... } %上下两种方式都可以
... %如果还有第四段,以此类推
>>
... %分段之后的歌词
}
>>
需要注意的是上面这种方式中,请不要省略\new Lyrics
。避免出现错误。