为旋律创建制作基本算法的简单方法?

时间:2014-01-11 22:56:08

标签: algorithm

我在这里看到了几个关于音乐制作算法的问题。但它们都涉及复杂构图和不同风格和方法的算法。

我正在开发一个程序,用于从 C Major 比例创建简单旋律。我正在设计一个简单的算法,但有点卡住了。

我想知道我正在设计的算法是否是实现此类事情的一个很好的“总体方向”。你怎么看呢?这是一种正确的思考方式,还是你推荐另一种方法?

我目前的方法涉及仅存在16个四分音符的旋律,分为四个小节(这将是无聊的,因为它没有节奏。仅作为开始)。工作原理:

  • 该程序首先将四个三和弦从音阶中随机化 (音阶有7个和弦可供选择)。然后为每个人分配一个和弦 四项措施之一。

  • 之后,程序会为每个小节的第一个音符分配一个四分音符。那 note将是构成和弦的三个音符中的一个 测量。 (随机选择三个中的一个)。

  • 然后,程序会为每个小节的3个剩余插槽分配注释。这些笔记将是前一张纸币的第二张,前一张纸币的第二张,前一张纸币的第三张或下面的第三张。

这产生的旋律不一定听起来不错,但听起来并不特别“坏”。所以从某种意义上说,它“有效”。

但正如我所说,我想知道是否有更好的方法来创建一个简单的旋律制作算法,如果我目前的方法有任何问题(除了缺乏任何节奏多样性,疗程)。

谢谢

2 个答案:

答案 0 :(得分:6)

这不是一个糟糕的开始,但请考虑以下批评和建议:

批判:

  • 第二步和第三步使第一步浪费。你基本上只是选择一个随机音符来开始每个小节 - 事实上它是这个音阶中三元组的一部分,因为你允许程序完全偏离那个三元组。也许你是想通过确保它们是4个独特三合一的一部分来获得独特的启动音符,但三合会之间有如此多的重叠,这几乎不值得努力。此外,从音乐理论的角度来看,简单地用三重奏中的音符开始一个音量不足以使该音量听起来像/代表某个三重奏。

建议:

  • 你应该从每个小节中只播放所选三元组的音符开始。这将导致更自然的旋律。然后,尝试在这里或那里允许非和弦音符 - 音乐理论的一个“规则”是非弦音应该通过半步接近或者以半步进行。例如,如果给定的测量指定了C大调和弦,则使用非和弦音调的安全序列将是G,G#,E,G(G#是可接受的非弦音,因为前面是半步音)。如果你向上接近非弦音,你应该向下解决,反之亦然;但是你可以在没有遵循的情况下离开。如果您想要找到更多像这样的“规则”,请在Google上搜索非和弦音。你可能会遇到一些相当沉重的音乐理论。另一种简单的方法是注入听起来不错的非弦音,只需将主要和次要的7个音调放入每个小节中

    • 你不应该选择任何旧的随机4三合一,除非你希望你的旋律听起来很实验(读:坏)。正如你所知,最简单,最安全的和弦进行之一是I,IV,V,I;这被称为滋补扩张。这些和弦中的每一个都有一个或多个传统的替代品;例如,V和弦可以用缩小的vii代替,产生I,IV,viiDim,I。你会注意到C大调的V和弦是GBD而vii减少的是BDF - 它们共享两个相同的音符(BD);因此,耳朵通常接受它们作为彼此的替代品。我会伪随机选择基于强力扩张的四个和弦,允许替换I,IV,V,I。

    • 至少,你应该几乎可以肯定在补品上开始旋律,以补品结束,并以倒数第二个音符为主导(第五个音符)。 99%的西方音乐遵循这些“规则”。

我不确定你知道多少音乐理论,但我已经研究了一下,如果你愿意,我会很乐意指出一些更详细的相关观点;不过,我认为我在这里所包含的内容足以让你有一个不错的开始。

答案 1 :(得分:0)

此领域已经进行了大量研究,通常称为算法组合。对wikipedia page有一个合理的概述。根据您是从一组规则合成音乐,还是分析了大量的源材料以生成Markov Models来编码下一个可能性,这些系统被分为几种不同的类型。考虑到之前的注释,请注意。

我建议阅读许多可用的论文,以便更多地了解这个问题。他们中的大多数人会回顾经典着作,Lerdahl和Jackendoff的Generative Theory of Tonal Music