如何在C#中使用麦克风获取音量/振幅或“响度”

3
我已经寻找答案很久了,但是我得到的每个解决方案似乎都对我想做的事情过于复杂,或者可能没有更简单的方法来实现它。
我想做的就是简单地使用我的系统麦克风来获取房间内的音量或响度(或称为什么),然后根据该音量调整我的系统音量,以便从我的系统发出的声音始终“听起来相同”(相同的响度),无论火车经过还是飞机飞过。
如何将房间内的这种响度或音量输入到C#应用程序中,以便将其用于更改我的系统音量?
我正在使用C#和一台带有内置麦克风的笔记本电脑。
1个回答

1
  1. 最好使用库从麦克风读取输入。NAudio 可能是最好的选择。

  2. 通过确定麦克风增益来校准输入。[@MSalters Comment used]

  3. 每秒迭代存储在内存中的波形,然后:将振幅平方(以获得能量),平均平方值并取其平方根。(或对数,转换为dB)[@MSalters Comment used]

  4. 根据此设置系统音量使用WinAPI


2
你缺少一个关键步骤:确定麦克风增益。就像扬声器一样,麦克风也有增益因子。此外,计算“平均振幅”在数值上是不正确的。你需要将振幅平方(以获得能量),对平方值取平均并取其平方根(或对数,以转换为分贝)。 - MSalters
@MSalters 谢谢,我对计算这些依赖关系并不太熟悉。我会根据您的评论来编辑我的答案。 - Ilya Tereschuk
抱歉打扰了 :) 但是有人能够解释一下如何进行校准和计算吗?请参见我的问题:https://stackoverflow.com/questions/63299441/how-to-calibrate-a-tablet-microphone-for-displaying-actual-db-according-to-db-me - Tim Bijnens

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