背景
使用三方SDK播放音频时,不同安卓手机音量大小不一样,而且普通音量明显小于iPhone,因此在安卓上,需要使用额外的3A来做增益和降噪。
调研
从github上找到的基于webrtc源码抽取的开源工程:
- java+c版本
github.com/inodevip/We…
直接可用,有Java层的接口,通过jni调用c++ - C语言版本
github.com/cpuimage/We…
没有做jni的封装
实现
工程抽取
- 原工程是以app的形式接入,实际使用时,需要把工程里面的CPP代码和配置同步到目标工程,
- 涉及到JNI的编译配置,对业务工程有侵入,抽取后,直接以aar或者子model的形式依赖就可以使用
- 源工程的gradle版本配置会对目标工程的编译产生影响,需要修改后才能编译成功
工具类封装
- 底层c++代码对采样率有要求,有可能会出现采样率不一样,导致上层使用时莫名报错,
- 算法对每次输入的采样数量有要求,和采样率关联。
- 业务需要关注的参数较多,使用工具类封装能减少业务侵入。
结果
代码
使用
下载源码后
implementation files('libs/WebRtcNsAgcModel-release.aar')
// or
// implementation project(':WebRtcNsAgcModel')