【问题标题】:How to check if a microphone is available for recording如何检查麦克风是否可用于录音
【发布时间】:2014-02-24 00:01:57
【问题描述】:

我正在开发一个 WPF 应用程序,需要记录来自我的用户的音频消息。我遵循here 上的代码,它工作正常。现在的问题是,如果它是台式机,我只检查是否有内置麦克风,而不检查是否连接了任何外部麦克风。而且我还想知道用户是否禁用了麦克风。你能告诉我如何检查是否连接了任何外部麦克风。如果用户无法录制音频,我需要显示错误消息。

【问题讨论】:

  • waveInDevices 列表包括所有连接的麦克风。外接麦克风和内置麦克风没有区别。
  • @thefiloe 你是说无法确定是否连接了任何外部麦克风?
  • 好吧,您可以尝试使用 MMDevices (Wasapi)。 Wasapi 提供了有关设备的更多详细信息(查看 IMMdevice 的 PropertyStore)。但是如果你真的想使用已经过时的waveIn API,恐怕已经迫不及待地想知道它是否是一个外部设备。
  • 这取决于声卡和它的驱动是否支持检测。

标签: c# wpf audio microphone


【解决方案1】:

为了检测 C# 中的硬件变化,您可以使用WM_DEVICECHANGE message,它通知应用程序设备或计算机的硬件配置发生变化

由于我远非该领域的专家,因此我宁愿将您指向 StackOverflow 上的 Detecting when a microphone is unplugged 问题,而不是尝试向您解释。该帖子中接受的答案应该可以帮助您检测何时拔下麦克风。从接受的答案到链接的问题:

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);
}

以下是一些可能对您的项目有所帮助的进一步链接:

Sound Activated Recorder with Spectrogram in C# 来自 CodeProject
.NET Voice Recorder 来自 Channel 9
.NET Voice Recorder 来自 CodePlex

【讨论】:

  • 有没有办法检查设备是否正在使用麦克风录音?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
相关资源
最近更新 更多