速度 · 拍点 · 强拍 · 拍号

测歌曲 BPM

拖一首歌进来,几秒钟告诉你它多快、拍子落在哪、几拍一小节——拍点模型就在你的浏览器里跑,歌不出本机。

分析一首歌

手边没歌?先用我们做的两段试试:

速度是怎么算出来的

  1. 先变成频谱,每秒 50 帧浏览器把文件解码、混成 22,050 Hz 单声道,再算成 128 个频带的梅尔频谱,每 20 毫秒一列。
  2. Beat This! 逐帧判断拍与强拍这是林茨大学(JKU)在 ISMIR 2024 发表的 Transformer 模型,按 10 秒一段读整首歌,每一帧打两个分:是不是一拍、是不是小节的第一拍。
  3. 像鼓手一样数拍子速度看拍与拍的间距,拍号看两个强拍之间有几拍,速度曲线就是把同样的数法按段落各算一遍。

在 Apple M2 Max 的 MacBook 上实测:一段 3 分钟的现场录音,WebGPU 用了 1.1 秒,CPU 用了 20 秒。第一次打开另外要下载 115 MB 的模型。

到底是 90 还是 180?说说半速和倍速

同一首歌的速度,总能找到一个一半、一个两倍的「孪生数」。鼓打贝斯可以听成 174,也可以听成 87;写成 70 的慢歌,很多人按八分音符数成 140。模型给的是大多数人会跟着点头的那一层,但真人乐队的录音可能让它在两层之间来回跳——我们的一段测试录音里,前 30 秒它跟的是八分音符(231 BPM),之后才稳定在四分音符(120 BPM)。

觉得大数字不对,就按 ÷2 或 ×2:拍网格、小节数和三种导出文件都会跟着换;再按一次同一个键就回到原值。速度曲线会标出模型自己换了层的段落。

常见问题

歌会被上传吗?

不会。页面只下载一次拍点模型(115 MB,存在浏览器缓存里),然后就在这个标签页里算:有 WebGPU 用显卡,没有就用 CPU(WebAssembly)。音频由浏览器自己解码,不发给任何服务器。模型加载完之后断网,在同一个标签页里还能继续测。

为什么测出来的 BPM 是我以为的一半或两倍?

两个数说的是同一段音乐:87 和 174 只是用不同的音符来数同一个律动。模型报的是它听得最清楚的那一层。按 ÷2 或 ×2 切换,拍网格和导出会一起变。如果只有某几段跳了,速度曲线会把那几段标成红点。

能测拍号吗?准不准?

模型有第二个输出专门标每小节的第一拍(强拍)。我们数相邻两个强拍之间有几拍,至少六成小节一致才报 2/4、3/4 或 4/4,否则显示「拿不准」。强拍靠的是小节级别的变化——换和弦、低音进来、加花——所以纯鼓 loop 或节拍器常常每一拍都被当成强拍。6/8 这类复拍子一般按附点四分音符的大拍来数,会显示成每小节 2 拍。

为什么不给调性(Key)?

能在浏览器里跑的调性模型,我们只找到 Deezer 的 S-KEY 移植版,而它公开的权重能不能商用,作者那边还没有答复。本站只用许可证明确允许的模型,所以在这件事说清楚之前不做调性检测。

能直接贴 YouTube、Spotify 或网易云链接吗?

不能。这个页面只读你本机上的文件,流媒体平台也不会把音频交给别的网页。用你手上有的文件:自己导出的混音或分轨、买来的下载版、录音都可以,MP3、WAV、FLAC、M4A、OGG 都支持。

导出的拍点文件怎么用?

MIDI 是一条节拍器轨:拖到音频下面的鼓或乐器轨上,每拍一下木鱼、小节头音高更高;文件的速度设成了测出来的 BPM,速度稳的歌在宿主软件里小节线能对上。CSV 一拍一行(秒、第几小节、第几拍),可以进表格,也可以用剪辑软件的打点导入脚本做卡点。JSON 额外带稳定度和分段速度。

手机上能用吗?要多久?

能,走 CPU。模型有 115 MB,第一次打开用流量要掂量一下。我们的 20 秒样例在电脑 CPU 上每段约 2 秒,用 WebGPU 不到 1 秒;手机会更慢。免费版一次一首,最长 10 分钟、50 MB。

拍点与强拍模型:Beat This!,作者 Francesco Foscarin、Jan Schlüter、Gerhard Widmer(奥地利林茨大学,ISMIR 2024),MIT 许可证;本页使用的是 musetric/beat-this-onnx 导出版。许可证全文。两段样例是为本页合成的,CC0。