如何离线测出歌曲的 BPM
想知道一首歌的 BPM,只需要一块表和大约十五秒:跟着节拍敲击,数一数拍数,再乘以四。整个音乐库就交给软件,让它直接分析文件本身——在电脑上,或者就在手机上,不上传、不联网。
手动数拍
播放歌曲,跟着每一拍敲击,也就是你会不自觉点头的那个脉动。稳定下来之后,看着表,数十五秒内敲了多少下。乘以四,就是每分钟的拍数。想要更稳的数字,可以数三十秒再乘以二;数得越久,开头或结尾多敲、少敲一下的影响就越小。
这里容易出一个错。大多数音乐同时有不止一层稳定的脉动,很容易敲到另一层上去。跟着四分音符敲,一首摇滚歌读出来是 120。跟着踩镲的八分音符敲——它的速度快一倍——同一段音乐就读出 240。两种数法都没有数错,只是差了整整一倍。
想知道自己敲得对不对,可以数小节。大多数流行音乐把节拍四个一组,每组的第一拍更重。数“一二三四,二二三四”,看看重音是不是落在你的“一”上。如果是,你敲的就是节拍。如果重拍每八下才来一次,你数的是八分音符;如果每两下就来一次,你数的是二分音符。调整一下,再数一遍。
八度问题
这个“差一倍”在节奏分析里有个名字:八度。85 BPM 和 170 BPM 描述的是同一个律动,只是在两个不同层级上计数,而且常常说不清哪一个才算“对”。
软件之间的分歧不比人小。节奏检测器必须选定一个层级,在很多曲目上,两款做得很好的分析器会选得不一样。一个看起来差了一倍的数字,多半不是算错了,只是选了另一个八度。
对于把音乐匹配到步频这件事,这根本不重要。一位每分钟 170 步的跑者,在 170 BPM 的歌上是每拍一步,在 85 BPM 的歌上是每拍两步;步伐两种情况下都合得上。允许半拍匹配(歌曲 BPM 约为目标步频的一半)和倍拍匹配(约为两倍),就能避免这种计数差异影响选歌——这也正是跑步步频与歌曲 BPM那篇想说的事。
电脑上的软件
如果你的音乐放在电脑上,成熟的办法是用 DJ 软件或曲库管理工具。大多数 DJ 软件在导入曲目时就会分析节奏,很多音乐库工具也内置了 BPM 分析器,或者可以通过插件加上。它们大多能把结果写回文件的标签,让数字跟着文件走。
只要你人在电脑前,这套办法很好用。但它的前提是你得有一台电脑,还得把文件导出或同步到真正播放它们的设备上,而且标签会过时:在手机上新加一个文件夹的音乐,同步回来之前它们都没有数字。曲库如果经常增删,这样来回同步就成了一件总想往后拖的麻烦事。
在手机上离线分析:用带节奏
另一种办法,是在播放文件的设备上直接分析它们。带节奏(BPM Companion)在 Android 上就是这么做的。选好音乐文件夹后,应用会分两个阶段进行分析。
快速的第一遍在几秒内给每首歌一个大致节奏,所以新导入的曲库几乎马上就能用。较慢的第二遍是一个神经网络节拍追踪器——“Beat This!”Transformer 模型——它把整首歌听完,找出每一个节拍和强拍。它在后台运行,并兼顾耗电量,而且每首歌只需要跑一次,结果会保存下来。第一遍偶尔会把八度弄错,第二遍会把它纠正过来,所以一首歌的 BPM 可能会在两遍分析之间自行变化。
它能读取常见的本地音频格式:MP3、AAC/M4A、FLAC、OGG/Opus、WAV,以及 YouTube 下载常被保存成的 WebM/Opus 文件——它们的文件名往往被误标成 .mp3。带 DRM 保护的文件无法读取。
每个检测出的节奏都带一个置信度分数,“最低置信度”设置可以把追踪器拿不准的曲目藏起来,不让它们进入队列。这款应用完全没有网络权限,所以整个过程中没有任何东西离开手机。
这些数字随后会用来生成匹配节奏的队列——跑步时按每分钟步数,骑行时按每分钟踏板转数;骑行踏频指南讲的是骑行,步频对照表(英文)则列出了每个节奏值分别对应哪些歌曲速度。
为什么离线很重要
隐私是最明显的理由。一个人听什么音乐,其实很能说明他是个什么样的人;把文件上传到服务器的分析器,等于在别处存了一份你曲库的副本,而从不联网的分析器不会有这种事。
实际的理由同样充分。需要服务器的分析,在飞机上、在隧道里、在你最想要一份歌单的山路上,都会停摆。你也不用注册账号,因为根本没有服务器可以登录。
还有一个更根本的原因,不用谈隐私就已经把路堵死了:流媒体服务根本不让第三方应用听到音频。应用能看到一首流媒体曲目的标题,却碰不到声音,而节奏检测需要的恰恰是声音。所以任何节奏分析器,无论在电脑上还是在手机上,处理的都是你自己持有的文件;也正因为如此,让音乐匹配你步频的应用要么自带曲库,要么就用你的。
如果你的音乐已经在手机上,带节奏可以在那里离线找出所有歌曲的 BPM,并用这些结果生成匹配步频的队列。