用 Petri Nets 构建音乐生成器
Petri Nets as a Music Sequencer

没有钢琴卷帘,没有 DAW,整个音乐生成器全靠 Petri nets 驱动。在 beats.bitwrap.io 上,你只需选择 techno、jazz 等 19 种风格,点击生成,就能听到包含鼓点、贝斯、旋律和琶音的完整曲目。每一个音符都是图中移动的 token,节奏由 Bjorklund 算法生成,而歌曲结构则由控制网(control nets)指挥。从简单的鼓机到复杂的段落编排,甚至 Auto-DJ 的过渡效果,全部由圆圈和箭头构成的逻辑图完成。配合 Tone.js 处理音频,这套系统证明了 60 年前的数学模型依然能创造出现代音乐的魅力,且代码量极少,完全在客户端运行。
没有钢琴卷帘,没有 DAW,整个系统都运行在 Petri nets 上——圆圈通过箭头连接,token 在其中移动,每一个音符本质上就是 token 在图中迈出的每一步。
- Slow_Hand
我看到太多人试图把音序器重新发明成环形图,而不是(比如)循环的钢琴卷帘窗,在我看来这几乎没什么优势。这确实是个挺酷的 novelty,但并不是那种你会想长期投入去做的东西。
横向(从左到右)的音序器显示方式,比如钢琴卷帘窗或步进音序器,在显示上更紧凑,也更易读。对于鼓点部分,它本质上是单维的,直到你添加第二层,然后这些部分就会整齐地垂直堆叠在一起。
总之,我实在看不出这种 Petri Nets 范式有什么太大优势。就连触发条件和概率这些功能,早就被大量 DAW 和硬件音序器整合进去了。这感觉有点像某人独立于整个文明重新发现了火,但在当今这个时代,只要观察一下现有的设计范式就能做到,这种“独立发现”的价值其实并不大。
归根结底,实践出真知:用这个工具做出来的音乐到底好不好听?这项技术是否让我们能更轻松地完成以前困难或繁琐的事情?就这个案例而言,我目前还没看到这些。
- tleb_
所以这更多是关于可视化,而不是行为上的不同?本质上还是 N 个静态音符,光标从头到尾移动并循环播放。博客里没讲清楚。不过,我向来喜欢这个领域的各种实验,谢谢。
- jarth9
与其他记录音乐节奏的方式相比,我发现这种方法在简洁性和表现力之间取得了非常好的平衡。标准记谱法和鼓音序器在涉及摇摆感(swing)、微时序(microtiming)、律动感(groove)以及其他那些我们认为让节奏变得迷人的细微之处时,存在很多歧义(至少在我这个非专家的耳朵听来是这样)。Godfried T. Toussaint 曾对这一想法进行了全面的学术探讨。他将这些 Petri nets 称为“项链(necklaces)”,这个术语借用了组合数学。