在线裁剪音频,以及怎么看懂 BPM 检测结果
两件小事经常挨在一起出现:把一段音频剪到刚好能用的长度,以及搞清楚它有多快。音频剪辑 做前者,BPM 节拍测速 做后者,两者的行为在你了解它们做了什么之后会好用得多。
裁剪工具在做什么
文件读进来后,浏览器把它解码成原始采样,再据此刻画波形、在采样层面下刀。这里没有视频那种"关键帧"难题——音频没有关键帧,你切在哪,边界就在哪。
这正是它的价值所在:剪切点按采样精度计算,不会四舍五入到某个帧,也不会四舍五入到输入框里显示的那位小数。如果你是卡着节拍切的,边界晚上几毫秒,循环播放时就听得出来——而这类工具恰好避开了这件事。
需要知道的限制:
- 单文件 50 MB。这个检查在任何解码之前完成,超限会给出明确报错。
- 文件选择器筛选 MP3、WAV、FLAC、OGG、M4A、AAC。真正决定能不能用的还是浏览器解码器:解不开的格式就是打不开,跟筛选器写没写无关。
- 输出永远是 16 bit PCM 的 WAV,界面里没有格式选项。无论你喂进来的是 MP3、M4A 还是 24 bit 的 FLAC,落盘的都是不压缩的 16 bit。
- 声道数保持。立体声进、立体声出。
信息面板会把已加载文件标成 32 bit。那描述的是内存里那份浮点采样,不是写到磁盘上的 WAV。不要期待 32 bit 成品。
设置剪切点
有两条入口,且始终互相同步:起点与终点两个滑块,各配一个以秒为单位、步进 0.1 的数字输入框。打字会带动滑块,拖动会回填数字。上方画布上的波形用一层高亮标出当前选区,下面的读数精确到毫秒。超出文件长度的数值被拉回最近的合法端点,而不是报错拒绝。
换一个新文件会重置选区:起点回到 0,终点变成新曲子的总时长。好处是上一首的"0:12–0:47"不会被悄悄套到下一首上;代价是你想要同一组数值时,它也不会记住——多文件重复同一刀时,先把数字抄下来。
导出文件名里带着区间,形如 song_clip_12.5s-47.0s.wav,一文件夹的素材不打开也能看出各是什么。
裁剪不包含的东西
它是切刀,不是编辑器。没有淡入淡出,没有音量包络,没有静音检测,没有响度归一化,也没有两段之间的交叉淡化。切口是硬的。
这一点在一个场景里会咬人:在非零振幅处硬切,会听到"咔"的一声。补救办法是把边界往波形更安静的地方挪几毫秒,而工具本身支持这个循环——「预览」按钮只播放选中的片段,不是整首。挪一下、预览一次、再挪,直到开头和结尾都干净。需要淡入淡出或归一化,得交给真正的音频编辑器。
如果剪完还嫌 WAV 太大,请再转一次格式:浏览器里做 OGG 要付出多少时间,见音频格式转换。
测速:为什么数字经常"不对"
BPM 工具用的是自相关。理解一句话,就能解释绝大多数意外结果:自相关分不出一个节拍和它自己的倍数。 每 0.5 秒重复一次的脉冲,在 0.5 秒和 1.0 秒两个周期上都同样成立,两个读数在数学上都对——只有一个是音乐人所说的速度。
工具对一个文件做的事:
- 在浏览器里解码,只取左声道,分析窗口限定在前 120 秒。
- 降到约 11 kHz 再分析——足够用于节奏,因为速度藏在响度起伏里,不在音高信息里。
- 用短的、互相重叠的窗口量出响度,得到一条随时间变化的能量包络;然后把这条包络与它自己在各个偏移上做比对,重合得越好的偏移就是候选周期。
- 把候选归一化到 55–210 BPM 的工作区间,返回前 5 个候选,每个带一个置信度。
这些选择的后果:
- 报出半速或倍速是正常现象,不是 bug。你预期 90 而它给 180,去看候选列表——90 通常就在里面。这是最常见的一类"错误"。
- 置信度是相对值,不是正确度。 它衡量的是这个周期性比其他候选突出多少。一段准得像节拍器的音频,完全可能在自己的半速读数上拿高分。
- 只看前两分钟。 第三段才变速的歌,得到的是开头的描述;做混音时,一段长长的氛围前奏会把结果带偏。
- 只看左声道。 对几乎所有成品录音都无所谓;但对鼓组被硬打到右声道的那类混音,它会读错。
真正靠得住的检查:试听
数字是这套流程里最弱的一环,节拍器才是最强的那一环。试听按钮会按测得的速度播放16 下点击,每第 4 下换成更高的音,于是小节线是听得出来的;点击候选列表里的任意一项,就改播那一项。
把它和原曲对起来听。四五下之内你就会知道重音到底落没落在音乐的重音上。这比任何百分比都可靠,也是大家最常跳过的一步。
实用提醒
- 音频至少要有一秒左右才有东西可分析,太短的碎片只会给出噪声。
- 上传上限和剪辑工具一样是 50 MB;分析本身最多两秒,长文件上耗时的是解码。
- 全程不上传。两个页面都在标签页内解码,只有你自己的结果落回磁盘;页面照例加载站内统计与广告脚本。
相关指南
- 浏览器里转换音频格式 — WAV 与 OGG 在体积和等待时间上的真实代价
- 从视频里截帧与做 GIF — 同样的本地解码思路用在画面上
- 批量缩放与格式转换,先弄清这几点 — 活是一堆文件而不是一条长文件时