基于 Prolog 的 SATB 四部和声生成器
最近在研究 SATB 四部和声,然后感觉如果完全按照和声学教材里的内容,尤其是 18 世纪的和声学概念,几乎就是给了一大堆规则,然后写的是有把人当成一个栈机 (stack machine) 不停搜索不要违背这些规则。既然如此,为什么我们不能设计一个搜索程序,直接将四部和声的配法规约出来呢?
最近在研究 SATB 四部和声,然后感觉如果完全按照和声学教材里的内容,尤其是 18 世纪的和声学概念,几乎就是给了一大堆规则,然后写的是有把人当成一个栈机 (stack machine) 不停搜索不要违背这些规则。既然如此,为什么我们不能设计一个搜索程序,直接将四部和声的配法规约出来呢?
在上一篇文章里,我们认识了音高。这相当于学会了怎么数数。学完数数的小朋友就要学习加减法了,而音高之间的加减法就叫音程。说到「音程」,最类似的日常词语是「路程」。路程是两点间的距离,音程也是两个音高之间的距离。描述音程有两种方法,一种简单的,一种常用的。
音乐很有趣,理解音乐很难。但音乐背后的物理、数学原理并没有那么复杂,此所谓乐理。Ruby 是一门编程语言。编程编的是程序,所谓程序,是计算机执行的指令,是阐明计算过程的方式。我们在此使用 Ruby 语言描述乐理,以简单的例子提高自己对乐理的理解,也可以精进自己的 Ruby 编程技能。