我试图让语音识别“忽略”它自己的输出(使用文本到语音系统),因此想使用回声消除器。我实际上“知道”tts 输出,我什至可以将它存储为 wave 文件(或 pcm 或其他),因此不需要用于未知输入的回声消除的整个“估计东西”。但是我真的不知道如何开始。我读到,“speex”对此很有用,但根据其文档,它不适用于 2 个独立的声卡。简而言之:有什么想法吗?这是我当前的设置:
有一个用于输入的麦克风和一个用于输出的扬声器。麦克风非常靠近输出端,需要保持在那里。麦克风使用 USB 声卡插入,扬声器连接到普通的板载声音设备。
操作系统是fedora(12),应用程序要用Java编写...
感谢任何帮助;)
最佳答案
我试过做同样的事情。我没有成功使用 speex。实际上,我只是编写了自己的声学回声消除算法,效果相当不错。它并没有那么复杂,并且允许我根据自己的规范进行调整。回声消除是数字信号处理中反复出现的问题之一,因此有很多信息来源。
我附上了两篇论文,其中甚至包括源代码示例。它们是用 C 编写的,但可以通过 JNI 在 Java 中使用或将其转换为 Java 代码。
1) 回声消除论文是实现的。查看 3.3.2 归一化最小均方 (NLMS) 算法部分。即实现的代码
2) Acoustic Echo论文与附录中的代码相同。但它与已有的略有不同
关于java - 已知声源的回声消除(java + linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5080654/