程序音乐生成技术

时间:2008-10-07 23:43:06

标签: procedural generative

我已经花了很多时间考虑内容的程序生成,我从未见过过多的程序音乐实验。我们有很棒的技术来生成模型,动画,纹理,但音乐仍然是完全静态的或简单的分层循环(例如孢子)。

正因为如此,我一直在考虑最佳的音乐生成技术,我很好奇其他人的想法。即使您之前没有考虑过,您认为哪种方法效果很好?请回答一种技巧,并尽可能包含示例。该技术可以使用现有数据或完全从头开始生成音乐,可能是某种输入(情绪,速度等等)。

19 个答案:

答案 0 :(得分:42)

最成功的系统可能会结合多种技术。我怀疑你会找到一种适用于所有音乐类型的旋律,和声,节奏和低音序列生成的技巧。

例如,

Markov chains非常适合旋律和谐波序列生成。该方法需要分析现有歌曲以构建链转移概率。马尔可夫链的真正美妙之处在于状态可以是你想要的任何东西。

  • 对于旋律生成,尝试键相关音符编号(例如,如果键是C小调,C将是0,D将是1,D#将是2,依此类推)
  • 对于和声生成,尝试为和弦的根音,和弦的类型(主要,次要,减少,增强等)和和弦的反转(根,首先)组合键相对音符编号或者第二次)

Neural networks非常适合time series prediction(预测),这意味着它们在对抗现有流行旋律/和声时,同样适合'预测'音乐序列。最终结果将类似于马尔可夫链方法。除了减少内存占用空间之外,我无法想到马尔可夫链方法的任何好处。

除了音高之外,你还需要持续时间来确定所产生的音符或和弦的节奏。您可以选择将此信息合并到马尔可夫链状态或神经网络输出中,也可以单独生成它并组合独立的音高和持续时间序列。

Genetic algorithms可用于演变节奏部分。一个简单的模型可以使用二进制chromosome,其中前32位表示底鼓的模式,第二个32位表示小鼓,第三个32位表示封闭的嗨帽,依此类推。这种情况的缺点是它们需要连续的人工反馈来评估新演化模式的适应性。

expert system可用于验证其他技术生成的序列。这种验证系统的知识库可能会从任何好的音乐理论书籍或网站中解脱出来。试试Ricci Adams'musictheory.net

答案 1 :(得分:28)

元胞自动机 - read

您也可以尝试here

修改

rakkarage提供了另一种资源:http://www.ibm.com/developerworks/java/library/j-camusic/

答案 2 :(得分:10)

对这些技术进行了50多年的研究,经常被不熟悉计算机音乐和算法组成历史的开发人员所忽视。解决这些问题的系统和研究的大量例子可以在这里找到:

http://www.algorithmic.net

答案 3 :(得分:7)

一种简单而有效的算法是使用1 / f噪声(又称“粉红噪声”)从比例中选择持续时间和音符。这听起来有点像音乐,可以作为一个很好的起点。

更好的算法是使用“马尔可夫链”。扫描一些示例音乐并构建概率表。在最简单的情况下,C类似20%可能会遵循A.为了使这更好,请查看过去几个音符的顺序,例如“CAB”可能跟随B的15%,并且4%可能会跟随Bb等。然后,只需使用先前选择的音符的概率选择音符。这个非常简单的算法可以产生非常好的结果。

Markov chains for music generation

答案 4 :(得分:6)

Dmitri Tymoczko在这里有一些有趣的想法和例子:

http://music.princeton.edu/~dmitri/whatmakesmusicsoundgood.html

答案 5 :(得分:4)

My software使用应用进化论来“成长”音乐。这个过程类似于Richard Dawkins的The Blind Watchmaker程序--MusiGenesis随机添加音乐元素,然后用户决定是否保留每个添加的元素。我们的想法是保持你喜欢的东西并抛弃听起来不对的东西,而你不需要接受任何音乐训练就可以使用它。

接口爆炸,但它已经老了 - 起诉我。

答案 6 :(得分:4)

我一直很喜欢使用iMuse系统的旧Lucasarts游戏,它为游戏制作了一个永无止境的,反应性的音轨,非常具有音乐性(因为它大部分还是由作曲家创作的)。你可以在这里找到规格(包括专利): http://en.wikipedia.org/wiki/IMUSE

任天堂似乎是唯一仍然使用类似于iMuse的方法来创建或影响音乐的公司。

除非你的项目非常具有实验性,否则我不会放弃使用作曲家 - 真正的人类作曲家会产生比algorythm更多的音乐和可听的结果。

将它与写一首诗相提并论:你可以很容易地产生听起来非常前卫的非诗歌,但是用一种方法来复制莎士比亚很难,说得温和。

答案 7 :(得分:3)

