安卓端音频3A接入

177 阅读1分钟

背景

使用三方SDK播放音频时,不同安卓手机音量大小不一样,而且普通音量明显小于iPhone,因此在安卓上,需要使用额外的3A来做增益和降噪。

调研

从github上找到的基于webrtc源码抽取的开源工程:

  1. java+c版本
    github.com/inodevip/We…
    直接可用,有Java层的接口,通过jni调用c++
  2. C语言版本
    github.com/cpuimage/We…
    没有做jni的封装

实现

工程抽取

  1. 原工程是以app的形式接入,实际使用时,需要把工程里面的CPP代码和配置同步到目标工程,
  2. 涉及到JNI的编译配置,对业务工程有侵入,抽取后,直接以aar或者子model的形式依赖就可以使用
  3. 源工程的gradle版本配置会对目标工程的编译产生影响,需要修改后才能编译成功

工具类封装

  1. 底层c++代码对采样率有要求,有可能会出现采样率不一样,导致上层使用时莫名报错,
  2. 算法对每次输入的采样数量有要求,和采样率关联。
  3. 业务需要关注的参数较多,使用工具类封装能减少业务侵入。

结果

代码

github.com/carl-design…

使用

下载源码后
implementation files('libs/WebRtcNsAgcModel-release.aar')
// or
// implementation project(':WebRtcNsAgcModel')