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

2023-12-24

我正在开发一个 WPF 应用程序,需要录制用户的音频消息。我按照代码here http://channel9.msdn.com/coding4fun/articles/NET-Voice-Recorder并且它工作正常。现在的问题是,如果它是台式机,我只检查是否有内置麦克风,而不检查是否连接了任何外部麦克风。我还想知道用户是否禁用了麦克风。您能告诉我如何检查是否连接了外部麦克风。如果用户无法录制音频,我需要显示错误消息。


为了检测 C# 中硬件的变化,您可以使用WM_DEVICECHANGE message http://msdn.microsoft.com/en-us/library/windows/desktop/aa363480%28v=vs.85%29.aspx, which 通知应用程序设备或计算机的硬件配置发生更改.

由于我远非这方面的专家,我宁愿向您指出检测麦克风何时被拔出 https://stackoverflow.com/questions/17669326/detecting-when-a-microphone-is-unplugged在 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);
}

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

C# 中带有频谱图的声控录音机 http://www.codeproject.com/Articles/22951/Sound-Activated-Recorder-with-Spectrogram-in-C来自代码项目
.NET 录音机 http://channel9.msdn.com/coding4fun/articles/NET-Voice-Recorder来自第 9 频道
.NET 录音机 http://voicerecorder.codeplex.com/来自 CodePlex

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查麦克风是否可用于录音 的相关文章

  • SharpZipLib - 将文件夹/目录添加到 zip 存档

    通过示例 我很好地掌握了如何提取 zip 文件 几乎在每个示例中 识别 ZipEntry 是否为目录的方法如下 string directoryName Path GetDirectoryName theEntry Name string
  • 获取 std::variant 当前持有的 typeid(如 boost::variant type())

    我已经从 boost variant 迁移到 std variant 但遇到了障碍 我在 boost type 中使用了一个很好的函数 它可以让你获取当前持有的 typeid 看https www boost org doc libs 1
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 访问“if”语句之外的变量

    我怎样才能使insuranceCost以外可用if陈述 if this comboBox5 Text Third Party Fire and Theft double insuranceCost 1 在 if 语句之外定义它 double
  • 从 future 中检索值时的 SIGABRT

    我在使用 C 11 future 时遇到问题 当我打电话时wait or get 关于返回的未来std async 程序接收从mutex标头 可能是什么问题呢 如何修复它 我在 Linux 上使用 g 4 6 将以下代码粘贴到 ideone
  • 方法“xxx”不能是事件的方法,因为该类派生的类已经定义了该方法

    我有一个代码 public class Layout UserControl protected void DisplayX DisplayClicked object sender DisplayEventArgs e CurrentDi
  • 序列化和反序列化 Visual Studio 解决方案文件 - 或以编程方式编辑?

    我想以编程方式添加和删除项目 解决方案文件夹和其他项目 例如解决方案的资源文件 但我不确定最好的方法是什么 对于那些不知道的人 高度简化 解决方案文件 sln 通常如下所示 Microsoft Visual Studio Solution
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 您可以在一个 Windows Azure 实例上部署多个 Web 应用程序吗?

    是否可以在一个 windows azure 小型计算实例中运行一堆 Web 应用程序 我正在考虑使用 Azure 作为放置一堆处于开发和非生产状态的项目 Web 应用程序 的地方 有些实际上已经被封存了 但我想在某个地方有一个活跃的实例 我
  • 格式化货币

    在下面的示例中 逗号是小数点分隔符 我有这个 125456 89 我想要这个 125 456 89 其他示例 23456789 89 gt 23 456 789 89 Thanks 看看这个例子 double value 12345 678
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • 将非算术类型作为参数传递给 cmath 函数是否有效?

    给定以下用户定义类型S具有转换功能double struct S operator double return 1 0 以及以下调用cmath http en cppreference com w cpp header cmath使用类型的
  • 不兼容的类型 - 是因为数组已经是指针吗?

    在下面的代码中 我创建一个基于书籍结构的对象 并让它保存多个 书籍 我设置的是一个数组 即定义 启动的对象 然而 每当我去测试我对指针的了解 实践有帮助 并尝试创建一个指向创建的对象的指针时 它都会给我错误 C Users Justin D
  • 自定义 WPF 工具提示

    我想创建一个 WPF 工具提示 其中包含工具提示标题的标签 然后创建一个包含更详细文本的文本块 我在资源字典中创建了以下样式
  • TPL 数据流块下游如何获取源生成的数据?

    我正在使用 TPL Dataflow 处理图像 我收到处理请求 从流中读取图像 应用多次转换 然后将生成的图像写入另一个流 Request gt Stream gt Image gt Image gt Stream 为此 我使用块 Buff
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t

