C# NAudio - 更改音频播放位置仍然播放旧位置的小缓冲区

C# NAudio - Changing audio playback position still plays a small buffer of old position

我正在尝试用 C# 和 WPF 以及 NAudio 制作一个基本的 MP3 播放器。我最近添加了一个滑块,它可以跟踪歌曲中的当前位置,并允许您将其拖动到不同的位置,然后 Thumb.DragCompleted 它将歌曲的位置设置为您拖动它的位置。

这一切都很好,除了当我让它跳到新位置时,它在改变之前仍然播放旧位置 1/5 秒左右。这是最明显的,例如当歌手正在唱歌 "aaa" 时,您暂停,拖动到他唱歌 "ooo" 的位置,然后再次播放,您会听到 "aa-ooo"。这只会导致它听起来很可怕。

所以我想音频播放只是有一个小 'buffer' 剩余,它坚持在继续播放之前播放。有没有办法清除这个缓冲区?还是我位置设置错了?

我正在使用 WaveOut waveOutDeviceAudioFileReader audioFileReader。滑块称为 sldrPlaybackProgress.
我已经尝试用两种不同的方式改变歌曲中的位置:

第一种方法:

audioFileReader.CurrentTime = new TimeSpan(0, (int)(Math.Floor(sldrPlaybackProgress.Value / 60)), (int)(Math.Floor(sldrPlaybackProgress.Value % 60))); 

第二种方法:

audioFileReader.Position = (long)(sldrPlaybackProgress.Value * audioFileReader.WaveFormat.AverageBytesPerSecond);

这两个单独或什至两者结合仍然会导致问题持续存在。

当暂停期间发生重新定位时,您应该调用 Stop。这将刷新所有未完成的缓冲区和。在引擎盖下 Stop 调用 waveOutStopPause 调用 waveOutPause,这不会清除任何正在进行的播放缓冲区。