我已经在很长一段时间内对程序生成内容进行了大量的思考,而且我从未见过过多的程序音乐实验.我们有很棒的技术来生成模型,动画,纹理,但音乐仍然是完全静态的或简单的分层循环(例如孢子).
因此,我一直在考虑最佳的音乐生成技术,我很好奇其他人的想法.即使您之前没有考虑过,您认为哪种方法效果很好?请回答一种技巧,并尽可能包含示例.该技术可以使用现有数据或完全从头开始生成音乐,可能是某种输入(情绪,速度,等等).
最成功的系统可能会结合多种技术.我怀疑你会找到一种适用于所有音乐类型的旋律,和声,节奏和低音序列生成的技巧.
例如,马尔可夫链非常适合旋律和谐波序列生成.该方法需要分析现有歌曲以构建链转移概率.马尔可夫链的真正美在于各州可以成为你想要的任何东西.
对于旋律生成,尝试键相关音符编号(例如,如果键是C小调,C将是0,D将是1,D#将是2,依此类推)
对于和声生成,请尝试和弦根音的关键相对音符编号的组合,和弦的类型(主要,次要,减少,增强等)和和弦的反转(根,第一或第二)
神经网络非常适合于时间序列预测(预测),这意味着它们在与现有流行的旋律/和声进行训练时同样适合于"预测"音乐序列.最终结果将类似于马尔可夫链方法.除了减少内存占用量之外,我无法想到马尔可夫链方法的任何好处.
除了音高之外,您还需要持续时间来确定生成的音符或和弦的节奏.您可以选择将此信息合并到马尔可夫链状态或神经网络输出中,也可以单独生成它并组合独立的音高和持续时间序列.
遗传算法可用于演化节奏部分.一个简单的模型可以使用二进制染色体,其中前32位表示底鼓的模式,第二个32位表示小鼓,第三个32位表示闭合的嗨帽,依此类推.这种情况的缺点是它们需要连续的人工反馈来评估新演化模式的适应性.
的专家系统可以用来验证由其它技术产生的序列.这种验证系统的知识库可能会从任何好的音乐理论书籍或网站中解脱出来.试试Ricci Adams的musictheory.net.
元胞自动机 - 阅读.
你也可以在这里尝试一下.
编辑:
rakkarage提供了另一种资源:http://www.ibm.com/developerworks/java/library/j-camusic/
对这些技术进行了50多年的研究,经常被不熟悉计算机音乐和算法组成历史的开发人员所忽视.可以在此处找到解决这些问题的系统和研究的大量示例:
http://www.algorithmic.net
一种简单而有效的算法是使用1/f噪声(又称"粉红噪声")从比例中选择持续时间和音符.这听起来有点像音乐,可以作为一个很好的起点.
更好的算法是使用"马尔可夫链".扫描一些示例音乐并构建概率表.在最简单的情况下,类似C的是20%可能会遵循A.为了使这更好,请查看过去几个音符的顺序,例如"CA B"15%可能跟随B,然后,只需使用之前选择的音符的概率选择音符,然后4%可能会跟随Bb等.这种非常简单的算法可以产生非常好的结果.
用于音乐生成的马尔可夫链
Dmitri Tymoczko在这里有一些有趣的想法和例子:
http://music.princeton.edu/~dmitri/whatmakesmusicsoundgood.html