标准化一个波文件的音量级别

C++ - normalize volume level of a wav-file

本文关键字:文件 一个 标准化      更新时间:2023-10-16

任何想法如何规范化一个波文件,使音量水平成为最大通过使用c++?公式是什么?我整个下午都在谷歌上搜索,但没有找到答案。任何帮助,请!

假设NewMaxVal是您想要的声音流中的新最大值。最简单的解决方案是找到声音流中的当前最大值(CurMaxVal),然后将所有值乘以NewMaxVal/CurMaxVal。一种更高级的形式是利用动态压缩器。

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

如果将所有样本乘以一个数字,则体积将增加。就是这么简单!为了将卷转换为最大可能的级别,运行整个文件以找出最大值。然后将数字相乘,使最大值达到最大值而不会溢出。

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