如何以编程方式获取当前audio级别?

基本上,我需要的是一种方法来挖掘当前的audio输出,并检查声音水平,即我需要能够检查是否有什么东西在audio设备上播放或没有。

我不需要检查音量设置,但是需要检查实际播放的audiostream的音量。

对不起,我在Visual Studio 2008上询问如何在Windows中执行此操作。

@mikerobi:这构成了我推理的一部分 – 如果在系统音量计上显示,必须有一个系统调用可以返回

这里是一个有用的Windows API调用链接,这正是你在找什么:

http://www.pinvoke.net/default.aspx/winmm.waveOutGetVolume


由于要求改变,你不需要音频水平,我建议以下可能会有所帮助:

我认为你需要阅读输出流中回放的内容,并通过分析某些算法中的数据来确定天气是否正在播放。 要做到这一点,你需要MMDevice API

http://msdn.microsoft.com/en-us/library/dd316556(v=VS.85).aspx

我不想丢弃你,但是相信我,如果你不熟悉非托管代码,这不是一件容易的事情。

  • 您必须在每个调用中填写许多结构。
  • 您必须按特定顺序执行调用。
  • 编组引用结构。

即使你完成了,你也无法预测设备的结果行为。 祝你好运。

这是一个很好的问题。 对于32位Windows应用程序,答案是挂钩到winmm.dll和其他低级音频控制DLL。 在C#中,我会创建一个包含extern方法原型的包装类:

 public class MyAudioWrapper { [DllImport("winmm.dll", EntryPoint = "waveOutGetVolume")] public extern void GetWaveVolume(IntPtr devicehandle, out int Volume); ... } 

看看这个链接的Windows音频方法列表; 您可以使用调音台或者仅使用波形控制器来设置音量。 你想使用什么将决定什么库导入。 您将不得不研究如何最好地定义原型,以及如何获得音频/混音器设备的句柄。

我最近在这里回答了这样的问题,请参阅如何检测Windows计算机上是否播放声音 。