鼓节奏模型与代码(一)

它是什么?

这个模型使用遗传算法生成鼓节奏。利用西非鼓乐团的节奏“规则”,低音鼓、中音鼓和高音鼓的模式与进化共同创造出激动人心的节拍。这是该模型的“二拍”版本,每个染色体有4个“拍”。

在许多西非国家,音乐是文化的重要组成部分。在塞内加尔,鼓和打击乐器既是表演的焦点,也是仪式上的特色。西非鼓乐团的演出是场面宏大的活动,服装色彩鲜艳,鼓的形状和大小各异,音乐色彩丰富而富有韵律。这些表演是丰富、交叉和多韵律发展的舞台,因为许多“歌曲”只是即兴的框架。在塞内加尔,典型的乐团由三种不同的鼓组成:低音鼓称为dundun,中音鼓称为sabar,高音鼓称为djembe。在表演中,鼓手们倾听并与其他表演者融合,以创造出观众听到的丰富声音。节奏不断地根据独奏、集群和“强弱拍感”进行演变。该模型展示了一种尝试以西非鼓乐风格自动生成愉悦鼓节奏的方式。尽管大多数自动生成音乐的尝试都依赖于人类选择他们喜欢的节奏,但该模型尝试生成节奏,而不是明确询问人类是否喜欢特定的节奏。

遗传算法是计算机科学中用于解决优化和搜索问题的工具。它依赖于生物启发技术,以便在参数空间中“搜索”“最优解”。关键在于使用染色体等“遗传物质”代表给定问题。然后,算法使用选择交叉突变等技术来“进化”解决方案。

它是如何工作的?

什么使这些节奏进化?

基本思想使用了计算机科学中的遗传算法的概念。遗传算法旨在将具有“染色体”的“生物体”模拟演变,朝着某种目标(因此,随着时间的推移,生物体的“适应性”更高)发展。在这个例子中,鼓手是我们的生物体,每个鼓手都有一组由击打和休止符组成的染色体,代表他们演奏的节奏。

一共有16个鼓手:5个高音鼓手、5个中音鼓手和6个低音鼓手。这里我们使用“低音”、“中音”和“高音”来描述鼓的音调和音色。每个鼓手(一个看不见的乌龟)都有一组“节奏染色体”,决定了它演奏的鼓模式。

在这个模型中,每个节奏染色体由一个由4位二进制数字组成的列表表示。'0'表示休止符,'1'表示击打。在这个模型中,你可以将这些数字看作“16分音符”,这样每个染色体就代表一个“拍”。这意味着有2^4 = 16种不同类型的染色体。

组成鼓手遗传编码的染色体数由用户指定。默认数量是4(对于音乐上的人来说,这会导致“四四”拍子)。

在开始时,每个播放器都从完全相同的染色体开始(每个播放器只在下拍上演奏)。每个播放器与其他播放器同步播放其染色体(即所有乌龟都播放染色体0的音符0,然后播放染色体0的音符1,依此类推)。在乌龟完成播放他们的染色体节奏后,它们“进化”。

在每次播放他们的基因节奏之后,每种类型的鼓手(高音、中音和低音鼓手)中的两个被选中进行“繁殖”和“进化”。每只乌龟根据一个适应性函数(每个品种不同)选择一个伴侣。适应性较高的乌龟更有可能被选为伴侣。

在西非鼓乐中,低音鼓手被认为是节奏的基础。因此,它们的适应性是由它们演奏的强拍数量(即每个染色体的第0和第2个条目)决定的。

中音鼓手通常比低音鼓手更具独奏特色,但通常强调弱拍。因此,它们的适应性根据它们演奏的弱拍数量(即每个染色体的第1和第3个条目)进行评估。

最后,高音鼓手被认为是乐队的独奏者。它们提供节奏张力,并倾向于集群演奏。因此,它们的适应性基于它们演奏的3个集群[0 1 1 1]的数量,这些集群被认为是模式中的位置无关。

一旦选择了配对,每个配偶选择贡献给后代的1到4个染色体(总共4个)。这些遗传物质被合并,根据用户参数,可能会经历随机突变。这组新的遗传物质被认为是新的后代。这个后代然后取代了原来被选中进化的鼓手类型中的适应性最差的成员。

一旦这种进化发生,整个过程会重复!

这与“纯粹”的遗传算法有一些不同。首先,被选择“进化”的乌龟是随机选择的。这是一个设计决策,不应该对模型的进化产生重大影响。此外,我们通过在每轮进化后“杀死”每个品种的适应性最差的成员,将种群限制为16个鼓手。

