使用 NAudio 降低音量时声音 clipping/clicking

Sound clipping/clicking when lowering volume with 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

显然这是 WaveOut 实例上的 DesiredLatencyNumberOfBuffers 问题。默认值会导致问题,更改值会解决问题。

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

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