ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-27 14:08:56  阅读:245  来源: 互联网

标签:vlc libvlc c winforms


我从Github下载了Vlc.DotNet项目,并一直在为其Sample Samples应用程序添加更多功能.一切正常,除了在事情上:我注意到,每次我启动应用程序并播放音频时,即使将其设置为较低的值,音频听起来也好像是其音量为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用户回答了我以下问题:

I have found the problem.
You should use LibVlc 2.2.0(or later).
Vlc.DotNet is using LibVlc 2.1.5

然后,我执行了一些测试,并得出以下结论:

你是对的.使用LibVlc 2.2.0,我可以在播放之前设置音量.

不幸的是,由于某些原因,在播放音频之前设置音量仅在首次打开应用程序时起作用.停止音频,更改音量并再次播放之后,音量不再更改-仅在播放时更改.

以下是产生结果的步骤:

>执行应用程序;
>在播放音频文件之前在运行时更改音量;
>播放音频文件;

>结果:音频成功以指定的音量播放! =)

>按停止;
>再次更改音量;
>再次按Play(此时,play方法内的实现应获取新的音量信息);

>结果:音频再次以之前播放的音量播放.设置音量不再有效.

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

这似乎适用于文件和流.

标签:vlc,libvlc,c,winforms
来源: https://codeday.me/bug/20191027/1944925.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有