Вопрос был простой, но ответ сложный. Вам нужно будет использовать 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
измените константы SilencePercent
и NonSilencePercent
на нужные вам значения.