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

前端 未结 2 713
臣服心动
臣服心动 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:00

    I ended up approaching this in an unconventional manner. First I installed Virtual Audio Cable (http://www.ntonyx.com/vac.htm) and configured it as my primary sound device. I then configured the recording device to record the sound from the primary output device. This basically means I can hit "record" and it will record anything going to the sound card. Then I used a perl module, Win32::SoundRec to record sound to a file. I periodically check the wav file for activity and if there is some, I know sound was playing. I used another perl module, Audio::Wav, to parse the WAV file and look for activity (silence vs. non-silence).

    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题