2009-07-24 39 views
5

我对自动音乐制作感兴趣。我正在考虑一个节目,它会提供大量的1-bar琶音(为简单起见,它们是固定长度的音符序列),并根据它学到的内容生成自己的序列。音乐模仿算法?

首先,我知道我可以使用字母(digram?trigram?)frequency analysis,仅适用于音符音高,然后根据频率概率生成我的序列。

是否有更先进的算法,你知道的,也许明确教授音乐序列?

回答

2

现有导致音乐的统计分析是 - 平均水平。很少有任何有趣的事情,因为它倾向于重现你分析的所有常见特征。

音乐是多维的。您可以清楚地分析您感兴趣的任何或所有维度。音高,速度,音符顺序,和声进程,音量变化,任何事情。一切。

音乐微妙而复杂,所以总有一些东西需要分析。 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 
+0

Spore上的音乐如何?我很确定音乐是自动生成的。 – 2009-07-24 15:53:07

+0

嗯,这意味着你已经知道类型卡农,并且你不会从其他歌曲中提取它们。 – janesconference 2009-07-24 15:58:05

+0

@janesconference:实际上我不知道下蹲。我是贝司手,所以我明白了一点;我的儿子是作曲家。 – 2009-07-24 16:53:13

4

成为一个音乐家自己和软件工程专业,我htink我在这里可以摆脱一些轻爽:P我已经做了很多工作,关于这个问题我自己,打算使周围大一些基础这在未来。

当你编写一个算法时,你的目标是提出一个解决方案 - 例如,排序问题是有一个排序列表。在算法音乐作品中,解决方案(通常)会有一首歌曲或令人愉悦的旋律,结构等。

解决方案(哈)的问题是它不仅客观,而且解决方案是非常开放的。使用排序算法,您只有一种方法来对列表进行排序。随着音乐作曲,你有数百万令人愉快的歌曲/ whatevr你的目标是。

因此,您将需要一种算法,该算法对于找不到明确的解决方案,但OPTIMAL解决方案。我的建议是遗传算法或类似的。遗传算法非常棒,因为它们可以创建各种最佳解决方案。

你需要将构图分成几部分 - 有旋律的遗传算法,节奏的遗传算法,结构的遗传算法等。并设计适合您需要的健身功能。

当然这只是解决问题的唯一方法;有很多和以前列出的维基百科链接是一个很好的开始。

我建议检查出: 根杰姆:即兴的爵士乐遗传算法设计交易solos- http://www.it.rit.edu/~jab/GenJam.html

这本书是很有启发性: http://www.springer.com/computer/information+systems/book/978-1-84628-599-8

我想另一个有趣的方式将与神经网络......但给他们集可能会有点问题......这是更多的工作。

不管怎么说,祝你在冒险:P

0

这真的帮助,如果你知道音乐的惯例,所以读取写入教人类如何创作歌曲的书籍和文章。你会得到很棒的想法。

现在抛出一些踏板点,然后建立紧张局势。使用两种不同仪器之间古老的呼叫响应技术。

1

虽然它通常意味着处理比单个条更长的序列,但马尔可夫链是一种简单有效的方式来生成类似于其输入的音乐。有关使用RTcmix编写的用于音频生成的示例,请参阅我的实现here

它基于马尔可夫链接章节来自Metalevel的注释,这是一个关于算法构成的优秀文本。