跳到主要内容

交互数字人

简介

交互数字人,通过语音合成技术,将文本转换为语音,并输出音频文件。

快速开始

import Vue from 'vue';
// 通过本地路径引入组件库
import AiSdk from '../libs/ai-sdk.umd';// 自己的目录,建议放在和src同级的libs目录下
import '../libs/style.css';// 自己的目录,建议放在和src同级的libs目录下

Vue.use(AiSdk, {
apiKey: 'your-api-key', // 必传、替换成你的api密钥
baseURL: 'https://api.ai.com', // 不必传、可以替换成你的api地址
onError: err => console.log(err.message), //不必传
timeout: 1000, //不必传
headers: {} //不必传
});

获取交互配置

async function getConfig() {
const response = await this.$sdk.getDialogueConfig({ id: '' });
/**
{
"searchKey": "搜索关键词",
"id": "id",
"state": "状态",
"remark": "备注",
"createUserId": "创建人id",
"createTime": "创建时间",
"updateUserId": "修改人id",
"updateUserName": "修改人",
"updateTime": "修改时间",
"name": "对话名称",
"digitalHumanCharacterId": "数字人形象id",
"videoRatio": "视频比例",
"digitalHumanPosition": "数字人位置",
"digitalHumanKwidth": "数字人宽度",
"digitalHumanHeight": "数字人高度",
"backgroundType": "背景类型",
"backgroundFiles": "背景文件",
"defaultBackgroundColor": "默认背景颜色",
"angle": "角度",
"nickname": "昵称",
"gender": "性别",
"roleInfo": "角色信息",
"voiceType": "音色类型",
"voiceSpeechRate": "语速",
"voicePitch": "音调",
"voiceVolume": "音量",
"processKnowledgeBaseId": "对话流程知识库id",
"processFirstMessage": "对话流程第一条回复",
"processFirstMessageEmotion": "对话流程第一条回复的情绪",
"processErrorMessage": "对话流程错误回复",
"processReplyKnowledgeBaseId": "对话流程回复知识库id",
"processErrorMessageEmotion": "对话流程错误回复的情绪",
"enableComment": "是否启用状态弹幕(0:否,1:是)",
"imageType": "素材类型:1:图片,2:序列帧,3:视频",
"imageVideoFiles": "素材-视频文件",
"imageVideoFilesPath": "素材-视频文件-路径",
"imagePictureFiles": "素材-图片文件",
"imagePictureFilesPath": "素材-图片文件-路径",
"imageSequenceType": "序列帧类型",
"imageSequenceFiles": "素材-序列帧文件",
"imageSequenceFilesPath": "素材-序列帧文件-路径",
"actionList": [
{
"searchKey": "搜索关键词",
"id": "id",
"state": "状态",
"remark": "备注",
"createUserId": "创建人id",
"createTime": "创建时间",
"createUserName": "创建人",
"updateUserId": "修改人id",
"updateUserName": "修改人",
"updateTime": "修改时间",
"actionName": "动作名称",
"actionFile": "动作图像文件",
"commentContent": "弹幕文本"
}
]
}
*/
console.log(response, '获取配置成功');
}

文本对话

this.$sdk.textDialogueStream(
{ text: '对话内容', conversationId: '对话id,用于保持对话,开启对话时不传此参数' },
{
onMessage: data => {
/**
{
"current": "生成语句的编号",
"role": "对话角色",
"data": [
{
"audioUrl": "对话语音 url",
"text": "对话文本"
}
],
"conversationId": "对话id,用于保持对话"
}
*/
console.log(data);
},
onError: err => {
console.error('SSE 请求失败', err);
},
onDone: () => {
console.log('流式请求完成');
}
}
);

语音对话

this.$sdk.audioDialogueStream(
{ audio: audioBlob, conversationId: '对话id,用于保持对话,开启对话时不传此参数' },//audioBlob:音频文件
{
onMessage: data => {
/**
{
"current": "生成语句的编号",
"role": "对话角色",
"data": [
{
"audioUrl": "对话语音 url",
"text": "对话文本"
}
],
"conversationId": "对话id,用于保持对话"
}
*/
console.log(data);
},
onError: err => {
console.error('SSE 请求失败', err);
},
onDone: () => {
console.log('流式请求完成');
}
}
);

获取音频

async onAudio() {
const audioBlob = await this.$sdk.getAudio({
audioUrl: 'gen-audio/5d832cd3-934d-49d3-a1b4-658b7ff36042.mp3'
});
// 创建 URL 对象
const audioUrl = URL.createObjectURL(audioBlob);
// 播放音频
const audio = new Audio(audioUrl);
await audio.play();
// 播放完成后清理 URL 对象
audio.onended = () => {
URL.revokeObjectURL(audioUrl);
};
}

对话组件


<ai-dialogue-container
:person-id.sync="String 数字人id"
:default-width="Number, String 预览区域宽度,默认1000"
:zIndex="Number 控制数字人层级,默认999,显示外部网址的层级为500"
:isAutoPlay="Boolean 是否自动播放对话返回的音频文件,默认true"
/>