本 SDK 集成了 FaceUnity 的语音驱动形象引擎(Speeach to Animation) ,能够快速构建并驱动虚拟形象说话,营造更加真实自然的人机交互场景。
版本号:2.1
更新日期:2022-01-21
更新内容:
- 优化CPU性能以及查询效率
- 新增动画播放速度控制接口
- 更新BS系数57-47
- 修复静音帧问题
- ⽀新增设置旋转角度
- 优化阴影锯齿算法
- 增加详细日志接口
SDK接口根据作用逻辑归为五类
- 配置初始化数据
- 初始化
- Avatar切换
- 渲染控制
- 口型查询和驱动
- Avatar动画和表情切换
- 销毁
- 其他
配置初始化数据
FUStaKit.Builder builder = new FUStaKit
.Builder(mContext)
.setAuth(authpack.A())
.setAlignData(bytesAlign)
//.setAsrData(bytesAsr)
.setFUTtsType(FUTtsType.ALIGNMENT)
.setCharacterDecoder(bytesDecoder);
mFUStaKit = builder.build();
初始化FUSta,传入上下文(必要),
加载网络鉴权数据(必要),
设置语音自动校准工具包(Align模式需要设置),
设置语音识别工具包(ASR方式需要设置,此处是Align模式故注释该方法),
设置tts查询方式,必要(ASR方式需要设置:FUTtsType.ASR;Align方式需要设置:FUTtsType.ALIGNMENT,此处是Align模式故设置为FUTtsType.ALIGNMENT)
设置文字编码功能数据文件(ALIGN方式和文本时间戳需要设置)。
``` setAuth(byte[]) ```:网络鉴权数据
``` setFUTtsType(TtsTypeEnum type) ```:tts查询方式
App 启动后只需要 SDK配置初始化数据 一次即可,其中 authpack.A() 鉴权数据声明在 authpack.java 中。必须配置好有效的证书,SDK 才能正常工作。
在线鉴权只需要设置authpack.A() 鉴权数据即可。FUSta SDK 配置初始化数据详见"Android FUStaKit 集成文档"。
FUStaKit.Builder builder = new FUStaKit
.Builder(mContext)
.setAuth(authpack.A())
.setAlignData(bytesAlign)
//.setAsrData(bytesAsr)
.setFUTtsType(FUTtsType.ALIGNMENT)
.setCharacterDecoder(bytesDecoder);
.setOffLineData(offLineAuth);
mFUStaKit = builder.build();
初始化FUSta,传入上下文(必要),
加载网络鉴权数据(必要),
设置语音自动校准工具包(Align模式需要设置),
设置语音识别工具包(ASR方式需要设置,此处是Align模式故注释该方法),
设置tts查询方式,必要(ASR方式需要设置:FUTtsType.ASR;Align方式需要设置:FUTtsType.ALIGNMENT,此处是Align模式故设置为FUTtsType.ALIGNMENT)
设置文字编码功能数据文件(ALIGN方式和文本时间戳需要设置)。
``` setAuth(byte[]) ```:网络鉴权数据
``` setFUTtsType(TtsTypeEnum type) ```:tts查询方式
###### 备注:
App 启动后只需要 SDK配置初始化数据 一次即可,其中 authpack.A() 鉴权数据声明在 authpack.java 中。必须配置好有效的证书,SDK 才能正常工作。
离线鉴权除了设置authpack.A() 鉴权数据,还需要设置离线鉴权数据包路径:setOffLineAuth(byte[])。
注意,有key.bundle就使用key.bundle,这样会走离线;使用未鉴权的bundle,会联网鉴权。
根据应用需求,鉴权数据也可以运行时提供(如网络下载),不过要注意证书泄露风险,防止证书被滥用。FUSta SDK 配置初始化数据详见"Android FUStaKit 集成文档"。
---
> ### <a name="2">初始化</a>
###### FUSta SDK初始化(在线鉴权)
void init(FUAuthType.ONLINE, StaKitInitCallback listener);
```
调用FUSta SDK初始化方法,必须放在 FUStaKit SDK配置初始化数据之后
FUAuthType.ONLINE:在线鉴权FUStaKit.StaKitInitCallback:SDK初始化状态的回调,参数位空即没有初始化完成回调的方式,如果调用该方法之后紧接着调用口型驱动方法,口型驱动任务会等待初始化任务完成才开始。开发者可根据初始化回调进行相关逻辑处理。
init 初始化方法,务必在后续操作前调用,否则无法驱动口型。
FUSta SDK 初始化详见"Android FUStaKit 集成文档“。
void init(FUAuthType.OFFLINE_BUNDLE, StaKitInitCallback listener);
调用FUSta SDK初始化方法,必须放在 FUStaKit SDK配置初始化数据之后
FUAuthType.OFFLINE_BUNDLE:离线鉴权FUStaKit.StaKitInitCallback:SDK初始化状态的回调,参数位空即没有初始化完成回调的方式,如果调用该方法之后紧接着调用口型驱动方法,口型驱动任务会等待初始化任务完成才开始。开发者可根据初始化回调进行相关逻辑处理。
init 初始化方法,务必在后续操作前调用,否则无法驱动口型。
FUSta SDK 初始化详见"Android FUStaKit 集成文档“。
Avatar切换
void setAvatar(FUAvatar avatar, FUAvatarType avatarType);
或
void setAvatar(FUAvatar avatar, FUAvatarType avatarType, OnAvatarStateListener listener);
切换Avatar方法,设置后在渲染时会切换对应Avatar。
``` avatarType ```:Avatar类型的枚举,用来表示Avatar类型,用来区别内置表情数据源,默认:`FUAvatarType.CARTOON`
void setPosition(double positionX, double positionY, double positionZ);
设置Avatar在坐标系的位置。
``` positionY ```:Y轴坐标 范围`-600, 800`
void setBackground(String background);
设置Avatar背景。
###### 备注:
###### FUSta SDK设置Avatar光照
void setLight(String light);
```
设置Avatar光照。
###### 备注:
###### FUSta SDK设置Avatar相机位
void setCamera(String camera);
```
设置Avatar相机位。
###### 备注:
###### FUSta SDK开启阴影
void enableShadow(Boolean enableShadow);
```
设置是否开启阴影。
###### 备注:
---
> ### <a name="4">渲染控制</a>
###### FUSta SDK开始渲染
void requestRender(GLTextureView glTextureView);
```
开始渲染。
###### 备注:
###### FUSta SDK渲染状态同步
void onResume();
void onPause();
void onDestroy();
```
onResume() 对应Activity onResume(),
onPause() 对应Activity onPause(),
onDestroy() 对应Activity onDestroy()。
onResume()与onPause()成对出现,在Activity的onPause()调用时停止后台渲染减少消耗,并且在Activity的onResume()调用时重新加载。
onResume()与onPause()可不用调用,在Activity的onPause()调用时后台会继续渲染;
onDestroy()必须调用。
void setCustomRenderResolution(int renderWidth, int renderHeight);
设置渲染分辨率尺寸。
``` renderHeight ```:纹理宽度
###### 备注:
###### FUSta SDK设置渲染帧率
void setRenderFPS(int renderFPS);
```
设置渲染帧率,默认30帧/s。
###### 备注:
如果低端设备最大帧率小于设置的帧率,实际帧率为该设备的最大帧率。
###### FUSta SDK设置抗锯齿
void setMultiSamples(int samples);
```
3D抗锯齿配置
###### 备注:
###### FUSta SDK设置阴影抗锯齿
void setShadowPCFLevel(int level);
```
设置阴影抗锯齿级别
###### 备注:
###### FUSta SDK设置渲染信息回调接口
void setEnableDebug(boolean enableDebug)
void setStaRenderDebugListener(OnRenderDebugListener renderDebugListener);
```
设置渲染debug数据的回调
enableDebug:调试开关为true,相关debug数据才会进行统计。renderDebugListener:渲染debug数据接口,onBenchmarkFPSChanged(int width, int height, double fps, double renderTime)。
void setLogOutputDir(String dir);
void enableLogOutput(boolean enableDebug)
SDK日志保存到本地
dir:设置保存到本地的指定目录。enableDebug:是否保存日志信息到指定的目录。
口型查询和驱动
void initStaPlayer(FUPlayerConfig playerConfig);
初始化播放器
###### 备注:
该播放器用于内部播放,如采用外部播放器播放可不设置。
###### FUSta SDK口型驱动并且播放音频
void staProcess(FUStaParams staParams);
```
FUSta SDK查询口型系数,播放音频并驱动对应口型。
使用场景:
1、流式音频,有时间戳,只支持pcm
2、流式音频,无时间戳,只支持pcm
3、流式音频,无时间戳,有Align文本,只支持pcm
4、非流式音频,有时间戳,支持pcm与wav
5、非流式音频,无时间戳,支持pcm与wav
6、非流式音频,无时间戳,有Align文本,支持pcm与wav
###### 备注:
有时间戳,查询口型系数根据时间戳查询,速度会更快。
无时间戳,查询口型系数根据音频数据查询,根据机型配置不同耗时也有差别,查询速度稍耗时。一般无时间戳查询口型系数方式有ASR方式和ALIGN方式,ALIGN方式较快,ASR方式较慢。
FUStaParams参数详情与该口型驱动模式调用见```Android FUStaKit 集成文档```
###### FUSta SDK流式查询状态同步
void notifyStaProcessStart();
void notifyStaProcessFinish();
```
流式口型驱动模式下,需要给SDK同步查询状态。
notifyStaProcessStart()对应于流式查询开始调用;notifyStaProcessFinish()对应于流式查询结束调用。
流式查询必须要给SDK设置同步状态。详情见Android FUStaKit 集成文档
void setStaPlayerListener(OnStaPlayerListener staPlayerListener);
SDK采用内部播放器播放,播放器状态接口。
```onPrepared()```:播放开始
```onError(String message)```:播放出错
###### 备注:
###### FUSta SDK口型驱动(外部播放场景)
void staProcessNoPlayer(FUStaParams staParams);
```
FUSta SDK查询口型系数,外部播放器播放音频,需要两者配合驱动对应口型。
使用场景:
1、流式音频,有时间戳,只支持pcm
2、流式音频,无时间戳,只支持pcm
3、流式音频,无时间戳,有Align文本,只支持pcm
4、非流式音频,有时间戳,支持pcm与wav
5、非流式音频,无时间戳,支持pcm与wav
6、非流式音频,无时间戳,有Align文本,支持pcm与wav
###### 备注:
有时间戳,查询口型系数根据时间戳查询,速度会更快。
无时间戳,查询口型系数根据音频数据查询,根据机型配置不同耗时也有差别,查询速度稍耗时。一般无时间戳查询口型系数方式有ASR方式和ALIGN方式,ALIGN方式较快,ASR方式较慢。
FUStaParams参数详情与该口型驱动模式调用见```Android FUStaKit 集成文档```
###### FUSta SDK外部播放场景状态同步
void onExternalPlayerStart();
void onExternalPlayerStop();
```
SDK内部口型系数查询,外部播放器播放,两者配合驱动口型,需要给SDK同步播放器状态,设置口型驱动的开关。
onExternalPlayerStart()对应于外部播放器播放开始;onExternalPlayerStop()对应于外部播放器播放暂停或结束。
外部播放场景必须要给SDK设置同步状态。详情见Android FUStaKit 集成文档
void setExternalPlayerListener(OnExternalPlayerListener externalPlayerListener);
SDK内部口型系数查询,外部播放器播放,两者配合驱动口型,需要给SDK同步播放器进度,sdk拿到播放进度驱动对应的口型。
```updateCurrentPosition()```:获取外部播放器音频播放进度
###### 备注:
###### FUSta SDK设置音频数据查询状态的接口
void setStaProcessListener(OnStaProcessListener onStaProcessListener);
```
SDK内部口型系数查询,该接口会回调每一段查询音频数据的数据:FUAudioProgressType和内部处理过后的音频,该状态接口主要用于外部播放器场景下,为了规避口型系数查询耗时的影响,通知开发者SDK已经有口型查询完成,可以执行外部播放器播放逻辑。
```onStaProcess(FUAudioProgressType audioProgressType, byte[] data)```:回调每一段查询音频数据的数据
###### 备注:
void stopStaProcess();
打断SDK内部口型系数查询任务,该接口会清掉已经查询的口型数据的缓存,停止内部播放器的播放。
外部播放场景需要配合外部播放器停止方法和调用SDK外部播放器播放暂停或结束通知方法:onExternalPlayerStop()。
void setENIntensity(float intensity);
设置英语口型张开幅度。
###### 备注:
---
> ### <a name="6">Avatar动画和表情切换</a>
###### 动画循环播放
void playAnimation(String anim);
或
void playAnimation(String anim, String[] prop, String[] propAnimation);
```
循环播放Avatar动画。
anim:String,Avatar动画道具路径prop:String[], 道具路径数组propAnimation:String[], 道具动画路径数组
void playAnimationOnce(String anim);
或
void playAnimationOnce(String anim, String[] prop, String[] propAnimation);
单次播放Avatar动画。
anim:String,Avatar动画道具路径prop:String[], 道具路径数组propAnimation:String[], 道具动画路径数组
void startCurrentAnimation();
继续播放当前动画。
void pauseCurrentAnimation();
继续播放当前动画。
void removeAnimation(String anim);
移除动画。
###### 备注:
###### 设置动画的过渡时间
void setAnimationTransitionTime(float time);
```
设置动画的过渡时间,单位为秒,默认0.5秒。
###### 备注:
###### 设置动画的播放速度
void setAnimationSpeed(float speed);
```
设置动画的播放速度系数,默认为1,范围0.2, 5.2。
###### 备注:
###### 内置表情切换
void updateEmotion(FUEmotionType emotionType);
或
void updateEmotion(FUEmotionType emotionType, int fpsNum);
```
SDK内置表情切换,在fpsNum帧内过渡到目标表情。
emotionType:FUEmotionType,内置表情的枚举,目前只支持特定的Avatar类型(FUAvatarType.CARTOON和FUAvatarType.REAL)。fpsNum:int,在fpsNum帧内过渡到目标表情,默认为0。
void updateCustomEmotion(String path);
或
void updateCustomEmotion(String path, int fpsNum);
自定义表情切换,通过传入自定义bs文件,内部解析并且驱动表情,在fpsNum帧内过渡到目标表情。
path:String,自定义表情的文件。fpsNum:int,在fpsNum帧内过渡到目标表情,默认为0。
void setAlignTagConfig(String tagConfig, String defaultAnimation);
设置标签配置表,配合Align模式使用可定制动作表情切换的实际。
tagConfig:String,标签配置表defaultAnimation:String,标签配置表动作执行完成后执行的默认动作道具路径
标签配置表调用见Android FUStaKit 集成文档
销毁
void release();
销毁SDK,释放内存资源。
其他
setRotDelta(float delta)
旋转角色。
###### 备注:
###### 缩放Avatar
setScaleDelta(float delta)
```
缩放角色。
###### 备注:
###### 上下移动Avatar
setTranslateDelta(float delta)
```
上下移动角色。
###### 备注:
###### 设置Avatar旋转角度
setRotate(float rotate)
```
设置Avatar旋转角度。
###### 备注:
###### 设置bs表情系数数据
setBSConfigData(String configPath)
```
设置当前Avatarbs表情系数数据包路径,可不设置,不设置则使用默认数据包
configPath:String,bs表情系数数据包路径