使用 GNU Lilypond 制作令人惊叹的申克图

作者:Kris Shaffer

在二十世纪早期,海因里希·申克 (Heinrich Schenker) 开发了一种分析调性音乐的方法,该方法将作品的旋律、和声和形式与一个简单的潜在音乐思想联系起来。为了说明他的理论,他创建了一个记谱系统,清楚地描绘了这些关系。申克分析法(Schenkerian Analysis),正如今天所称的那样,是音乐理论的重要组成部分,但众所周知,使用行业标准的专有音乐记谱应用程序 Finale 和 Sibelius 来记谱非常困难。

然而,开源世界在 GNU Lilypond 中拥有一款出色的音乐排版软件,它现在可以在 Linux、Mac OS X 和 Microsoft Windows 上原生运行。Lilypond 不仅可以生成精美的乐谱,还可以让用户 fingertip 精确控制。此外,其文本到音乐的渲染方法使排版员更容易控制隐藏元素。这使得 Lilypond 成为创建申克记谱图的强大工具,申克记谱图本质上需要对位置进行极端的控制,以及对记谱元素的遮蔽和隐藏。

在本文中,我将介绍如何创建一个包含所有最常见的申克记谱元素的申克图,并解释每个元素的含义以及生成它所需的代码。我假设读者至少对 Lilypond 有基本的了解,因此仅提供用于申克图的非标准代码的说明。我还假设用户正在使用 Lilypond 2.6,尽管我介绍的大多数工具都适用于 Lilypond 的任何 2.x 版本。凭借 Lilypond 的工作知识和本文中解释的技术,任何用户都应该能够制作出精美的申克图——以及其他形式的高级音乐记谱——与使用图形音乐记谱应用程序相比,花费更少的时间、精力和难度。

申克记谱法的基础知识

理解申克图以及它如何表示对作品的分析,需要几个简单的步骤。调性音乐的两个基本原则构成了申克理论的基础,作为我们听到和感知音乐方式的内在组成部分。第一个原则是主音 (I) 和属音 (V) 和弦在和声结构中的至高无上地位。也就是说,和弦建立在音阶的第一和第五个音符上。在 C 大调中,这将是 C 大调和弦 (I) 和 G 大调和弦 (V)。第二个原则是旋律结构建立在下行线上,下行线以主音(音阶的第一个音符)结束。

申克图以两种主要方式记谱作品的结构。首先,节奏值用于表示音符的结构重要性,而不是应演奏的长度。其次,各种音乐标记——例如连音符、延音线、符杠和线条——用于显示结构重要性较小的音符与结构重要性更大的音符之间的关系。申克图通常还包含分析标记,例如和声的罗马数字、音阶度数以及偶尔的数字低音和分析括号。

作为一个例子,让我们使用 J.S. 巴赫的管风琴圣咏前奏曲 Wenn wir in hoechsten Noten sein 的分析节选,摘自 Gene Biringer 的著作 申克理论与分析:从传统和声、对位和形式到调性音乐高级分析的桥梁(未出版,劳伦斯大学音乐学院)。我选择这个例子是因为它清楚地说明了许多标准的申克记谱元素,并且我对该图进行了一些细微的修改,以更完整地演示记谱法。有关此图的完整 Lilypond 文件,请参见在线资源。

Make Stunning Schenker Graphs with GNU Lilypond

图 1. J.S. 巴赫:管风琴圣咏前奏曲 Wenn wir in hoechsten Noten sein

在此示例中,请注意不同节奏值的用法——二分音符、四分音符和八分音符。在这种情况下,与大多数申克图一样,二分音符是基本结构的音符,它们也被符杠连接在一起,以最清晰地突出结构。接下来,观察图中连音线、符杠和连线标记的用法。连线用于将结构重要性较小的音符与基本结构连接起来。在上面的例子中,上面谱号中的第二个和第三个音符用连线连接,表明升 F 是更重要的结构音 G 的邻音(用 N 标记)。围绕升 F 的两个 G 之间的延音线表明第二个 G 是第一个 G 的延长。一些理论家也使用虚线连线和延音线来表示音符的扩展延长。在图 1 中,三个虚线连线或延音线显示了音符的扩展延长,其间有其他形式的装饰。

