【问题标题】:How to get the volume level in the software that plays the audio (not the system volume) in C#?如何在 C# 中播放音频(不是系统音量)的软件中获取音量级别?
【发布时间】:2013-10-28 19:48:48
【问题描述】:

我使用 NAudio 库在 C# 中监控计算机中的输入音量(即计算机混音器中的音量,而不是系统音量/输出音量):

inputVolume = device.AudioMeterInformation.MasterPeakValue;

现在,输入音量还取决于播放音频的软件/媒体播放器 - Windows Media Player、WMP 浏览器插件或任何其他软件(如 VLC、Winamp、Quciktime 等)。

我的问题是我需要知道用户何时通过播放音频的软件更改输入音量。例如,当用户增加软件中的音量时,它会增加输入音量 - 但我不知道是因为流本身“更大”还是因为用户在播放的软件中增加了音量音频。

如果用户只是增加计算机系统音量,它不会影响任何东西,因为它是输出音量,我不在乎。

音频不是来自用户计算机上的文件,而是来自互联网上的实时流(它仍然可以在安装在计算机上的音频应用程序上播放,而不仅仅是在浏览器中)。

是否可以在播放音频的软件中获取音量级别?它通常是 Windows Media Player 浏览器插件,但也可以是不同的软件。
如果不可能,有什么解决方法吗?

【问题讨论】:

  • @m4ngl3r 我只需要在计算机中播放音频的播放器内部的音量栏中的音量级别。这是否意味着我必须通过 C# 播放音频?那会有帮助吗?我不这么认为..
  • 播放音频的软件是否提供API?最好的选择是通过您自己的软件流式传输音频。
  • @user2140261 它几乎总是 WMP 浏览器插件,但我不确定是否可以将任何 Windows Media Player API 与 C# 一起使用,因为它正在浏览器中播放。
  • 这意味着,请改用 WaveChannel32 上的 Volume 属性。此外,除非您使用的是旧版本的 NAudio,否则不需要 BlockAlignReductionStream 和 WaveFormatConversion 流,因为 MP3FileReader 会发出 PCM。

标签: c# audio media-player volume naudio


【解决方案1】:
var player = new WaveOut();
var file = new AudioFileReader(@"test.mp3");
var meter = new MeteringSampleProvider(file);
meter.StreamVolume += (s,e) => Console.WriteLine("{0} - {1}", e.MaxSampleValues[0],e.MaxSampleValues[1]);
player.Init(new SampleToWaveProvider(meter));

var form = new Form();
form.Load += (s,e) => player.Play();
form.FormClosed += (s,e) => player.Dispose();
form.ShowDialog();

一些有用的链接

SO Question

So Question

【讨论】:

  • 我应该提到,音频不是来自计算机上的文件 - 它来自通过互联网的实时流。有问题吗?
  • 那么你应该得到流,等等,我刚刚找到了一些类似的文章。我会给你链接。
  • 这对我没有帮助。
  • 这无关紧要,我已经在混音器中获得了音频流电平,但我需要播放音频的软件中的音频电平,而不是计算机混音器中的音频电平。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2011-10-01
  • 1970-01-01
  • 2015-03-01
  • 2011-04-08
  • 2013-01-30
  • 2016-01-09
相关资源
最近更新 更多