JSSDK-6.X (H5)API文档

简介

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

1、引用js文件

<script type="text/javascript" src="https://sdk.cloud.chivox.com/chivoxsdk-js/v6.0/chivox.min.js"></script>

2、Html5Recorder使用示例

    //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);
        }
    })

2.1 Html5Recorder接口说明

new Html5Recorder(options);

创建一个Html5录音机;

Params

Name Type Description
options Object 初始化参数,格式如下default_record_option

Default_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)

Methods

record(params)

开始录音接口。
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)

stopRecord()

停止录音(在录音过程中要注意开启和结束录音时间间隔,如果暴力测试导致上传录音数据过短或没有上传录音数据,部分内核会返回调用序错误,导致评分异常)

reset( )

重置录音机引擎

getMicVolume( )

获取录音机录音音量。

getVolume()

获取回放音量。

setMicVolume(volume)

设置录音机录音音量。
params

Name Type Description
volume int 0~1

setVolume(volume)

设置回放音量。
params

Name Type Description
volume int 0~1

showVolumeBar( )

显示波形图 (使用该接口前,需要创建 <div id=“chivox-recorder”></div>)

startReplay(options)

开始回放最后一次录音。
options(Object)

Name Type Description
onStop callback 回放完成的Callback,格式:() => {}。

stopReplay( )

停止回放。

3、Html5Player

HTML5模式的播放器。基于web audio API设计开发,用于支持该环境下的远程或本地音频播放。

3.1、Html5Player使用示例

    // 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));
            }
        })

3.2 Html5Player接口说明

new Html5Player()

创建一个Html5音频播放器。

Methods

load(options)

加载音频接口
options(Object)

Name Type Description
url string 要加载的音频URL地址。
success callback 加载音频成功的Callback,格式:() => {}。
error callback 加载音频失败后的Callback,格式:(err) => {}。

play(options)

加载音频接口
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,格式:() => {}。

stop( )

手动停止音频播放。

setVolume(volume)

设置播放器播放音量。
params

Name Type Description
volume int 0~1

getVolume( )

获取播放器播放音量,@return(init) 0~1

reset( )

重置播放器状态。

4 aipanel

aipanel 包含播放器,录音机、录音回放;是基于Html5Recorder 和 Html5Player 进行封装,方便客户在简单的应用场景中进行播放标准音录音评分和播放录音音频;(在复杂使用场景中,建议用户直接调用Html5Recorder和Html5Player)

4.1 aipanel 使用示例

html示例

    <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节点说明:

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

css示例 (css样式可根据项目需求自定义)

#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;}

js示例

    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() {
              
            }
        }
    );

4.2 aipanel接口说明

new AiPanel(params)

创建一个aipanel引擎(当一个页面有多组录音播放操作时,不要多次new AiPanel,可调用setData接口去切换录音评分参数)。

params (Object): 录音时所需的参数。参数有:

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 播放录音结束回调

Methods

rebind()

当页面节点(播放、录音、回放)发生改变时,重新绑定引擎;

setData()

更新或设置 data 参数。

resetStatus()

重置aipanel状态

dispose()

销毁中aipanel中创建的AudioContext实例

5 错误码说明

70000~79999为SDK内部错误

错误码 错误码说明 建议处理方式
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: “#####”}

40000~49999为评分服务错误

错误码 错误码说明 建议处理方式
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 内核跳转出错,跳转时无法连接至内部服务 建议重试或联系技术支持