1.2 创建输入文件

251 阅读5分钟

1.2.1 简单的乐谱符号

LiLyPound 会自动补全我们的输入,在下面的案例中,我们仅仅录入了4个音名(pitches),但是LilyPond自动添加了 谱号(clef), 拍号(time signature)以及 节奏(rhythms)

 { c' e' g' e' }

image.png

上述特性(自动补全)是可以被重新定义的,多数情况下,自动生成的值已经够用了

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''' }

image.png

输入音符最简单的方法是通过相对(\relative)模式来输入。相对模式下,后一个音符的八度会跟随前一个音符的八度而变化。后一个音符会在前一个音符所在位置的上下三根普线内自动选择。下面是相对模式输下输入音阶的例子。

\relative {
  c' d e f
  g a b c
}

image.png

上述示例中可以理解为字符 c 被标记为 c'因此后面的音符都定为在最接近前一个音符的音高。换而言之:第一 c 最接近于c' 后续的 d相对于之前的c来定位。我们也可以使用相对模式来,谱写音成跨度更大的旋律:

\relative {
  d' f a g
  c b f d
}

image.png

上述示例中 d' 定义了一个位于中音C至B的八度中的一个D,我们可以通过给第一个音符 前缀/后缀 ' 来改变其所在的8度

\relative {
  e'' c a c
}

image.png

使用相对模式输入,虽然在一开始显得混乱,但是这确实是最简单的录入方式。让我们通过下面一个示例来剖析一下如何相对模式的计算方式。我们可以通过一个高音谱中线的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
}

image.png

当一个音符被升/降号标记后,升降号并不会影响音阶相对位置的计算。简而言之,相对位置的计算取决于音符所在乐谱上的线和间的位置。

当我们需要输入,超过3个线间距离的音符时,我们可以通过输入 ' 来升高音高,或者通过输入 ,来降低音高。

\relative {
  a' a, c' f,
  g g'' a,, f'
}

image.png

注意当我们提升音符多个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
}

image.png

  • 音符后添加 .表示附点音符
\relative {
  a'4 a a4. a8
  a8. a16 a a8. a8 a4.
}

image.png

Rests(休止符)

休止符用r表示

\relative {
  a'4 r r2
  r8 a r4 r4. r8
}

image.png

Time signature(拍号)

使用命令 \time 定义拍号

\relative {
  \time 3/4
  a'4 a a
  \time 6/8
  a4. a
  \time 4/4
  a4 a a a
}

image.png

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
}

image.png

Clef (谱号)

使用命令 \clef 定义谱号

\relative {
  \clef "treble"
  c'1
  \clef "alto"
  c1
  \clef "tenor"
  c1
  \clef "bass"
  c1
}

image.png

完整乐谱示例

下面是一份完整乐谱的代码示例

\relative {
  \clef "bass"
  \time 3/4
  \tempo "Andante" 4 = 120
  c,2 e8 c'
  g'2.
  f4 e d
  c4 c, r
}

image.png

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
%}

image.png