如何检测麦克风是不是存在

Posted

技术标签:

【中文标题】如何检测麦克风是不是存在【英文标题】:How to detect if a Microphone is present如何检测麦克风是否存在 【发布时间】:2011-01-14 23:04:21 【问题描述】:

我刚刚打了一个很长的技术支持电话,因为一位客户的笔记本电脑上没有麦克风。 (愚蠢的我:他们说他们之前使用过麦克风,而我从未听说过笔记本电脑没有有麦克风)。

我想知道是否有办法检测 Windows XP、Vista、7 上是否有麦克风(录音功能)。

(我启用了错误处理,它会记录错误,然后退出函数,但如果没有麦克风,应用程序只会在 Windows 7 上崩溃。)

【问题讨论】:

类似:***.com/questions/1559542/… 您尝试过使用 Direct X 吗? 【参考方案1】:

我会使用IMMDeviceEnumerator::GetDefaultAudioEndpoint - 这将返回指定角色和数据流的默认音频设备。

特别是,你会使用:

    CComPtr<IMMDeviceEnumerator> pEnumerator;
    CComPtr<IMMDevice> pDevice;

    hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
           CLSCTX_ALL, IID_PPV_ARGS(&pEnumerator));
    if (SUCCEEDED(hr))
    
        hr = pEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &pDevice);
    
    if (!pDevice || hr == ERROR_NOT_FOUND)
    
           // no microphone
    

【讨论】:

【参考方案2】:

查看System Tray Audio Device Switcher

在VB source code 中,您将举例说明如何枚举音频 I/O 设备。

【讨论】:

【参考方案3】:

在 C++ 中

#include "stdafx.h"
#include "Mmdeviceapi.h"
#include <atlbase.h>


int _tmain(int argc, _TCHAR* argv[])

    CoInitializeEx(NULL, COINIT_MULTITHREADED);

    CComPtr<IMMDeviceEnumerator> pEnumerator = NULL;
    CComPtr<IMMDevice> pDevice;
    const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
    const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
    HRESULT hr = CoCreateInstance(
        CLSID_MMDeviceEnumerator, NULL,
        CLSCTX_ALL, IID_IMMDeviceEnumerator,
        (void**)&pEnumerator);

    if (FAILED(hr))
    
        printf("failed");
    
    else
    
        hr = pEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &pDevice);

        if (!pDevice || hr == ERROR_NOT_FOUND)
        
            printf("no microphone");
        
        else
        
            printf("microphone present");
        

    

    return 0;

【讨论】:

【参考方案4】:

我认为您在 VB 6 中能够做到这一点的唯一方法是通过 Direct X:

http://msdn.microsoft.com/en-us/library/bb318770(VS.85).aspx

你可以看看这个:

http://msdn.microsoft.com/en-us/library/bb280815(VS.85).aspx

CaptureDevices 集合类 (Microsoft.DirectX.DirectSound)

http://msdn.microsoft.com/en-us/library/ms810619.aspx

您也可以调用 dxdiag..

【讨论】:

我没有对此进行测试,但它看起来是最好的答案(对于 VB6)。 @ClayNichols 你测试了吗?

以上是关于如何检测麦克风是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中检测外部麦克风?

如何在.net中检测麦克风的声音

使用 Python 在 Windows 上检测系统声音

如何在 Python 中进行实时语音活动检测?

X230i 录音设置无立体声混音设置选项,电脑录音无法实现内录。如何解决?

如何检查麦克风是不是已被使用或没有颤振?