程序音乐生成技术


89

一段时间以来,我一直在为程序的内容生成投入很多思想,并且从未见过对程序音乐的大量实验。我们拥有用于生成模型,动画,纹理的出色技术,但是音乐仍然是完全静态的或只是分层循环(例如,孢子)。

因此,我一直在思考最佳的音乐生成技术,并对其他人的想法感到好奇。即使您以前没有考虑过,您认为什么会很好?请为每个答案提供一种技巧,并在可能的情况下提供示例。该技术可以使用现有数据,也可以完全从头开始生成音乐,也许需要某种输入(情绪,速度等)。


19
最后是有关实际编程/制作/生成音乐的音乐问题!:D
奥德蒙(Oddmund)

Answers:


28

细胞自动机- 阅读

您也可以在这里尝试。

编辑:

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


1
Wolfram真聪明!出色的工作也使这种事情变得如此容易...
defmeta

我无法在Ubuntu机器上使用它。:(
Calmarius 2011年


问题在于它被困在12音调系统中。真正的音乐生成算法将优于常规乐器,并具有自由的谐波音调控制。钢琴采用特定的音色系统设计,这在当时已成为标准。尽管如此,十二音系统在当时还是很出色的。
蒂莫西·斯旺

42

最成功的系统可能会结合多种技术。我怀疑您会发现一种在所有类型的音乐中都能很好地产生旋律,和声,节奏和低音序列的技术。

例如,马尔可夫链非常适合生成旋律和谐波序列。此方法需要分析现有歌曲以建立链转移概率。马尔可夫链的真正美在于,国家可以随心所欲。

  • 对于生成旋律,请尝试使用相对于键的音符编号(例如,如果键为C小调,C为0,D为1,D#为2,依此类推)
  • 为了产生和声,请尝试将和弦相关的音符编号,和弦的类型(大,小,减,增高等)和和弦的倒置(根,第一个或第二个)组合使用

神经网络非常适合于时间序列预测(预测),这意味着当针对现有流行的旋律/和声进行训练时,神经网络同样适用于“预测”音乐序列。最终结果将类似于马尔可夫链方法。除了减少内存占用量之外,我想不出与马尔可夫链方法相比有什么好处。

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

遗传算法可用于发展节奏部分。一个简单的模型可以使用二进制染色体,其中前32位代表踢鼓的模式,后32位代表军鼓,后32位代表封闭式踩hi,等等。这种情况的不利之处在于,他们需要持续的人类反馈来评估新进化模式的适用性。

专家系统可以用来验证由其它技术产生的序列。这种验证系统的知识库可能可以从任何好的音乐理论书籍或网站上获得。尝试Ricci Adams的musictheory.net


10

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

http://www.algorithmic.net


7

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

更好的算法是使用“马尔可夫链”。扫描一些示例音乐,并建立一个概率表。在最简单的情况下,就像C跟随A的可能性为20%。为使情况更好,请查看过去几条音符的顺序,例如,“ CA B”跟随B的可能性为15%,然后有4%的人后面跟着Bb等。然后,只需使用先前选择的音符的概率来选择音符即可。这个非常简单的算法产生了很好的结果。

马尔可夫链产生音乐



4

我的软件使用应用进化论来“发展”音乐。该过程类似于Richard Dawkins的The Blind Watchmaker程序-MusiGenesis随机添加音乐元素,然后用户决定是否保留每个添加的元素。想法是保持自己喜欢的东西,扔掉听起来不正确的东西,并且您不需要任何音乐训练就可以使用它。

界面变了,但是太旧了-告我。


4

我一直很喜欢使用iMuse系统的旧式Lucasarts游戏,该系统为游戏产生了永无止境的,反应灵敏的音轨,并且非常具有音乐性(因为其中大部分仍由作曲家创作)。您可以在这里找到规格(包括专利):http : //en.wikipedia.org/wiki/IMUSE

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

除非您的项目具有很高的实验性,否则我不会放弃使用作曲家-真正的人类作曲家所产生的音乐和听觉上的效果要比算法上的要高。

将它与写一首诗进行比较:您可以轻松地生成听起来很前卫的非色情诗,但是要轻描淡写地复制莎士比亚的算法很难。


的确如此,但我认为用户会对“ ok”或“像样”的音乐产生更多的兴趣,而不是一遍又一遍的相同的5条“ great”曲目……
RCIX

@RCIX:您曾经使用iMuse系统玩过游戏吗?它根据需要对事物做出反应,非常微妙或明显,但它使用的是人类作曲家创作的音乐。它不会产生全新的,从未听过的音乐,但可以在提示之间进行很好的转换,可以改变音调(引入新乐器,融合其他乐器),可以加快或减慢速度,而不会丢失任何节拍。这与“相同的5条精彩曲目一遍又一遍”相去甚远。我将其称为“不断调整的音乐流,以适应当前游戏的情绪”。
Galghamon

3

您是否看过SoundHelix(http://www.soundhelix.com)?这是一个用于算法随机音乐创作的开源Java框架,可产生精美的音乐。您可以将SoundHelix用作独立的应用程序,嵌入在网页中的applet,基于JNLP的applet,也可以将其包含在自己的Java程序中。

使用SoundHelix生成的示例可以在以下位置找到:http : //www.soundhelix.com/audio-examples


3

非乏味程序音乐生成的研究可以追溯到很早以前。浏览《计算机音乐杂志》的新旧版本, 网址为http://www.mitpressjournals.org/cmj (无真实域名?),其中包含严肃的技术文章,可用于音乐合成修补匠,烙铁骑师,位牧民和学术研究人员。这是一个蓬松的评论和访谈内容,例如您可以在主要书店中找到的一些杂志。


我应该提一下,我对这本杂志的了解是基于我几年前订阅的。我认为它仍然一样好!
DarenW

2

这么大的话题。您可以在morganpackard.com上查看我的iPad应用程序,Thicket或我的Ripple软件。以我的经验,大多数动态音乐生成的学术方法都是听起来不错的东西。我认为,在俱乐部/电子世界的边缘发现了更成功的东西。在这方面,莫诺莱克是我的英雄。非常可听的东西,非常由计算机生成。我自己的音乐也不错。保罗·兰斯基(Paul Lansky)的“字母书”(Alphabet Book)是极易听的算法音乐的典范,尤其是考虑到他是一个学术人物。


1
另外,请查看音乐家用来创建东西的工具周围的社区-Pure Data,SuperCollider,Max。我首先要找到一个喜欢他的作品并从中倒退的音乐家,而不是先从概念上寻找有趣的技术。
morgancodes

1

我一直在考虑的技术是创建小的音乐图案,直至大约一个小节。用感觉标识符(例如“兴奋”,“强烈”等)标记这些模式。当您要为某种情况生成音乐时,请根据这些标记选择一些模式,然后选择您要用来演奏的乐器。根据乐器,弄清楚如何组合模式(例如,在钢琴上,您可以将其全部演奏,具体取决于手的跨度;在吉他上,您可以快速连续演奏音符),然后将其呈现为PCM 。此外,您可以更改键,更改速度,添加效果等。


1

您所描述的特定技术是托马斯·杜比(Thomas Dolby)十年或15年前就从事的工作,尽管我现在不记得他叫什么了,所以我不能给您一个很好的搜索词。

但是请参阅 Wikipedia文章和 Metafilter页面。


1
您正在考虑“生成音乐”,并且程序名为“ Koan”。
MusiGenesis

1

算法组合》一书很好地介绍了所使用的几种方法:

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

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


0

早在90年代后期,微软就创建了一个名为“交互式音乐控件”的ActiveX控件,它确实满足了您的期望。不幸的是,他们似乎放弃了该项目。


这是因为它创建的音乐完全自爆,这是算法合成音乐的一个很常见的特征。
MusiGenesis

上面@thekidder引用的Wolfram Tones项目在不吹牛方面非常成功。我期待通常的rnd点菜...
defmeta



0

我一直在研究这个项目提案-哥本哈根大学CS系“编程语言的理论和实践”研究小组的“ 8.1 ”:

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

传统的活页乐谱分析是由一个或多个人分析同一首乐曲的节奏,和弦序列和其他特征,这是在同一位作曲家或同一时期的其他作曲家经常模糊地比较其他乐曲的背景下进行的。

传统的音乐自动分析几乎没有处理活页乐谱,而是集中于信号分析和使用机器学习技术来提取和分类(例如情绪或流派)。相反,DIKU的初期研究旨在使活页乐谱分析的一部分自动化。增加的价值是从大量活页乐谱中提取信息的潜力,这是不容易手工完成的,并且无法通过机器学习技术进行有意义的分析。

正如我所看到的,这是您问题的相反方向,我想像是生成的数据可用于音乐程序生成的某些情况。


0

我的观点是,生成音乐只有在经过严格的选择过程后才能起作用。算法音乐先驱David Cope会花几个小时从他的算法中输出音乐(我认为这些算法主要是基于Markov Chain),以挑选出实际上效果很好的几个方法。

我认为可以通过对特定音乐风格的特征进行建模来使选择过程自动化。例如,“迪斯科”风格将为贝司线奖励许多分,该贝司线的特征是另类拍子和带有回响的军鼓的鼓声部分,但会减去严重不和谐的和声。

事实是,音乐创作过程中充满了许多惯用的做法,以至于没有该领域的专门知识很难建模。


0

我一直在研究用于程序音乐的Python模块。我只是将我对音符,音阶和和弦构造了解的内容进行编程,然后能够使其根据这些约束随机生成内容。我敢肯定,像这样的系统可以教授更多的理论和模式,尤其是那些对主题更了解的人。然后,您可以将这些系统用作遗传算法或随机内容生成的约束。

您可以在这里查看我的实现,尤其是随机生成的线索示例可能对您有用。一个对和弦进程有深入了解的人可以使用类似的技术来创建歌曲结构,并在其上实现受限的随机旋律。我对音乐理论的了解不那么广。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.