实时语音驱动实现Android端Avatar虚拟人表情表达
语音驱动虚拟人功能简介
ZEGO Avatar SDK 提供了语音驱动
功能,通过声音的声波信息,实时驱动当前虚拟人物的嘴形变化,使得虚拟形象能够和真人一样进行自然的情绪表达。
可广泛应用于社交互动、语聊直播等场景中。
虚拟人语音驱动的前提条件
在实现虚拟人“语音驱动”功能之前,请确保:
虚拟形象语音驱动实现流程
开发者请参考以下步骤,实现 虚拟形象“语音驱动” 功能。
1 开始虚拟人语音检测
- 开始语音检测前,请确认已开启麦克风权限。
- 开发者如果使用了 ZegoCharacterHelper,则无需再调用
ZegoCharacter
的任何相关接口。
搭建出基本的虚拟人物形象后,调用 startDetectExpression
接口,设置驱动模式为 Audio
,通过麦克风,开始检测声音波动;然后可以直接通过 ZegoCharacterHelper 的 setExpression
接口设置表情,驱动当前虚拟人物的嘴形变化。
// 开始语音检测
ZegoAvatarService.getInteractEngine().startDetectExpression(ZegoExpressionDetectMode.Audio,expression -> {
// 驱动虚拟人物的嘴形变化
mCharacterHelper.setExpression(expression);
});
2 自定义音频采集
开发者可以调用 setCustomAudioDelegate
接口,设置自定义的音频数据采集代理(需要继承 AudioDataDelegate
实现 onStart 和 onStop
方法)。采集到音频数据后,调用 sendAudioData
接口,发送数据。
public class CustomAudioDataDelegate extends AudioDataDelegate {
private Boolean isRunning = false;
@Override
public void onStart() {
// 启动音频采集
isRunning = true;
}
@Override
public void onStop() {
// 停止音频采集
isRunning = false;
}
// 这个是 Express 的声音前处理回调, 这里直接把Express 采集的数据给到 Avatar SDK即可。
public void onProcessCapturedAudioData(ByteBuffer data, int dataLength, ZegoAudioFrameParam param) {
if(isRunning){
// 填充声音数据
// data: pcm的原始数据
// length: data的长度
// dataType: data采集的位数 0表示16位,1表示8位
// timeStamp: 时间戳, 从启动采集到当前经过的时间, 单位毫秒。
super.sendAudioData(data, dataLength, 1/*rtc 给的数据是 8位的, 填 1*/, super.getDurationMs()/*这是个父类方法,直接调用即可。*/);
}
}
}
3 停止语音检测
将应用切换到后台运行、或退出当前页面时,需要调用 stopDetectExpression
接口,停止语音检测。
// 停止语音检测
ZegoAvatarService.getInteractEngine().stopDetectExpression();
4 获取ZEGO Avatar SDK 即构虚拟形象 更多帮助
获取本文ZEGO Avatar SDK 即构虚拟形象的开发文档、技术支持,访问即构文档中心,可驱动虚拟形象模拟真人更自然的表达。
近期有开发规划的开发者可上即构官网查看,恰逢即构七周年全线音视频产品1折的优惠,联系商务获取“ZEGO Avatar"1个月免费试用的产品福利;
音视频场景解决方案分享,更多详情可搜索官网(https://zegoguanwang.datasink.sensorsdata.cn/t/pB)