我对自动音乐制作很感兴趣。我正在考虑一个可以输入大量1小节琶音(=固定长度的音符序列,为简单起见),并根据学到的知识生成自己的序列的程序。
首先,我知道我可以使用字母(二元组?三元组?)频率分析,仅应用于音符音调,然后根据频率概率生成我的序列。
您是否了解更先进的算法,也许是专门用于音乐序列的?
首先,我知道我可以使用字母(二元组?三元组?)频率分析,仅应用于音符音调,然后根据频率概率生成我的序列。
您是否了解更先进的算法,也许是专门用于音乐序列的?
对现有音乐进行统计分析,得出的结果通常是平庸的。因为它往往会再现你所分析的所有共同特征,很少有令人感兴趣的东西。
音乐是多维的。你可以清楚地分析你感兴趣的任何或所有维度。音高、速度、音符序列、和声进展、音量变化,任何事物。一切都可以分析。
音乐是微妙而复杂的,所以总有更多的内容需要分析。
据我所知(我的儿子是一个作曲家),更有趣的是发明自己独特的算法来生成相对独特的音乐。
这里有一些我儿子指定的东西。它生成了一个由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
尽管马尔可夫链通常用于处理比一个小节更长的序列,但它是一种简单而有效的生成类似于输入音乐的方法。有一个使用Python编写并使用RTcmix进行音频生成的示例,请参见我的实现此处。
它基于《来自元层的笔记》中的马尔可夫链章节,这是一本关于算法作曲的优秀文本。
如果你了解音乐的惯例,阅读教人如何创作歌曲的书籍和文章会非常有帮助。你会得到很棒的创意。
时不时地加入一些踏板点来建立紧张感。使用古老的技巧,在两个不同的乐器之间进行呼应。