← 返回信息流
AI 资讯Hacker News·3 天前

How to Follow a Drummer

AI 深度解读

背景

在绝大多数电子音乐设置中,人类必须跟随机器:节拍器(click)是老大,音序器是老大,DAW(数字音频工作站)的时间线是老大。当你进入副歌时加速,机器毫不在意,它只是继续走,而你就错了。这种“人类服从机器”的模式已经持续了四十年,但一位名叫 Petty Vendetta 的开发者(与鼓手 Sashyo 合作)决定构建相反的系统:一个让鼓手成为老大、其他一切(速度、动态、感觉、填充、终止)都跟随鼓手的系统。最初这是一款与网上认识的鼓手合建的 Android 应用 DrumMate,但核心问题不受平台限制,且远比预期有趣。本文是完整的开发记录,包括所有犯过的错误。

核心内容

鼓点不是时钟

第一个直觉(也是作者的直觉)是:取底鼓的信号,将每次击打转换为脉冲,送给时钟输入。但真实的鼓点模式不是时钟。演奏带切分的节奏时,脉冲落在弱拍上;演奏加花时,半拍内会触发六个脉冲;演奏底鼓空一拍的小节时,时钟就会死掉。即使鼓手演奏完全稳定的速度,击打间隔仍然极不均匀,因为击打是音乐,不是节拍器。

分割与预测的不对称

时钟分割是因果的:每个输入脉冲只需递增计数器,速度根本不需要存在,且在任何速度下都能工作——这就是为什么模块化时钟分频器接入鼓触发器时感觉坚不可摧。但乘法不同:要在两个击打之间触发第二个十六分音符,你需要对下一个击打何时落地有一个判断。任何能产生 ratchet、琶音或同步延迟的设备,内部都隐含着速度模型。廉价方案假设一个 BPM 下限,低于该下限就会崩溃。诚实方案必须解决真正的问题:基于已有的击打,网格在哪里?

解决方案:软件锁相环 + 节拍感知前端

作者采用一个自由运行的时钟,由演奏引导而非驱动。这是一个软件锁相环,带节拍感知前端:

  • 击打作为带时间戳的起始点到达。
  • 跟踪器将这些起始点与一个网格假设(周期即速度,相位即第一拍位置)进行拟合,通过底鼓和军鼓的重音模式推断强拍。
  • 与假设一致的起始点会按比例微调时钟;不一致的起始点(加花、切分、装饰音)基本被忽略。当击打持续落在时钟预测的位置时,置信度增加;否则降低。
  • 时钟从不跳跃,只弯曲。速度变化会在大约一个小节内平滑过渡,因此下游所有部分都滑动而非抽搐。

关键在灵敏度:如果时钟追逐每次击打,它会吃掉律动(groove)——鼓手那些故意而优美的偏差变成速度抖动。如果太僵硬,又会错过真正的副歌加速。规则:小偏差是感觉,持续漂移才是速度。坚持一个小节,时钟就会跟上你;它不会因一个慵懒的军鼓而退缩。

与 DJ 软件的区别

这不同于 DJ 软件中的节拍检测。Traktor 和 Rekordbox 能预先拿到整首曲目,可以提前看、做二次扫描、修正错误。而实时跟踪器只有已经发生的击打,必须实时提交,没有前瞻,没有撤销。

最糟糕的版本与 coasting 机制

作者最糟糕的版本在测试中完美运行,遇到真实鼓手却崩溃:跟踪器会锁定,乐队加入,然后一旦鼓手做出任何有趣的事,置信度下降,锁定闪烁,乐队消失——演奏,乐队开始,乐队停止,重复。修复方法是 coasting(滑行):当置信度摇摆但击打仍在到达时,时钟继续运行在最后一个好的估计上并等待,只在真正静音时停止。这显然在事后才明白:人类乐手正是这样做的——当鼓手搞怪两小节时,你不会停止演奏,而是保持律动并更仔细地听。

提前调度

系统会提前调度:音符被放置在时钟对接下来几拍的预测上,而不是对每次击打做出反应。这完全将音频延迟预算排除在鼓手的时间循环之外——乐队不是对你的反应慢半拍,而是在你们原本就共同的去向与你相遇。这也是人类节奏组所做的:没人先听到第一拍再演奏第一拍。

相关参考

与模块化社区讨论后,两个重要参考:

  • James Holden 的人类时间工作(以及 Hennig 等人的研究)表明,人类时间偏差不是随机抖动——它们是相关的,随记忆漂移,这正是量化伴奏感觉死板的原因,也是跟随时钟必须弯曲而非突变的原因。Holden 的 Max 补丁更进一步:他的机器和人类相互拉动,实现真正的双向 entrainment(耦合振荡器)。作者的系统是故意单向的——鼓手领导,乐队不推回去——因为这正是前提。
  • 人类跟着节拍轻敲仍是历史上最好的节奏跟踪器。大脑预测,而非反应。你听到加花即将到来,就已经在倾向第一拍落地的地方。没有算法能触及这个水平。制作软件的唯一原因是:鼓手不能同时给自己拍子(双手都忙),而且并非每场即兴都有第二个人类。

关键要点

  • 鼓点不是时钟:切分、加花、空拍都会使直接触发时钟失败;必须将击打视为证据而非命令。
  • 时钟分割 vs 乘法:分割是因果的永远可靠,乘法需要预测下一个击打落地位置,因此必须携带速度模型。
  • 软件锁相环 + 节拍感知前端:用自由运行时钟,通过拟合网格假设调整速度,忽略不一致的击打,置信度累积。
  • 时钟弯曲而非跳跃:速度变化平滑过渡约一个小节,避免律动被破坏。
  • Coasting 机制:当置信度波动但仍有击打时,时钟保持最后良好估计,只有真正静音才停止——这是系统在真实演奏中存活的关键。
  • 提前调度:基于预测而非反应来安排音符,消除音频延迟,模仿人类节奏组的配合方式。
  • 与人类节奏感的对比:人类大脑预测能力远超任何算法;软件仅作为鼓手双手忙碌时的替代方案。
  • 双向与单向 entrainment:James Holden 的系统是双向耦合,本系统是单向跟随(鼓手领导),各有适用场景。

意义与影响

这篇文章核心意义在于,它挑战了电子音乐四十年来“人类必须像机器一样演奏”的范式。传统节拍轨和量化伴奏迫使人类适应机器,而 DrumMate 尝试教会机器“音乐家式

查看原文 →drummate.app