在线节拍器通常为什么会飘,这个为什么不会
这是"能用的网页节拍器"和"让人上火的网页节拍器"之间唯一的区别,值得搞明白。
最直觉的做法是用 setInterval,每 60/BPM 秒响一声。这行不通。setInterval 是一个请求,不是承诺:
回调要等主线程下一次有空才跑,在任何真实页面负载下这就意味着晚几毫秒。而下一声又是相对"上一声实际
响的时刻"来排的,误差于是不断累积。一分钟之内节拍就明显偏了,而页面只要干点什么(一次渲染、一次
垃圾回收),你就能听见它绊一下。
解法是别把主线程当时钟。Web Audio 有它自己的时钟,由音频硬件驱动、精确到采样。所以这里不是"定时器 一响就播一声",而是提前把点击声按精确时刻排到那个时钟上。一个循环每 50 毫秒醒一次,往前看四分 之一秒,把这个窗口内该响的都预约掉。主线程晚不晚已经不重要了,因为它只负责预约,不负责准点。
听起来的结果就是:速度就是那个数字说的速度,一直如此。
节拍器 跟拍测速、每小节拍数和重音
每小节第一拍的音比其余的高,这样你能听出小节从哪儿开始,不用靠数来保持方位感。
把"每小节拍数"设成你的拍号:4/4 用 4,圆舞曲用 3,6/8 的感觉用 6,进行曲用 2,需要细分时用 8。 你按四拍演奏却设成 2 也照样能用,只是重音出现得频繁一倍。
配着画面用
如果你在按音乐剪片子,速度就是你的剪切点该落上去的那张网格。把曲子的 BPM 找出来设在这里,划时间 线的时候就有一个能听见的参照,往往比数帧快。
这几个算术值得记住:120 BPM 时一拍是 0.5 秒,在 24fps 下是 12 帧,30fps 下是 15 帧;四拍一小节在 24fps 下是 48 帧。按小节剪而不是按拍剪,才是让一段剪辑显得"有结构"而不只是"有节奏"的原因。
音量,以及关于点击声的一句提醒
音量从中等开始。这个点击声是一段很短的方波脉冲,刻意做得尖,为的是能穿透乐器的声音;而这也让它在 大音量下、长时间练习中相当伤耳朵。
不安装任何东西,也不录任何东西。这个工具完整地存在于这个页面里。