第4章 和弦
第4章 和弦
和弦是音乐作品的基本构建块。熟练使用和弦可以为歌曲奠定基础并创造情感流动的感觉。然而,尽管和弦背后的基本思想易于理解,但有着令人不知所措的术语和技术细节,可能需要数年才能学习。使用代码帮助我们穿过复杂的术语层,揭示下面优雅的结构。通过代码,和弦只不过是遵循一致模式的数字列表。我们将使用Python列表和函数来处理和弦。你将学习一些传统音乐术语及其含义,但你也将建立自己的计算机代码工具包,用于新的作品。
4.1 和弦
你可以在 https://tunepad.com/examples/chord-basics 跟随交互式在线示例。
在第3章中,我们介绍了和声与不和谐的概念。当两个或多个音符的频率具有整数比率时,它们具有和声关系。例如,当两个音符相隔一个八度时,较高的音符在每个低音音符的一个周期内正好振动两个完整周期(2:1比率)。当两个音符相隔五度时,它们的频率具有3:2的比率。较高的音符在低音音符的每个两个完整周期内正好振动三次。
基于音符之间和声关系的想法,和弦是同时一起演奏的多个音符。在Python中,我们可以将和弦视为表示MIDI(音乐设备数字接口)音符值的数字列表。例如,此代码在TunePad中演奏C大调和弦。
Cmaj = [ 48, 52, 55 ] # 音符 C, E, G
playNote(Cmaj)这里Cmaj是一个变量。我们不是将那个变量分配给单个数字,而是将其分配给一个数字列表。在Python中,列表是一组用方括号括起来并用逗号分隔的值。然后在第二行,我们使用Cmaj变量一起演奏所有三个音符(图4.1)。

我们也可以使用仅一行代码演奏相同的和弦,其中我们将数字列表直接传递给playNote函数。
playNote( [ 48, 52, 55 ] )但是,使用变量很好,因为它有助于使我们的代码更易于阅读和理解。这里有一些其他和弦示例:
Cmaj = [ 48, 52, 55 ] # C大调和弦
Fmaj = [ 53, 57, 60 ] # F大调和弦
Gmaj = [ 55, 59, 62 ] # G大调和弦和弦的名称来自两部分。第一部分是和弦的根音——通常是列表中的第一个音符。例如,F大调和弦以音符53(或钢琴键盘上的F)开始。并且,G大调和弦以音符55开始,键盘上的G。
和弦名称的第二部分是它的类型或性质。在我们的示例中,Cmaj、Fmaj和Gmaj都是大调和弦。在本章后面,我们将回顾几种常见的和弦类型以及如何在代码中创建它们。每种和弦类型都有一致的模式。例如,所有大调和弦都遵循完全相同的模式:取根音,加4得到第二个音符,然后加7得到最后一个音符。你可以从任何你想要的基本音符构建大调和弦,只要它遵循相同的模式(图4.2)。

用代码编写此的另一种方法是定义一个根音变量,然后基于根音创建和弦:
root = 48
playNote( [ root, root + 4, root + 7 ] ) # C大调
root = 52
playNote( [ root, root + 4, root + 7 ] ) # F大调关于此代码需要注意的一件事是,前两条线和最后两条线几乎相同。我们只是更改根音值。事实上,我们想要创建的任何和弦所需要的只是它的根音和定义其性质的模式。一旦我们知道模式,其余的就很容易。
但是,每次我们想要使用大调和弦时写出[root, root + 4, root + 7]会很繁琐且容易出错。幸运的是,Python为我们提供了专门针对这种情况的强大工具:用户定义函数。
4.2 用户定义函数
在本书的前几章中,我们一直在使用函数演奏音乐:playNote、rest和moveTo都是TunePad提供的函数。当我们想要使用函数时,我们只需键入其名称并列出括号内要发送给它的参数。使用Python,我们还可以创建自己的函数来建立音乐工具包。创建函数还有助于使代码更短且更易于理解,因为我们将能够一遍又一遍地使用相同的代码段,而无需复制和粘贴。这是一个关于基于根音创建大调和弦的快速示例。
def majorChord(root):
chord = [ root, root + 4, root + 7 ]
return chord现在我们已经定义了函数,我们可以在TunePad中将其用作快捷方式。
Cmaj = majorChord(48)
Fmaj = majorChord(53)
playNote(Cmaj, beats = 2)
playNote(Fmaj, beats = 2)这几行代码有很多内容。让我们逐行分解它。
- 第1行以
def关键字开头。这是”define”的缩写,它告诉Python我们即将定义一个函数。 - 接下来是我们正在定义的函数的名称。在这种情况下,我们称之为majorChord,但我们可以使用任何想要的名称,只要它遵循Python的命名规则。
- 在函数名称之后,我们需要列出括号括起来的所有函数参数。在这种情况下,只有一个名为root的参数。如果你需要多个参数,用逗号分隔每个参数。我们将在本书后面详细讨论这一点,但你可以将参数视为仅在函数内可用的特殊变量。
- 在参数列表之后,我们需要冒号字符(:)。这告诉Python函数的主体即将到来(图4.3)。

