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

时间:2015-06-03 14:52:12

标签: c# naudio

我在NAudio真的很新,需要你的帮助。我正在使用NAudio,我需要更改音频文件中的音量lvl并写入新文件。我想我必须得到音频文件的样本并增加something。但我不知道如何开始。愿有人帮帮我吗? 这是我的代码:

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);
                    }
                }
            }

我做得好吗?

1 个答案:

答案 0 :(得分:2)

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

你的例子很好看。您是否尝试过同时比较旧的和新的WAV?

但有几点需要注意:

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