首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vlc.DotNet -无法在播放音频之前设置音量

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

Stack Overflow用户
提问于 2016-01-07 17:45:05
回答 3查看 5.5K关注 0票数 5

我从Github下载了Vlc.DotNet项目,并在其示例表单应用程序中添加了更多的功能。一切都很好,除了事情:我注意到每次我启动应用程序并播放音频时,它的音量听起来都是100% (或者其他什么的)--即使在我将其设置为一个较低的值之后。

我试着在播放音频之前设置音量,但它没有工作。如果调试代码,则会发现卷始终设置为-1。

例如,如果我执行以下代码行,在将卷设置为40之后,在调试它时,卷仍然是-1:

代码语言:javascript
复制
myVlcControl.Play(new FileInfo(FileName));
myVlcControl.Audio.Volume = 40; 

更改上述行的顺序也不起作用。

有趣的是,当音频已经播放,而我改变音量时,它成功地更改为NumericUpDown上的select值。下面的代码是发生这种情况的事件:

代码语言:javascript
复制
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,我可以在播放前设置音量。

不幸的是,由于某种原因,在播放音频之前设置音量只在应用程序第一次打开时起作用。在停止音频,改变音量,并再次播放它后,音量不再改变-只在播放时改变。

以下是有结果的步骤:

  1. 执行申请;
  2. 在播放音频文件之前,在运行时更改音量;
  3. 播放音频文件;
    • 结果:音频在指定音量下播放,成功!=)

  1. 按下停止;
  2. 再次改变音量;
  3. 再次按Play (此时,play方法中的实现应该获得新的卷信息);
    • 结果:再次播放相同音量的音频。设置音量不再起作用了。

我正在对Vlc.DotNet.Forms.Samples -CLR4-.Net 4.5项目进行测试.我对这个项目所做的改变是:

  • 添加了一个NumericUpDown控件,以便我可以在运行时更改卷;
  • 将ValueChanged事件关联到NumericUpDown控件,以便每当它更改该值时,新值将传递给VlcControl;
  • 创建一个Play()函数,它总是在播放音频之前获取最后一个音量值;

我的代码如下:

代码语言:javascript
复制
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();
}

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2016-02-11 14:33:24

我找到了解决办法:

代码语言:javascript
复制
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;
}

这似乎既适用于文件也适用于流。

票数 4
EN

Stack Overflow用户

发布于 2016-08-05 11:05:02

这是怎么回事。默认为40,如果需要在播放开始时更改音量:

代码语言:javascript
复制
myVlcControl.Audio.Volume = volume;

并向MediaChanged事件添加基本函数,以验证卷总是正确的。另外,添加从0到200的滑块可能是个好主意,默认为40 -> ValueChanged -> ->= volumeSlider.Value;

代码语言:javascript
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2017-08-06 19:55:35

我的工作解决方案与上文所述的Marcin相同。

代码语言:javascript
复制
vlcControl.TimeChanged += vlcControl_VideoOutChanged;

private void vlcControl_VideoOutChanged(object sender, VlcMediaPlayerTimeChangedEventArgs e)
{
    vlcControl.Audio.Volume = volume;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34661777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档