Vlc.DotNet-在播放音频之前无法设置音量
本文关键字:设置 DotNet- 播放 音频 Vlc | 更新日期: 2023-09-27 18:29:33
我从Github下载了Vlc.DotNet项目,并一直在为其Sample Forms应用程序添加更多功能。一切都很好,除了一件事:我注意到,每次我启动应用程序并播放音频时,音频的音量听起来都是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上的Issues页面上发布了这个问题,但由于自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,我可以在播放之前设置音量。
不幸的是,由于某些原因,只有在第一次打开应用程序时才可以在播放音频之前设置音量。在停止音频、更改音量并再次播放后,音量不会再更改,只会在播放时更改。
以下是有结果的步骤:
- 执行应用程序
- 在播放音频文件之前,请在运行时更改音量
- 播放音频文件;
- 结果:音频以指定音量播放,成功!=)
- 按下停止
- 再次更改音量
- 再次按下播放(此时,播放方法内部的实现应获得新的音量信息);
- 结果:音频以之前播放的相同音量再次播放。设置音量已不起作用
我正在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;
}
这似乎对文件和流都有效。
这是怎么回事。默认40,如果您需要在播放开始时更改音量:
myVlcControl.Audio.Volume = volume;
并为MediaChanged事件添加基本功能,以验证卷是否始终正确。此外,最好添加0-200的滑块,默认值为40->ValueChanged event->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;
}
我的工作解决方案与上面解释的Marcin Bigorge相同。
vlcControl.TimeChanged += vlcControl_VideoOutChanged;
private void vlcControl_VideoOutChanged(object sender, VlcMediaPlayerTimeChangedEventArgs e)
{
vlcControl.Audio.Volume = volume;
}