检测麦克风是否打开

时间:2009-10-13 11:05:07

标签: windows audio microphone

有没有办法以编程方式检测Windows上是否启用了麦克风?

3 个答案:

答案 0 :(得分:5)

不,麦克风不会告诉您它们是否“打开”或某个特定声道是否连接到麦克风设备。您可以做的最好的事情是从您怀疑是麦克风的输入通道读取音频数据(例如Windows默认输入设备/通道),并查看其上是否有任何信号。

要做到这一点,你必须删除任何DC偏移并寻找合理本底噪声以上的任何信号。 (慷慨:即使没有信号进入,许多便宜的音频输入设备也会非常嘈杂。中频滤波器/ FFT也可用于仅检测语音中间范围内的信号,而不是低频嗡嗡声和短暂的点击。)

答案 1 :(得分:2)

这没有以任何方式测试,但我会尝试阅读一些样本,看看是否有任何变化。如果麦克风打开,那么您应该从环境声音中获得不同的值。如果麦克风已关闭,你应该得到一个0.再次,这就是我想象事情应该如何运作 - 我不知道他们是否真的那样工作。

答案 2 :(得分:1)

由于一次快乐的事故,我可能已经发现是的,有一种方法可以检测是否存在连接的麦克风。

如果您的Windows"录制设备"显示"没有麦克风",然后这种方法(使用Microsoft Speech API)将工作并确认您没有麦克风。如果Windows认为你有一个麦克风,这不会不同意。

#include <sapi.h>
#include <sapiddk.h>
#include <sphelper.h>

CComPtr<ISpRecognizer>  m_cpEngine;
m_cpEngine.CoCreateInstance(CLSID_SpInprocRecognizer);
CComPtr<ISpObjectToken> pAudioToken;
HRESULT hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &pAudioToken);
if (FAILED(hr))  ::OutputDebugString("no input, aka microphone, detected");

更具体地说,hr将返回此结果:

SPERR_NOT_FOUND 0x8004503a  -2147200966
The requested data item (data key, value, etc.) was not found.