同一首歌 · 四个数字版本 · 逐样本比较
…
一张 CD 抓轨、流媒体上的 Hi-Res 与 MP3,再加上一个第三方重做的高动态版本。 把它们对齐到同一条时间轴、调到同一个电平,然后逐样本相减:剩下多少, 就是它们实际差多少。
相减之后还剩多少
相对 CD 的残差电平。越低表示越接近同一份文件。
材料
四个版本
前三个是同一首歌的正规发行渠道:实体 CD、流媒体的无损档和有损档。 第四个不是发行版本,是听众自己重做的。测下来,只有它与另外三个之间存在母带层面的差异。
核心结果
对齐之后相减
两个文件哪怕来自同一份母带,也会差一点点时间和一点点电平:抓轨的起点、编码器的延迟、 重采样滤波器的群延迟,都能让波形错开不到一个采样周期。先把这两样修掉再相减, 剩下的才是真正的差异。
三级差异 相对 CD 的残差电平
同一套流程(整数对齐 → 电平匹配 → 亚样本延迟校正)跑在三个版本上。 Hi-Res 掉到 dB,MP3 只能到 dB,修复版停在 dB。 MP3 就是对照组:如果那个 dB 是流程本身拟合出来的假象,同样的流程也该把 MP3 拟合下去,但它做不到。
自己听
无缝切换
三段各 秒,八条轨道共用同一条时间轴, 播放中点任意一条即刻切换(12 ms 交叉淡化,听不到接缝)。所有版本已按 CD 电平归一, 音量不再是判断依据。三条残差轨是相减后剩下的东西,各自调到了方便试听的电平, 调整量标在按钮上。
戴耳机。键盘 1–8 换轨,空格 播放暂停,拖动波形跳转。音频从对象存储加载,每条约 2–4 MB。
盲听
ABX
上面的切换是明牌的,知道自己在听哪一个会影响判断。这里 A、B 已知,X 每轮在浏览器本地 随机等于 A 或 B。答完给出单侧二项检验的 p 值: p < 0.05 才算真的听出来了,否则结果与掷硬币没有区别。
频域
频谱
整曲的功率谱密度,对数频轴。四个版本的可闻频段几乎完全重合,差异不在频率响应上。 能看出来的只有两处:MP3 在 kHz 被整齐切断, 以及三条残差曲线各自停在不同的高度。
点图例可以单独隐藏某条曲线。残差曲线越低,说明那一段频率上两个版本越一致。
频响差 相对 CD,1/48 倍频程平滑
分频段 相对 CD 的能量差 / 相减后的残差占比
「残差占比」是该频段里相减后剩下的能量与该版本自身能量之比。0 dB 表示剩下的和信号一样大, 即这段频率上两者毫无共同之处。最后一行 20–22.05 kHz 要打个折扣:那里 Hi-Res 的能量差来自 把 48 kHz 降到 44.1 kHz 时的抗混叠滤波器,不是源文件本身的差别。
多出来的规格装了什么
22.05 kHz 以上 48 kHz 相对 44.1 kHz 多出的那一段
24 bit 用满了吗 每个采样末尾连续零位的分布
整曲
语谱图
七张图渲染在完全相同的 0–24 kHz 像素网格上,色标同为 … dB。 虚线是 CD 的 22.05 kHz 上限:上方只存在于 48 kHz 音源中,Hi-Res 在这里显示的是极低电平的超声成分。 Hi-Res 与 CD 的 44.1 kHz 共同频带残差为 ,0–24 kHz 原生全频带残差为 。
时域
响度与动态
前三个版本的积分响度都在 LUFS 附近, 峰值与响度之比只有 dB, 是典型的响度战争母带。修复版把同一首歌放回 LUFS, PLR dB。
响度包络 每 0.5 秒的 RMS,整曲
四条曲线压在一起:修复版已按 CD 电平归一,这里看的是起伏而不是绝对高低。下面三层是残差,各自停在不同的高度。竖线是三段试听的位置。
电平传递曲线 每 ms 一个点
怎么做的
方法
- 统一采样率 两个 48 kHz 的版本用 soxr(VHQ)降到 44.1 kHz,与 CD 同栅格。同一个重采样器、同一档质量, 避免「换了个转换器所以结果不同」。
-
整数对齐
全曲取 5 个 12 秒窗口做互相关,取中位数。Hi-Res 滞后 CD
个采样,MP3个,修复版个。 各窗口之间的离散度用来检查有没有变速漂移。共同比较区间 。 - 电平匹配 以 CD 为基准做最小二乘增益匹配。修复版需要抬 dB 才能和 CD 齐平 —— 这一步之后,所有比较都与「谁更响」无关。
-
亚样本延迟校正
用相干性加权的互谱相位斜率估出不足一个采样的时间偏移(Hi-Res 是
µs), 再用 FFT 相位旋转补回去。只做整数对齐的话,Hi-Res 的残差是 dB, 看上去「明显有差异」;补掉这 2 微秒之后是 dB。 这 30 dB 全部来自时间错位,不是音质。 - 其余指标 响度按 ITU-R BS.1770-4(K 加权 + 门控),响度范围按 EBU Tech 3342, 真峰值用 4 倍过采样,功率谱用 Welch 法(32768 点、左右声道分别计算功率后取平均、 对数频率聚合),语谱图也按逐声道功率渲染在统一像素网格上,位深由末尾零位分布判定。
-
可复现
分析代码是一个 Python 包(numpy · scipy · soundfile · soxr · matplotlib),
入口
analyze.py一次跑完四个音源,输出这一页用到的全部数据。 网页上的曲线都由这份数据在浏览器里现画,没有预渲染的图表图片。
这份比较不能说明什么
只测了一首歌。结论是关于这四个文件的,不是关于「Hi-Res 这种格式」的普遍论断 —— 换一张专辑,流媒体那份完全可能来自另一次母带处理,那时候差异就是真的。 修复版的制作过程也无从核实,这里只能测量它的结果: 它与 CD 之间是母带层面的差异,而不是格式层面的差异。