如何检测是否有任何声音在Windows XP机器上播放

是否有可能检测是否有任何声音在Windows XP机器上播放? 任何语言的帮助都是有用的。 我基本上需要编写一个随时运行的程序,并在声音播放时向文件输出一些文本。 我不需要任何有关声音的具体信息,只是声音是否在播放。 我不在乎扬声器是否实际开机或类似的东西。

这个问题很简单,但答案很困难。 您需要使用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; 

UPDATE

我刚刚找到一个关于如何检测沉默 (声卡没有输出)的VB论坛。 下载DetSilence.zip 。 在DXRecord_GotWavData Sub中,将常量SilencePercentNonSilencePercent修改为您所需的值。

我最终以非常规的方式接近这一点。 首先,我安装了虚拟音频电缆(http://www.ntonyx.com/vac.htm)并将其配置为我的主要声音设备&#x3002; 然后我配置录音设备来录制主输出设备的声音。 这基本上意味着我可以打“记录”,它会记录什么去声卡。 然后,我用一个perl模块,Win32 :: SoundRec将声音录制到一个文件中。 我定期检查WAV文件的活动,如果有一些,我知道声音在播放。 我用另外一个perl模块Audio :: Wav解析WAV文件并寻找活动(沉默与非沉默)。