如何检查麦克风是否可用于录音

3
我正在开发一个WPF应用程序,需要从用户那里录制音频消息。我按照这里的代码进行操作,一切正常。现在的问题是,如果是台式机,我只检查是否有内置麦克风,但没有检查是否连接了外部麦克风,也想知道用户是否已禁用麦克风。请问如何检查是否连接了任何外部麦克风?如果用户无法录制音频,我需要显示错误消息。

waveInDevices列表包括所有连接的麦克风。外部麦克风和内置麦克风之间没有区别。 - Florian
@thefiloe 你是在说没有办法知道是否连接了任何外部麦克风吗? - Raj123
1
你可以尝试使用MMDevices(Wasapi)。Wasapi提供有关设备的更多详细信息(请查看IMMdevice的PropertyStore)。但是,如果您真的想使用过时的waveIn API,恐怕没有办法找出它是否是外部设备。 - Florian
这将取决于声卡及其支持检测的驱动程序。 - Mujahid Daud Khan
1个回答

1
为了在C#中检测硬件更改,您可以使用WM_DEVICECHANGE消息,该消息“通知应用程序设备或计算机的硬件配置发生更改”。
由于我远非这个领域的专家,所以我宁愿指向StackOverflow上的检测麦克风何时被拔掉问题,而不是试图向您解释。 该帖子的被接受答案应帮助您检测何时拔出了麦克风。 来自链接问题的被接受答案:
using System.Runtime.InteropServices;
const int WM_DEVICECHANGE = 0x0219;
// new device is pluggedin
const int DBT_DEVICEARRIVAL = 0x8000; 
//device is removed 
const int DBT_DEVICEREMOVECOMPLETE = 0x8004; 
//device is changed
const int DBT_DEVNODES_CHANGED = 0x0007; 
protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_DEVICECHANGE
    {
        //Your code here.
    }
    base.WndProc(ref m);
}

以下是您项目中可能有所帮助的其他链接:

来自CodeProject的C#音频激活录音机与频谱图
来自Channel 9的.NET语音记录器
来自CodePlex的.NET语音记录器


1
有没有一种方法可以检查设备是否正在使用麦克风进行录音? - Ali123
1
@Ali123 我也在寻找同样的东西,你找到了什么吗? - Uzair Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接