我对自动音乐制作很感兴趣。我正在考虑一个程序,它输入大量的 1 小节琶音(为简单起见,= 固定长度的音符序列)并根据它学到的内容生成自己的序列。
首先,我知道我可以使用字母(二字?三字?)频率分析,仅适用于音符音高,然后根据频率概率生成我的序列。
你知道有没有更高级的算法,也许是专门为音乐序列教授的?
维基百科上关于算法组合的文章是一本很好的入门书。它描述了一些用于算法音乐创作的模型、著名的作曲家、书籍参考和算法作曲软件。
作为一名音乐家和软件工程专业的学生,我想我可以在这里发表一些很酷的观点:P 我自己在这个主题上做了很多工作,并计划在未来围绕这个做一些大事。
当你编写一个算法时,你的目标是想出一个解决方案——例如,在对问题进行排序时,它是一个排序列表。在算法音乐创作中,解决方案(通常)是一首令人愉悦的歌曲或旋律,具有结构等。
解决方案的问题(哈哈)不仅是客观的,而且解决方案是非常开放的。使用排序算法,您只有一种方法可以对列表进行排序。通过音乐创作,您可以拥有数百万首悦耳的歌曲/无论您的目标是什么。
因此,您将需要一种算法,该算法不利于找到确定的解决方案,而是找到最优的解决方案。我的建议是遗传算法或类似的。遗传算法很棒,因为它们可以创建各种最佳解决方案的池。
您需要将乐曲分解为多个部分 - 为旋律设置 GA,为节奏设置 GA,为结构设置 GA,等等。并设计适合您的健身功能以满足您的需求。
当然,这只是解决问题的一种方法;有很多,前面列出的维基百科链接是一个很好的开始。
我建议查看:GenJam:一种即兴爵士乐遗传算法,旨在交易独奏 - http://www.it.rit.edu/~jab/GenJam.html
而且这本书很有启发性: http ://www.springer.com/computer/information+systems/book/978-1-84628-599-8
我想另一种有趣的方法是使用神经网络……但是给它们设置集合可能会有点问题……这需要更多的工作。
无论如何,祝你的事业好运:P
对现有音乐的统计分析——好吧——平均水平。很少有任何有趣的东西,因为它倾向于重现您分析的所有共同特征。
音乐是多维的。您可以清楚地分析您感兴趣的任何或所有维度。音高、速度、音符序列、和声进行、音量变化等等。一切。
音乐是微妙而复杂的,所以总是有更多的东西需要分析。
AFAIK(我儿子是作曲家)更有趣的是发明自己独特的算法来生成相当独特的音乐。
这是我儿子指定的。它会生成一系列 48 个音乐事件,围绕这些音乐事件构建。
#!/usr/bin/env python
"""
there are 8, 3-note sets.
each one can occur on 3 different beats.
each pitch of the 3 note set can be in one of 3 octaves and it can either be a harmonic or a fingered note.
"""
import random
noteSetChoices = [ "C-E-G", "C-F-A", "C-E-A", "D-F-A", "D-F-B", "D-G-B", "E-G-B", "F-A-C" ]
beatChoices= [ "1 - - -", "- 2 - -", "- - - 4" ]
octaveChoices= [ 1, 2, 3 ]
techniqueChoices= [ 'Fingered', 'Harmonic' ]
for n in range(48):
note= random.choice(noteSetChoices)
beat= random.choice(beatChoices)
octave= random.choice( octaveChoices )
technique= random.choice( techniqueChoices )
print octave, note, technique, beat
尽管它通常用于处理比一个小节更长的序列,但马尔可夫链是一种生成与其输入相似的音乐的简单有效的方法。有关使用 RTcmix 生成音频的 Python 示例,请参见此处的实现。
它基于Metalevel 笔记中的马尔可夫链接章节,这是一本关于算法组合的优秀文本。
如果您了解音乐的惯例,这真的很有帮助,因此请阅读为教人类如何创作歌曲而编写的书籍和文章。你会得到很棒的想法。
不时投入一些踏板点以增加张力。在两种不同的仪器之间使用古老的呼叫响应技术。