同步操作将从 guiji/duix-js 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
DUIX 数字人通过TTS、ASR、数字人克隆等技术,对人类进行虚拟仿真,打造高度拟人化、可交互的虚拟数字形象。数字人可以像人类一样倾听、理解,运用情感化的语言、表情和动作与用户交流,使数字人更加人性化。用户可以通过手机、电脑、一体机、投影或 PAD等方式与数字人开展对话,数字人以人的说话方式与用户进行交流。DUIX提供数字人交互PASS平台能力,赋能企业及生态。 DUIX平台高度开放,拥有完备的生态集成体系,NLP、智能语音、数字人形象等都支持开放集成。同时,DUIX提供高度抽象的数字人交互 SDK,易于集成,终端兼容性高,使企业更关注业务本身。
# Install Duix
npm i duix-guiji -S
import DUIX from 'duix-guiji'
// 通过jwt获取token
let request = new XMLHttpRequest()
request.onreadystatechange = () => {
if (request.readyState === 4) {
if (request.status === 200) {
const token = JSON.parse(request.responseText).data
init(token)
}
}
}
// appid为数字人的robotCode
request.open('GET', `https://${youJWTAjaxUrl}?appId=xxxxxxxxxx`)
request.send()
const init = token => {
const duix = new DUIX({
url: 'https://robot.guiji.ai/duix-cc/',
logger: 'error',
container: document.querySelector('.stage'),
robot: {
token,
code: 'xxxxxxxxxxxxxxxxxx'
}
})
duix.on('load', () => {
console.log('load')
})
duix.on('canplaythrough', function (e) {
console.log('canplaythrough')
duix.play()
})
duix.on('error', function (e) {
console.error('error', e)
})
duix.on('bodyload', function (e) {
duix.say('你好,我是硅基智能数字人,很高兴认识您。') // 用文字驱动数字人说话
// duix.say('https://duix.guiji.ai/nfs/ccm-file/0c710466e703224167ead95f1fa6ef58.wav', true) // 用音频文件驱动数字人说话
})
}
以上示例中的new DUIX(options)即可得到一个DUIX实例,其中option是一个配置对象,细节如下:
名称 | 类型 | 描述 | 默认值 | 示例 |
---|---|---|---|---|
container | Element | 数字人将渲染在这个Dom中,并占宽高均占满容器。 | document.querySelector('#duix') | |
logger | boolean|string | 日志等级。可选值 false|'debug'|'info'|'warn'|'error' | false | false |
url | string | 服务器URL,您从DUIX后台获取到的服务URL. | https://api.us.guiji.ai | |
faceCache | object | 缓冲相关配置 | ||
faceCache.duration | number | 缓冲时长,单位秒。在CPU稍差的机器上可以适当增加缓冲。当缓冲加满以后会触发canplaythrough 事件。 |
1 | |
robot | object | 数字人相关配置 | ||
robot.code | string | 数字人Code。从官网后台获得。 | 205692370051410784 | |
robot.token | string | 数字人Token。使用流行的跨域认证解决方案JWT,基于robot.code和secret获取Token,Java版生成Demo请见下方。 | ||
quality | object | 画质相关配置。数字人解码占用一些CPU,在CPU较弱的场景下,可以调整画质以提升解码速度。 | ||
quality.fps | number | 画面帧率。可选值:15|20|25 | 25 | 20 |
quality.isQuarter | boolean | 是否降低分辨率。值为true时画面分辨率降为270*480 | false | |
body | object | 数字人静默视频相关配置 | ||
body.autoplay | boolean | 当加载完身体时是否自动播放,如置为false,可在 bodyload 事件触发后调用 duix.playSilence() 方法主动播放 |
true |
// Java 版JWT生成代码
public class JwtUtils {
/**
* 创建jwt
*
* @param robotCode 签发对象
* @param secret 密钥
* @param exp 到期时间:单位秒
* @return
*/
public static String createJwt(String robotCode, String secret, int exp) {
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.SECOND, exp);
Date expiresDate = nowTime.getTime();
//发行时间减10s,解决检验jwt时防止服务器时间不同步而导致的校验失败
Calendar issuedCalendar = Calendar.getInstance();
issuedCalendar.add(Calendar.SECOND, -10);
return JWT.create()
//发行时间
.withIssuedAt(issuedCalendar.getTime())
//有效时间
.withExpiresAt(expiresDate)
//载荷
.withClaim("robotCode", robotCode)
//加密
.sign(Algorithm.HMAC256(secret));
}
}
参数见如上表格
驱动数字人说话,支持文本驱动和音频文件驱动。调用该方法后,即刻开始加载资源,缓冲加载满以后触发canplaythrough
事件。该方法调用时要确保数字人的静默视频已经加载完成,也就是bodyload
事件已经触发。
需要数字人说的话,可以是文本,比如“你好,我是硅基智能数字人,很高兴认识您。”;也可以是一个音频URL,比如https://www.xxxx.com/cdn/abcd.wav
。
可选参数,表示words
参数是不是一个音频。true表示是一个音频,默认false。
播放静默视频。options.body.autoplay = false
时,用此方法播放静默视频。
播放数字人,一般在canplaythrough
事件中调用此方法。
暂停数字人。暂停后数字人不说话,画面切换成静默视频。
由暂停恢复播放。
停止播放视频。
监听事件。
事件名称,详见下方表格。
回调函数。
获取内部的canvas,可对canvas做一些高级开发。
获取内问音频,可以基于此做一些音频可视化等。
名称 | 描述 |
---|---|
bodyload | 静默视频加载完成。只有此事件以后才能调用duix.say(xxx) 。 |
bodyprogress | 静默视频加载进度,可利用此事件做一个加载动画。 |
canplaythrough | 缓冲已满,可以开始播放。 |
load | 本轮数字人说话内容已加载完成。数字人资源是懒加载的,不播放(duix.play() )可能永远也不会触发此事件。 |
play | 数字人开始播放。 |
pause | 数字人播放已暂停。 |
timeupdate | 数字人正在播放,播放每一帧时都触发此事件。 |
ended | 数字个播放结束。 |
error | DUIX异常。 |
0.0.45 (暂未发布到npm)
0.0.44
0.0.43 1.新增从AudioContext获取MediaStream的方法getAudioDest
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.34:
0.0.33:
0.0.32
0.0.31
0.0.30
0.0.27
0.0.26
修复不传 quality.fps 和 quality.quarter时的报错。
新增bodyprocess事件用于通知身体加载进度。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。