提交工单
咨询集成、功能及报价等问题
ZEGO Avatar SDK 提供了语音驱动
功能,通过声音的声波信息,实时驱动当前虚拟人物的嘴形变化,使得虚拟形象能够和真人一样进行自然的情绪表达。
可广泛应用于社交互动、语聊直播等场景中。
在实现“语音驱动”功能之前,请确保:
开发者请参考以下步骤,实现 “语音驱动” 功能。
开始语音检测前,请确认已开启麦克风权限。
搭建出基本的虚拟人物形象后,调用 startDetectExpression 接口,设置驱动模式为 Audio
,通过麦克风,开始检测声音波动;然后调用 setExpression 接口设置表情,驱动当前虚拟人物的嘴形变化。
// 开始语音检测
ZegoAvatarService.getInteractEngine().startDetectExpression(ZegoExpressionDetectMode.Audio,expression -> {
// 已创建 mCharacter 对象,并且设置了 AvatarView 和设置了默认形象。
// 驱动虚拟人物的嘴形变化
mCharacter.setExpression(expression);
});
开发者可以调用 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 SDK 的自定义音频采集的前处理回调, 将采集到的数据发送给 Avatar SDK
public void onProcessCapturedAudioData(ByteBuffer data, int dataLength, ZegoAudioFrameParam param) {
if(isRunning){
// 填充声音数据
// data: pcm 的原始数据
// length: data 的长度
// dataType: data 采集的位数:0 表示 16 位,1 表示 8 位
// timeStamp: 时间戳, 从启动采集到现在经过的时间
// sendAudioData 是父类方法, 直接调用即可;数据透传给 Avatar SDK, RTC 的数据是 8 位的, dataType 是 1
super.sendAudioData(data, dataLength, 1, super.getDurationMs());
}
}
}
将应用切换到后台运行、或退出当前页面时,需要调用 stopDetectExpression 接口,停止语音检测。
// 停止语音检测
ZegoAvatarService.getInteractEngine().stopDetectExpression();
联系我们
文档反馈