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 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);
这两个单独或什至两者结合仍然会导致问题持续存在。
当暂停期间发生重新定位时,您应该调用 Stop
。这将刷新所有未完成的缓冲区和。在引擎盖下 Stop
调用 waveOutStop
和 Pause
调用 waveOutPause
,这不会清除任何正在进行的播放缓冲区。
我正在尝试用 C# 和 WPF 以及 NAudio 制作一个基本的 MP3 播放器。我最近添加了一个滑块,它可以跟踪歌曲中的当前位置,并允许您将其拖动到不同的位置,然后 Thumb.DragCompleted
它将歌曲的位置设置为您拖动它的位置。
这一切都很好,除了当我让它跳到新位置时,它在改变之前仍然播放旧位置 1/5 秒左右。这是最明显的,例如当歌手正在唱歌 "aaa" 时,您暂停,拖动到他唱歌 "ooo" 的位置,然后再次播放,您会听到 "aa-ooo"。这只会导致它听起来很可怕。
所以我想音频播放只是有一个小 'buffer' 剩余,它坚持在继续播放之前播放。有没有办法清除这个缓冲区?还是我位置设置错了?
我正在使用 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);
这两个单独或什至两者结合仍然会导致问题持续存在。
当暂停期间发生重新定位时,您应该调用 Stop
。这将刷新所有未完成的缓冲区和。在引擎盖下 Stop
调用 waveOutStop
和 Pause
调用 waveOutPause
,这不会清除任何正在进行的播放缓冲区。