本篇将从交响乐总谱出发,讲述LilyPond中的谱表和乐器管理问题。经过本篇之后,交响乐总谱、合唱谱、流行乐谱都不在话下,本篇用到的示例是贝多芬的命运交响曲(前两页),示例代码放在这里。
编译出的乐谱中第一页的效果如下:
本篇的学习要点有:
- 如何添加创建新谱表,创建属于自己的乐谱模板
- 如何显示谱表前面的乐器名,并控制midi播放不同谱表的乐器或音色
- 如何处理移调乐器
1 谱表创建与编排
1.1 指令\new
与谱表的种类
使用\new 谱表种类
创建一个新的谱表,LilyPond提供的谱表种类有很多,大致分三个类别,下面一一进行介绍。
首先是谱表组,它用来描述乐谱如何分组,并在左侧添上大括号:
StaffGroup
和ChoirStaff
会在谱表组左边添上粗的直线大括号,StaffGroup
会将各个谱表小节线连在一起,而ChoirStaff
不会。GrandStaff
和PianoStaff
会在谱表组左边添上花括号。
下面是几种谱表组的效果:
然后是谱表,LilyPond提供了许多样式的谱表以供选择,常用的有:
Staff
是最常见的五线谱,大部分乐器都可以使用RhythmicStaff
是节奏谱,只有一条黑线,在黑线上用对应音符表示节奏TabStaff
是六线谱,是吉他等乐器常用的乐谱,也许会在后面的教程中介绍。DrumStaff
是鼓谱,用来描述鼓组,详细的内容也许会在后面的教程介绍。
最后是声部,当然这里的声部是广义的,LilyPond在这一含义下给出了一些好用的“声部”来更好地完成乐谱:
Voice
就是最常用的声部,之前已经介绍过,不再赘述Lyrics
表示歌词,需要配套使用\lyricmode {...}
,关于它的使用之前也已经介绍过。Dynamics
表示力度记号,实际上我认为称乐谱标记会比较合适。它可以用来添加乐谱标记,稍后会介绍其用途。DrumVoice
表示打击乐声部;FiguredBass
表示指法谱;ChordNames
表示和弦代号,这些部分也许会在后面的教程中进行介绍。
1.2 \new Dynamics
的使用
力度记号或文字标记等内容的代码嵌入音符中有时会略显冗长,这些部分我们可以将它独立出来放在Dynamics
上进行调整。
一般推荐Dynamics
中一律使用隐藏式休止符s
,主要为了标示节奏,然后在对应音符加上力度记号等标记就可以了,LilyPond会自动在对应位置加上乐谱标记。在处理标记与音符错开的情况时,这种方法也不失为一种好方法。
需要注意,跟音符相关的跳音、重音等记号还是需要和音符放在一起,否则无法正常显示。
从整个乐谱来看,Dynamics
的位置与Lyrics
的位置差不多。下面是示例:
\score{
\new GrandStaff <<
\new Staff
\relative c'{
<c e g>4 q r q | c2 4 4
}
\new Dynamics
{
s4 s2\p s4 | s4 s4_"dolce" s2 |
}
\new Staff
\relative c'{
<c e g>4 4 r <c e g>4 | g2 4 4 |
}
>>
}
得到的效果如下:
1.3 乐谱模板
相信经过之前的介绍,\new
和<<...>>
的指令使用方法应该不需要重新介绍。跟LaTex一样,很多时候LilyPond也需要模板。自己建立乐谱不难,但构建一套常用的模板其实也是必要的,每次使用只需要填上音符即可,能大大节省时间。官方手册给出了许多种模板,可供参考。
2 \with
指令的简单使用
\with
指令用来对谱表进行设置,到目前为止,完整的谱表设定应该具有如下结构:
...
\new 谱表种类 \with{
... % 乐谱设定
}
{...}%音符输入
...
LilyPond的所有设定几乎可以统一使用语句参数 = 值
(可以参照系列教程第二篇中\header{..}
的设定),其中关键在于知道参数名称是什么,用在什么地方,以及它们能取哪些值。本篇将首先介绍\with{...}
中的三种参数。
instrumentName
用来设定乐谱开头的乐器名称,后面接上字符串即可。这个乐器名称可以随意设定。比如instrumentName = "Violin"
表示乐谱开头会加上乐器名Violin
。shortInstrumentName
用来设定乐器的缩略名称,从乐谱的第二行开始在每一行前面都会添上该乐器的缩略名。这个部分也可以随意设定,接上字符串即可。比如shortIntrumentName = "V I."
。midiInstrument
用来设定这行乐谱在midi中应使用何种乐器或音色播放,可取的值也是字符串。但LilyPond对词给出了限定,它仅支持这些音色。大家必须从中选择。比如midiInstrument = "flute"
表示用长笛演奏该行乐谱。需要注意,默认情况下LilyPond会使用钢琴来演奏乐谱。
比如本篇给出的示例代码中,一个完整的乐谱设定长这样:
...
\new Staff \with {
instrumentName = "Flauti."
midiInstrument = "flute"
%不写shortInstrumentName则不会出现缩略名
} \Flute %音符部分事先存在了Flute中
...
3 移调乐器
很多时候,乐器的实际音高与谱面上出现的音高不一致。比如低音提琴会移高八度记谱,许多管乐器也需要移调记谱。能看到这里的读者应该不用解释为什么会出现这样的情况,乐理的部分就不多作解释了。
当然,LilyPond中,不同行乐谱的调子不一样也是完全合法的,如果不作调整也没什么问题。但是midi会按照谱面音高播放,如果要制作midi,此时就需要作出调整了。
如何让midi不按照谱面音高来播放呢?使用\transposition
就可以了。
在音符输入过程中,使用\transposition 音高
就能将指令后面音符移调播放。移调指令后面的音高使用绝对音高模式,后面的音高是指c’
移调后播放的音高。
比如\transposition g
是指将中央C移到下面一个八度的G,也就是说移低了一个大四度,或者也可以说,此时谱面音高比实际音高高一个大四度。
通过以上指令的学习,相信你已经基本可以完成交响乐总谱等涉及多个谱表的乐谱制作了,在下一篇我们将讲一讲页面设置问题,以做出更精美的乐谱。