最后,观察两个谱号之间的对角线。这些线用于连接旋律音符和低音音符,它们在结构上一致,但在乐曲中并非同时演奏。当检查图 1 中的图时,人们可以看到示例中的每个音符都可以通过连线、延音线或符杠连接到乐曲的基本结构,从而显示每个音符在乐曲结构中的作用。

创建申克图的 Lilypond 模板

为申克图设置 Lilypond 文件非常简单。典型的图包含一个或多个大谱号或钢琴谱号,因此很可能会从钢琴模板开始。要为申克图修改钢琴模板,请添加几行代码。在 PianoStaff 括号内,但在各个 Staff 上下文括号之外,添加以下几行

\set Score.timing = ##f
\set PianoStaff.followVoice = ##t

第一行创建一个非节拍乐谱,没有小节线——申克图的典型特征。第二行稍后解释。

在每个 Staff 上下文内,如果您使用 \relative 括号,则在 \relative 括号内插入

\override Staff.NoteCollision
  #'merge-differently-headed = ##t

这允许您组合多个隐藏声部层——一个重要的工具——而不会改变音符间距。

最后一个全局元素是添加raggedright = ##t到 \layout 部分。我认为这只是看起来更好,但如果您在开始处理间距后对图形进行重大编辑,它也可以确保测量的一致性。钢琴模板现在已准备好用于申克图。有关基于单个大谱号构建的示例模板,请参见资源。

在 Lilypond 中构建申克图

构建申克图过程的第一步也是最重要的一步是手工绘制最终图。记谱法越复杂,这将越有价值。即使 Lilypond 使创建后的图形编辑比 Finale 或 Sibelius 更容易,但在排版之前手工绘制完整的图形仍然可以节省大量时间和精力。标记将要使用的节拍也是一个好主意。由于 Lilypond 文件中的几乎每个声部都将包含许多跳过的节拍,因此预先知道节拍的数量和布局至关重要。每个音符头一个四分音符节拍就足够了。

基本结构

下一步是排版基本结构,即由八分音符符杠连接的二分音符。在创建此结构时,我选择为每个谱号使用两个声部。一个声部包含带有不可见音符头的八分音符,另一个声部包含带有不可见符杆的二分音符。巴赫图的上面谱号的基本结构如下所示

<<
  {
    \override Beam  #'positions = #'(8 . 8)
    \override NoteHead #'transparent = ##t
    s1 b8[ s4. s1 a8 s4. s2 g8] s4.
    \revert Beam #'positions
    \revert NoteHead #'transparent
    }
\\
  {
    \override Stem #'transparent = ##t
    s1 b2 s1 a2 s2 g2
    \revert Stem #'transparent
    }
>>

Make Stunning Schenker Graphs with GNU Lilypond

图 2. 基本结构使用由八分音符符杠连接的二分音符。

首先请注意,我覆盖了符杠位置,使其水平并避开可能放置在其下方的任何音符和符杆。另请注意透明属性的用法,这是您在 Lilypond 中创建申克图时最好的朋友之一。当然,还要注意节拍完全对应,声部一中的八分音符和附点四分音符跳过,对应于声部二中的每个二分音符。

如果您想在每个音符上放置音阶度数标记,如巴赫图中所示,Lilypond 2.6 现在无需使用 LaTeX 即可实现。您只需像这样标记音符

