gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:06:32 24 4
gpt4 key购买 nike

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

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

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

我正在使用 WaveOut waveOutDeviceAudioFileReader 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 调用 waveOutStopPause 调用 waveOutPause,这不会清除任何正在进行的播放缓冲区。

关于C# NAudio - 更改音频播放位置仍然播放旧位置的小缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com