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

C#NAudio-改变音频播放位置仍然会播放旧位置的小缓冲区,c#,wpf,position,mp3,naudio,C#,Wpf,Position,Mp3,Naudio,我正在尝试用C#和WPF以及NAudio制作一个基本的MP3播放器。我最近添加了一个滑块,它可以跟踪歌曲中的当前位置,并允许您将歌曲拖动到另一个位置,然后按拇指拖动。DragCompleted将歌曲的位置设置为您拖动歌曲的位置 这一切都很好,除了当我让它跳到新的位置,它仍然发挥旧的位置1/5秒左右,然后改变。这是最明显的,例如当歌手在唱“AAA”的时候,你停顿,拖到他唱“OOO”的地方,然后再演奏,你会听到“AA OOO”。这只会让它听起来很可怕 因此,我认为音频播放只是有一个小的“缓冲区”,它

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

这一切都很好,除了当我让它跳到新的位置,它仍然发挥旧的位置1/5秒左右,然后改变。这是最明显的,例如当歌手在唱“AAA”的时候,你停顿,拖到他唱“OOO”的地方,然后再演奏,你会听到“AA OOO”。这只会让它听起来很可怕

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

我使用的是
WaveOut WaveOut设备
音频文件阅读器
。滑块称为
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
调用
waveouttop
Pause
调用
waveoutpuse
,这不会清除任何正在播放的缓冲区

尝试暂停,设置位置,再玩一次。我已经试过了,仍然不起作用。我甚至拼命尝试重新初始化WaveOut和AudioFileReader,但这会导致歌曲播放两次时出现一些奇怪的错误-更不用说这样做可能不是很有效。刚刚发现WaveOut.Stop(),设置AudioFileReader的位置,然后再次启动WaveOut.Play()将修复它。我认为如果我有一些WaveOut.PlaybackStopped事件处理程序,这可能会导致代码中出现一些恼人的bug,但这是我必须解决的问题。感谢暂停/播放的想法,让我走上了正确的轨道:)哇,直接从马的嘴。谢谢,这帮助我继续…也许这应该从演示程序(使用WinForms)中更清楚