我从Github下载了Vlc.DotNet项目,并在其示例表单应用程序中添加了更多的功能。一切都很好,除了事情:我注意到每次我启动应用程序并播放音频时,它的音量听起来都是100% (或者其他什么的)--即使在我将其设置为一个较低的值之后。
我试着在播放音频之前设置音量,但它没有工作。如果调试代码,则会发现卷始终设置为-1。
例如,如果我执行以下代码行,在将卷设置为40之后,在调试它时,卷仍然是-1:
myVlcControl.Play(new FileInfo(FileName));
myVlcControl.Audio.Volume = 40; 更改上述行的顺序也不起作用。
有趣的是,当音频已经播放,而我改变音量时,它成功地更改为NumericUpDown上的select值。下面的代码是发生这种情况的事件:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
myVlcControl.Audio.Volume = (int)numericUpDown1.Value;
}我已经试着解决这个问题两天了。不幸的是,我的编码技能甚至没有接近这个项目的幕后人员。我已经把这个问题发布在了他们的问题页面上,但是自从去年11月以来,有一些问题没有得到回答,所以我决定尝试StackOverflow。希望这里有人使用Vlc.DotNet并为我的问题找到一个解决方案。
话虽如此:
谢谢!
编辑:2016年1月8日,格林尼治时间上午11:50
Github上的用户higankanshi回答我如下:
我发现了这个问题。您应该使用LibVlc 2.2.0(或更高版本)。Vlc.DotNet正在使用LibVlc 2.1.5
然后,我执行了一些测试,得出了以下结论:
你是对的。使用LibVlc 2.2.0,我可以在播放前设置音量。
不幸的是,由于某种原因,在播放音频之前设置音量只在应用程序第一次打开时起作用。在停止音频,改变音量,并再次播放它后,音量不再改变-只在播放时改变。
以下是有结果的步骤:
我正在对Vlc.DotNet.Forms.Samples -CLR4-.Net 4.5项目进行测试.我对这个项目所做的改变是:
我的代码如下:
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();
}有什么想法吗?
发布于 2016-02-11 14:33:24
我找到了解决办法:
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;
}这似乎既适用于文件也适用于流。
发布于 2016-08-05 11:05:02
这是怎么回事。默认为40,如果需要在播放开始时更改音量:
myVlcControl.Audio.Volume = volume;并向MediaChanged事件添加基本函数,以验证卷总是正确的。另外,添加从0到200的滑块可能是个好主意,默认为40 -> ValueChanged -> ->= volumeSlider.Value;
private static int volume = 40;
private void volume_changer(int vol)
{
volume = vol;
}
private void preview_Player_MediaChanged(object sender, Vlc.DotNet.Core.VlcMediaPlayerMediaChangedEventArgs e)
{
preview_Player.Audio.Volume = volume;
}发布于 2017-08-06 19:55:35
我的工作解决方案与上文所述的Marcin相同。
vlcControl.TimeChanged += vlcControl_VideoOutChanged;
private void vlcControl_VideoOutChanged(object sender, VlcMediaPlayerTimeChangedEventArgs e)
{
vlcControl.Audio.Volume = volume;
}https://stackoverflow.com/questions/34661777
复制相似问题