我正在写一个音乐播放器,我想标准化不同歌曲的音量。
我可以想到一些不同的方法来做到这一点,例如:
遍历所有 PCM 样本(假设浮点从 -1 到 1)并选择 m = max(abs(sample))。然后将因子 1/m 应用于所有 PCM 样本。这将使峰值位于 1。
遍历 PCM 流并针对每个位置,取其周围一定宽度的 Hanning 窗口,计算绝对样本的平均值,然后从这些数据中选择最大值并对所有内容进行归一化。
与 2 相同,但通过其他方式获得某种平均值。
2 和 3 的缺点是我可能需要一些剪辑,因此会失去一些质量。不过,通过不归一化为 1 而是归一化到 0.95 左右,我也许可以在某种程度上避免这种情况。但我认为 2 和 3 的优势在于这可能是用户更自然的标准化。Wikipedia也有一些关于此的信息,并提到RMS、ReplayGain或EBU R128来测量歌曲的响度。
其他流行的音乐播放器(如 iTunes 等)是如何做到这一点的?