管理对麦克风输入和系统音量的访问

2024-06-24

我希望做三件事:

从麦克风访问数据。我真的想知道的是设备感知到的声音的总音量。

设置麦克风增益。

设置系统音量。

我所有的 Windows 开发经验都是 C#/WPF,所以我想保持管理。我不需要特别高性能或实时处理或任何东西。

我环顾四周,似乎 SlimDX 可能是一个很好的包装器,但即使如此,我也不知道从哪里开始。

肯定没那么难吧?


以下链接展示了如何从 C# 访问 Windows 中的音频混音器:

http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931 http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931

这将允许您设置麦克风增益和系统音量。不过,第一部分有点复杂。基本上,您需要开始录制输入(使用 DirectSound 或 waveInXXXX API [我个人最喜欢的])。当每个缓冲区充满音频时,您可以计算缓冲区的均方根并使用它来估计音量。

Edit:这里是一个项目的链接(我已经成功使用和修改了该项目,所以我知道它有效),它展示了如何使用 waveInXXXX API 录制音频:

Edit 2:由于我厌倦了发布链接,这里有一个计算音频缓冲区均方根的实际公式(这里的类型是 float[],但可以轻松修改它以处理短[],这就是您所需要的通常从waveInXXXX获得):

public static float RootMeanSquared(ref float[] audio)
{
    double sumOfSquared = 0;
    for (int i = 0; i < audio.Length; i++)
    {
        sumOfSquared += audio[i] * audio[i];
    }
    return (float)Math.Sqrt(sumOfSquared / (double)audio.Length);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

管理对麦克风输入和系统音量的访问 的相关文章

  • 有没有办法找到 .NET 中嵌入资源的最后修改日期?

    有人知道这样做的方法 在运行时 吗 我不确定我能在描述中详细阐述比标题中已经给出的更多信息 但如果您觉得我错过了某些内容 请说出来 resx 文件本身应该有一个与之关联的修改日期 但您将无法获取该文件中各个资源的修改日期
  • DbContext 和连接池

    在我继承的应用程序中 基本控制器中有这个 应用程序中的所有其他控制器都继承自该控制器 public BaseController db new MyDbContext db Database Log s gt Debug Write s p
  • 是否可以在不使用探查器的情况下跟踪 C# 应用程序中的内存使用情况?

    我想编写一个简单的应用程序来跟踪其当前的内存使用情况 创建的对象数量等 在 C 中 我通常会覆盖 new 运算符 但由于显而易见的原因 我无法在 C 中执行此操作 有没有办法在不使用分析器的情况下做到这一点 您可能想从垃圾收集器开始 MSD
  • 记录 NHibernate SQL 查询

    有没有办法在我的代码中访问完整的 SQL 查询 包括值 我可以使用 log4net 记录 SQL 查询
  • 标签文本每秒刷新一次

    我试图每秒刷新一次标签 以便倒计时更新 但遇到了一些麻烦 我对 C 非常陌生 对于菜鸟问题 表示歉意 private void Form1 Load object sender EventArgs e bool ephCD true int
  • 在列表框 WPF 中设置所选项目的边框

    如何在列表框中设置样式以获得所选项目周围的边框 最简单的方法是添加一个触发器IsSelected在 ItemContainerStyle 中ListBox
  • .NET 进程在 Windows 7 中进行 DNS 查找失败

    我有一个应用程序在 Windows 7 下 DNS 查找 System Net Dns GetHostEntry 失败 该应用程序在 XP 下工作正常 生成的错误是套接字错误代码 11003 WSANO RECOVERY 11003这是一个
  • 有没有办法让控制台应用程序仅使用 .NET Core 中的单个文件运行?

    在 NET框架中 您可以制作一个 EXE将从命令行运行的文件 无需任何额外的配置文件 如果使用 ILMerge 您可以将所有 DLL参考文献1 EXE集会 我正在尝试使用 NET Core 来完成同样的事情 但到目前为止还没有成功 即使是最
  • 等待异步TaskEx

    What is TaskEx In http www i programmer info programming c 1514 async await and the ui problem html start 1 http www i p
  • .NET DateTime 到 time_t(以秒为单位)

    有C代码 time1 double dt1 25569 0 86400 0 它以秒为单位从 TDateTime VCL 转换为 time t 格式 所以最后我需要得到time t NET DateTime 的格式 关于 time t 几乎普
  • 如何防止在 .NET 中的表单初始化时触发值更改事件?

    考虑一个带有几个单选按钮和一个复选框的简单 NET 表单 每个单选按钮都有一个 CheckedChanged 处理程序设置 该处理程序根据复选框的状态执行某些操作 我的问题是 当我初始化要检查的默认单选按钮 从设计器属性窗口 时 会为该单选
  • 变量声明后的一个问号是什么意思? [复制]

    这个问题在这里已经有答案了 在玩开源项目时 我尝试ToStringDateTime 对象被编译器阻止 当我跳到定义时 我看到了这个 public DateTime timestamp 有人可以告诉我这叫什么以及为什么它可能有用吗 这是一个可
  • 调试调用 .Net(C#) dll 的 VB6 项目

    我已经被这个问题困扰了几个小时了 我希望有人遇到过类似的问题 我们使用 VS2010 开发了一个原型 Net C dll 并希望能够在 C 应用程序和 VB6 应用程序中调用该 dll 我的问题是 是否可以调试调用 Net dll 的 VB
  • protobuf-net 代码生成器

    我正在将 Google Proto Buffers 合并到我的项目中 Windows 的 protoc exe 生成用于序列化 反序列化的头文件和源文件的方式非常好 我需要 protobuf net 代码生成器 因此 例如 如果我有一个 P
  • End using 是否关闭打开的 SQL 连接

    如果我将 SQLConnection 包装在 using 中 我应该关闭它还是最终 using 处理它 using cn as new system data sqlclient sqlconnection cn open do a bun
  • Web API 请求上的滑动会话

    UPDATE 看起来它正在尝试写入新的 cookie 标头ApplyResponseGrantAsync但不能因为它是抛出标头已发送的异常 UPDATE 更清楚 我如何获得Set Cookie在 Web API 请求期间添加到 XHR 响应
  • 在异步方法中使用时 HttpClient 标头被清空

    我正在使用 NET Framework 4 6 1 我的 Web api 中有一个控制器 其中有静态 HttpClient 来处理所有 http 请求 在 IIS 上托管我的应用程序后 大约每月一次 我的应用程序的所有传入请求都会出现以下异
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 如何从另一个线程阻止 UI 线程或强制表单在 UI 线程内运行

    我的应用程序的一个要求是 如果它失去数据库连接 那么它必须弹出一个大模式 无连接 稍后重试 对话框 阻止所有用户交互 直到重新获得连接为止 我通过在应用程序启动时启动 DeviceMonitor 类的实例来实现此目的 该类创建一个 Syst
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