JSSDK-6.X 是由苏州驰声信息科技基于JavaScript EMCAScript 5 / 6规范开发的语音评测JSSDK;
该版本SDK引入全新上下文,使SDK运行流程更加规范可控,避免在极端操作下(快速点击)导致SDK出现异常;
本次SDK通信部分采用全新架构处理,每次录音均建立新的连接,录音结果返回或error连接关闭,使每次录音评分都有结果反馈(根据返回结果tokenId进行区分)。当本次录音结果未返回可进行下一次录音,并可以接收到上一次评分结果。
内含:
JSSDK-6.X 可以方便快捷的在各类前端和Web项目中加入语音评测功能。
JSSDK-6.X 在Chrome和Firefox浏览器且HTTPS环境,默认提供HTML5模式。
其中录音和播放功能,需要在HTTPS环境下,同时浏览器需要支持:
navigator.getUserMedia || navigator.webkitGetUserMedia|| navigator.mozGetUserMedia || navigator.msGetUserMedia
|| navigator.mediaDevices.getUserMedia
<script type="text/javascript" src="https://sdk.cloud.chivox.com/chivoxsdk-js/v6.0/chivox.min.js"></script>
//1.初始化SDK
let sdk = new Html5Recorder({
appKey: '14255202120000cf',
sigurl: '../php/sig.php',
server:"wss://cloud.chivox.com",
onInit: function (mess) {
},
onError: function (err) {
console.log("onError"+err)
},
})
//开始录音
sdk.record({
duration:4000,
serverParams:{
coreType: "en.sent.score",
res: "eng.snt.g4",
refText: refText,
rank: 100,
userId: "chivox tester"
},
onRecordIdGenerated:function (tokenId) {
console.log("=============onRecordIdGenerated start=============");
console.log(JSON.stringify(tokenId));
console.log("=============onRecordIdGenerated end=============");
},
onStart:function () {
controlRecordU(0)
},
onStop:function () {
controlRecordU(1)
},
onScore:function (score) {
console.log(score)
},
onScoreError:function (err) {
alert(JSON.stringify(err);
}
})
创建一个Html5录音机;
Name | Type | Description |
---|---|---|
options | Object | 初始化参数,格式如下default_record_option |
Name | Type | Argument | Description |
---|---|---|---|
server | string | 指定SDK的评分服务器地址。默认值: wss://cloud.chivox.com; (如果指定server为非wss协议,则使用默认协议) | |
appKey | string | <optional> | 指定录音机使用的appKey。必填 |
sigurl | string | <optional> | 指定录音机获取sig和timestamp的服务器地址(sig算法由驰声提供)。必填 |
alg | string | sig签名加密算法类型,默认值为 sha1 ,签名服务加密类型必须与传入alg加密类型保持一致;支持加密类型:[“sha1”,“md5”,“sha256”] | |
signature | function | sig签名解耦,@return(object),返回值必须为 {timestamp: "", sig: "**"} | |
micWatch | boolean | 是否开启麦克风实时检测功能,默认值:false | |
onInit | callback | 录音机初始化完成后的Callback调用。格式:(mess) => {} @return (string) | |
onError | callback | 录音机初始化或运行期间出错时的Callback调用。当用户没有传onScoreError回调,SDK所有错误从onError回调出来,当用户传了onScoreError回调,评分相关错误通过onScoreError进行回调,评分相关错误不再走onError回调格式:(error) => {} @return (Object) |
开始录音接口。
params (Object): 录音时所需的参数。参数有:
Name | Type | Description |
---|---|---|
duration | string | 录音时长(当用户录音时长小于2000ms默认2000ms),单位:毫秒。 |
playDing | boolean | 录音前是否播放“ding”声,默认值:true。 |
audioType | string | 录音格式,参数(支持格式):“wav",“mp3”;默认参数:“wav” |
logbus | boolean | 是否向logbus服务器发送日志,默认值:true。 |
serverParams | Object | 录音参数,具体参数请咨询技术支持 |
onRecordIdGenerated | callback | 开始录音后生成tokenId后的Callback(该版本SDK每次评分均建立新的连接,所以每次评分均有对应tokenId的结果(包含error信息)反馈,录音过程中会存在上一次结果未返回去进行当前评分行为,客户可根据tokenId去判断是否处理上一次评分反馈结果)。格式:(tokenId) => { var lastTokenID = tokenId.tokenId } |
onStart | Callback | (录音时长从当前回调执行开始计算)开始录音后的Callback。格式:() => { } |
onStop | Callback | 录音结束后的Callback。格式:() => { } |
onInternalScore | Callback | 录音中服务器Push回来的中间评分结果的Callback。格式:(data) => { } @return(Object) |
onScore | Callback | 服务器评分结果返回后的Callback。格式:(data) => { } @return(Object) |
onScoreError | Callback | 服务器评分出错返回后的Callback;当用户没有传onScoreError回调,SDK所有错误从onError回调出来,当用户传了onScoreError回调,评分相关错误通过onScoreError进行回调,评分相关错误不再走onError回调;格式:(err) => { } @return(Object) |
onFrame | Callback | 实时返回当前录音数据Callback。格式:(data) => { } @return(Object) |
停止录音(在录音过程中要注意开启和结束录音时间间隔,如果暴力测试导致上传录音数据过短或没有上传录音数据,部分内核会返回调用序错误,导致评分异常)
重置录音机引擎
获取录音机录音音量。
获取回放音量。
设置录音机录音音量。
params
Name | Type | Description |
---|---|---|
volume | int | 0~1 |
设置回放音量。
params
Name | Type | Description |
---|---|---|
volume | int | 0~1 |
显示波形图 (使用该接口前,需要创建 <div id=“chivox-recorder”></div>)
开始回放最后一次录音。
options(Object)
Name | Type | Description |
---|---|---|
onStop | callback | 回放完成的Callback,格式:() => {}。 |
停止回放。
HTML5模式的播放器。基于web audio API设计开发,用于支持该环境下的远程或本地音频播放。
// 1、 创建播放器
let player = new Html5Player(options);
//2、加载音频
player.load({
duration:"3000",
position:"1000"
url:"../static/I-want-to-know-the-past-and-present-of-Hong-Kong.mp3",
success:function (code,message) {
//播放音频
player.play({
position:0,
onStop:function () {
console.log("player onStop");
},
onStart:function () {
console.log("player onStart");
}
})
},
error:function (err) {
console.log("player error:" + JSON.stringify(err));
}
})
创建一个Html5音频播放器。
加载音频接口
options(Object)
Name | Type | Description |
---|---|---|
url | string | 要加载的音频URL地址。 |
success | callback | 加载音频成功的Callback,格式:() => {}。 |
error | callback | 加载音频失败后的Callback,格式:(err) => {}。 |
加载音频接口
options(Object)
Name | Type | Argument | Description |
---|---|---|---|
position | int | 播放位置,默认0。单位:ms,*可选 | |
duration | init | <optional> | 播放时长。单位:ms *可选 |
error | callback | <optional> | 加载音频失败后的Callback,格式:(err) => {}。 |
onStart | callback | 开始播放音频时的Callback,格式:() => {}。 | |
onStop | callback | 音频播放完成后的Callback,格式:() => {}。 |
手动停止音频播放。
设置播放器播放音量。
params
Name | Type | Description |
---|---|---|
volume | int | 0~1 |
获取播放器播放音量,@return(init) 0~1
重置播放器状态。
aipanel 包含播放器,录音机、录音回放;是基于Html5Recorder 和 Html5Player 进行封装,方便客户在简单的应用场景中进行播放标准音录音评分和播放录音音频;(在复杂使用场景中,建议用户直接调用Html5Recorder和Html5Player)
<div id="aiPanel" class="aiPanel">
<div>
<button class="play"></button>
<button class="record"></button>
<button class="replay"></button>
<div class="recordProgressBar"><div class="value"></div></div>
</div>
<div id="chivox-recorder"></div>
</div>
html示例中Dom节点及类名均为必填选项;div#aiPanel为最外层容器,内部放置3个button和1个录音进度条,div#chivox-recorder为绘制录音机波形图容器。
className | 功能说明 | css状态定义 |
---|---|---|
play | 播放音频按钮 | playOff 默认状态,未播放状态, playOn 正在播放状态 |
record | 录音按钮 | recordOff 默认状态,未录音状态,recordOn 正在录音状态 |
replay | 回放录音音频按钮 | replayDisabled 默认禁用状态(未进行第一次录音,当前无可播放音频),评分后会自动切换状态。replayOff 未回放状态。replayOn正在回放状态 |
recordProgressBar | 录音进度条 | 其中必须包含一个div.value |
#aiPanel button{ width:50px; height:32px; line-height:32px; border:0; padding:0; margin:0; cursor:pointer;}
#aiPanel button{ *margin-right:5px;}
#aiPanel .playOff{ background:#8AD7FB url(../images/icon.png) no-repeat 7px -184px;}
#aiPanel .playOn{ background:#8AD7FB url(../images/icon.png) no-repeat -42px -184px;}
#aiPanel .recordOff{ background:#8AD7FB url(../images/icon.png) no-repeat -147px -186px;}
#aiPanel .recordOn{ background:#8AD7FB url(../images/icon.png) no-repeat -186px -186px;}
#aiPanel .replayDisabled{ background:#CCC url(../images/icon.png) no-repeat -89px -184px; cursor:default;}
#aiPanel .replayOff{ background:#8AD7FB url(../images/icon.png) no-repeat -89px -184px;}
#aiPanel .replayOn{ background:#8AD7FB url(../images/icon.png) no-repeat -42px -184px;}
#aiPanel .recordProgressBar{ width:166px; height:10px; border:1px solid #61A7F5; margin-top:10px; font-size:1px; line-height:1px; display:none;}
#aiPanel .recordProgressBar .value{ background:#8AD7FB; width:0; height:10px; font-size:1px; line-height:1px;}
var aipanel = new AiPanel({
appKey: '14255202120000cf',
sigurl: '../php/sig.php',
data: {
playPosition: 1000,
playDuration: 2000,
audioUrl: "/static/I-want-to-know-the-past-and-present-of-Hong-Kong.mp3", //音频URL
serverParams: {
coreType: $("#coreType").val(),
refText:$("#currentWord").val(),
rank: 100,
userId: "chivox tester"
}
},
onInit: function onInit(errno) {
console.info('[ onInit ]:', errno);
},
onError: function onError(err) {
},
onBeforeRecord: function onBeforeRecord() {
},
onRecordIdGenerated:function (id) {
},
onAfterRecord:function(){
console.log("onAfterRecord")
},
onScore: function onScore(data) {
},
onInternalScore:function(data){
},
onScoreError: function onScoreError(errorType) {
},
onBeforePlay:function(){
},
onAfterPlay:function(){
},
onBeforeReplay:function(){
},
onAfterReplay: function onAfterReplay() {
}
}
);
创建一个aipanel引擎(当一个页面有多组录音播放操作时,不要多次new AiPanel,可调用setData接口去切换录音评分参数)。
Name | Type | Description |
---|---|---|
appKey | string | 指定录音机使用的appKey。*必填 |
sigurl | string | 指定录音机获取sig和timestamp的服务器地址(sig算法由驰声提供)。*必填 |
alg | string | sig签名加密算法类型,默认值为sha1,签名服务加密类型必须与传入alg加密类型保持一致;支持加密类型:[“sha1”,“md5”,“sha256”] |
signature | function | sig签名解耦,@return(object),返回值必须为 {timestamp: “####”, sig: “#####”} |
micWatch | boolean | 是否开启麦克风实时检测功能,默认值:false |
server | string | 指定SDK的评分服务器地址。默认值: wss://cloud.chivox.com; (如果指定server为非wss协议,则使用默认协议) |
playDing | boolean | 录音前是否播放“ding”声,默认值:true。 |
logbus | boolean | 是否向logbus服务器发送日志,默认值:true。 |
getResult | boolean | 是否返回非当前录音评分结果,默认值:false(不返回);如果设为true,可配合onRecordIdGenerated接口返回tokenId对结果进行处理。 |
data | object | 播放、录音评分参数 |
data.playPosition | init | 播放位置,默认0。单位:ms,*可选 |
data.playDuration | init | 播放时长。单位:ms *可选 |
data.duration | string | 录音时长(当用户录音时长小于2000ms默认2000ms),单位:毫秒。 |
data.audioType | string | 录音格式,参数(支持格式):“wav",“mp3”;默认参数:“wav” |
data.serverParams | object | 录音参数,具体参数请咨询技术支持 |
onInit | callback | 录音机初始化完成后的Callback调用。格式:(mess) => {} @return (string) |
onError | callback | 录音机初始化或运行期间出错时的Callback调用。当用户没有传onScoreError回调,SDK所有错误从onError回调出来,当用户传了onScoreError回调,评分相关错误通过onScoreError进行回调,评分相关错误不再走onError回调格式:(error) => {} @return (Object) |
onBeforeRecord | callback | 开始录音前回调 |
onStartRecord | callback | 开始录音回调(录音时长从当前开始计算) |
onFrame | Callback | 实时返回当前录音数据Callback。格式:(data) => { } @return(Object) |
onRecordIdGenerated | callback | 开始录音后生成tokenId后的Callback(该版本SDK每次评分均建立新的连接,所以每次评分均有对应tokenId的结果(包含error信息)反馈,录音过程中会存在上一次结果未返回去进行当前评分行为,客户可根据tokenId去判断是否处理上一次评分反馈结果)。格式:(tokenId) => { var lastTokenID = tokenId.tokenId } |
onAfterRecord | callback | 录音结束回调 |
onInternalScore | Callback | 录音中服务器Push回来的中间评分结果的Callback。格式:(data) => { } @return(Object) |
onScore | Callback | 服务器评分结果返回后的Callback。格式:(data) => { } @return(Object) |
onScoreError | Callback | 服务器评分出错返回后的Callback;当用户没有传onScoreError回调,SDK所有错误从onError回调出来,当用户传了onScoreError回调,评分相关错误通过onScoreError进行回调,评分相关错误不再走onError回调;格式:(err) => { } @return(Object) |
onBeforePlay | Callback | 播放标准音前回调 |
onAfterPlay | Callback | 播放标准音结束后回调 |
onBeforeReplay | Callback | 播放录音前回调 |
onAfterReplay | Callback | 播放录音结束回调 |
当页面节点(播放、录音、回放)发生改变时,重新绑定引擎;
更新或设置 data 参数。
重置aipanel状态
销毁中aipanel中创建的AudioContext实例
错误码 | 错误码说明 | 建议处理方式 |
---|---|---|
50003 | 没有音频输入设备录音机 | 检查浏览器是否为https环境,浏览器麦克风是否禁用 |
70001 | 录音机初始化为成功 | 检查浏览器是否支持Html5,浏览器是否为https环境,浏览器麦克风是否禁用,向前检查new Html5Recorder报错 |
70002 | 录音机正在进行录音 | 等待当前录音结束再进行录音操作 |
71001 | websocket连接数超过最大连接数四个 | 评分结果响应较慢,待前面评分结果返回在进行录音 |
72001 | 没有音频输入设备 | 初始化失败,请检查初始化失败原因 |
72002 | 获取sig签名失败 | 请检查网络或sigurl是否正确 |
73001 | websocket连接错误 | websocket连接不上,请检查网络或评分接口是否正确 |
74001 | 设置或获取回放音量时没有回放设备 | 初始化失败 |
74002 | 设置或获取录音音量时没有录音设备 | 初始化失败 |
75001 | 必填参数AppKey不合法 | 请检查AppKey是否填写,数据类型是否正确 |
75002 | 必填参数sigurl不合法 | 请检查sigurl是否填写,数据类型是否正确 |
75003 | 必填参数server不合法 | 请检查server是否填写,数据类型是否正确 |
75004 | 出入alg加密类型不合法 | alg加密类型仅支持[“sha1”,“md5”,“sha256”],请检查传入值是在支持的加密类型内 |
75005 | sig签名不存在或数据类型不正确 | sig服务返回数据必须为(object) {timestamp: “####”, sig: “#####”} |
错误码 | 错误码说明 | 建议处理方式 |
---|---|---|
40001 | 未指定请求参数 | 检查评分服务参数或联系技术支持 |
40002 | 未在参数中添加request参数项 | 联系技术支持 |
40400 | 请求的内核资源不存在 | 更换内核或联系技术支持 |
40092 | 传输的音频时长超限 | 缩短传输音频时长或联系技术支持 |
41001 | 参数非JSON格式 | 联系技术支持 |
41002 | 控制消息的格式出错没有cmd项 | 联系技术支持 |
41004 | 控制消息的格式出错没有param项 | 联系技术支持 |
41007 | 未传输音频格式 | 请传输音频格式 |
41008 | 音频格式不支持 | 请传入正确音频格式或联系技术支持 |
41009~41011 | 音频信息不合法 | 请传入正确音频信息或联系技术支持 |
41012 | 未传输音频信息 | 请传入音频信息 |
41014~41025 | 参数中有遗漏或不合法 | 请检查评分服务参数中内核对应信息是否正确或联系技术支持 |
41030~41032 | auth验证未通过 | 请检查auth验证信息是否正确或联系技术支持 |
42003 | 客户端发送请求的顺序出错 | SDK调用顺序不正确或联系技术支持 |
错误码 | 错误码说明 | 建议处理方式 |
---|---|---|
51000 | 初始化内核出错 | 联系技术支持 |
51001 | feed音频给内核时出错 | 联系技术支持 |
51002 | 生成内核结果时出错 | 联系技术支持 |
52000 | 集群进程资源短缺 | 联系技术支持 |
53000 | 内核进程崩溃 | 联系技术支持 |
55200 | 内核跳转出错,由于服务端的配置异常导致内核跳转异常 | 联系技术支持 |
55201~55204 | 内核跳转出错,跳转时无法连接至内部服务 | 建议重试或联系技术支持 |