是否可以检测Windows XP机器上是否有声音?任何语言的帮助都会很有用。我基本上需要编写一个一直运行的程序,并在播放声音时将一些文本输出到文件中。我不需要任何关于声音的具体信息,只需要播放声音。我不关心扬声器是否真的开机或类似的东西。
答案 0 :(得分:4)
问题很简单,但答案很难。您需要利用DirectSound来实现您的目的。我还没有测试过我的解决方案,但您可以尝试调用IDirectSoundBuffer8::GetStatus(),然后检查 pdwStatus 参数的返回值。根据MSDN,如果正在听到缓冲区,则设置DSBSTATUS_PLAYING
。
由于您没有讲述您正在使用的编程语言,因此我使用我最喜欢的语言Delphi实现了以下示例。
var
dwStatus: DWORD;
hResult: HRESULT;
hResult := GetStatus(@dwStatus);
if hResult = DS_OK then begin
if dwStatus and DSBSTATUS_PLAYING <> 0 then
ShowMessage('Sound card is playing sound now.');
end;
我刚刚发现了一个讨论how to detect silence的VB论坛(没有输出声卡)。下载DetSilence.zip。在DXRecord_GotWavData
Sub中,将常量SilencePercent
和NonSilencePercent
修改为您需要的值。
答案 1 :(得分:2)
我最终以非常规的方式接近了这一点。首先我安装了虚拟音频线(http://www.ntonyx.com/vac.htm)并将其配置为我的主要声音设备。然后我配置录音设备以录制主输出设备的声音。这基本上意味着我可以点击“记录”,它会记录任何进入声卡的内容。然后我使用perl模块Win32 :: SoundRec将声音录制到文件中。我定期检查wav文件的活动,如果有的话,我知道声音在播放。我使用另一个perl模块Audio :: Wav来解析WAV文件并寻找活动(沉默与非沉默)。