我正在尝试用 C# 和 WPF 以及 NAudio 制作一个基本的 MP3 播放器。我最近添加了一个 slider 来跟踪歌曲中的当前位置,并允许您将其拖动到不同的位置,并且在 Thumb.DragCompleted
上它会将歌曲的位置设置为您拖动它的位置。
这一切都很好,除了当我让它跳到新位置时,它在改变之前仍然播放旧位置 1/5 秒左右。这是最明显的,例如当歌手正在唱“aaa”的时候,你暂停一下,拖到他唱“ooo”的地方,再弹一下,你会听到“aa-ooo”。这只会导致它听起来非常可怕。
所以我想音频播放只剩下一个小的“缓冲区”,它会在继续播放之前坚持播放。有没有办法清除这个缓冲区?还是我设置的位置不对?
我正在使用 WaveOut waveOutDevice
和 AudioFileReader audioFileReader
。该 slider 称为 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
调用 waveOutStop
和 Pause
调用 waveOutPause
,这不会清除任何正在进行的播放缓冲区。
关于C# NAudio - 更改音频播放位置仍然播放旧位置的小缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100620/