VOIP
一. 概述
语音通信增强(sevc),支持单麦、双麦、线性4-6麦、环型4-6麦、异形麦通话降噪功能,包含回声消除(echo),波束成形(beamforming),盲源分离(bss),神经网络降噪(nn),自动增益补偿(AGC)等功能模块。
通过设置对应的资源和内核库,Duilite SDK将麦克风采集的多路音频,经过上述模块的处理,输出为一路音频。
您可以使用处理后的音频来进行自己定制的功能,譬如VoIP等等。
二. SDK使用说明
使用当前功能时,请先授权,否则禁止使用。请参考 授权说明。
2.1 准备
jar:DUI-lite-SDK-for-Android-xxx.jar
so:libsevc.so
资源:可以放在assets目录中,也可以自己手动放在磁盘中,比如/sdcard/
sspe_aec_*_agc*.bin
三. 引擎运行流程图
四. 示例代码
涉及引擎类:AILocalSevcEngine,详细使用示例请参考 demo
4.1 配置config信息
AILocalSevcConfig config = new AILocalSevcConfig();
config.setSspeBinResource(SampleConstants.SEVC_SSPE_RES);
部分config 使用如下表
方法 | 方法说明 | 参数说明 | 默认值 | 备注 |
setSspeResource(String mdsResource) | 设置sspe资源 |
1. 如在 sd 里设置为绝对路径 如/sdcard/speech/***.bin 2. 如在 assets 里设置为名称 |
NA |
NA |
4.2 实现回调接口
private class AILocalSignalAndWakeupListenerImpl implements AILocalSevcListener {
@Override
public void onInit(int status) {
appendText("Init result " + status);
if (status == AIConstant.OPT_SUCCESS) {
appendText("初始化成功!");
AILocalSevcIntent intent = new AILocalSevcIntent();
intent.setUseCustomFeed(true);
mEngine.start(intent);
new Thread(new Runnable() {
@Override
public void run() {
readAndFeed();
}
}).start();
} else {
appendText("初始化失败!code:" + status);
}
}
@Override
public void onError(AIError error) {
appendText(error.toString() + "\n");
}
@Override
public void onAgcDataReceived(byte[] bytes) {
appendText("onAgcDataReceived size " + bytes.length);
}
}
4.3 创建实例对象并且初始化
mEngine = AILocalSevcEngine.createInstance();
mEngine.init(config, new AILocalSignalAndWakeupListenerImpl());
部分AILocalSevcEngine方法如下表
方法 | 方法说明 | 参数说明 | 备注 |
createInstance() | 创建实例 | NA | 静态方法,非单例 |
init(AILocalSevcConfig config, AILocalSevcListener listener) | 初始化 | 参照demo | NA |
start(AILocalSevcIntent aiLocalSevcIntent) | 启动sevc | 参考4.4参数说明 | NA |
stop() | 停止引擎 |
NA |
该方法会停止接收录音数据和停止引擎,程序退出时可以调用 |
destroy() | 销毁信号处理模块和唤醒引擎 |
NA |
该方法会停止录音机和销毁录音机 |
feedData(byte[] data, int size) | 传入数据,在不使用SDK录音机时调用 |
data 音频数据流 size 数据大小 |
NA |
4.4 设置intent,并且启动引擎
AILocalSevcIntent intent = new AILocalSevcIntent();
intent.setUseCustomFeed(true);
mEngine.start(intent);
部分intent方法示例如下表
方法 | 方法说明 | 参数说明 | 备注 |
setUseCustomFeed(boolean useCustomFeed) | 设置是否自行feed数据 | 默认false | 设置为true,需要用户调用 feedData 方法输入音频数据 |
4.5 停止和销毁引擎
mEngine.stop();
mEngine.destroy();
4.6 较为完整的代码块