复杂流行爵士和声进行的无限生成方法(基于带条件的库遍历)
“库遍历 + 条件限制”(Library plus Constraints)方法是利用计算机编程自动无限生成音乐的有效模式之一。虽然这是一种“专家系统”形式的老旧范式,但其结果与如今流行的机器学习方式生成的内容相比毫不逊色。话不多说,先上图:
一、库(Library)

这是在流行爵士和声范围内以 C 为根音的所有(三音至七音)和弦的列表,制表者是我(@雷蒙德卡),我是用了英文制表,目前没有中文版,还请见谅了。
这个堆满了和弦类型的列表可以看成一个“素材库”,即“库”(Library)。
二、加入的限制条件(Constraints)
以上所举的“库”为基础,加以限制条件(Constraints)排除“不恰当”的进行,以适配西方音乐的听觉习惯(基于传统和声写作的规则)后,即可依此遍历其所有移位、转位、排列、可能性,从而达到无限生成和声进行的效果。条件也非常简单,三个条件与生成步骤如下所示:

条件一:和弦必须属于表中所列的类型(包括移位、转位、排列/重复音的情形)。
条件二:禁止四部同向。亦即,各声部移动的向量 {v1, v2, ..., vn}(单位为半音数)必须至少有一个不同号(即反向进行)或为零(即声部不动)。
条件三:任一声部的运动幅度不得超过大三度。亦即 |v1|, |v2|, ..., |vn| ≤ 4 . 图中举出了三音、四音、五音和弦的条件判断示例各一,都是前后和弦音个数相同的情形。和弦音的个数也可以前后不同,如最后所举的三例(分别为三音→四音、四音→三音、五音→四音和弦),此时进行的向量不能做到一一对应,需以重复最接近的音的方式转化为相同的音个数,再算出进行向量,过程从略。
更多限制条件(“色差”):按“奇异和弦”问题中的“色差值” 从高至低排列,在连续生成模式中选取位于前 % 位置(取近似)的和弦。关于“色差值”请参考:https://zhuanlan.zhihu.com/p/91035254 。

三、程序输入与输出
程序输入:
前后和弦音的个数是否始终维持相同?(Y/N) Y —— 输入音的个数(3~7);N —— 输入音的个数范围(3~7),用“-”分隔,如“4-5”
连续生成和弦进行吗?按 Y 进入连续生成模式,按 N 进入单个生成模式。(Y/N)
连续生成模式:输入 P 值,单位为百分比(%)。
单个生成模式:手动输入前和弦吗?(Y/N)Y —— 请输入前和弦,以MIDI键位号(0~127)表示各音,用空格分隔,如“60 67 76”(具有GUI界面者可以从键盘和MIDI文件输入) ;N —— 将自动随机选取一个和弦作为前和弦。
程序输出:
连续生成模式:按照输入的要求,输出连续的和弦MIDI键位号组成的数据列表,生成MIDI文件和播放。
单个生成模式:按照输入的要求,列出符合要求的各个和及其色差,按色差大小从高到低排列,供输出、播放、用户预览选择。

人脑在找寻偶成的和声灵感方面是很擅长的,然而在纯技术的角度上,电脑兴许可以变得更擅长于此道。这个算法的本质始终还是穷举硬算,还是个假AI,然而收效也相当不错。在机器学习的今天,计算机自动创作(尚且不谈别的形式的真AI)可以达到怎样的境界呢,之后还是相当有看头的吧。