无法在C#中使用轨迹栏更改音频位置

时间:2016-04-28 05:58:05

标签: c# audio timespan trackbar cscore

我在一个小型音频播放器中工作。你知道,最简单的东西和功能。

更改轨迹栏的值(滚动)时出现问题,此轨迹栏显示当前的音频位置。

当我拖动轨迹栏的滑块时,音频位置应该会改变。 我正在使用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

2 个答案:

答案 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);

感谢。