【发布时间】:2017-08-07 03:55:35
【问题描述】:
我从 Github 下载了 Vlc.DotNet 项目,并一直在为其 Sample Forms 应用程序添加更多功能。一切都很好,除了事情:我注意到每次我启动应用程序并播放音频时,音频听起来就像它的音量是 100%(或大约)——即使我将它设置为较低的值。
我尝试在播放音频之前设置音量,但没有成功。 如果我调试代码,我会看到音量始终设置为 -1。
比如我执行下面这几行代码,设置音量为40后,调试的时候音量还是-1:
myVlcControl.Play(new FileInfo(FileName));
myVlcControl.Audio.Volume = 40;
更改上述行的顺序也不起作用。
有趣的是,当音频已经在播放并且我更改音量时,它成功更改为 NumericUpDown 上的选择值。下面的代码是发生这种情况的事件:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
myVlcControl.Audio.Volume = (int)numericUpDown1.Value;
}
我已经尝试解决这个问题两天了。不幸的是,我的编码技能甚至不及这个项目背后的人。我已经在 Github 上的问题页面上发布了这个问题,但由于自 11 月以来有问题没有回复,我决定尝试 StackOverflow。希望这里有人使用 Vlc.DotNet 并为我的问题提供解决方案。
话虽如此:
- 有人有同样的问题吗?
- 有人知道怎么解决吗?
- 有什么建议吗?
谢谢!
[编辑于 2016 年 1 月 8 日上午 11:50 GMT-2]
Github 上的用户 higankanshi 回复我如下:
我发现了问题。 您应该使用 LibVlc 2.2.0(或更高版本)。 Vlc.DotNet 正在使用 LibVlc 2.1.5
然后,我进行了一些测试,得出以下结论:
你是对的。使用 LibVlc 2.2.0 我可以在播放前设置音量。
不幸的是,由于某种原因,在播放音频之前设置音量仅在第一次打开应用程序时有效。停止音频、改变音量并再次播放后,音量不再改变 - 仅在播放时改变。
以下是有结果的步骤:
- 执行应用程序;
- 在播放音频文件之前在运行时更改音量;
- 播放音频文件;
- 结果:音频以指定音量播放,成功! =)
- 按下停止;
- 再次改变音量;
- 再次按播放(此时play方法内部的实现应该得到新的音量信息);
- 结果:音频以之前播放的音量再次播放。设置音量不再起作用。
我正在 Vlc.DotNet.Forms.Samples - CLR 4 - .Net 4.5 项目上进行测试。我对项目所做的更改是:
- 添加了 NumericUpDown 控件,以便我可以在运行时更改音量;
- 将ValueChanged事件与NumericUpDown控件相关联,这样每次改变值时,都会将新值传递给VlcControl;
- 创建了一个 Play() 函数,该函数总是在播放音频之前获取最后一个音量值;
我的代码如下:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
myVlcControl.Audio.Volume = (int)numericUpDown1.Value;
}
private void Play()
{
myVlcControl.Audio.Volume = (int)numericUpDown1.Value;
myVlcControl.Play(new FileInfo(FileName));
}
private void OnButtonPlayClicked(object sender, EventArgs e)
{
Play();
}
private void OnButtonStopClicked(object sender, EventArgs e)
{
myVlcControl.Stop();
}
private void OnButtonPauseClicked(object sender, EventArgs e)
{
myVlcControl.Pause();
}
有什么想法吗?
【问题讨论】:
-
这是已知的错误。 15-20年后可能会修复。 VLC 是一个很好的程序,但要达到 1.0 版本需要 10 多年的时间。
-
@i486,感谢您的评论。但是,如果这是一个 LibVcl 已知的 bug,怎么不影响 VLC 播放器呢?
-
@i486,我的意思是:我在 VLC 播放器本身上没有得到相同的行为。这只发生在我的应用程序中。
-
不知道这个。但是我在开始播放后延迟了“设置音量”。 VLC 的另一个主要问题是兼容性——它们经常更改 API,如果您开发了某些东西,则必须创建新版本。即使在 COM/ActiveX 中也有变化。
-
@Lucas Loss,你有没有想过解决这个问题?在尝试了以下所有解决方法后,我遇到了您所描述的相同行为。