Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

2年前关闭。



Improve this question




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

我可以想到一些不同的方法来做到这一点,例如:
  • 遍历所有PCM样本(假定浮点从-1到1),然后选择m = max(abs(sample))。然后将系数1 / m应用于所有PCM样本。这将使峰值为1。
  • 遍历PCM流,并针对每个位置,在其周围采用一定宽度的汉宁窗口,计算绝对样本的平均值,然后从这些数据中选择最大值并标准化所有内容。
  • 与2相同,但通过其他方式获得某种平均值。

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

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

    最佳答案

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

    看来ReplayGain是最常见的技术。该算法解释为here。示例实现是mp3gain(GPL)或ffmpeg-replaygain(GPL,从mp3gain派生)。我有own implementation now in my MusicPlayer project(BSD许可证)。

    另请参见这些项目及其实现:

  • http://sox.sourceforge.net/
  • http://r128gain.sourceforge.net/
  • official ReplayGain homepage
  • official ReplayGain 1.0 specification
  • Wikipedia: ReplayGain
  • 08-18 18:29