real-time-audio
适用于 Vue2 的数字人展示组件。
安装
npm i real-time-audio
或者
yarn add real-time-audio
使用方法展示
<template>
<div>
<real-time-audio
ref="RealTimeAudio"
:current-model="currentModel"
:options="{...options, employeeId: '用户工号', appId: '使用渠道' }"
:render-question="renderQuestion"
:render-answer="renderAnswer"
:event-emit="onEventHandle"
:get-answer="getMessageAnswer"
/>
</div>
</template>
<script>
import * as RealRimeAudio from 'real-time-audio'
export default {
components: {
RealRimeAudio
},
data() {
return {
show: false,
currentModel: {}, // 数字人的模型数据 通过接口获取
options: {
bridge: {
call: commonCallHandler, // 调用原生bridge的方法 使用原生ASR需要
register: commonRegisterHandler // 注册方法 使用原生ASR接收回调需要
},
env: "", // 环境 production 生产环境 development 开发环境
appId: "", // 使用渠道 每个渠道都是固定的
}
}
},
mounted () {
// 1、通过后端接口获取 token
// 2、通过 this.$refs["RealTimeAudio"].open(token) 打开数字人
}
}
</script>
操作数字人的常用
1、通过后端接口获取 token
2、通过 this.$refs["RealTimeAudio"].open(token) 打开数字人
3、通过 this.$refs["RealTimeAudio"].close() 关闭数字人
get-answer
在使用数字人的过程中,用户触发了询问的时候,数字人会调用这个方法获取答案,顺便会带上一些参数
- type: Function
- params: (query, { onData, onMessageEnd, onError, onWorkFlow, speechId }) => void
query:String
onWorkFlow: () => void
onData:(message) => void
onMessageEnd:() => void
onMessageEnd:(
{
message: any,
audioTxt: String
},
messageType
)
event-emit
- type: Function
- (eventType, data) => void
在使用数字人的时候,数字人会触发一些事件,比如 数字人开始播放 数字人播放结束 数字人播放失败 等等。
switch (eventType) {
case "error":
alert({
title: '提示',
message: data.code === 'timeout' ? '数字人这会儿被任务“淹没”了,正拼命挣扎呢,您先去听听曲儿,过会儿再来': '当前长时间未使用已断开连接,请重新进入',
confirmButtonText: '确 定'
}).then(() => {
data.onclose()
});
break;
case "connect":
break;
case "break":
break;
case "switchInput":
try {
} catch (error) {
}
break;
case "stop":
case "close":
break;
case "speakStart":
case "speakEnd":
}
current-model
这个是使用数字人时候定义的模型数据,该参数主要是用来驱动模型的参数集合,数据通过接口获取,样例格式如下:
{"id":3,"modelName":"新雅","modelCharacter":"秀外慧中,嗓音甜美","modelAttribute":0,"modelImage":"https://yt-gpt-pread.oss-cn-shanghai.aliyuncs.com/gpt_digitalhuman_image/20240702150000277_a31d425063f647c59e60cdc90cf1afe7","modelVoice":"BV407_V2_streaming","modelStatus":1,"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"modelOwner":null,"modelUuid":"6b406b9ab328429dbb0100a893401fc6","modelConcept":null,"modelMake":null,"modelModelType":0,"modelVoiceJson":"{\"id\": 3, \"rate\": 16000, \"volume\": 1.0, \"channel\": 4, \"fontName\": \"BV407_V2_streaming\", \"fontNameCN\": \"燃燃2.0\", \"speedLevel\": 1.0}","modelOrder":null,"modelHeadImage":"https://yt-gpt-pread.oss-cn-shanghai.aliyuncs.com/gpt_digitalhuman_head_image/6b406b9ab328429dbb0100a893401fc6"}
render-question
字幕展示的时候,自定义渲染问题的方法。
- type: Function
- ({id, loading, content}) => jsx
renderQuestion ({ loading, content }) {
return <span>
{ content }
{
loading && <van-loading style={{display: "inline-block"}} size="14" type="circle" color="#ffffff" />
}
</span>
},
render-answer
字幕展示的时候,自定义渲染答案的方法。数字人默认展示答案为普通文本如果有特殊样式需要借助此方法。
- type: Function
- ({ id, content, messageType }) => jsx
content 为获取的答案 如果不使用此方法则 数字人会原样输出 content
options
配置对象
options.env
env: String
options.appId
appId: String
options.employeeId
employeeId: String
options.bridge
{
call: (name, data, callback: (data) => void) => void,
register: (name, callback: (data => void))
}
注意:具体sdk的引用可以和驾驶舱app对接