文章

记录一次android回音消除

先总结

最近需要完成Android上回音消除的工作,当然不是重新开发,而是使用webrtc来做这个事情,没想到的是折腾了近一个月时间,使用了各种方式,尝试了各种接口,虽然回音问题早早就已经解决,但是有其他不可接受的噪音,一直达不到可接受的效果。很幸运,最后使用了不多的代码基本解决了问题。只能说webrtc确实强大,让可以让使用者不必考虑太多细节的东西就可以达到需要的效果。

自己遇到的问题

  • WEBRTC已经可以很好的工作,只是自己用的方式不对,导致浪费了太多的时间
  • 往往很久解决不了的问题,最后都是简单几行代码解决
  • google/baidu能解决你大部分问题,如果不能,可能是你的方向出了问题
  • 自己将一些稍微底层的模块封装成了JNI,如 AEC / NS / 增益 / 人声检测 等,然后在Android中使用,效果十分不好。

解决问题

  • 网上随便收搜搜 Android JNI WEBRTC 回音消除,就可以拿到比较好的JNI,稍微编译一下既可以使用!

使用WEBRTC需要注意:

  • 延迟跟你写的代码有关系
  • 远端的声音可能会有延迟,无论远端是否有数据过来,近端数据都用近端处理函数去处理,因为里边会有噪声抑制/增益等处理
  • 延迟我用的是动态计算的,但是效果特别好的时候这个值变化不大。个人感觉这个方式比静态效果好。(这个见仁见智,可能跟我写的代码有关系)
  • 看网上延时一般都是固定的,而且网络上也有人说,如果用动态的延迟,收敛会比较慢。
  • 回音消除的效果跟设备结构等也有关系
  • 适当降低Android手机的外放音量,有助于提升回音消除效果,毕竟你的外放(远端声音)过大会让WEBRTC很难抉择(到底谁是回音_
License:  CC BY 4.0