首页 理论教育 遗传算法生成音乐的复杂过程

遗传算法生成音乐的复杂过程

时间:2023-07-01 理论教育 版权反馈
【摘要】:基于遗传算法的自动作曲过程需要遵循基本乐理规则、作曲原理、心理学原理和音乐美学特点等,是一个非常复杂的、对创造性的思维要求很高的过程,这个过程中存在着大量的构造、变异与选择等操作。遗传算法的第一个重要的步骤是初始种群的生成。可操作的组成单位可以分为音符操作单位和小节操作单位。

遗传算法生成音乐的复杂过程

基于遗传算法的自动作曲过程需要遵循基本乐理规则、作曲原理、心理学原理和音乐美学特点等,是一个非常复杂的、对创造性的思维要求很高的过程,这个过程中存在着大量的构造、变异与选择等操作。

遗传算法的第一个重要的步骤是初始种群的生成。用户输入种群大小、迭代次数、交叉变异率、乐段小节数、音域等参数,以及用户适应度函数加权偏好(可选) (图6-16),系统根据用户输入生成相应的遗传操作参数,为后续的主体演化过程做准备。

初始化种群生成流程步骤如图6-17所示,其中,情感专家库所采用的音乐情感分类借鉴了百度搜索音乐心情分类,将音乐情感划分为伤感、想念、寂寞、宁静、甜蜜、励志、舒服、怀念、浪漫、喜悦、深情、美好、怀旧、激情十四大类。从每个情感风格标签类别中,选取具有代表性的样本,每组样本大约 30个,组成情感专家库。在实际编程实现中,初始种群的生成部分,简化了节奏的随机生成,直接复制了专家个体节奏。情感专家库对种群的初始化过程影响很大,这也为后续的主体演化过程奠定了情感基调。

图6-16 演化程序设置演化参数对话框

图6-17 初始化种群流程图

一个演化实例:使用C调,情感类型为宁静,乐器使用钢琴,中速,五声音阶,其他设置使用默认值。初始化结果显示如图6-18所示。

由图6-18可知,使用专家个体指导初始化种群个体,使得个体初具旋律特征,流线型比较明显,断句长音符出现位置比较合适。

演化算法作曲初始化种群后,接着对读取的MIDI文件解析编码后的乐段个体进行演化算法交叉操作、演化算法变异操作和其他演化算法操作。

图6-18 种群初始化后的结果

交叉操作:对给定的操作乐段,随机选取种群中非操作乐段的某个体,操作乐段中每个可操作的组成单位都有交叉的可能,即与随机选取的个体中的某个个体交叉。可操作的组成单位可以分为音符操作单位和小节操作单位。图6-19展示了音符交叉的过程。

图6-19 音程交叉示意图

图6-20 音符变异示意图

变异操作:在演化算法作曲过程中,变异操作的目的是使演化算法朝着适应度函数规定的方向进化。根据音乐片段的编码方式,我们直接在音符元素上进行变异,下面列举在实际编码中用到的几种主要的变异方式:

(1)单个音符音高、节奏的变异:对于选定的一个音符,改变其音高或者时值大小(图6-20、图6-21)。

(2)交换两个小节:随机选取两个音乐片段中的同一位置上的两个小节,将其位置对换。(www.xing528.com)

(3)升降序排列:在选定的音乐片段的子片段中,将选定连续的几个音符按照升降序排列,其中休止符位置时值不变(图6-22)。

(4)插入、删除音符:以一定的概率在给定的位置上插入新的音符或者删除旧的音符。

(5)复制音乐片段:随机选取音乐片段的一段子片段,将其复制到目标片段相同位置上。

(6)分裂、合并音符:在给定的音乐片段中,对选定的音符进行分裂或与之后音符合并的操作。

图6-21 节奏变异示意图

图6-22 音符升降序排序示意图

选择操作:包括对新生成个体的选择和种群个体的更新。对新生成的子代个体和父代个体,分别计算比较二者适应度,留下适应度高的个体,淘汰适应度低的个体。对于种群个体的更新选择,每进化一代,对种群内所有个体的适应度值排序,选出适应度值排名前三的个体,并用其随机替换种群内其他的3个个体。很显然,适应度越高的生成片段被留到下一代种群的概率越大,得到适应度函数值越高的生成片段的质量越好。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