随机推荐

  • 传统日志记录与 AOP 日志记录

    我正在开始这个新项目 我们正在研究我们的日志记录 调试方法 我想向你们其他人提出这个问题 因为 private final static Logger logger LoggerFactory getLogger getClass publ
  • 绘图数字化 - 从图形图像中抓取样本值

    这并不是真正的 OCR 因为它不识别字符 但它与应用于曲线的想法相同 有人知道用于从 光栅 绘图图像检索值的图像处理库或已建立的算法吗 例如 在这张图中 我很难用眼睛读取精确的值 因为网格线之间存在这样的间隙 我可以使用直尺或其他工具 但它
  • 如何实现Linq OrderBy方法?

    我试图更多地了解 linq 例如 如果我想实现一个 Select 我会像这样实现 public static IEnumerable
  • ActionBarDrawerToggle 无法应用于 Android.support.v7.widget.Toolbar

    我不断收到错误消息 说 ActionBarDrawerToggle 无法应用于 v7 widget Toolbar 因为我查看了其他人如何修复类似问题 它们现在都是支持库文件 但由于某种原因错误并没有消失 错误说ActionBarDrawe
  • 如何防止 JList 在单元格边界之外进行选择?

    当用户单击列表中最后一个元素时 有什么方法可以阻止 JList 选择最后一个元素吗 这是有人问的问题here http objectmix com java 72850 jlist selection outside cell bounds
  • 使用通用 IHostBuilder 时访问 IServiceProvider

    我在用着IHostBuilder在 NET Core 2 1 控制台应用程序中 主要看起来像这样 public static async Task Main string args var hostBuilder new HostBuild
  • Java错误缺少返回语句

    好吧 我正在尝试编写这段代码 但我不断收到这个愚蠢的错误 我不知道我做错了什么 所以也许你们中的一位专家可以帮助我 import java util public class School Random randQuest new Rand
  • 有没有办法在单击 后重新加载页面?

    我想知道这一点 我有一个简单的 facebook 连接应用程序 只有在您登录并喜欢某个页面后才会显示某些内容 它有效 huzzah 但我想让它在您按下 喜欢 按钮后自动刷新 从而使其更加用户友好 这是一些代码
  • Wicket:如何处理长时间运行的任务

    我已经设置了一个 Wicket Hibernate Spring Web 应用程序 其中涉及收集一些数据 生成并返回一些文件 将其存储在数据库中 创建一些图像并将所有这些显示在网页上 这对于短期运行来说效果很好 但有时收集数据 涉及一些远程
  • 玩!框架 1.2.4 --- C3P0 设置以避免通信链路故障影响空闲时间

    我正在尝试自定义我的 C3P0 设置以避免本文底部显示的错误 这是在这个网址上建议的 http make it open blogspot com 2008 12 sql error 0 sqlstate 08s01 html http m
  • Vanilla Javascript 类中的“计算属性”

    The 计算属性该功能在流行的 JS 框架 React VueJS 中很常见 但是我们如何在普通 JS 中实现这个功能呢 假设给定一个User类 具有dateOfBirth属性 我们想计算它的age 有没有比下面的代码更好的方法来执行此任务
  • 在 View Pager 中的 Fragment 之间传递数据

    在视图分页器中的片段之间传递数据时需要帮助 我们尝试在片段内将数据作为包传递 在 Fragment getInstance 方法内部 尝试从其他 Fragment getArguments 获取数据 活动代码 package com nor
  • jQuery ajax 请求因跨源而被阻止

    如何通过ajax从远程url获取内容 jQuery ajax 请求因跨源而被阻止 控制台日志 跨源请求被阻止 同源策略不允许读取 远程资源位于http www dailymotion com embed video x28j5hv http
  • clang 构建 qt 的 mkspecs 是什么?

    如果我想在Windows下使用gcc构建qt 配置选项是 platform win32 g 但是当我想使用clang构建qt时 该选项是什么 clang windows 组合没有 我认为根据 linux g 和 linux clang 之间
  • Twitter Fabric - 无法解析符号

    我已经为 Android Studio 安装了 Twitter Fabric 插件 这很简单直接 但是当我从 Fabric 对话框复制并粘贴代码时 我的项目无法识别任何 Twitter 对象 例如以下行 private TwitterLog
  • Express 中间件、next 和 Promise

    有一个非常简单的带处理程序的 Express 路由器 router get users userId roles roleId function req res next const roleId req params roleId res
  • 如何知道客户端是否已在套接字中终止

    假设 写完这段代码后我有一个已连接的套接字 if sd accept socket d struct sockaddr client addr alen lt 0 perror accept failed n exit 1 我如何在服务器端
  • 使用 jsdom 加载 ajax 应用程序

    我正在寻找一种解决方案来在服务器上引导客户端应用程序 用 Backbone js 编写 以便我可以为爬虫和非 js 消费者提供正确的内容 我一直在尝试使用 jsdom 和 Node js 来引导应用程序 并且可以加载基本模板内容 但应用程序
  • Sonarqube 6.7x 的安全插件

    我们正在使用 sonarqube 我们喜欢它的工作方式 我们正在尝试扩展 sonarqube 以增强安全性 我尝试为sonarqube 6 x找到一些安全插件来检测Java语言的漏洞 但我找不到任何插件 我想知道是否有任何插件可以查找 so
  • 如何检查麦克风是否可用于录音

    我正在开发一个 WPF 应用程序 需要录制用户的音频消息 我按照代码here http channel9 msdn com coding4fun articles NET Voice Recorder并且它工作正常 现在的问题是 如果它是台