2010-02-05 78 views
0

我正在寻找解决方案来调整我的VoIP应用程序中麦克风的电平。我可以获得一定程度的声音,但也希望在实时过低或过高时调整麦克风的“音量”。喜欢在Skype ...麦克风自动电平

它看起来很容易ex facte,但我认为算法应该是有点聪明,然后只是在音量超过上限/下限时调高音量。

我在Win平台上使用.Net 2.0。是否有任何准备好的.Net库,甚至C库(所以我可以移植它),甚至只是描述这些方法/算法?我试图谷歌,但没有运气。

谢谢!

回答

0

这有两个部分。

首先,您需要开始从麦克风捕捉音频并测量其信号强度。如果有人正在对麦克风讲话进行校准,则可以简单地在前几秒钟查找最高峰值。如果它低于-6dB(比如说),提高增益一点,如果它高于-3dB,则减少一点。重点是您需要高信噪比,但无论如何您都希望避免因信号太大而导致削波或失真。

第二部分是计算混音器API返回的混音器控件中的哪一个控制麦克风增益。事实证明这比它应该更难,特别是如果你希望它能够与所有声卡以及XP和Vista/Win 7一起工作,请参阅this question以获得一些建议的解决方案。

您可以使用NAudio这两个部件。它有waveIn和mixer API的包装器。

0

这个常用的名字是AGC (Automatic Gain Control),它并不像听起来那么容易。在基本的AGC方案中,您有一个快速的“攻击”,这意味着当输入电平增加时,可以非常快速地减小增益,然后在输入电平下降时使用较大的时间常数来更慢地增加增益。

+0

嗨保罗,谢谢你的回复。是的,AGC。我在这里问完全是因为我不认为它可以在2行代码中实现。 找到一个.Net解决方案或者甚至是这样的算法的详细描述将是完美的。 – 2010-02-05 16:02:39

+0

自动增益控制在您录制它之后的信号*上工作,这很好,但在录制之前首先要设置合适的麦克风增益也非常重要。否则,您的信噪比或失真和削波都会很差,这两个问题都无法由AGC解决。 – 2010-11-24 09:29:47

+0

@Mark Heath:AGC也可以应用于硬件 - 大多数音频接口在AD转换器输入之前有一个可编程的模拟增益级 - 这使得AGC可以通过软件控制,但以硬件方式应用,避免了削波问题和SNR,你提到 – 2010-11-24 10:06:09

0

试试这个一开始:Get and set the wave sound volume

它使用Windows API在C#中通过的P/Invoke。

+0

嗨,谢谢你的回复。我在任何时候捕获当前信号值都没有问题。问题是 - 如何根据当前和过去的麦克风电平的现有信息调整麦克风的增益/音量,以将声音的音量保持在理想的范围内?这是一个重点。 – 2010-02-05 18:35:13