我是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();
}
答案 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()