- 第2行开始函数的主体。在这里,我们只是创建一个名为chord的变量,并将其分配给定义大调和弦的数字列表。数字是根音、根音+4和根音+7。需要注意的重要一点是,这行代码缩进了四个空格。就像循环一样,缩进告诉Python这些行是函数主体的一部分。它们被认为在函数内部,而不是外部。
- 第3行也缩进了四个空格,因为它也是函数主体的一部分。此行使用特殊的return关键字来说明函数产生什么值。在这种情况下,我们返回chord变量,构成我们大调和弦的三个数字的列表。当Python到达return关键字时,它立即退出函数并返回该行上给出的值。
- 也可以定义没有返回值的函数。在这种情况下,Python提供一个称为None的特殊返回值。
这就是我们的函数定义的全部内容。现在我们可以看看它如何用于第4-7行。注意我们可以多次调用我们的新函数以生成不同的和弦,让我们重用代码来创建更易读和优雅的程序。在本章的其余部分,我们将使用相同的模板开始建立一组和弦类型库,每个都有自己的函数。
你可以在函数内定义变量,就像你可能其他方式一样。变量的作用域是指我们可以在哪里使用此变量或函数。你可以将其视为函数的缩进级别。在函数定义中定义的变量只能在该函数中使用;它们的作用域在该函数内。以下代码将在第4行导致错误。
def majorChord(root):
chord = [ root, root + 4, root + 7 ]
majorChord(60)
playNote(chord) # 错误chord变量仅存在于我们的majorChord函数中。我们可以将其称为局部变量。或者,有全局变量,它们可以在定义后的任何地方使用。在下面的代码中,root和chord是全局变量,因此可以在任何函数的主体中自由使用:
root = 60
chord = [ root, root + 4, root + 7 ]
def songPart1():
playNote(chord)
playNote(root)
songPart1()在我们继续之前,让我们再定义一个函数,展示我们如何在其他函数内使用我们的新函数:
def playMajorChord(root, duration):
chord = majorChord(root)
playNote(chord, beats = duration)此函数使用我们的majorChord函数从根音构建和弦,然后调用playNote演奏和弦。这个新的playMajorChord函数接受两个参数,根音和说演奏音符多长时间的长度。
注意:按照惯例,Python函数和变量名使用小写字母,不同单词之间用下划线字符分隔(例如,play_major_chord)。这种风格被称为”snake_case”。但是,本书使用称为”camelCase”的不同风格,其中名称以小写字母开头,大写字母用于开始新单词(如playMajorChord)。我们在本书中使用camelCase以与其他编程语言约定(如JavaScript)保持一致,但如果你愿意,应该随意为自己的Python程序使用snake_case。
4.3 常见和弦类型
本节回顾现代音乐流派中最常用的一些和弦类型。对于每个和弦,我们将提供定义其性质的数字模式、钢琴键盘上该类型的和弦示例,以及从根音生成和弦的TunePad函数。我们还将根据音程描述和弦。音程的名称可能有点令人困惑,特别是与音符名称或MIDI音符值结合时。
| 常见和弦类型/性质 |
|---|
| 大三和弦 大七和弦 挂二和弦 |
| 小三和弦 小七和弦 挂四和弦 |
| 减三和弦 属七和弦 增和弦 |
要听这些和弦的实际应用,请访问:https://tunepad.com/examples/chord-functions
4.3.1 大三和弦
大调和弦通常被描述为愉快和快乐。它们由根音、根音+4和根音+7组成。在音乐理论中,大三和弦的第二个音符称为大三度,第三个音符称为完全五度。这可以被称为三和弦,因为有三个不同的音符(图4.4)。

- 模式:[ 0, 4, 7 ]
- 音程:大三度,完全五度
- 符号:C major, CMaj, CM, C
- Python函数:
def majorChord(root):
return [ root, root + 4, root + 7 ]4.3.2 小三和弦
小调和弦传达更多阴沉的色调。它们与大调和弦非常相似,除了第二个音符向根音加3而不是4。在音乐理论中,第二个音符称为小三度(而不是大三度)。但是,即使有这个小的变化,情绪的差异也是戏剧性的(图4.5)。

- 模式:[ 0, 3, 7 ]
- 音程:小三度,完全五度
- 符号:D minor, Dmin, Dm
- Python函数:
def minorChord(root):
return [ root, root + 3, root + 7 ]4.3.3 减三和弦
减和弦在音乐中注入张力和不稳定性。它们通常被用作和弦进程中在和弦之间过渡的方式。有几种不同类型的减和弦,但最简单的三音符种类几乎与小三和弦相同,只是最后一个音符减少(减)了1。这被称为减五度音程(图4.6)。

