我在一家小型音响公司工作。你知道,用最简单的东西和功能。
我有一个问题,当改变轨迹栏的值(滚动),这个轨迹栏显示当前的音频位置。
当我拖动跟踪条的滑块时,音频位置应该会改变。我正在使用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确实可以工作。但每当我滚动轨迹栏时,音频都会从头开始。
希望有人能帮我解决这个问题。提前感谢-建行
发布于 2016-04-28 14:23:37
有一个问题在您的转换跟踪条值到时间。您的代码返回微秒:
Timespan newPos = new Timespan(SongProgressTrackbar.Value);您应该像这样使用:(此返回秒数)
Timespan newPos = new Timespan(0,0,SongProgressTrackbar.Value);此代码将跟踪条转换为秒。谢谢。
发布于 2016-04-28 14:36:18
您应该将毫秒转换为滴答。一个滴答声代表一百纳秒或十万分之一秒。一毫秒有一万个滴答,或者一秒有一千万个滴答。一次参数使用TimeSpan会得到滴答形式的值。
Timespan newPos = new Timespan(SongProgressTrackbar.Value * 10000);谢谢。
https://stackoverflow.com/questions/36906386
复制相似问题