一段时间以来,我一直在对内容的程序生成进行大量思考,但我从未见过对程序音乐进行太多实验。我们拥有用于生成模型、动画、纹理的绝妙技术,但音乐仍然要么是完全静态的,要么是简单的分层循环(例如 Spore)。
正因为如此,我一直在思考最佳的音乐生成技术,我很好奇其他人的想法。即使你以前没有考虑过,你认为什么会很好用?请每个答案使用一种技术,并在可能的情况下包括示例。该技术可以使用现有数据或完全从头开始生成音乐,可能是基于某种输入(情绪、速度等)。
一段时间以来,我一直在对内容的程序生成进行大量思考,但我从未见过对程序音乐进行太多实验。我们拥有用于生成模型、动画、纹理的绝妙技术,但音乐仍然要么是完全静态的,要么是简单的分层循环(例如 Spore)。
正因为如此,我一直在思考最佳的音乐生成技术,我很好奇其他人的想法。即使你以前没有考虑过,你认为什么会很好用?请每个答案使用一种技术,并在可能的情况下包括示例。该技术可以使用现有数据或完全从头开始生成音乐,可能是基于某种输入(情绪、速度等)。
最成功的系统可能会结合多种技术。我怀疑你会找到一种适用于所有音乐流派的旋律、和声、节奏和低音序列生成的技术。
例如,马尔可夫链非常适合旋律和和声序列的生成。这种方法需要分析现有歌曲来构建链转换概率。马尔可夫链的真正美妙之处在于状态可以是任何你想要的。
神经网络非常适合时间序列预测(预测),这意味着当针对现有流行旋律/和声进行训练时,它们同样适合“预测”音乐序列。最终结果将类似于马尔可夫链方法。除了减少内存占用之外,我想不出马尔可夫链方法有什么好处。
除了音高,您还需要持续时间来确定生成的音符或和弦的节奏。您可以选择将此信息合并到马尔可夫链状态或神经网络输出中,或者您可以单独生成它并组合独立的音高和持续时间序列。
遗传算法可用于进化节奏部分。一个简单的模型可以使用二进制染色体,其中前 32 位表示底鼓的模式,第二个 32 位表示小鼓,第三个 32 位表示关闭的踩镲,依此类推。在这种情况下,缺点是它们需要持续的人工反馈来评估新进化模式的适用性。
专家系统可用于验证由其他技术生成的序列。这种验证系统的知识库可能可以从任何好的音乐理论书籍或网站中获取。试试 Ricci Adams 的musictheory.net。
元胞自动机 -阅读。
你也可以在这里试试。
编辑:
rakkarage 提供了另一个资源:http ://www.ibm.com/developerworks/java/library/j-camusic/
对这些技术进行了 50 多年的研究,但经常被不熟悉计算机音乐和算法作曲历史的开发人员所忽视。可以在此处找到解决这些问题的许多系统和研究示例:
一种简单且有效的算法是使用 1/f 噪声(又称“粉红噪声”)从音阶中选择持续时间和音符。这听起来有点像音乐,可以作为一个很好的起点。
更好的算法是使用“马尔可夫链”。扫描一些示例音乐并建立一个概率表。在最简单的情况下,可能是 C 有 20% 的可能性跟随 A。为了更好地说明这一点,请查看过去几个音符的顺序,例如“CA B”有 15% 的可能性跟随 B,和 4% 可能后面跟着一个 Bb 等。然后,只需使用先前选择的音符的概率来选择音符。这个非常简单的算法产生了非常好的结果。
Dmitri Tymoczko 在这里有一些有趣的想法和例子:
http://music.princeton.edu/~dmitri/whatmakesmusicsoundgood.html
我的软件使用应用进化论来“发展”音乐。这个过程类似于 Richard Dawkins 的The Blind Watchmaker计划——MusiGenesis 随机添加音乐元素,然后用户决定是否保留每个添加的元素。这个想法是只保留你喜欢的东西,抛弃任何听起来不正确的东西,而且你不需要接受任何音乐训练来使用它。
界面爆炸,但它很旧 - 起诉我。
我一直很喜欢使用 iMuse 系统的老 Lucasarts 游戏,它为游戏制作了永无止境的反应式配乐,而且非常具有音乐性(因为大部分仍然是由作曲家创作的)。您可以在此处找到规格(包括专利): http ://en.wikipedia.org/wiki/IMUSE
任天堂似乎是唯一一家仍然使用类似于 iMuse 的方法来即时创作或影响音乐的公司。
除非你的项目是非常实验性的,否则我不会放弃使用作曲家——真正的人类作曲家会比算法产生更多的音乐和可听的结果。
把它比作写一首诗:你可以很容易地写出听起来很前卫的无意义的诗歌,但是用算法来复制莎士比亚是困难的,委婉地说。
对非无聊程序音乐生成的研究可以追溯到很久以前。浏览计算机音乐杂志的新旧问题 http://www.mitpressjournals.org/cmj (没有真实域名?)这是音乐合成修补匠、烙铁骑师、牧民和学术研究人员实际使用的严肃技术文章。这不是诸如在主要书店中可以找到的几本杂志之类的蓬松评论和采访。
你看过 SoundHelix (http://www.soundhelix.com) 吗?这是一个用于算法随机音乐创作的开源 Java 框架,可以产生非常整洁的音乐。您可以将 SoundHelix 用作独立应用程序、嵌入网页的小程序、基于 JNLP 的小程序,或者您可以将其包含到您自己的 Java 程序中。
可以在此处找到使用 SoundHelix 生成的示例:http: //www.soundhelix.com/audio-examples
这么大的题目。您可以在 morganpackard.com 上查看我的 iPad 应用程序、Thicket 或我的 Ripple 软件。根据我的经验,大多数动态音乐生成的学术方法都提出了听起来很学术的东西。我认为在俱乐部/电子世界的边缘可以找到更成功的东西。在这方面,Monolake 是我的英雄。非常好听的东西,非常计算机生成的。我自己的音乐也不错。Paul Lansky 的“Alphabet Book”是非常好听的算法音乐的一个很好的例子,特别是考虑到他是一个学术人士。
我一直在考虑的技术是创建小的音乐模式,最多一个小节左右。用感觉标识符标记这些模式,例如“兴奋”、“强烈”等。当您想为某种情况生成音乐时,请根据这些标签选择一些模式并选择您想要演奏的乐器。根据乐器,弄清楚如何组合模式(例如,在钢琴上,您可能可以一起演奏,这取决于手的跨度,在吉他上,您可以快速连续演奏音符),然后将其渲染到 PCM . 此外,您可以更改键、更改速度、添加效果等。
《算法组合》一书很好地介绍了所使用的几种方法:
“涵盖的主题包括:马尔可夫模型、生成语法、过渡网络、混沌和自相似性、遗传算法、元胞自动机、神经网络和人工智能。”
这是这个广泛主题的一个很好的起点,但是它从未深入描述每种方法的工作原理。它提供了对每一个的很好的概述,但如果您还没有关于它们的知识,这还不够。
早在 90 年代后期,微软就创建了一个名为“交互式音乐控件”的 ActiveX 控件,它可以满足您的需求。不幸的是,他们似乎已经放弃了这个项目。
不完全是您所追求的,但我知道有人研究自动生成 DJ 集,称为基于内容的音乐相似度。
如果您对音乐如何联系在一起的更深层次的理论感兴趣,Bill Sethares 网站有一些有趣的转折。
我一直在研究这个项目提案 -来自哥本哈根大学计算机系的“编程语言的理论与实践”研究组的“8.1 ”:
8.1 音乐语料库的自动采集和统计分析
传统的乐谱分析包括一个或多个人分析单个乐曲的节奏、和弦序列和其他特征,设置在同一作曲家或同一时期的其他作曲家对其他乐曲的模糊比较的背景下。
传统的自动音乐分析几乎没有处理活页乐谱,而是专注于信号分析和使用机器学习技术来提取和分类,比如情绪或流派。相比之下,DIKU 的初期研究旨在实现乐谱分析的部分自动化。附加值是从大量活页乐谱中提取信息的潜力,这些信息不能用手轻易完成,也不能通过机器学习技术进行有意义的分析。
这 - 如我所见 - 与您的问题相反,生成的数据 - 我想 - 可用于某些程序生成音乐的实例。
我的观点是,生成音乐只有经过严格的选择过程才能发挥作用。算法音乐先驱大卫·科普(David Cope)会从他的算法(我认为这些算法主要基于马尔可夫链)中进行数小时的音乐输出,以挑选出少数实际上表现良好的音乐。
我认为这个选择过程可以通过对特定音乐风格的特征进行建模来自动化。例如,“迪斯科”风格会为带有非节拍和鼓声部分的贝斯线加分,在反拍上带有圈套,但会因严重不和谐的和声而减分。
事实是,音乐创作过程充满了如此多的惯用做法,如果没有该领域的具体知识,它们很难建模。
我一直在研究用于程序音乐的 Python 模块。我只是将我所知道的关于音符、音阶和和弦构造的知识编程出来,然后能够让它从这些约束中随机生成内容。我敢肯定,这样的系统可以教授更多的理论和模式,尤其是由更了解该主题的人来教授。然后,您可以将这些系统用作遗传算法或随机内容生成的约束。
您可以在此处查看我的实现,尤其是随机生成的主要示例可能对您有用。对和弦进行有深入了解的人可以使用这样的技术创建歌曲结构,并在其上实现这样的受限随机旋律。我的音乐理论知识并没有延伸到那么远。
但基本上,您需要对您想要生成的音乐类型的理论进行编码,然后将其用作某些算法的约束,以便在程序上探索该理论的范围。