程序化音乐生成技术

89

我一直在思考内容的过程生成问题,并且很少看到关于程序音乐的实验。我们有非常出色的技术可以生成模型、动画和纹理,但音乐仍然要么是完全静态的,要么只是简单的循环叠加(例如Spore)。

因此,我一直在思考最优的音乐生成技术,并且很想知道其他人的想法。即使您以前没有考虑过它,您认为哪种技术会效果很好?每个答案只能包括一种技术,并尽可能包含示例。该技术可以使用现有数据或完全从头开始生成音乐,也许根据某些输入(心情,速度等)。


19
终于有一个关于实际编写/制作/生成音乐的音乐问题了! :D - Oddmund
19个回答

42
最成功的系统可能会结合几种技术。我怀疑你不会找到一种技术能够在所有音乐类型中都很好地用于旋律、和声、节奏和低音序列生成。
例如,马尔可夫链非常适合旋律和和声序列生成。这种方法需要分析现有歌曲以建立链式转换概率。马尔可夫链的真正优美之处在于状态可以是任何你想要的。
- 对于旋律生成,请尝试使用相对调音符编号(例如,如果调为C小调,则C为0,D为1,D#为2等) - 对于和声生成,请尝试使用相对调音符编号的组合,包括和弦根音、和弦类型(大、小、减、增等)和和弦的倒置(根音、第一或第二) 神经网络非常适合时间序列预测(预测),这意味着当它们训练过现有流行旋律/和声时,它们同样适合“预测”音乐序列。最终结果将类似于马尔可夫链方法。除了减少内存占用外,我想不出任何优点。
除了音高外,您还需要持续时间来确定所生成音符或和弦的节奏。您可以选择将此信息合并到马尔可夫链状态或神经网络输出中,或者单独生成并组合独立的音高和持续时间序列。

遗传算法可以用来演化节奏部分。一个简单的模型可以使用二进制染色体,其中前32位表示踢鼓的模式,第二个32位表示军鼓,第三个32位表示闭合的高帽等等。在这种情况下的缺点是需要持续的人类反馈来评估新演变的模式的适应性。

专家系统可以用来验证其他技术生成的序列。这种验证系统的知识库可能可以从任何一本好的音乐理论书籍或网站中获取。尝试Ricci Adams' musictheory.net


28

1
Wolfram真是太聪明了!做出这种东西并且让它变得如此易于使用,干得好! - defmeta
我无法在我的Ubuntu电脑上使其工作。 :( - Calmarius
http://www.ibm.com/developerworks/java/library/j-camusic/ - Rakka Rage
这个问题在于它被困在12音体系中。一个真正的音乐生成算法将比普通乐器更优秀,并具有自由的和声音调控制。钢琴是根据特定的音调系统设计的,当时被认为是标准。尽管如此,12音体系在其时代仍然是非常出色的。 - Timothy Swan

10

这些技术已有50年以上的研究历史,但很多不熟悉计算机音乐和算法作曲发展史的开发者常常忽视它们。这里可以找到许多针对这些问题的系统和研究示例:

http://www.algorithmic.net


7
一个简单而有些有效的算法是使用1/f噪声,也称为“粉色噪声”,从音阶中选择持续时间和音符。这听起来有点像音乐,可以作为一个很好的起点。
更好的算法是使用“马尔可夫链”...扫描一些示例音乐并建立概率表。在最简单的情况下,可能会出现C跟随A的概率为20%。要使其更好,请查看过去几个音符的序列,例如“C A B”后面15%的可能性是B,4%的可能性是Bb等等。然后,只需使用先前选择的音符的概率选择音符即可。这个非常简单的算法能够产生相当不错的结果。 用于音乐生成的马尔可夫链

6

4

我的软件利用应用进化理论来“生成”音乐。这个过程类似于理查德·道金斯的《盲眼钟表匠》程序——MusiGenesis会随机添加音乐元素,然后用户决定是否保留每个添加的元素。想法就是只保留你喜欢的东西,丢掉不好听的东西,而且你不需要任何音乐培训就可以使用它。

界面很糟糕,但它很老——起诉我吧。


4
我一直喜欢使用iMuse系统的老卢卡斯艺术公司游戏,该系统为游戏制作了一个无尽的、反应灵敏的背景音乐,并且非常音乐化(因为大部分还是由作曲家创作)。你可以在这里找到规格说明(包括专利): http://en.wikipedia.org/wiki/IMUSE 任天堂似乎是唯一仍然使用类似iMuse的方法来实时创建或影响音乐的公司。
除非你的项目非常实验性,否则我不会放弃使用作曲家 - 真正的人类作曲家将产生比算法更加音乐化和可听的结果。
将其与写诗相比:你可以轻松生成听起来非常前卫的无意义诗歌,但用算法复制莎士比亚则难以说得过去。

非常正确,但我认为用户会对根据游戏玩法反应的“好”或“不错”的音乐更感兴趣,而不是一遍又一遍地播放同样的5首“伟大”的曲目... - RCIX
@RCIX:你玩过使用iMuse系统的游戏吗?它对很多事情都有反应,可以非常微妙或明显地表现出来,但它使用的音乐是由人类作曲家创作的。它不会生成全新的、前所未听的音乐,但它可以在提示之间进行出色的转换,可以改变编排(引入新乐器,淡出其他乐器),可以加快或减慢速度,而且从不错过任何一个节拍。这与“一遍又一遍播放同样的5首优秀曲目”相去甚远。我会称之为“根据当前游戏情境塑造的连续音乐流”。 - Galghamon

3

非无聊的程序生成音乐的研究已经有很长时间了。可以浏览计算机音乐杂志的旧版和新版。 http://www.mitpressjournals.org/cmj (没有真正的域名?)该杂志有一些严肃的技术文章,对音乐合成器爱好者、焊接铁手、比特牧民和学术研究人员有实际用途。它不像一些在主要书店里可以找到的口碑和访谈类的杂志那样轻浮。


我应该提到,我对这本杂志的了解是基于我几年前订阅但已经过期了。我认为它仍然很好! - DarenW

3
你看过SoundHelix(http://www.soundhelix.com)了吗?它是一个开源的Java框架,用于生成算法随机音乐,产生非常棒的音乐。你可以将SoundHelix用作独立应用程序,嵌入到网页中的小应用程序,基于JNLP的小应用程序或将其包含在自己的Java程序中。
在这里可以找到使用SoundHelix生成的示例: http://www.soundhelix.com/audio-examples

2

这是一个非常重要的话题。您可以查看我的iPad应用程序Thicket,或者在morganpackard.com上查看我的Ripple软件。根据我的经验,大多数关于动态音乐生成的学术方法都会得出听起来有点“学术”的东西。我认为更成功的作品可以在俱乐部/电子音乐世界的边缘找到。Monolake在这方面是我的英雄。非常好听的作品,完全由计算机生成。我的音乐也不错。Paul Lansky的“Alphabet Book”是极易聆听的算法音乐的一个很好的例子,特别考虑到他是一位学术型人物。


1
此外,也要关注音乐家使用的工具所在的社群 - Pure Data、SuperCollider 和 Max。我会先找到一个喜欢的音乐家,然后从他们的作品开始往回追溯,而不是一开始就寻找概念上有趣的技术。 - morgancodes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接