用 VLC 的波形当尺子,把八小节动机对齐到同一脉冲
上周重装系统,顺手把动机库里的 60 多条手机录音整理了一遍。都是自己哼的,音量忽大忽小,有的在厨房录的,有的在阳台,底噪能听出风声。问题不在音质,在节奏:想并排听几个版本,没法判断哪条是真快了、哪条是我哼的时候拖了。
做法比较笨。先在 VLC 里开「音频 → 可视化 → 波形」,播放时波形是跟着走的,暂停在重拍上,看左下角的时间码,记下来。一个动机只有八小节,我只需要头尾两个点。手抄到一列纯文本里,格式就一行一条:
kitchen_hum_01 00:00:03.412 00:00:19.870
balcony_hum_02 00:00:01.905 00:00:18.143
然后用 Python 把每条换算成 BPM,四拍一小节、八小节就是 32 拍:
import sys
def ts(s):
m, rest = s.split(":")
sec, ms = rest.split(".")
return int(m) * 60 + int(sec) + int(ms) / 1000
for line in sys.stdin:
name, a, b = line.rstrip("\n").split("\t")
bpm = 32 * 60 / (ts(b) - ts(a))
print(f"{name}\t{bpm:.1f}")
跑出来一目了然:我自己以为稳在 96 左右的那几条,实际分布在 88 到 104。差的不是手速,是我哼的时候「等了一下」。
为什么用波形而不是自动节拍检测?因为动机只有人声,没有鼓,大多数检测器会锁到音节包络上,错得很有自信。波形加人眼找重拍,慢,但每个判断我都能复核,代价是批量处理不了——60 条花了一个晚上。
失效的地方也说清楚:起始点如果是弱起或气声,波形上根本看不出重拍,这时候我就放弃这条,不硬标;手机录音有自动增益的话,波形幅度会失真,但时间轴不受影响,所以只拿它当尺子还行。另外这法子只管相对速度,绝对音高一概不管,别指望它顺手帮你调性。
现在这列文本躺在动机文件夹的 readme 里,新录一条就补一行。想问的是:你们录动机时会把速度记下来吗,还是靠事后耳朵判断?
0
赞同度 100% · 0 条评论 · 3 阅读

0 条评论
还没有评论,写下第一条。