增加音量X分贝并重写音频文件

时间:2015-06-05 15:51:03

标签: c#

我是naudio的新手。我想增加X db的音量。我写了这段代码:

public static void IncreaseVolume(string inputPath, string outputPath, double db)
{            
    double linearScalingRatio = Math.Pow(10d, db / 10d);
    using (WaveFileReader reader = new WaveFileReader(inputPath))
    {
        VolumeWaveProvider16 volumeProvider = new VolumeWaveProvider16(reader);
        using (WaveFileWriter writer = new WaveFileWriter(outputPath, reader.WaveFormat))
        {
            while (true)
            {
                var frame = reader.ReadNextSampleFrame();
                if (frame == null)
                    break;
                writer.WriteSample(frame[0] * (float)linearScalingRatio);
            }
        }
    }
}

好的,这很有效,但我怎样才能找到每个样本增加多少分贝?愿任何人为我解释这一时刻并提供任何例子吗?

更新

 using (WaveFileReader reader = new WaveFileReader(inFile))
            {
                float Sum = 0f;
                for (int i = 0; i < reader.SampleCount; i++)
                {
                    var sample = reader.ReadNextSampleFrame();
                    Sum += sample[0] * sample[0];
                }
                var db =  20 * Math.Log10(Math.Sqrt(Sum / reader.SampleCount) / 1);               
                Console.WriteLine(db);
                Console.ReadLine();
            }

1 个答案:

答案 0 :(得分:3)

您的代码看起来不错。要测量音频样本的平均声级,您需要计算此声级的RMS(均方根):

RMS := Sqrt( Sum(x_i*x_i)/N)

x_i是第i个样本,N是样本数。 RMS是信号的平均幅度。使用

RMS_dB = 20*log(RMS/ref)

(ref为1.0或32767.0)

将其转换为分贝值。

您可以在更改音量之前和之后计算此RMS值。区别应该是您在dB

中使用的IncreaseVolume()