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



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

从这个音阶中产生4个三和弦的和弦进行的好方法是什么?从天平上生成4个完全随机的三元组(从现有的7个三元组中)通常听起来不太好。

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

(正如我所说,这4个三合会将分别取自C大调的7个三合院)。

请注意:这个问题不是我之前关于创建旋律创建算法的方法的问题的重复。这是关于找到一种产生和弦进行的方法。产生旋律是另一个话题

感谢您的帮助

编辑:关于如何知道一个三和弦在另一个三元组旁边听起来是否合适的一般指导线也很棒。

听起来你需要把它分成几个阶段:

  • 首先,从这个键的所有可能性中随机生成一个三元组
  • 其次,应用一个或多个过滤器来消除那些不"听起来不错"的过滤器(*)
  • 继续,直到你有4个三元组通过所有的过滤器

我认为这个解决方案最终可能也会让人愉快——你可以慢慢建立一个过滤器的集合,每个过滤器都做一件简单的事情——但放在一起,你会逐渐找到定义"体面"的东西。

(*)听起来不错是根据定义的,并参考了以前的三元组(如果有的话),这就是你可以编写过滤器的地方,比如:

  • 相对于之前的根音符,三元组的根音符是否符合逻辑模式;示例:

    • 简单升序
    • 简单下降
    • 按三分之一递增
    • 等等
  • 这个三和弦的音符与前一个三和弦至少有一个共同的音符吗

    • 这可以找到一些听起来很愉快的反转
  • 上一个三元组的"跳跃"是否"小于"某个给定阈值

    • 以避免在整个范围内跳跃
    • 简单地通过对三和弦的MIDI音符值求和并与以前的进行比较来实现

您可以检查这些纸张

使用申克分析和和弦空间的概念生成音乐

以及弦级数的概率模型

但这个主题很复杂,例如,让我们说,音乐信号的精确和紧凑表示是大规模基于内容的音乐应用程序(如音乐内容管理和近乎重复的音频检测)的关键组成部分。在这种情况下,你正在使用C大调音阶,如下所示:

C - D - E - F - G - A - B

其具有间隔

C - STEP - D - STEP - E - HALF STEP - F - STEP - G - STEP - A - STEP - B - HALF STEP - C - 

现在和弦是由音符之间的距离形成的,例如

C major chord is formed by C-E-G
D minor chord is formed by D-F-A
E minor chord is formed by E-G-B
F major chord is formed by F-A-C
G major chord is formed by G-B-D
A minor chord is formed by A-C-E
B dim   chord is formed by B-D-F

尽管在这个领域做了很多研究,但你所描述的问题还没有很好地解决。例如,看看其他论文,他们建议基于和弦进行对音乐信号进行中级概括。因此,基于监督学习模型从音乐信号中识别和弦进行,并通过局部探测n个最佳候选者来提高识别精度。

因此,你可以研究和弦进行的特性,然后根据探测到的和弦进行计算直方图,作为音乐信号的摘要。然后,通过基于和弦进行的总结,你可以描述音乐信号的和声进行和音调结构。

但是怎么做呢?,好吧,你需要音乐数据集(>70000首歌曲??),这样你就可以检索相关信息。。。

实际上,这是一个非常有趣的问题。

我想说,这里还有一件事需要考虑和理解:你想用你的和弦进行说什么(即:表达什么)?我想你想用你的旋律和辅助和弦的进行来表达"有意义的东西"。

现在,"有意义的东西"并不是一个确切的术语。就我个人而言,我会把这个词描述为一个完整的、完整的、短篇小说。它可以像4个和弦一样简短,但它应该说明一些事情,并且应该加起来成为一个完整的故事。如果我们接受这一点,那么我想说,你的4和弦应该从开始一直"引导"到结束,我们应该"感受"最后一个和弦,因为它是"故事"的一个令人满意的结局(解决方案)。

困难的是,对于每个人来说,"令人满意"、"体面"等词可能意味着完全不同的东西,而对你来说令人满意的东西可能对另一个人来说并不令人满意。尽管在音乐理论中有一些基本的指导方针(在上面的答案和评论中链接),这些指导方针是伟大的作曲家在数百年的音乐生涯中测试过的,所以我想你应该尝试其中的一些提示。

定义C主的7个正常三元组,并将它们分别放在7个独立的3个向量中。然后使用随机生成器拾取4个和弦,指定是否允许重复和弦。如果您希望进度是";hipper";,使用第7和弦和延长/变调。对于这个版本,7和弦需要4个矢量,9和弦需要5个矢量,11和弦需要6个矢量,13和弦需要7个矢量。如果你首先将音阶定义为从C到B的7向量,那么你实际上可以通过简单地围绕音阶循环并提取其他音符来生成所有这些和弦,类似于它们的定义方式。你仍然需要指定循环何时结束,否则你会得到一个听不见的无尽和弦。Python和许多其他编程语言都有一个用于不同频率的实际库,所以如果你用特定的频率定义每个音符,你就可以用这个程序来写旋律、和声和整个动作。

相关内容

  • 没有找到相关文章

最新更新