Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 改变音频文件中的分贝(音量)_C#_Naudio - Fatal编程技术网

C# 改变音频文件中的分贝(音量)

C# 改变音频文件中的分贝(音量),c#,naudio,C#,Naudio,我刚到诺迪奥,需要你的帮助。我正在与NAudio合作,我需要更改音频文件中的音量lvl并写入新文件。我想我必须得到音频文件的样本,以及其中增加的内容。但我不知道如何开始。有人能帮我吗? 这是我的代码: using (WaveFileReader reader = new WaveFileReader(inFile)) { VolumeWaveProvider16 volumeProvider = new VolumeWaveProvider

我刚到诺迪奥,需要你的帮助。我正在与NAudio合作,我需要更改音频文件中的音量lvl并写入新文件。我想我必须得到音频文件的样本,以及其中增加的
内容。但我不知道如何开始。有人能帮我吗?
这是我的代码:

using (WaveFileReader reader = new WaveFileReader(inFile))
            {
                VolumeWaveProvider16 volumeProvider = new VolumeWaveProvider16(reader);
                using (WaveFileWriter writer = new WaveFileWriter(outFile, reader.WaveFormat))
                {

                    while (true)
                    {
                        var frame = reader.ReadNextSampleFrame();
                        if (frame == null)
                            break;
                        //var a = frame[0];
                        writer.WriteSample(frame[0] + 0.2f);
                    }
                }
            }

我还好吗?

如果您可以访问PCM数据,最简单的方法是将每个采样值增加一个常数

你的例子看起来不错。你有没有试过通过听两种声音来比较新旧WAV

但有几件事需要注意:

  • ReadNextSampleFrame()
    返回一个浮点数组,每个音频通道有一个值。如果您有多声道音频,则应使用
    foreach
    在阵列上迭代,并增加帧的每个值
  • 根据检索到的样本值的范围,添加0.2可能没有效果。您是否检查了
    ReadNextSampleFrame()
    返回的值类型?也就是说,在调试应用程序时,要检索的实际值是什么?是否有一些(或很多)值大于1
  • 由于您不知道输入值的范围,因此无法将其剪裁到该范围。如果原始文件中的样本值非常大,则增加该值可能会超出有效范围,从而导致意外输出

好的,我可以得到每个样本(它是浮点值)。接下来该怎么做?基本上只需从缓冲区中读取每个样本值,将其增加0.2(假设样本值的范围为[0..1]),必要时将提升值剪切到有效范围,然后将样本写回缓冲区。