b8[^\markup { \override #'(baseline-skip . 0.5)
\column { \small {^ 3} } }

baseline-skip 覆盖应将插入符号紧密地对齐在数字上方。

您可能还会注意到,我选择使用括号和反斜杠创建多个声部,而不是 \voiceOne、\voiceTwo 等。以我的经验,括号更快,它们使插入和删除声部更容易,并且它们不太可能导致声部之间的对齐问题。

连线和层

一旦在每个谱号中创建了基本结构,接下来就是周围的音符。我通常从一个声部中的普通音符头开始——与已创建的两个声部分开——并在继续时添加符杠、符杆、连线和其他声部。这有助于我更好地组织我的代码。要创建一个带有普通音符头的声部,请使用以下代码开始声部

\override Stem #'transparent = ##t
\override Stem #'length = #0

并跟随所有四分音符或四分音符跳过,永远不要使用休止符。当添加连线时,第二行变得很有用。因为如果符杆和连线位于音符的同一侧,则连线会附加到符杆,所以您可以使用此行使所有连线仅附加到音符头。只需记住在添加可见符杆时取消它。当您到达声部的末尾时,请记住 \revert 您 \override 的任何内容。

添加音符后,您可以开始添加必要的连线、符杠和其他适当的标记。多层连线是申克记谱法固有的,但在 Lilypond 代码中可能很麻烦。有两种方法可以实现它。第一种是使用乐句连线工具。这允许您使用 ( 和 ) 创建较低层的连线,并使用 \( 和 \) 创建较高层的连线。这只允许两层连线,但它确实允许您将两层都放在同一个声部中。如果两层连线是您所需要的全部,这可能有助于您保持代码更简洁并节省您一些工作。

如果您需要两层以上——请注意巴赫示例中第一个音符上的四层连线——您必须创建多个声部。如果您需要三层连线,请创建三个声部。在第一个声部中,以

\override Stem #'transparent = ##t
\override Stem #'length = #0

像以前一样,然后跟随该行中的所有音符(以及跳过和 \revert 命令)。在此声部中插入第一个(较低)层的连线。

在第二个声部中,以

\override NoteHead #'transparent = ##t
\override Stem #'transparent = ##t
\override Stem #'length = #0

然后跟随所有音符和第二层连线。这会将每个连线附加到与声部一中的可见音符头位于同一位置的不可见音符。如果需要,您可以将此声部中不需要的音符替换为跳过,但这没有必要。第三个声部将看起来像第二个声部,但它将仅包含第三层连线。

在进行一些小的间距调整后,您的代码可能看起来像这样(巴赫示例的下面谱号的开头的一个变体)

<<
  {
    \override Stem #'transparent = ##t
    \override Stem #'length = #0
    \once \override TextScript #'extra-offset =
      #'(-11 . -2.5)
    g4 a( b) fis( e)
    \revert Stem #'transparent
    \revert Stem #'length
    }
\\
  {
    \override NoteHead #'transparent = ##t
    \override Stem #'transparent = ##t
    \override Stem #'length = #0
    \once \override Slur #'extra-offset =
      #'(0.5 . 0.75)
    \once \override Slur #'height-limit = #1.5
    g4( a b) fis e
    \revert NoteHead #'transparent
    \revert Stem #'transparent
    \revert Stem #'length
    }
\\
  {
    \override NoteHead #'transparent = ##t
    \override Stem #'transparent = ##t
    \override Stem #'length = #0
    \slurDown
    \once \override Slur #'extra-offset =
      #'(-1.25 . 0)
    \once \override Slur #'height-limit = #2.75
    g4( a b fis e)
    \revert NoteHead #'transparent
    \revert Stem #'transparent
    \revert Stem #'length
    }
>>

Make Stunning Schenker Graphs with GNU Lilypond

图 3. 使用连线层可帮助您清晰地组织代码。

即使仅使用两层连线,我也更喜欢这种方法,而不是使用连线和乐句连线的组合。它为我提供了每个图中的相同方法,它更清楚地组织了我的代码,并且当我编辑连线属性时,我总是对任何层使用相同的命令。否则,我将在覆盖连线属性和乐句连线属性之间交替。

编辑和调整连线

在申克图中使用连线时——尤其是在使用多层连线时——您可能需要编辑图形中的一些连线属性。最简单的编辑是 \slurUp 和 \slurDown,它们分别使以下连线在音符上方或下方创建,以及 \slurDashed,这是 Lilypond 2.6 中的新工具,它创建虚线连线。

我发现有用的另一个常见调整是

\once \override Staff.Slur #'height-limit = #x

这允许我指定应绘制连线的深度或浅度(由值 x 表示),它对于分层连线或文本下方和上方的连线特别有用。偶尔,我必须手动指定连线的整套坐标。这让您可以创建一些时髦的连线,一些申克理论家喜欢使用它们。为此,请使用以下代码,其中 x 和 y 是水平和垂直距离,以谱线为单位测量

\once \override Slur #'control-points =
  #'((x . y) (x . y) (x . y) (x . y))

而且,与 Lilypond 中的几乎任何记谱元素一样,您可以更改连线的 extra-offset 属性,在不改变形状的情况下移动整个连线

\once \override Slur #'extra-offset = #'(x . y)

请参阅图 3 中的连线层示例,以观察 extra-offset 和 height-limit 的实际效果。

跨谱号对角线

有时,旋律音符在和声上对应于低音音符,但它们不是同时发声的,因此在乐谱中没有垂直对齐。在申克记谱法中,连接音符的简单对角线足以建立这种连接。不幸的是,在 Lilypond 中创建这样的线不如在图形编辑器中容易。但是,可以使用\change Staff相当轻松地完成。在创建模板时,我们在文件中添加了行

\set PianoStaff.followVoice = ##t

该行与\change Staff=LH\change Staff=RH结合使用,会创建一条对角线,该对角线跟随声部从一个谱号到另一个谱号。因此,如果您在上面谱号中创建一个新声部,其代码如下

\override Stem #'transparent = ##t
\override NoteHead #'transparent = ##t
\override Stem #'length = #0
s1 s4 e4 s
\change Staff=LH
fis,4 s2
\revert Stem #'transparent
\revert NoteHead #'transparent
\revert Stem #'length

您将获得巴赫示例中的第一条对角线,从上面谱号下降到下面谱号。透明的音符头和符杆使 Lilypond 仅渲染对角线。使用不可见音符还允许您更改开始和结束音符的音高,以调整线条每端的高度。虽然这看起来可能有点过分,但整个代码块可以轻松地剪切并粘贴到另一个声部或文件中,必要的调整只是高度和节拍位置,这使其成为一个简单的解决方案。(如果您真的想将线条拖放到图形上,请在图像编辑器中打开完成的图形并在那里添加线条。)

展开符号
Make Stunning Schenker Graphs with GNU Lilypond

图 4. 展开符号显示旋律中两个音符之间的和声连接。

我在此处介绍的最后一个申克习语是展开符号。简而言之,此符号表示旋律中两个音符之间的和声连接。它们通常成对出现,显示在一个旋律线中使用两个并发的和声声部。它们非常容易创建。当一行中的两个同时出现的音符要用展开符号连接时(如巴赫示例的下面谱号中所示),只需要两个用符杠括号连接的音符,并在适当的位置使用命令 \stemUp 和 \stemDown。当然,必须记住在创建展开符号之前删除符杆透明度,并适当插入八分音符跳过以保持垂直对齐

\override Beam #'positions = #'(1 . -4)
\stemUp
g8[ s
\stemDown
b8] s

请注意符杠位置的用法,以调整符杆的高度和符杠角度。当要用展开符号连接的两个音符之间出现其他音符时,如巴赫示例的上面谱号中所示,将展开音符放在一个声部中,将独立的音符头放在另一个声部中,并在每个声部中适当跳过。例如,如果第一个声部包含

\override Beam #'positions = #'(3 . -2.5)
\stemUp
a8[ s s2
\stemDown
d8] s
\revert Beam #'positions

而另一个包含

\override Stem #'transparent = ##t
s4 b c s
\revert Stem #'transparent

最终结果将如图 5 所示。

Make Stunning Schenker Graphs with GNU Lilypond

图 5. 其他音符可以出现在用展开符号连接的两个音符之间。

结论

在 Finale 或 Sibelius 等图形编辑器中创建申克图足以让许多理论家恢复到纸和笔。该过程漫长而困难,几乎不可能更改完成的图形,并且每次创建新图形时都必须做同样的事情。但是,借助 GNU Lilypond 和上述工具,任何音乐家都可以轻松创建精美的申克图,并实现最大的控制。Lilypond 的文本到音乐方法使编辑隐藏元素、修改完成的图形以及剪切和粘贴代码到未来项目变得容易。虽然这些方法需要时间学习,但从长远来看,Lilypond 可以节省时间、精力和挫败感,同时还能创建令人惊叹的输出。本文中的工具和示例应该使您顺利开始使用这款出色的应用程序创建精美的申克图和其他形式的高级音乐记谱。

本文的资源: /article/8583

Kris Shaffer 居住在康涅狄格州纽黑文,他在耶鲁大学攻读音乐理论博士学位。作为一名开源爱好者,他还为 Linux.com、NewsForge.com 和 OSNews.com 撰稿。Kris 也是 www.AmSteg.org 的联合创始人,这是一个面向作曲家和音乐理论家的在线社区,将于 2005 年秋季首次亮相。他的个人网站是 www.shaffermusic.com

加载 Disqus 评论