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,我可以在播放之前设置音量。

不幸的是,由于某些原因,只有在第一次打开应用程序时才可以在播放音频之前设置音量。在停止音频、更改音量并再次播放后,音量不会再更改,只会在播放时更改。

以下是有结果的步骤:

  1. 执行应用程序
  2. 在播放音频文件之前,请在运行时更改音量
  3. 播放音频文件;
    • 结果:音频以指定音量播放,成功!=)
  4. 按下停止
  5. 再次更改音量
  6. 再次按下播放(此时,播放方法内部的实现应获得新的音量信息);
    • 结果:音频以之前播放的相同音量再次播放。设置音量已不起作用

我正在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();
}

有什么想法吗?

Vlc.DotNet-在播放音频之前无法设置音量

我找到了有效的解决方案:

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;
}