一段时间以来,我一直在为程序的内容生成投入很多思想,并且从未见过对程序音乐的大量实验。我们拥有用于生成模型,动画,纹理的出色技术,但是音乐仍然是完全静态的或只是分层循环(例如,孢子)。
因此,我一直在思考最佳的音乐生成技术,并对其他人的想法感到好奇。即使您以前没有考虑过,您认为什么会很好?请为每个答案提供一种技巧,并在可能的情况下提供示例。该技术可以使用现有数据,也可以完全从头开始生成音乐,也许需要某种输入(情绪,速度等)。
一段时间以来,我一直在为程序的内容生成投入很多思想,并且从未见过对程序音乐的大量实验。我们拥有用于生成模型,动画,纹理的出色技术,但是音乐仍然是完全静态的或只是分层循环(例如,孢子)。
因此,我一直在思考最佳的音乐生成技术,并对其他人的想法感到好奇。即使您以前没有考虑过,您认为什么会很好?请为每个答案提供一种技巧,并在可能的情况下提供示例。该技术可以使用现有数据,也可以完全从头开始生成音乐,也许需要某种输入(情绪,速度等)。
Answers:
细胞自动机- 阅读。
您也可以在这里尝试。
编辑:
rakkarage提供了另一个资源:http : //www.ibm.com/developerworks/java/library/j-camusic/
最成功的系统可能会结合多种技术。我怀疑您会发现一种在所有类型的音乐中都能很好地产生旋律,和声,节奏和低音序列的技术。
例如,马尔可夫链非常适合生成旋律和谐波序列。此方法需要分析现有歌曲以建立链转移概率。马尔可夫链的真正美在于,国家可以随心所欲。
神经网络非常适合于时间序列预测(预测),这意味着当针对现有流行的旋律/和声进行训练时,神经网络同样适用于“预测”音乐序列。最终结果将类似于马尔可夫链方法。除了减少内存占用量之外,我想不出与马尔可夫链方法相比有什么好处。
除音高外,您还需要持续时间来确定所生成音符或和弦的节奏。您可以选择将此信息合并到马尔可夫链状态或神经网络输出中,也可以单独生成并合并独立的音高和持续时间序列。
遗传算法可用于发展节奏部分。一个简单的模型可以使用二进制染色体,其中前32位代表踢鼓的模式,后32位代表军鼓,后32位代表封闭式踩hi,等等。这种情况的不利之处在于,他们需要持续的人类反馈来评估新进化模式的适用性。
的专家系统可以用来验证由其它技术产生的序列。这种验证系统的知识库可能可以从任何好的音乐理论书籍或网站上获得。尝试Ricci Adams的musictheory.net。
对这些技术的研究已有50多年的历史,经常被不熟悉计算机音乐和算法组成历史的开发人员所忽视。在这里可以找到解决这些问题的大量系统和研究示例:
Dmitri Tymoczko在这里有一些有趣的想法和示例:
http://music.princeton.edu/~dmitri/whatmakesmusicsoundgood.html
我的软件使用应用进化论来“发展”音乐。该过程类似于Richard Dawkins的The Blind Watchmaker程序-MusiGenesis随机添加音乐元素,然后用户决定是否保留每个添加的元素。想法是保持自己喜欢的东西,扔掉听起来不正确的东西,并且您不需要任何音乐训练就可以使用它。
界面变了,但是太旧了-告我。
我一直很喜欢使用iMuse系统的旧式Lucasarts游戏,该系统为游戏产生了永无止境的,反应灵敏的音轨,并且非常具有音乐性(因为其中大部分仍由作曲家创作)。您可以在这里找到规格(包括专利):http : //en.wikipedia.org/wiki/IMUSE
任天堂似乎仍是唯一一家仍使用类似于iMuse的方法来即时创作或影响音乐的公司。
除非您的项目具有很高的实验性,否则我不会放弃使用作曲家-真正的人类作曲家所产生的音乐和听觉上的效果要比算法上的要高。
将它与写一首诗进行比较:您可以轻松地生成听起来很前卫的非色情诗,但是要轻描淡写地复制莎士比亚的算法很难。
您是否看过SoundHelix(http://www.soundhelix.com)?这是一个用于算法随机音乐创作的开源Java框架,可产生精美的音乐。您可以将SoundHelix用作独立的应用程序,嵌入在网页中的applet,基于JNLP的applet,也可以将其包含在自己的Java程序中。
使用SoundHelix生成的示例可以在以下位置找到:http : //www.soundhelix.com/audio-examples
非乏味程序音乐生成的研究可以追溯到很早以前。浏览《计算机音乐杂志》的新旧版本, 网址为http://www.mitpressjournals.org/cmj (无真实域名?),其中包含严肃的技术文章,可用于音乐合成修补匠,烙铁骑师,位牧民和学术研究人员。这是一个蓬松的评论和访谈内容,例如您可以在主要书店中找到的一些杂志。
这么大的话题。您可以在morganpackard.com上查看我的iPad应用程序,Thicket或我的Ripple软件。以我的经验,大多数动态音乐生成的学术方法都是听起来不错的东西。我认为,在俱乐部/电子世界的边缘发现了更成功的东西。在这方面,莫诺莱克是我的英雄。非常可听的东西,非常由计算机生成。我自己的音乐也不错。保罗·兰斯基(Paul Lansky)的“字母书”(Alphabet Book)是极易听的算法音乐的典范,尤其是考虑到他是一个学术人物。
我一直在考虑的技术是创建小的音乐图案,直至大约一个小节。用感觉标识符(例如“兴奋”,“强烈”等)标记这些模式。当您要为某种情况生成音乐时,请根据这些标记选择一些模式,然后选择您要用来演奏的乐器。根据乐器,弄清楚如何组合模式(例如,在钢琴上,您可以将其全部演奏,具体取决于手的跨度;在吉他上,您可以快速连续演奏音符),然后将其呈现为PCM 。此外,您可以更改键,更改速度,添加效果等。
早在90年代后期,微软就创建了一个名为“交互式音乐控件”的ActiveX控件,它确实满足了您的期望。不幸的是,他们似乎放弃了该项目。
不完全是您想要的,但我知道有人看着自动生成DJ集的方法,称为基于内容的音乐相似性。
如果您对音乐如何相互融合有更深入的了解,Bill Sethares的网站会有些有趣的变化。
我一直在研究这个项目提案-哥本哈根大学CS系“编程语言的理论和实践”研究小组的“ 8.1 ”:
8.1音乐语料库的自动收获和统计分析
传统的活页乐谱分析是由一个或多个人分析同一首乐曲的节奏,和弦序列和其他特征,这是在同一位作曲家或同一时期的其他作曲家经常模糊地比较其他乐曲的背景下进行的。
传统的音乐自动分析几乎没有处理活页乐谱,而是集中于信号分析和使用机器学习技术来提取和分类(例如情绪或流派)。相反,DIKU的初期研究旨在使活页乐谱分析的一部分自动化。增加的价值是从大量活页乐谱中提取信息的潜力,这是不容易手工完成的,并且无法通过机器学习技术进行有意义的分析。
正如我所看到的,这是您问题的相反方向,我想像是生成的数据可用于音乐程序生成的某些情况。
我一直在研究用于程序音乐的Python模块。我只是将我对音符,音阶和和弦构造了解的内容进行编程,然后能够使其根据这些约束随机生成内容。我敢肯定,像这样的系统可以教授更多的理论和模式,尤其是那些对主题更了解的人。然后,您可以将这些系统用作遗传算法或随机内容生成的约束。
您可以在这里查看我的实现,尤其是随机生成的线索示例可能对您有用。一个对和弦进程有深入了解的人可以使用类似的技术来创建歌曲结构,并在其上实现受限的随机旋律。我对音乐理论的了解不那么广。
但基本上,您需要对要生成的音乐类型的理论进行编码,然后将其用作某种算法的约束条件,以便从程序上探索该理论的范围。