我已经编写了一个语音识别程序,但我无法通过计算机播放音乐来让麦克风听到我的声音。我需要能够从进入麦克风的声音中过滤掉离开扬声器的声音的软件。
是否有软件或组件(用于 Delphi)可以解决我的问题?
我已经编写了一个语音识别程序,但我无法通过计算机播放音乐来让麦克风听到我的声音。我需要能够从进入麦克风的声音中过滤掉离开扬声器的声音的软件。
是否有软件或组件(用于 Delphi)可以解决我的问题?
您需要捕获:
然后你需要找到两个参数,这取决于你的麦克风。位置和音响系统延迟。这两个参数是n-delay和k-amplify。
Stream1[t+n]*k=Stream2[t]
其中 t = 时间。当你找到这个参数然后你的结果流,只说话麦克风。输入将是
Stream2[t]-Stream1[t+n]*k=MusicReductionStream[t]
我认为您想做降噪麦克风所做的事情。这些系统至少使用一个额外的麦克风来计算“周围噪音”和直接针对麦克风的噪音(它必须记录的语音)之间的差异。我认为您无法通过纯软件解决方案可靠地获得相同的效果。
第一步显然是关掉音乐:-)
查看AsioVST库。
在下面Examples\Plugins\Crosstalk Cancellation\
,您将找到一个插件的源代码,该插件可能满足您的需求。
您需要估计扬声器和房间等的脉冲响应,这可能会随着扬声器和麦克风的精确定位以及房间的大小和内容等而变化,以及了解/估计系统延迟。
如果人或麦克风是可移动的,则需要不断地重新估计脉冲响应和延迟。
一旦您估计了脉冲响应,您可以将其与输出信号进行卷积,并尝试从麦克风输入中减去延迟版本的结果,直到您可以将语音输入的无声部分归零。互相关可能有助于估计延迟。
我认为 speex 预处理器具有回声消除功能。您需要将录制的音频数据和要取消的音频提供给它,它会尝试将其删除。
主要问题是找出您的计算机播放的音频。不确定是否有一个好的API。
它还具有降噪功能和语音活动检测功能。你可以把它编译成一个dll,然后写一个delphi头文件。