3

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

4

3 回答 3

5

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

为此,您必须消除任何直流偏移并寻找高于合理本底噪声的任何信号。(慷慨一点:即使没有信号进入,许多廉价的音频输入设备也很嘈杂。中频滤波器/FFT 也可用于仅检测语音中频范围内的信号而不是低频嗡嗡声和瞬时点击。)

于 2009-10-13T11:19:29.800 回答
2

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

于 2009-10-13T11:11:57.093 回答
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.
于 2017-10-11T02:19:43.033 回答