基本上,我需要的是一种利用当前音频输出并检查声级的方法,即我需要能够检查音频设备上是否有播放的内容。
我不需要检查音量设置,而是检查实际播放音频流的声级。
抱歉,我在Visual Studio 2008上询问了如何在Windows中执行此操作。
@mikerobi:这构成了我推理的一部分 - 如果它显示在系统音量计上,必须有系统调用可以将其恢复
答案 0 :(得分:2)
这是一个很好的问题。对于32位Windows应用程序,答案是挂钩到winmm.dll和其他低级音频控制DLL。在C#中,我创建了一个包含extern方法原型的包装类:
public class MyAudioWrapper
{
[DllImport("winmm.dll", EntryPoint = "waveOutGetVolume")]
public extern void GetWaveVolume(IntPtr devicehandle, out int Volume);
...
}
查看this link以获取Windows音频方法列表;您可以使用调音台或波形控制器来设置音量。您要使用的内容将决定要导入的库。您将不得不研究如何最好地定义原型,以及如何获得音频/混音器设备的句柄。
答案 1 :(得分:2)
以下是Windows API调用的有用链接,以下是您正在寻找的内容:
http://www.pinvoke.net/default.aspx/winmm.waveOutGetVolume
由于要求已更改且您不需要音频级别,我建议以下内容可能有所帮助:
我认为您需要阅读输出流中正在播放的内容,并通过分析某些算法中的数据,您可能能够确定天气是否正在播放。为此,您需要 MMDevice API
http://msdn.microsoft.com/en-us/library/dd316556(v=VS.85).aspx
我不想诋毁你,但相信如果你不熟悉非托管代码,这将不容易实现。
即使您完成了这项工作,也无法预料到设备的结果行为。 祝你好运。
答案 2 :(得分:1)
我最近在这里回答了这样一个问题,请参阅How to detect if any sound plays on a Windows machine。