我从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日,格林威治标准时间-2时上午11:50]
Github上的用户higankanshi回答了我以下内容:
我发现了这个问题。 您应该使用LibVlc 2.2.0(或更高版本)。 Vlc.DotNet正在使用LibVlc 2.1.5
然后,我执行了一些测试并得出以下结论:
你是对的。使用LibVlc 2.2.0我可以在播放之前设置音量。不幸的是,出于某种原因,在播放音频之前设置音量仅在第一次打开应用程序时起作用。停止音频,更改音量并再次播放音量后,音量不再变化 - 只有在播放时才会发生变化。
以下是结果的步骤:
我正在对 Vlc.DotNet.Forms.Samples - CLR 4 - .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();
}
有什么想法吗?
答案 0 :(得分:4)
我找到了工作解决方案:
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;
}
这似乎适用于文件和流。
答案 1 :(得分:0)
这将如何运作?默认为40,如果您需要在播放开始时更改音量:
myVlcControl.Audio.Volume = volume;
并向MediaChanged事件添加基本功能,以验证该卷始终是否正确。此外,最好从0到200添加滑块,默认为40 - > ValueChanged事件 - > volume = 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;
}
答案 2 :(得分:0)
我的工作解决方案与上面解释的Marcin Bigorge相同。
Range.FormulaLocal