这个 bpm 检测工具是怎么工作的
四步,全都不需要服务器,也不需要任何 WASM。
第一步把文件解码成原始采样。decodeAudioData 能处理 MP3、M4A、WAV、OGG、FLAC,以及 MP4 和 MOV 的
音轨,所以压根不需要转格式那一步。
第二步把采样混成单声道,按 10 毫秒一格测量,得到一条幅度包络。单声道这件事很重要:否则一个被摆到 一侧的底鼓只会以一半的强度被登记。
第三步是把包络里的峰和一条滚动的局部平均比较,而不是和一个固定阈值比较。这才让安静的前奏和响亮的 副歌都能贡献起音,而不是被副歌一家独大。
最后统计起音之间的间隔分布。每个间隔换算成一个速度,折进 70 到 180 的区间,再分桶。桶里最多的那个 胜出,而支持它的间隔占比就成了置信度。
想测 bpm,先看它敢不敢说自己没把握
因为一个光秃秃的数字暗示着这个方法并不具备的确定性。
一首四四方方的舞曲会得到很高的一致度,因为几乎每个间隔都指向同一个速度。一段速度自由的独奏钢琴也会 得到一个数字,而那个数字基本没有意义。
把一致度报出来,你才能分辨这两者。大约 30% 以上可以信;低于此就当起点,用跟拍复核一下。
歌曲 bpm 检测里,一半和两倍都对
这是速度本身固有的性质,不是检测的缺陷。140 BPM 的律动在 70 上是半速感、在 280 上是倍速感,三者描述 的是同一段音乐。哪个是"那个"速度,取决于你把脉搏感在哪儿,这是音乐判断而不是测量。
所以结果里会把一半和两倍的值和主答案并列显示。如果那个数字看起来正好差两倍,对的那个就在旁边。
什么时候放弃 bpm 检测、改用跟拍
自动检测需要打击性起音。给它人声、氛围铺底、连奏弦乐、或者自由演奏的乐器,它压根找不到可以抓的锐利 边缘。
跟拍对这些都有效,因为你补上了算法缺的那个"节拍感"。最少三下,越多越好;超过中位间隔两倍的会被丢掉, 所以偶尔点错一下不会毁掉结果。
把 bpm 检测的结果对着画面用
按音乐剪片子时,速度就是你的剪切点该落上去的那张网格。120 BPM 时一拍 0.5 秒,24fps 下 12 帧、30fps 下 15 帧;四拍一小节在 24fps 下是 48 帧。把剪切点落在小节上而不是拍上,是让一段剪辑显得有结构的关键。
一切都在这个标签页里发生。文件在本地解码,不会上传。