前言
其实早在1996年,LilyPond就已经出现了。但说到打谱软件,Sibelius(西贝柳斯)、Finale两款软件已经深入人心。即便是想要免费开源软件,也有MuseScore这样友好的打谱软件。很少人会第一时间想到LilyPond,甚至就算知道LilyPond的人,也不敢涉足。之所以LilyPond这么神秘,很多人说是因为它的学习曲线很陡峭,很难很快地上手。我认为这句话对也不对。
从程序员的角度来说,LilyPond可以称作乐谱界的LaTex。在上篇已经看到,LilyPond的运行方式跟其他软件有很大不同,甚至看起来完全像是只有程序员才能掌握的东西。
以代码为内核的操作方式确实吓退很多人,但只要细心学下来,会发现LilyPond的语法非常优美。(比MusicTex要简单多了)对于钢琴不熟练(这意味着无法熟练使用midi键盘输入)的人们来说,LilyPond做起乐谱来要快捷得多,至少比很多打谱软件满屏按钮用鼠标慢慢找要快多了。
另外,LilyPond还支持制作吉他六线谱、管弦乐队总谱等各种不同的乐谱,应用范围很广。
LilyPond之所以显得很难学习,一方面是LilyPond的资源多数是英文材料,增加了阅读理解上的困难。(要特别感谢这篇入门教程,它或许是目前唯一相对完整的LilyPond中文入门教程)另一方面是,即便是了解到了这款软件,很多资料都是罗列语法,我们可能看个十多页英文材料才能挤出一段旋律,使得学习起来非常地枯燥,且没有成就感。
这个LilyPond系列教程希望能从更实用的角度,让需要制作乐谱的人们能很快上手,做出自己满意的乐谱。LilyPond这类免费开源软件,需要有源源不断的生命力,才能更好地往下发展,以更能满足大家的需求。
本系列教程将从实例角度出发,抛弃技术界比较艰深的叙述方式。快速上手之后,一些特殊要求只需要了解某个细节即可,不会花费很多精力。
下面我们就开始吧!
1 第一份乐谱——Jingle Bells
今天的目标是能独立完成一段简单的单旋律儿歌乐谱。 正好十二月了,第一份乐谱就选择既简单,大家又耳熟能详的歌曲Jingle Bells(铃儿响叮当)来作为示例。用LilyPond制作的乐谱效果如下:
可以将下面的代码保存成ly文件,试试看编译之后会不会出现一样的结果:
\version "2.20.0"
\language english
\header {
title = "Jingle Bells"
composer = "James Lord Pierpont"
tagline = ##f
}
\score {
\fixed c' {
\clef treble
\key g \major
\time 4/4
b4 b4 b2 | b4 b4 b2 | b4 d'4 g4. a8 | b2. r4 |
c'4 c'4 c'4. c'8 | c'4 b4 b4 b8 b8 | b4 a4 a4 b4 | a2 d'4 r4 |
b4 b4 b2 | b4 b4 b2 | b4 d'4 g4. a8 | g2. r4 |
c'4 c'4 c'4. c'8 | c'4 b4 b4 b8 b8 | d'4 d'4 c'4 a4 | g2. r4 |
}
}
下面开始拆解这段代码,其实原理非常简单。
1.1 主体框架
\version "2.20.0" %版本信息
\language english %后面的代码采用英语模式
\header {
%抬头、页脚等信息
}
\score {
% 乐谱的主要部分
}
- 第一行
\version "2.20.0"
描述的是你写下这份乐谱时的LilyPond版本。在LilyPond更新之后,将会以你写上的版本号为标准自动转换乐谱,避免冲突。(比如我安装的版本是LilyPond 2.20.0,这份乐谱就按照这个版本进行编译)如果你安装的是其他版本,可以将这行里的2.20.0换成其他版本号。
当然,通常来讲,基本的语法不会因为版本更新而出现很大改变,大多数情况下,即便是不写也不会出问题。但为了保险起见,建议还是加上这一句。
第二行\language english
是指后面的代码是英文模式,为了后续某些指令的使用,在任何情况下都请不要省略。 - 第二部分
\header {...}
描述的是这份乐谱抬头、页脚等信息。最常用的就是曲子的标题和作曲家。 - 第三部分
\score {...}
就开始描述乐谱的“正文部分”,将乐谱的主要部分打在这个大括号里面
需要注意的有两点:
- 在编辑ly文件时,应该全部使用英文输入法进行输入,以避免出现不必要的错误。
- LilyPond忽略空格(也就是说,LilyPond只区分有无空格,多余空格、换行和缩进不影响编译),但是我还是建议初学者应该养成一个良好的格式习惯,以便后面的修改和维护。
- LilyPond区分大小写,请注意你编写的代码中大小写不要出错。
1.2 乐谱的抬头
\header {
title = 标题
composer = 作曲家
tagline = 脚注信息
}
抬头部分的代码很好理解,按照上面的格式编写即可,需要注意每个信息都需要用英文下的双引号框起来。如果不打算添加某个信息,直接删去那行就可以,并不影响程序运行。
示例中的tagline = ##f
表示脚注为空,否则LilyPond会默认加上自己的脚注。
这个抬头不是必须的,如果没有标题,你可以不写\header {...}
这一部分。
1.3 乐谱的主要部分
\score {
\fixed c' {
% 基本设定
% 旋律部分
}
}
代码\score {...}
框起来的部分为乐谱的主要部分。里面的第二层\fixed c' {...}
也是乐谱基础设定的一部分。对初学者而言,请原封不动保留这个设定,不要省略。(很多入门教程可能会推荐使用\relative {...}
。但对于初学者来说,我更推荐使用\fixed c' {...}
,至于这个指令的原理和我推荐使用\fixed
的原因,在后面的教程中会解释)
接下来就是一些具体指令的解释,这些指令应该是大部分需要打谱的人第一时间想要了解的。
谱号、调号和拍号
- 使用
\clef
指令设定谱号,其中\clef treble
表示高音谱号,\clef bass
表示低音谱号。如果没有这行指令,LilyPond默认添加高音谱号。 - 使用
\key
指令设定调号,格式为“\key+主音+大小调”。大小调使用\major
或者\minor
来设定。比如Jingle Bells是G大调的,那么该指令写为\key g \major
;或者你要制谱的音乐是A小调的,那么该指令写为\key a \minor
。如果没有这行指令,LilyPond默认不添加调号(即默认为C大调或A小调)。需要注意的是,一旦要设定调号,大小调设定不能省略。 - 使用
\time
指令设定拍号,设定4/4拍,则写\time 4/4
;设定6/8拍,则写\time 6/8
。拍号没有数字的限制,你可以设定各种拍子。如果没有这行指令,LilyPond默认为4/4拍。
下面是一些补充和注意事项:
- 其他谱号比如中音谱号,低八度谱号等特殊谱号可以查阅这里
- 降B大调怎么写呢?
\key bf \major
,至于为什么主音写成bf
,看下一节就明白了 - LilyPond对4/4拍和2/2拍会默认使用传统拍号,要改成数字拍号(numeric time signature)。请在拍号设定之前一行加上
\numericTimeSignature
。当然,还有其他一劳永逸的方式,在之后的教程中会提到。 - 如果要转调或者变奏,你可以在任意一小节结束后重新设定谱号、调号和拍号。只需要在之前的旋律部分全部输入好后,再把你要修改的符号重新设定一遍就可以了。
音符和小节线
LilyPond的音符输入方式非常地简单易懂,每一个音有一个字符串代替,总体原则就是音名+八度+时值。在本篇建议的\fixed
模式下,所有音符都记录的是绝对音高,也就是说每一个字符串对应的音高都是确定不变的。下面分三个部分拆解这个字符串的组装方式:
- 首先,音名使用小写字母
c d e f g a b
表示,分别对应钢琴上的C、D、E、F、G、A、B七个键。(也就是C大调下的do、re、mi、fa、sol、la、si)对于半音,在音名后接s
表示升高半音(sharp),接f
表示降低半音(flat)。比如fs
表示升F,af
表示降A。另外,LilyPond用r
作为休止符(rest)的“音名”。 - 其次,描述这个音在哪个八度,用单引号
'
或者逗号,
表示。单引号表示高八度,逗号表示低八度。单引号和逗号可以叠加,比如高两个八度就接两个单引号;低三个八度就接三个逗号,以此类推。需要注意的是,如果什么都不加,说明这个音落在中央C的那个八度上。换句话说,这里的八度记号是相对于中央C而言的。 - 最后,时值使用数字表示。是“几”分音符就用在后面接数字“几”。比如,
1
表示全音符、8
表示八分音符。至于附点音符,理所当然应该用句点.
表示,同样地,附点也是可以叠加使用的。
另外,小节线用|
表示,在对应位置加上即可。不过即便是不加或者加错,LilyPond也会为你的乐谱自动添加上正确的小节线。(如果加错,编译会出现Warning)但为了形成良好的习惯,建议初学时严格加上小节线,方便修改和阅读。
另外,LilyPond中的调号不影响后面的音高,这跟Musescore等乐谱编辑软件的逻辑不太一样。即是说,我们输入了什么音高,谱面上就显示什么音高,LilyPond不会自动调整以适应谱号。可参考下面的示例:
\score {
\fixed c' {
\key d \major
c8 d8 e8 f8 g8 a8 b8 c'8 | cs8 d8 e8 fs8 g8 a8 b8 cs'8 |
}
}
得到的乐谱如下:
可以这么来思考LilyPond的输入方式——它跟演奏乐器的逻辑一样,谱上显示哪个音,你就演奏哪个音。
最后要注意的一点是,音符和音符、音符和小节线之间应该用空格或者换行符隔开(前面提到的LilyPond忽略空格,是指空格个数不影响编译,但有无空格对编译有很大影响),否则会影响编译。
现在,回去对照代码中的旋律部分和乐谱,你应该就能明白这些音符都是怎么输入的了。
今天的目标是制作简单的单旋律乐谱。至于其他比较常用但相对复杂的记号都是怎么加的,就要到下一篇教程再聊了。
2 补充
2.1 如何使用中文,以及开始使用LilyPond编辑器
需要再强调一遍:在编辑ly文件时,所有的指令和符号全部使用英文输入法进行输入,以避免出现不必要的错误。
但是实际上LilyPond在代码的一些范围内还是能够识别中文字符的,比如标题我们可以写title = "铃儿响叮当"
。不过需要注意一点,我们在保存ly文件时需要将编码调整为"UTF-8",具体操作如下图所示:
如果一开始保存时忘记设定编码,可以通过“另存为”方式重新保存。
当然,开始了你第一份乐谱之后,你可以开始使用LilyPond自带的编辑器了,使用LilyPond的荷花池图标打开,你会发现它长得跟记事本几乎一模一样,完全不会改变你的使用习惯。用它来写ly文件可以打入中文字符直接保存,不用担心编码问题。
如果你要编辑打好的ly文件,可以右击,在菜单中选择“Edit source…”,这样就能用LilyPond编辑器打开文件了。(复习:双击ly文件是生成PDF,不能打开代码)
2.2 如何偷懒
虽然是初学,但是有一个用来偷懒的语法似乎可以现在就说。它能省去很多时间。
LilyPond在输入音符时,如果遇到时值相同的音符,在输入时可以只保留第一个音符的时值输入,后面的音符会自动设定为与前一个音符同样的时值,直到你输入一个时值不同的音符为止。
比如示例中的第六小节| c'4 b4 b4 b8 b8 |
可以改写成| c'4 b b b8 b |
LilyPond在输入音符时,如果遇到音高相同的音符,在输入时可以只保留第一个音符的音高输入(这里的音高包括音名和八度),后面的音符会自动设定为与前一个音符同样的音高,直到你输入一个音高不同的音符为止。
比如示例中的第六小节| c'4 b4 b4 b8 b8 |
可以改写成| c'4 b4 4 8 8 |
需要注意以下几点:
- 不是一个八度的音符不能省略音名,也就是说
|c4 '4 c4 ,4|
是不合法的,无法通过编译。 - 不能只省略数字而添加附点,也就是说
c4 c.
是不合法的。但是c4. g
是合法的,它表示两个附点四分音符。 - 小节线不影响上述两条特性,也就是说
c4 | 4
或者c4 | g
都是合法的 - 使用这一操作的时候,最好保持第一个被省略音符的前一个音符音高和时值完整,避免出现难以预料的错误。比如应该尽量避免
c4 8 d e
或c4 d 8 8
的操作,而应该写成c4 c8 d e
或c4 d4 8 8
。 - 如果乐谱中第一个音符不输入时值,将默认为四分音符,直到输入了其他时值的音符为止。如果乐谱中第一个音符不输入音高,将默认为中央C,直到输入了其他音高的音符为止。
- 不要省略休止符的音名
r
,否则后面的音符会被认为是中央C。但省略时值的方式可以应用于休止符。
总的原则就是:音高(音名+八度)或时值(包含附点)只能偷懒省去其中一个,而且只能打包在一起省略。大家可以根据自己的实际操作进行不同程度的省略。(比如大量同音重复的旋律,或者琶音等节奏固定的旋律,利用这个特性非常方便)但通常情况下,建议还是把音符写完整以便于修改和维护。
针对本篇中的示例可以省略到下面的样子,得到的结果是一样的:
\score{
\fixed c' {
\clef treble
\key g \major
\time 4/4
b4 4 2 | 4 4 2 | b4 d'4 g4. a8 | b2. r4 |
c'4 4 4. 8 | c'4 b4 4 8 8 | b4 a a b | a2 d'4 r4 |
b4 4 2 | 4 4 2 | b4 d'4 g4. a8 | g2. r4 |
c'4 4 4. 8 | c'4 b4 4 8 8 | d'4 d' c' a | g2. r4 |
}
}