标准化一个波文件的音量级别
C++ - normalize volume level of a wav-file
任何想法如何规范化一个波文件,使音量水平成为最大通过使用c++?公式是什么?我整个下午都在谷歌上搜索,但没有找到答案。任何帮助,请!
假设NewMaxVal是您想要的声音流中的新最大值。最简单的解决方案是找到声音流中的当前最大值(CurMaxVal),然后将所有值乘以NewMaxVal/CurMaxVal。一种更高级的形式是利用动态压缩器。
在wav文件中,值以0-1(或-1到1)的形式表示,这取决于您的有符号/无符号表示。您读取的每个单词(两个字节)都是直接的样本-因此不需要其他处理。在8位表示的情况下,1将是256,在16位表示的情况下,1将是65536。
如果将所有样本乘以一个数字,则体积将增加。就是这么简单!为了将卷转换为最大可能的级别,运行整个文件以找出最大值。然后将数字相乘,使最大值达到最大值而不会溢出。
您可以使用libsndfile来处理所有示例。Wav文件使用起来非常简单,但有许多组合需要注意。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 挂起和取消挂起一个文件DLL
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何打开并写入一个名称取自C++中字符串的文件
- 构建一个由C和C++文件组成的库
- c++多进程编写一个唯一的文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何将class.cpp和class.hpp编译为一个.o文件
- 写入文件会产生一个空文件或根本没有文件
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)
- 在C++中一次读取一个文件一个int
- 输入/输出文件(一个字母的大写)
- 如何使用两个预编译的头文件.一个用于托管代码,另一个用于非托管代码.xxx.PCH不是一个有效的预编译头文件