视图显示的是什么?

这个模型以非标准的方式使用NetLogo视图。与其显示代理之间的交互,该模型使用视图来显示代理的属性。每一行方块代表一个鼓手的模式。有色方块代表击打,黑色方块代表休止符。通过这种方式,用户可以同时查看所有16个鼓手的模式。

当用户点击任何GO按钮时,一个垂直的黄色条会在视图中移动,并指示每只乌龟在节奏中的位置。

如何使用它

这个模型的整个理念是通过实验参数来构建一个“优秀”的节奏。什么样的节奏是“优秀”的完全取决于你。

界面元素

在按下SETUP按钮之前,必须设置两个界面元素:

  1. NUM-CHROMOSOMES - 这指定每个播放器的节奏染色体数量
  2. SHUFFLE-PARTS? - 这只是一个GUI更改,它在视图上移动播放器的排列(只是为了让事情看起来更酷)

SETUP按钮用于创建代理和更新显示。它还会播放一个测试音,以确保音频扩展正在工作并且扬声器没有静音

GO-ONCE用于要求所有乌龟精确演奏一次他们的模式,然后进化

GO用于循环播放和进化过程

GO-ONCE-NO-EVOLVE可用于精确播放任何特定模式一次,而无需进化

GO-NO-EVOLVE用于循环播放一个模式,而无需进化

SOUND?用于切换音频输出

TEMPO-BPM更改每个模式播放的速度(以每分钟的拍数(或染色体)计量)

进化参数

HIT-LIMIT定义了一个乌龟可以多长时间不被迫以某种方式进化。再次,这与传统的遗传算法有些不同,但可以用来摆脱“陈旧”的节奏

HIT-DENSITY-MODIFIER是一个修饰符,用于指定模式应该有多“密集”(击打与休止符)

NUM-MUTATIONS是应用于后代染色体的突变数量

MUTATION-STRENGTH决定了某个染色体可以突变的程度

SOLOER是一个选择器,允许您为一个鼓手单独进行独奏

SOLO?决定是否允许SOLOER进行独奏。这意味着SOLOER演奏他的鼓音更响亮,其他乌龟演奏他们的鼓音更轻柔。此外,SOLOER的适应性将最大化

模型输出

GENERATIONS计算我们已经看到了多少代播放器

DENSITY表示当前的击打与休止符的比例

以下是模型的图表:

AVERAGE FITNESS绘制了每种类型乌龟的平均适应性,以及随时间的总体平均适应性

HITS SINCE EVOLUTION是一个直方图,显示了每个播放器距离“进化”已经过了多长时间

HITS PER DRUMMER是一个直方图,显示了每个播放器的击打次数

注意事项

当你第一次启动模型时,每个人都从相同的染色体开始。所以,如果你通过使MUTATION-STRENGTH为0来禁用突变,你的模型就不会进化!这是因为相同的染色体只是被组合在一起为每个播放器。

请注意,有时候一个单独的乌龟会粘在一起很长时间(因为它非常适应!)

查看每个鼓手的击打次数图。你在运行模型过程中看到了一些一般趋势吗?为什么会出现这种趋势?

请注意,SOLO功能不仅使一个播手声音更大,它还使得该播手不会进化或突变。这会如何影响模型?

尝试的事情

使用SOLO功能迫使一个节奏围绕一个稳定的播手进行演化。

努力制作一个三种类型的播手都“平等”适应的节奏!

尝试演变出一个高音鼓非常稀疏的节奏。

看看创建一个“复杂”的节拍会如何改变你听到的节奏。一个简单的方法是将NUMBER-CHROMOSOMES设置为5,看看你是否能听到音乐短语。

扩展模型

尝试更改乌龟的乐器声音。你是否可以通过仅改变乐器来从鼓乐团感觉转变为摇滚节奏?

添加更多类型的鼓手。看看这如何改变节奏的演变。

改变每种品种的配偶标准,看看这如何影响节奏的演变。

尝试添加乌龟演奏三连音的能力!这将使节奏变得非常酷,但会需要一些时间上的调整!(提示:查看音频扩展中的play-later原语)

NETLOGO特性

请注意,这个模型故意通过使用wait原语来减慢NetLogo世界。因为音乐并不是尽可能快地发生!不幸的是,这对于第一个tick来说不管用,所以“第一拍”和“第二拍”之间的间隔不等于其他拍之间的间隔。

  • 34
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

异数时空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值