我在一个小型音频播放器中工作。你知道,最简单的东西和功能。
更改轨迹栏的值(滚动)时出现问题,此轨迹栏显示当前的音频位置。
当我拖动轨迹栏的滑块时,音频位置应该会改变。 我正在使用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
答案 0 :(得分:1)
您的转化跟踪栏值与时间有关。你的代码返回微秒:
Timespan newPos = new Timespan(SongProgressTrackbar.Value);
你应该像这样使用:(返回秒数)
Timespan newPos = new Timespan(0,0,SongProgressTrackbar.Value);
此代码将trackbar转换为秒。 感谢。
答案 1 :(得分:1)
你应该将毫秒转换为Tick。 单个刻度表示一百纳秒或一千万分之一秒。一毫秒内有10,000个刻度,或者一秒钟内有1000万个刻度。 单个Argumant使用TimeSpan获取值为Tick。
Timespan newPos = new Timespan(SongProgressTrackbar.Value * 10000);
感谢。