1.2.1 简单的乐谱符号
LiLyPound 会自动补全我们的输入,在下面的案例中,我们仅仅录入了4个音名(pitches),但是LilyPond自动添加了 谱号(clef), 拍号(time signature)以及 节奏(rhythms)
{ c' e' g' e' }
上述特性(自动补全)是可以被重新定义的,多数情况下,自动生成的值已经够用了
Pitches(音高)
LilyPond 采用小写字母来定义音高,Lilypond 支持荷兰语命名系统(钢琴的白键被标记为 c-b)
。不支持例如英语,固定Dao(Fixed-Do:dao,ri,mi...)类似的命名系统。
下八度中央C(middle C)被定义为 c 通过前缀('c)/后缀(c')符号'获得低/高八度的音。下是中央C开始的,音阶以及琶音。
{ c' d' e' f' g' a' b' c'' g c' e' g' c'' e'' g'' c''' }
输入音符最简单的方法是通过相对(\relative)模式来输入。相对模式下,后一个音符的八度会跟随前一个音符的八度而变化。后一个音符会在前一个音符所在位置的上下三根普线内自动选择。下面是相对模式输下输入音阶的例子。
\relative {
c' d e f
g a b c
}
上述示例中可以理解为字符 c 被标记为 c'因此后面的音符都定为在最接近前一个音符的音高。换而言之:第一 c 最接近于c' 后续的 d相对于之前的c来定位。我们也可以使用相对模式来,谱写音成跨度更大的旋律:
\relative {
d' f a g
c b f d
}
上述示例中 d' 定义了一个位于中音C至B的八度中的一个D,我们可以通过给第一个音符 前缀/后缀 ' 来改变其所在的8度
\relative {
e'' c a c
}
使用相对模式输入,虽然在一开始显得混乱,但是这确实是最简单的录入方式。让我们通过下面一个示例来剖析一下如何相对模式的计算方式。我们可以通过一个高音谱中线的B开始,我们可以获得上方三根普线内的C,D,E。我们可以获得下方三根普线内的A,G ,F。因此如果字符 b后面跟随的是 c d e我们将获得音高高于 B 的 C D E ,而跟随的是 a g f 我们将获得是是音高低于 B 的 A G F。
\relative {
b' c % c 上移度,因此c高于b
b d % d 上移 2度 或者 下移5度 , 因此选高的d
b e % e 上移 3度 或者 下移4度 , 因此选高的e
b a % a 上移 6度 或者 下移1度 , 因此选低的a
b g % g 上移 5度 或者 下移2度 , 因此选低的g
b f % f 上移 4度 或者 下移3度 , 因此选低的f
}
当一个音符被升/降号标记后,升降号并不会影响音阶相对位置的计算。简而言之,相对位置的计算取决于音符所在乐谱上的线和间的位置。
当我们需要输入,超过3个线间距离的音符时,我们可以通过输入 ' 来升高音高,或者通过输入 ,来降低音高。
\relative {
a' a, c' f,
g g'' a,, f'
}
注意当我们提升音符多个8度时使用的是 多个
'单引号而不是一个"双引号
Durations(rhythms)节奏
- 音符的时值是通过在音名后添加数字来定义的,1表示全音符,2表示二分音符,4表示四分音符,依此类推。
- 符尾会自动添加
- 如果不定义,音符时值,默认为与前一个音符时值相同,第一个音符默认为四分音符
\relative {
a'1
a2 a4 a8 a
a16 a a a a32 a a a a64 a a a a a a a a2
}
- 音符后添加
.表示附点音符
\relative {
a'4 a a4. a8
a8. a16 a a8. a8 a4.
}
Rests(休止符)
休止符用r表示
\relative {
a'4 r r2
r8 a r4 r4. r8
}
Time signature(拍号)
使用命令 \time 定义拍号
\relative {
\time 3/4
a'4 a a
\time 6/8
a4. a
\time 4/4
a4 a a a
}
Tempo marks(速度标记)
使用命令 \tempo 定义速度标记
\relative {
\time 3/4
\tempo "Andante"
a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
\time 4/4
\tempo "Presto" 4 = 120
a4 a a a
}
Clef (谱号)
使用命令 \clef 定义谱号
\relative {
\clef "treble"
c'1
\clef "alto"
c1
\clef "tenor"
c1
\clef "bass"
c1
}
完整乐谱示例
下面是一份完整乐谱的代码示例
\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
c,2 e8 c'
g'2.
f4 e d
c4 c, r
}
1.2.2 代码规范
LilyPond 的输入文件类似于,大部分编程语言的源代码,下面是LilyPond输入文件所建议的一些代码规范,和特性。
- 输入文件(源代码)应当包含版本声明 Version statement
LilyPond 输入文件应当包含一个版本声明,用来申明输入文件撰写过程中使用的编译器-即LilyPond版本。下面以一行版本声明的示例代码
\version "2.22.2"
- 输入文件是大小写敏感的(Case sensitive)
输入音符必须是小写字母,输入
{ c d e }可以正常编译,而输入{ E D E }则会报错
- 输入文件会忽略不可见字符如
换行符,空格,制表符
不论你输入多少
空格回车tab并不会影响输出
{ c d e }
{ c d
e }
%这两段代码是等价的
- 使用
{}(大括)号包裹
每段音乐都用改使用
{}来包裹,同时不在一行开头或结尾的{}用改使用空格隔开例如{ c d e f }
- 注释
1.行内注释:以%行内注到换行符结束的一段代码将不会被编译
a4 a a a %这里是行内注释,不会被编译
b2 b
2.块级注释:以 %{ 开始 以 }%结尾的一段代码将不会被编译
% 这里是行内注释,不会被编译
{c4 c g' g a a g2}
%{
这里是,以及下面一行是块级释,不会被编译
f4 f e e d d c2
%}