Android 单独抽取 WebRtc-NS/NSX 模块,封装好JNI层,并且ndk-build出so库。
先看下效果图:
NS前:
NS后:
Android层调用(部分代码):
try{
NsUtils nsUtils = new NsUtils();
int createStatus = nsUtils.nsCreate();
int initStatus = nsUtils.nsInit(createStatus,8000);
int setStatus = nsUtils.nsSetPolicy(createStatus,2);
Log.e(TAG,"createStatus = " + createStatus + "initStatus = " + initStatus + "setStatus = " + setStatus);
FileInputStream fInt = new FileInputStream(INPUT_FILE_PATH);
FileOutputStream fOut = new FileOutputStream(OUT_FILE_PATH);
byte[] buffer = new byte[160];
int bytes ;
while(fInt.read(buffer) != -1){
short[] inputData = new short[80];
short[] outData = new short[80];
ByteBuffer.wrap(buffer).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(inputData);
int ret = nsUtils.nsProcess(createStatus,inputData,null,outData,null);
Log.e(TAG,"ret = " + ret);
fOut.write(shortArrayToByteArry(outData));
}
fInt.close();
fOut.close();
}catch (Exception e){
e.printStackTrace();
}
nsUtils是native方法的一个封装类,核心方法nsProcess(int nsHandler,short[] sample,short[] sample_H,short[] outData, short[] outData_H),源码中头文件说明如下:
/*
* This functions does Noise Suppression for the inserted speech frame. The
* input and output signals should always be 10ms (80 or 160 samples).
*
* Input
* - NS_inst : Noise suppression instance.
* - spframe : Pointer to speech frame buffer for L band
* - spframe_H : Pointer to speech frame buffer for H band
* - fs : sampling frequency
*
* Output:
* - NS_inst : Updated NS instance
* - outframe : Pointer to output frame for L band
* - outframe_H : Pointer to output frame for H band
*
* Return value : 0 - OK
* -1 - Error
*/
int WebRtcNs_Process(NsHandle* NS_inst,
short* spframe,
short* spframe_H,
short* outframe,
short* outframe_H);
WebRtc源码中的NS模块位于 src\modules\audio_processing\ns,其中包含NS和NSX,这两种前者是定点数运算,后者是浮点数运算,从处理结果来看,好像没什么区别,没有深究。
因经济压力,现改为付费下载模式,不再免费开源:
付费下载链接:https://download.csdn.net/download/always_and_forever_/71994011
源码使用说明
1.下载源码,直接运行即可
工程解读
1.根目录下的jni目录,是从webrtc源码中抽取出来的ns模块核心代码文件.
2.libs目录下,为编译jni生成的so文件,您可以直接使用.
3.webrtc-ns.apk 可直接安装到真机上快速体验.
4.test_input.pcm为测试文件,启动app将自动执行ns,ns后文件路径为手机根目录/ns_out.pcm
5.如您需要体验生成so这一步骤,可cd到jni目录下,执行ndk-build命令,前提是您下载了ndk且配置了环境变量,否则ndk命令无法识别
原创:望希望