C ++ - 规范化wav文件的音量级别

时间:2011-11-23 14:22:37

标签: c++ normalization wav volume

知道如何规范化wav文件,以便使用c ++将音量级别变为最大值? 公式是什么?我整个下午都用Google搜索,但没有找到答案。任何帮助!

2 个答案:

答案 0 :(得分:5)

假设NewMaxVal是您想要的声音流中的新最大值。最简单的解决方案是在声音流中找到当前最大值(CurMaxVal),然后将所有值乘以NewMaxVal / CurMaxVal。更高级的表单是使用dynamic compressor

答案 1 :(得分:3)

在wav文件中,值以0-1(或-1到1)的形式表示,具体取决于您的签名/无符号表示。您读取的每个字(两个字节)都是样本 - 因此不需要其他处理。在8位表示的情况下,1将是256,而在16位表示的情况下,1将是65536。

如果将所有样本乘以数字,则音量会增加。就这么简单! 为了将卷转换为贯穿整个文件的最大可能级别,以找出最大值。然后将这些数字相乘,使得最高值达到最大值而不会溢出。

您可以使用libsndfile处理所有样本。 Wav文件使用起来非常简单,但有许多组合需要注意。