使用NAudio降低音量时进行声音剪辑/点击

时间:2015-02-12 11:03:15

标签: c# naudio

在尝试实时降低WAV文件的音量时,音频正在剪辑(或点击)。

我已经在SampleChannelVolumeSampleProviderWaveChannel32个实例上尝试过,源代码是 32位WAV文件

如果我在WaveOut实例上尝试,剪辑不再发生,但我不想这样,因为它会降低应用程序中所有声音的音量。

这只有在我降低音量时才会发生,升起它不会造成削波。

这是一个已知问题还是我应该以不同的方式处理这个问题?

注意: 这就是在给定时间范围内音量实时下降的方式:

0.9523049
0.9246111
0.9199954
0.89384
0.8676848
0.8415294
0.8169126
0.7907572
0.7646018
0.739985
0.7122912
0.6892129
0.6630576
0.6369023
0.6122856
0.5861301
0.5599748
0.535358
0.5092026
0.4830474
0.456892
0.4322752
0.4061199
0.3799645
0.3553477
0.3276539
0.3030371
0.2784202
0.2522649
0.2261095
0.2014928
0.176876
0.149182
0.1245652
0.09841
0.07225461
0.04763785
0.02148246
0

1 个答案:

答案 0 :(得分:0)

显然DesiredLatency实例上存在NumberOfBuffersWaveOut问题。默认值会导致问题,更改的值会修复它。

这些是我用来解决问题的价值。

 WaveOutDevice = new WaveOut(WaveCallbackInfo.NewWindow())
        {
            DesiredLatency = 700, //! adjust the value to prevent sound clipping/clicking
            NumberOfBuffers = 3, //! number of buffers must be carefully selected to prevent audio clipping/clicking
        };