更新时间:2023年12月11日16:57:24
本文介绍了如何使用硅基数字人服务提供的DUIX本地渲染Android SDK,包括下载安装、关键接口及代码示例。
dh_mobile_lib_release_0.0.1.aar
duix_dh_sdk_2.0.3.jar
工程下app模块添加如下配置:
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
// sdk中使用到exoplayer处理音频
implementation 'com.google.android.exoplayer:exoplayer:2.14.2'
...
}
在SDK中需要获取网络权限
<uses-permission android:name="android.permission.INTERNET" />
/**
* @param appId 在DUIX平台"资源和管理"->"应用"->对应应用的AppID
* @param appKey 在DUIX平台"资源和管理"->"应用"->对应应用的密钥
* @param surfaceView 展示数字人的控件
* @param callback 渲染SDK的所有回调事件
*/
public DUIX(Context context, String appId, String appKey, SurfaceView surfaceView, Callback callback) {
}
其中Callback接口包含如下回调:
onEvent: 在SDK初始化,渲染驱动都会回调该函数。
/**
* @param event 回调事件
* @param msg 异常时携带的错误消息。
* @param info 回调时绑定的数据
*/
void onEvent(String event, String msg, Object info);
常见的事件类型:
事件 | 说明 |
---|---|
init.ready | 初始化成功 |
init.error | 初始化异常,在msg参数中查看错误原因 |
play.start | 数字人开始驱动音频 |
play.end | 音频播报完毕 |
init: 初始化DUIX服务,在Activity的onCreate阶段调用,可以在该阶段传递背景图或背景颜色
/**
* @param modelDir 模型文件夹的路径
* @param baseConfigDir 基础配置文件夹的路径
* @param bgColor 背景颜色
*/
public void init(String modelDir, String baseConfigDir, int bgColor)
/**
* @param modelDir 模型文件夹的路径
* @param baseConfigDir 基础配置文件夹的路径
* @param bgPath 背景图的本地路径
*/
public void init(String modelDir, String baseConfigDir, String bgPath)
release: 释放DUIX资源
// 断开DUIX服务连接,释放资源。在关闭页面时一定要调用,否则会造成内存泄露
public void release()
public boolean isReady()
/**
* @param localPath 本地wav文件的sdcard存储路径
* @param key 发起任务的标示,可以填""。在回调时会回调该值
*/
play(String localPath, String key)
/**
* @param url 网络wav文件的链接地址
* @param duration 网络音频的总时长
* @param key 发起任务的标示,可以填""。在回调时会回调该值
*/
play(String url, long duration, String key)
public void stop()
getCurrentPosition: 获取当前音频的播报进度,单位毫秒
public long getCurrentPosition()
如果代码使用了混淆,请在proguard-rules.pro中配置:
-keep class com.btows.ncnntest.**{*; }
DUIX参数设置及连接
duix = DUIX(mContext, appId, appKey, binding.surfaceView) { event, msg, info ->
Log.e("123", "DUIX.onEvent event: $event info: $info")
runOnUiThread {
when (event) {
Constant.CALLBACK_EVENT_INIT_READY -> {
// 初始化成功
initOk()
}
Constant.CALLBACK_EVENT_INIT_ERROR -> {
Toast.makeText(mContext, "DUIX init error: $msg", Toast.LENGTH_SHORT).show()
}
Constant.CALLBACK_EVENT_PLAY_START -> {
Log.e(TAG, "开始播放: $info")
}
Constant.CALLBACK_EVENT_PLAY_END -> {
Log.e(TAG, "结束播放: $info")
}
}
}
}
// 异步回调结果
duix?.init(modelDir, baseDir, Color.YELLOW)
驱动数字人渲染
// 驱动数字人渲染,在播报完成后会在onEvent()函数中回调结束事件
val wavFile = File(mContext.externalCacheDir, "test.wav")
duix?.play(wavFile.absolutePath, "d39caddd-488b-4682-b6d1-13549b135dd1")
duix?.play("https://....test.wav", "d39caddd-488b-4682-b6d1-13549b135dd1")
主动停止播报
duix?.stop()
获取音频播报进度
// 返回音频播报的毫秒进度
val current = duix?.getCurrentPosition()
关闭会话释放资源
duix?.release()