How to detect if any sound plays on a windows xp machine

前端 未结 2 729
臣服心动
臣服心动 2020-12-16 07:19

Is it possible to detect if any sound plays on a windows xp machine? Help in any language would be useful. I basically need to write a program that runs all the time and o

2条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-16 08:01

    The question was easy, but the answer is difficult. You'll need to utilize DirectSound to achieve your purpose. I haven't tested my solution yet, but you can try to call IDirectSoundBuffer8::GetStatus(), then check the return value of pdwStatus parameter. According to MSDN, DSBSTATUS_PLAYING is set if the buffer is being heard.

    Since you didn't tell about programming language you are using, I implement the following example using my favorite language, 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

    I just found a VB forum discussed about how to detect silence (no output of sound card). Download DetSilence.zip. In the DXRecord_GotWavData Sub, modify the constants SilencePercent and NonSilencePercent to the values you need.

提交回复
热议问题