主动降噪

时间:2011-11-27 11:24:24

标签: delphi audio noise cancellation

我已经编写了一个语音识别程序,我在麦克风听到我,在电脑上播放音乐时遇到了问题。我需要的软件可以过滤声音,使声音从麦克风进入麦克风。

是否有软件或组件(用于Delphi)可以解决我的问题?

5 个答案:

答案 0 :(得分:7)

您需要捕获:

  1. 电脑输出
  2. MIC。输入
  3. 然后你需要找到两个参数,具体取决于你的麦克风。位置和音响系统延迟。这两个参数是n-delay和k-amplify。

    Stream1[t+n]*k=Stream2[t]
    

    其中t =时间。当你找到这个参数然后你得到的流,只能说话麦克风。输入将是

    Stream2[t]-Stream1[t+n]*k=MusicReductionStream[t]
    

答案 1 :(得分:6)

我认为你想做noise canceling microphones做的事情。这些系统使用至少一个额外的麦克风来计算“周围噪声”与直接瞄准麦克风的噪声(它必须注册的语音)之间的差异。我不认为您可以通过纯软件解决方案可靠地获得相同的效果。

第一步显然是将音乐降低: - )

答案 2 :(得分:5)

查看 AsioVST 库。

  • 100%开源Delphi代码
  • 非常完整
  • Active(例如,正在添加对xe2 / x64的支持)

Examples\Plugins\Crosstalk Cancellation\下,您会找到可能正在寻找的插件的源代码。

Screenshot

神奇发生在DAV_DspCrosstalkCancellation.pas

答案 3 :(得分:1)

我认为speex预处理器具有回声消除功能。您需要将录制的音频数据和要取消的音频输入,并尝试将其删除。

主要问题是找出计算机播放的音频。不确定是否有一个很好的API。

它还具有降噪功能和语音活动检测功能。您可以将其编译为dll,然后编写delphi头文件。

答案 4 :(得分:1)

您需要估计扬声器和房间等的脉冲响应,这些响应可以通过精确的扬声器和麦克风定位以及房间的大小和内容等来改变,以及了解/估计系统延迟。

如果此人或麦克风是可移动的,则需要不断重新估计脉冲响应和延迟。

一旦估算出脉冲响应,就可以将其与输出信号进行卷积,并尝试从麦克风输入中减去结果的延迟版本,直到您可以取消语音输入的无声部分。交叉相关可能对估计延迟有用。