我从 Github 下载了 Vlc.DotNet 项目,并一直在为其示例表单应用程序添加更多功能。一切都很好,除了一件事:我注意到每次我启动应用程序并播放音频时,音频听起来像是它的音量是 100%(或大约 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 回答了我如下:
I have found the problem. You should use LibVlc 2.2.0(or later). Vlc.DotNet is using LibVlc 2.1.5
然后,我进行了一些测试,得出以下结论:
你是对的。使用 LibVlc 2.2.0,我可以在播放前设置音量。
不幸的是,出于某种原因,在播放音频之前设置音量仅在应用程序首次打开时有效。停止音频,改变音量,再次播放后,音量不再改变——只在播放时改变。
以下是带结果的步骤:
- 执行申请;
- 在播放音频文件之前在运行时更改音量;
- 播放音频文件;
- 结果:音频以指定的音量播放,成功! =)
- 按停止键;
- 再次更改音量;
- 再次按下播放键(此时,播放方法内部的实现应该会得到新的音量信息);
- 结果:音频再次以之前播放的相同音量播放。设置音量不再起作用。
我正在对 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();
}
有什么想法吗?
最佳答案
我找到了可行的解决方案:
int volume { get; set; }
public Constructor(){
InitializeComponent();
myVlcControl.VideoOutChanged += myVlcControl_VideoOutChanged;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
this.volume = (int)numericUpDown1.Value;
myVlcControl.Audio.Volume = volume;
}
void vlcPlayer_VideoOutChanged(object sender, VlcMediaPlayerVideoOutChangedEventArgs e)
{
myVlcControl.Audio.Volume = volume;
}
这似乎对文件和流都有效。
关于c# - Vlc.DotNet - 在播放音频之前无法设置音量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661777/