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

标签 c# audio timespan trackbar cscore

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

我在更改轨迹栏的值(滚动)时遇到问题,该轨迹栏显示当前音频位置。

当我拖动轨迹栏的 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/

相关文章:

c# - 映射具有不同属性的两个不同对象

c# - 我应该为这个项目选择哪种编程语言/框架?

audio - SoundEngine点击声音

带音量包络的 iOS 音频采样器

c# - 获取每秒滴答数并转换为字符串值?

c# - 找不到 System.Xaml?

c# - 将 IConfigurationSection 转换为 IOptions

java - 是否可以使用双簧管库同时在 Android 中打开 2 个麦克风?

c# - TimeSpan.Parse 时间格式 hhmmss

c# - 无法解析 TimeSpan,因为至少有一个数字组件超出范围或包含太多数字