0

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

事实上,它看起来很容易,但我认为算法应该更聪明一点,然后在电平超过高/低限制时转动音量。

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

谢谢!

4

4 回答 4

0

常用的名称是AGC(自动增益控制),它并不像听起来那么简单。在基本的 AGC 方案中,您有一个快速的“攻击”,这意味着您在输入电平增加时非常快速地降低增益,然后在输入电平下降时使用更大的时间常数来更缓慢地增加增益。

于 2010-02-05T15:55:47.370 回答
0

试试这个:获取和设置波形音量

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

于 2010-02-05T15:57:20.050 回答
0

这有两个部分。

首先,您需要开始从麦克风捕获音频并测量其信号强度。如果有人对着麦克风讲话以校准它,您可以简单地查找前几秒内的最高峰。如果它低于-6dB(例如),则稍微提高增益,如果高于-3dB,则降低一点。关键是您想要高信噪比,但不惜一切代价避免因信号太大而出现削波或失真。

第二部分是确定混音器 API 返回的众多混音器控件中的哪一个是控制麦克风增益的控件。事实证明,这比应有的困难得多,特别是如果您希望它与所有声卡以及 XP 和 Vista/Win 7 一起使用。请参阅此问题以获取一些建议的解决方案。

您可以将NAudio用于这两个部分。它具有 waveIn 和混音器 API 的包装器。

于 2010-11-24T09:25:58.660 回答
0

我推荐使用 Speex-Pre-Processor。作为奖励,您可以获得噪音抑制。

我的 Xiph 项目包含对其的绑定:
https ://github.com/CodesInChaos/Xiph

特别是您需要这两个文件:
https://github.com/CodesInChaos/Xiph/blob/master/Easy/Speex/SpeexPreProcessor.cs
https://github.com/CodesInChaos/Xiph/blob/master/LowLevel/SpeexPreProcessor 。CS

这可能不是生产质量,而是一个起点。如果您改进它们,请将更改发送给我。

于 2010-11-24T09:27:13.307 回答