C#NAudio - 改变音频播放位置仍然会占用旧位置的小缓冲区

时间:2015-08-19 16:06:57

标签: c# wpf position mp3 naudio

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

这一切都很好,所有,除非我跳到新位置,它仍然会在更改前的1/5左右播放旧位置。这是最明显的,例如当歌手正在唱“aaa”时,你停下来,拖到他唱“ooo”的地步,然后再玩,你会听到“aa-ooo”。这只会让它听起来非常可怕。

所以我认为音频播放只剩下一个小的“缓冲区”,它坚持在继续播放之前播放。有没有办法清除这个缓冲区?还是我把位置设置错了?

我使用的是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);

这两者单独或两者合并仍会导致问题持续存在。

1 个答案:

答案 0 :(得分:6)

在暂停期间重新定位时,您应该致电Stop。这将刷新任何未完成的缓冲区和。在Stop调用waveOutStopPause调用waveOutPause,这些调用不会清除任何正在播放的缓冲区。