我正在尝试用C#和WPF制作一个基本的MP3播放器,以及NAudio。我最近添加了一个滑块,可以跟踪歌曲中的当前位置,并允许您将其拖动到不同的位置,在Thumb.DragCompleted
时,它会将歌曲的位置设置为您拖动它的位置。
这一切都很好,所有,除非我跳到新位置,它仍然会在更改前的1/5左右播放旧位置。这是最明显的,例如当歌手正在唱“aaa”时,你停下来,拖到他唱“ooo”的地步,然后再玩,你会听到“aa-ooo”。这只会让它听起来非常可怕。
所以我认为音频播放只剩下一个小的“缓冲区”,它坚持在继续播放之前播放。有没有办法清除这个缓冲区?还是我把位置设置错了?
我使用的是WaveOut waveOutDevice
和AudioFileReader 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);
这两者单独或两者合并仍会导致问题持续存在。
答案 0 :(得分:6)
在暂停期间重新定位时,您应该致电Stop
。这将刷新任何未完成的缓冲区和。在Stop
调用waveOutStop
和Pause
调用waveOutPause
,这些调用不会清除任何正在播放的缓冲区。