如何在C#中规范wav文件的音量?
我正在使用NAudio打开一个wav文件。在使用SimpleCompressor类之后,我还必须将文件的音量归一化到0db,但我不知道该怎么做。目前我有这个:如何在C#中规范wav文件的音量?
string strCompressedFile = "";
byte[] WaveData = new byte[audio.Length];
SimpleCompressorStream Compressor = new SimpleCompressorStream(audio);
Compressor.Enabled = true;
if (Compressor.Read(WaveData, 0, WaveData.Length) > 0)
{
//doing the normalizing now
}
我怎样才能从新的字节数组WaveData我得到的音量,我该如何改变它?在WaveData是包括FileHeader里
你,以使其适应最高水平,绝对可以改变单个样本值来计算整个wav文件:
string strCompressedFile = "";
byte[] WaveData = new byte[audio.Length];
SimpleCompressorStream Compressor = new SimpleCompressorStream(audio);
Compressor.Enabled = true;
byte maxLevel = 20;
if (Compressor.Read(WaveData, 0, WaveData.Length) > 0)
{
for (int i = 0; i < audio.Length; i++)
{
if (WaveData[i] > maxLevel)
{
WaveData[i] = maxLevel;
}
}
}
我添加了一个循环遍历所有的样品,如果它值高于maxLevel
我们将其设置为maxLevel
。
我对wav文件不是很熟悉,但是我可以将每个字节设置为相同的数字吗?是不是有一些头字节?在你的例子中,你从字节0开始。另一件我想知道的:每个字节的值是否是音量?我认为这是声音(例如录音)本身,而不是... 我认为正常化,我必须得到最大音量,然后将其计算为最大的值,然后对所有其他音量数使用相同的因子。但我不知道如何获得音量以及最大可能值是多少 – computermaus
样本是模拟信号的数字表示,因此每个样本值都等于给定时间内的模拟信号幅度。如果将每个字节设置为相同的数字,它将代表直线模拟信号,这基本上是静音。相反,你需要以某种方式调整选秀权。 –
为了录制声音,我找到了一个代码片,它允许我将音量计作为进度条来实现。但说实话,我不明白从这段代码中的一切: double sum = 0;对于(var i = 0; i
https://stackoverflow.com/questions/984729/how-can-i-determine-how-loud-a-wav-file-will-sound –
谢谢你的链接,但我仍然不知道如何执行它。我不能使用任何额外的工具,我必须在我的软件中实现它 – computermaus