你看过SoundHelix(http://www.soundhelix.com)了吗?它是用于算法随机音乐创建的开源Java框架,可生成非常整洁的音乐。您可以将SoundHelix用作独立应用程序,作为嵌入在网页中的applet,作为基于JNLP的applet,或者可以将其包含在您自己的Java程序中。

使用SoundHelix生成的示例可在此处找到:http://www.soundhelix.com/audio-examples

答案 8 :(得分:3)

关于非枯燥的程序性音乐生成的研究可以追溯到过去。浏览计算机音乐杂志的新旧问题 http://www.mitpressjournals.org/cmj(没有真正的域名?)这里有一些严肃的技术文章,实际用于音乐合成修补匠,烙铁骑师,比特牧民和学术研究人员。这是一个蓬松的评论和采访抹布,如你可以在大型书店找到的几个杂志。

答案 9 :(得分:2)

这么大的主题。您可以在morganpackard.com上查看我的iPad应用程序,Thicket或我的Ripple软件。根据我的经验,大多数动态音乐生成的学术方法都提出了听起来很好的学术方法。我认为更成功的东西是在俱乐部/电子世界的边缘找到的。在这方面,Monolake是我的英雄。非常可听的东西,非常由计算机生成。我自己的音乐也不错。 Paul Lansky的“Alphabet Book”是极其可听的算法音乐的一个很好的例子,特别是考虑到他是一个学术家。

答案 10 :(得分:1)

我一直在考虑的技术是制作小型音乐模式,最多可达到一个小时左右。使用感觉标识符(例如“兴奋”,“激烈”等)标记这些模式。当您想要为某种情况生成音乐时,请根据这些标记选择一些模式并选择您想要播放的乐器。根据乐器,找出如何组合模式(例如在钢琴上你可以一起演奏,根据手掌跨度,在吉他上你可以连续快速演奏音符),然后将它渲染到PCM 。此外,您可以更改键,更改速度,添加效果等。

答案 11 :(得分:1)

这本书Algorithmic Composition很好地介绍了几种使用的方法:

“涵盖的主题包括:马尔可夫模型,生成语法,过渡网络,混沌和自相似性,遗传算法,细胞自动机,神经网络和人工智能。”

这是这个广泛主题的一个很好的起点,但它从未深入描述每种方法的工作原理。它提供了每个的良好概述,但如果您还不了解它们,则不够。

答案 12 :(得分:1)

你所描述的具体技术是托马斯·杜比在十年或十五年前所做的事情,虽然我现在不记得他所谓的,所以我不能给你一个好的搜索词。

但请参阅this维基百科文章和this Metafilter页面。

答案 13 :(得分:0)

我一直在研究来自哥本哈根大学CS部门的“编程语言理论与实践”研究小组中的this project proposal - "8.1

  

8.1音乐语料库的自动收集和统计分析

     

传统的乐谱分析   由一个或多个人组成   分析节奏,和弦序列和   单一的其他特征   片,在经常的背景下设定   其他作品的模糊比较   同一位作曲家或其他作曲家   从同一时期。

     

传统   音乐的自动分析几乎没有   对待乐谱,但有重点   关于信号分析和使用   机器学习技术提取   并在内心,比如,心情或分类   类型。相比之下,初期研究   在DIKU的目标是实现部分自动化   乐谱分析。补充说   值是提取的潜力   来自大量的信息   乐谱无法轻易完成   手工,不能有意义   通过机器学习分析   技术。

这 - 正如我所看到的 - 与你的问题相反的方向 - 数据生成 - 我想 - 可以用于某些程序生成音乐的实例。

答案 14 :(得分:0)

我的观点是,生成音乐只有在经过严格的选择过程才有效。算法音乐先驱大卫·科普(David Cope)将从他的算法(我认为主要基于马尔可夫链)算起数小时的音乐输出,以找出实际上很好的几个。

我认为这个选择过程可以通过对特定音乐风格的特征进行建模来实现自动化。例如,“迪斯科”风格会为低音线提供很多分数,其中有背景音乐和鼓声部分,后背上有小鼓,但减去了非常不和谐的和声点。

事实上,音乐创作过程充满了许多习惯用法,如果没有对该领域的具体了解,就很难进行模拟。

答案 15 :(得分:0)

如果你深入了解音乐如何融合在一起,Bill Sethares site会有一些有趣的曲折。

答案 16 :(得分:0)

不完全是你所追求的,但我知道有人自动生成名为Content Based Music Similarity的DJ集。

答案 17 :(得分:0)

我一直在为程序音乐制作一个Python模块。我只是编写了我对音符,音阶和和弦构造的了解,然后能够让它随机生成这些约束中的内容。我确信有更多的理论和模式可以教授这样的系统,尤其是那些更了解这个主题的人。然后,您可以将这些系统用作遗传算法或随机内容生成的约束。

您可以查看我的实施here,尤其是随机生成的潜在客户示例可能对您有用。对和弦进行有深刻理解的人可以从这样的技术中创建一个歌曲结构,并在其上实现这样的约束随机旋律。我对音乐理论的了解并没有延伸到那么远。

但基本上,你需要对你想要生成的音乐类型的理论进行编码,然后将其用作某种算法的约束,以便在程序上探索该理论的范围。

答案 18 :(得分:0)

回到90年代后期,微软创建了一个名为“交互式音乐控制”的ActiveX控件,它完全符合您的要求。不幸的是,他们似乎放弃了这个项目。