3

我正在写一个音乐播放器,我想标准化不同歌曲的音量。

我可以想到一些不同的方法来做到这一点,例如:

  1. 遍历所有 PCM 样本(假设浮点从 -1 到 1)并选择 m = max(abs(sample))。然后将因子 1/m 应用于所有 PCM 样本。这将使峰值位于 1。

  2. 遍历 PCM 流并针对每个位置,取其周围一定宽度的 Hanning 窗口,计算绝对样本的平均值,然后从这些数据中选择最大值并对所有内容进行归一化。

  3. 与 2 相同,但通过其他方式获得某种平均值。

2 和 3 的缺点是我可能需要一些剪辑,因此会失去一些质量。不过,通过不归一化为 1 而是归一化到 0.95 左右,我也许可以在某种程度上避免这种情况。但我认为 2 和 3 的优势在于这可能是用户更自然的标准化。Wikipedia也有一些关于此的信息,并提到RMSReplayGainEBU R128来测量歌曲的响度。

其他流行的音乐播放器(如 iTunes 等)是如何做到这一点的?

4

1 回答 1

6

iTunes 使用声音检查技术。“Sound Check 是 Apple Inc. 的一项专有技术,其功能类似于 ReplayGain。它可在 iTunes 和 iPod 中使用。” (来自维基百科)所以,这对我来说不是解决方案。

似乎 ReplayGain 是最常见的技术。该算法在这里解释。示例实现是mp3gain (GPL) 或ffmpeg- replaygain (GPL,源自 mp3gain)。我现在在我的 MusicPlayer 项目(BSD 许可证)中有自己的实现。

另请参阅这些具有实现的项目:

于 2012-09-18T18:33:03.343 回答