一种创建简单和弦进程的算法

use*_*201 8 algorithm music-notation

我正在制作一个程序,根据C大调的随机基本和弦进程生成随机简单的旋律.

从这个音阶开始产生4个三和弦的和弦进行的好方法是什么?从量表生成4个完全随机的三元组(来自7个现有的三元组)通常听起来不太好.

我需要一种方法来产生听起来好或好的和弦进程,但我不想简单地从现有的进度池中随机选择一个进程.我仍然希望程序自己生成这4个三元组,使用一些简单的算法来确保生成的进程听起来不错.

(正如我所说,这4个三元组将分别取自C大调的7个三元组).

请注意:这个问题与我之前关于创建旋律创建算法的方法的问题不重复.这个是关于找到一种产生和弦进程的方法.生成旋律是一个不同的主题.

谢谢你的帮助

编辑:关于如何知道黑社会在另一个黑社会旁边听起来不错的一般指导方针,也会很棒.

mil*_*use 3

听起来你需要将其分为几个阶段:

  • 首先,从该密钥的所有可能性中随机生成一个三元组
  • 其次,应用一个或多个过滤器来消除那些“听起来不合适”的过滤器(*)。
  • 继续下去,直到获得 4 个通过所有过滤器的三元组。

我认为这个解决方案最终也可能会令人愉快地工作 - 你可以慢慢建立一组过滤器,每个过滤器都做一件简单的事情 - 但放在一起,你会逐渐弄清楚定义“体面”的是什么。

(*)听起来不错是根据之前的三元组(如果有的话)来定义的,您可以在此处编写过滤器,例如:

  • 三和弦的根音是否符合相对于先前根音的逻辑模式?; 例子:

    • 简单上升
    • 简单降序
    • 上升三分之一
    • ETC
  • 这个三和弦的音符与前一个三和弦至少有一个共同的音符吗?

    • 这可以找到一些听起来好听的倒装
  • 前一个三元组的“跳跃”是否“小于”某个给定的阈值?

    • 以避免在整个范围内出现不和谐的跳跃
    • 只需将三和弦的 MIDI 音符值相加并与之前的值进行比较即可轻松实现