两种建模节奏的方式
摘要
在这篇豆瓣小论文里,我阐释了两种建模节奏的方式,以及它们在人脑爵士即兴和电脑音乐生成中的应用。与此同时,我也讨论了两种方法各自的优缺点。
引言
……相信诗性来自无法精确控制的身体
来自身体对未知的容纳
对每次呼吸
把手放在鼻尖 聆听微小的差异
这是自然造化从不重复 生生不息
乒乒乓 乓乓乒乓 乓乒乒 乒乒乓乓乓 乒乒 乒……
——小老虎《乒乓》
建模节奏的方式之一:离散时间的二元信号排列 Discrete-Time Binary Signal (DTBS)
毫无疑问,节奏是一种无中生有。于是我凭空拿来一段时间,把它平均分割成 n 小段,给每一小段分配一个非零即一的二元信号,一段节奏就此诞生。我们称这样一种建模方法为离散时间的二元信号排列 Discrete-Time Binary Signal (DTBS)。

我随意地找了一段节奏作为例子(图1可见它的音乐符号表达形式),如果我将一小节的时间划分成16小段,即可将这段节奏粗略地(延音与空拍尚未区分)表达为 DTBS 的形式(如图2所示)。

此方法有一大缺点是难以兼容各种怪拍,如三连音。在前一个例子中,一小节由十六分音符、八分音符与四分音符排列组合而成,因此可以非常自然地将一小节的时间划分成16(16、8和4的最小公倍数)小段。然而,当一小节中出现三连音后,对这一小节的时间划分需要更加地精细。图3展示了一个结合了八分音符三连音和八分音符的节奏段落作为例子。

若要将图3中包含了八分音符和八分音符三连音的节奏表达为 DTBS 的形式,那么这小节需要划分成24(8和3的最小公倍数)小段!计算量一下提高了很多。

建模节奏的方式之二:模块化信号排列 Modular Signal (MS)
任意长度的一组特定的节奏都可以被定义为一个模块,于是一段节奏就可以被理解为 k 个节奏模块拼接而成的排序,如同拼接乐高积木一般。拿图3作为例子,如果将两个八分音符视为一个模块 a,一个八分音符三连音视为另一个模块 b,则这段节奏可以表达为模块化信号 a-b-a-b。当然,也可以将两个八分音符接一个八分音符三连音视为一整个模块 c,则这段节奏可以表达为模块化信号 c-c。以此类推。
应用
在进行爵士即兴时,人脑很少以 DTBS 的方式对节奏进行生成;相对应地,在聆听音乐时,人脑也几乎不可能使用 DTBS 的方式对节奏进行建模理解。究其本质,人类的记忆能力(听)、反应时间(奏)、计算效率(听与奏)都有一定的上限。想象一个人在爵士即兴的时候每过一拍就要计算下一拍是1还是0,就算 ta 有极高的计算效率,但是 ta 的反应时间(从头脑发送信号到手)也会极大地阻碍即兴演奏的流畅。
人脑对节奏的理解以及即兴通常是通过 MS 进行的。不少音乐老师会教你要积攒自己的节奏词汇,什么是节奏词汇呢?其实就是一个个模块,有些模块很基本,以节拍为单位,有些模块甚至会延展到一小节甚至几个小节为单位,渐渐形成一些个人的套路。想象 we will rock you 最经典的鼓节奏,大多数人都把整段的 pattern 记忆成了一个模块,收藏进了自己的音乐记忆,有时会在即兴的时候调用出来。
电脑生成音乐的基本逻辑可以与人脑爵士即兴类似:人需要听音乐去学习,形成自己的章法;机器也需要大量音乐的输入,训练自己的算法。人的章法和机器的算法都可以进一步生成新的音乐。因为电脑可以打破人类记忆能力、反应时间和计算效率的上限,DTBS 对节奏的建模方式是适用于电脑音乐生成的。离散时间的规整能让机器很好地去以各种时间序列模型(例如:循环神经网络)学习节奏千变万化的模式。如果以 MS 为框架,且让所有模块的时间长度规整,机器对音乐的学习-生成也是没有障碍的,但是大多数情况下,模块的时间长短不一,则会遇到一些麻烦。
电脑生成音乐的另一大好处是迅速地生成随机数,这是人脑很难真正做到的。随机算法若与 MS 结合,那只能是在有限个节奏模块之间随机切换,按顺序排列;但随机算法若与 DTBS 结合则会让节奏富有无穷的变化,如虎添翼。当然,随机数生成的的音乐是否具有意义,这可能得新开一篇文章另说。