- 模式:[ 0, 3, 6 ]
- 音程:小三度,减五度
- 符号:B dim, B°
- Python函数:
def diminishedTriad(root):
return [ root, root + 3, root + 6 ]4.3.4 大七和弦
大七和弦以大三和弦开始,然后在列表末尾添加第四个音符(根音+11)。这个添加称为大七度音程。额外的音符创造出更复杂和沉思的感觉(图4.7)。

- 模式:[ 0, 4, 7, 11 ]
- 音程:大三度,完全五度,大七度
- 符号:Cmaj7, CM7, CMa7
- Python函数:
def major7th(root):
return [ root, root + 4, root + 7, root + 11 ]4.3.5 小七和弦
小七和弦以小三和弦开始,并添加小七度(根音+10)。这个和弦的感觉比大七和弦更有情绪(图4.8)。

- 模式:[ 0, 3, 7, 10 ]
- 音程:小三度,完全五度,小七度
- 符号:Dmin7, Dm7
- Python函数:
def minor7th(root):
return [ root, root + 3, root + 7, root + 10 ]4.3.6 属七和弦
就像大七和弦和小七和弦一样,我们可以通过组合一些早期的构建块来创建属七和弦。属七和弦以大三和弦开始,并添加小七度以获得模式[ 0, 4, 7, 10 ]。大调和小调音程的组合可以创造出不安的感觉(图4.9)。

- 模式:[ 0, 4, 7, 10 ]
- 音程:小三度,完全五度,小七度
- 符号:G7
- Python函数:
def dominant7th(root):
return [ root, root + 4, root + 7, root + 10 ]4.3.7 挂二和弦与挂四和弦
挂三和弦以大三和弦开始,但向上或向下移动中间音符。sus2和弦结合根音、大二度(+2)和完全五度(图4.10)。

- 模式:[ 0, 2, 7 ]
- 音程:大二度,完全五度
- 符号:Csus2, Csus2
- Python函数:
def sus2(root):
return [ root, root + 2, root + 7 ]sus4和弦将中间音符向另一个方向移动到大四度(+5)(图4.11)。

- 模式:[ 0, 5, 7 ]
- 音程:大四度,完全五度
- 符号:Csus4, Csus4
- Python函数:
def sus4(root):
return [ root, root + 5, root + 7 ]你可以在交互式教程中尝试两种版本的挂和弦。
4.3.8 增三和弦
我们将在这里介绍的最后一类和弦称为增三和弦。这只是一个带有”升五度”的大三和弦:最后一个音符从完全五度(+7)提升到增五度(+8)。这个和弦可以增加悬念或焦虑的感觉(图4.12)。

- 模式:[ 0, 4, 8 ]
- 音程:小三度,完全五度
- 符号:Caug, C+
- Python函数:
def augmentedTriad(root):
return [ root, root + 4, root + 8 ]我们可以探索许多许多其他种类的和弦,它们添加额外的音符或以不同的模式使用音符。扩展和弦引入像九度、十一度和十三度的音程,转位和弦移动根音的位置。钢琴键盘上有88个键和数十种和弦性质可供选择,我们可以在给定歌曲中使用数百种可能的和弦。我们如何减少这种复杂性以生成听起来好的音乐?这个问题有三个答案:
- 首先,音乐调就像模板,给我们一组听起来很好的和弦和音符。一旦我们知道我们在什么调中,可能的和弦集就变得更易于管理。下一章将介绍调与音阶背后的主要思想。
- 其次,有标准的和弦进程,它们在不同类型的音乐中一致使用。和弦进程是为一首音乐作品建立创作结构的和弦序列。在第6章中,我们将展示如何从常见模板生成和弦进程。
- 第三个答案只是来之不易的经验。随着你发展音乐耳朵,你将变得越来越熟悉和弦类型和进程以及它们在不同流派中的使用方式。这种经验将帮助你开始创新和改进。
常见音程名称
| 半音数 | 名称 |
|---|---|
| + 0 | 同度 |
| + 1 | 小二度 |
| + 2 | 大二度 |
| + 3 | 小三度 |
| + 4 | 大三度 |
| + 5 | 完全四度 |
| + 6 | 三全音 |
| + 7 | 完全五度 |
| + 8 | 小六度 |
| + 9 | 大六度 |
| + 10 | 小七度 |
| + 11 | 大七度 |
| + 12 | 八度 |
| + 13 | 小九度 |
| + 14 | 大九度 |
| + 15 | 小十度 |
注释 1. 函数名必须以字母(小写或大写)开头。名称可以包含字母、数字和下划线_字符。也允许Unicode字符(所以像플레이노트这样的东西也可以是有效的Python函数名)。