我正在一个小型音频播放器中工作。你知道,用最简单的东西和功能。
我在更改轨迹栏的值(滚动)时遇到问题,该轨迹栏显示当前音频位置。
当我拖动轨迹栏的 slider 时,音频位置应该发生变化。 我正在使用 CSCore 音频库。 这是我用来更新音频播放的当前位置的代码:
private void ProgressTimerTick(object sender, EventArgs e)
{
SongProgressTrackbar.MaxValue = (int)audioPlayer.Length.TotalMilliseconds;
SongProgress.Value = (int)audioPlayer.Position.TotalMilliseconds;
}
这可以完美地工作,没有任何问题。
但是这个...
private void SongProgressTrackbar_Scroll(object sender, ScrollEventArgs e)
{
Timespan newPos = new Timespan(SongProgressTrackbar.Value);
audioPlayer.Position = newPos;
}
这里发生的情况是,当事件被触发时,音频再次开始,而不是将位置更改为我在轨迹栏中单击的位置,它再次开始。
那我到底写错了什么?我尝试使用 ValueChanged 事件,但这只是让音频停留在 0:00 位置。正如我所说,TimerTick 确实有效。但每当我滚动轨迹栏时,音频就会从头开始。
希望有人能帮我解决这个问题。 提前致谢 - CCB
最佳答案
您的跟踪栏值到时间的转换存在问题。您的代码返回微秒:
Timespan newPos = new Timespan(SongProgressTrackbar.Value);
你应该像这样使用:(返回秒)
Timespan newPos = new Timespan(0,0,SongProgressTrackbar.Value);
此代码将轨迹栏转换为秒。 谢谢。
关于c# - 无法使用 C# 中的轨迹栏更改音频位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36906386/