我已经创建了一个模块化的系统,它可以通过UDP在任何有麦克风和扬声器的设备和android手机之间传输语音。如果麦克风和扬声器相距不太远,在电话上录制的任何东西都将在扬声器上播放,同时录制并发送回电话,从而产生不可避免的回声。
到目前为止,问题是麦克风在播放时正在录制,所以如果在有重要的播放时发送了一段代码来停止录制,问题就会解决。这要么是通过按下通话按钮(不太适合于电话类型的情况)实现的,要么是通过一种算法来感知最大振幅,并决定是说什么重要的话还是它的噪音。后者更容易使用,但在嘈杂的环境中很容易出错。
很抱歉,这次讲座太长了,但我想知道你是否有更有效、更可靠的方法来解决这个问题。
在硬件方面,我没有足够的处理能力以数字方式去除回声,我也不知道如何去做。我相信用某种模拟滤波器也能做到这一点,但我也不知道怎么做。
编辑:多亏了马特姆,我现在知道我需要像AEC这样的东西,尽管它可能不是最有效的,甚至不是最实用的。
我使用的是WIFI-UART模块(HLK 04),它有一个很大的问题。当模块将8位音频样本转换为IP数据报时,存在非常大的延迟。由于某些原因,这种延迟不存在,当它打开从android =>发送的数据报时,从android接收一个样本需要大约50‘s,但是从麦克风接收一个样本需要650’s。由于我使用的采样率为7200,这意味着AEC算法必须在至少4680个样本/秒的数据集上工作,才能保持它的“实时性”。
https://stackoverflow.com/questions/34600967
复制相似问题