我正在写一个音乐播放器,我希望将不同歌曲的音量标准化。
我可以想到一些不同的方法,例如:
浏览所有PCM样本(假设浮点从-1到1)并选择m = max(abs(样本))。然后将因子1 / m应用于所有PCM样本。这将使峰值为1。
浏览PCM流,对于每个位置,取一定宽度的Hanning窗口,计算绝对样本的平均值,然后根据这些数据选择最大值并对所有内容进行标准化。
与2相同,但获得某种平均值的其他方式。
2和3的缺点是我可能需要一些剪裁,从而失去一些质量。通过不归一化到1但是到0.95左右,我可能会在某种程度上避免这种情况。但我认为2和3的优势在于这可能是用户更自然的规范化。 Wikipedia也提供了一些相关信息,并提及RMS,ReplayGain或EBU R128来衡量歌曲的响度。
其他流行音乐播放器(如iTunes等)如何做到这一点?
答案 0 :(得分:3)
iTunes使用Sound Check技术。 “Sound Check是一项专有的Apple Inc.技术,功能与ReplayGain类似。它可以在iTunes和iPod上使用。” (来自维基百科)所以,这对我来说没有解决方案。
似乎ReplayGain是最常见的技术。该算法被解释为here。示例实现是mp3gain(GPL)或ffmpeg-replaygain(GPL,源自mp3gain)。我有own implementation now in my MusicPlayer project(BSD许可证)。
参见这些项目的实施: