voiceRecognizer
createUtility removeEventListener
recognizeStart recognizeCancel
readConfig startSynthesize resumeRead isReading
概述
本模块封装了 科大讯飞 的SDK 的语音听写、语音唤醒、语音在线合成功能。
使用本模块之前需要先去科大讯飞开放平台注册开发者账号,然后 获取 appid ,接着给创建的 app 添加语音听写、在线语音合成、语音唤醒服务。按照科大讯飞官方给的提示,配置唤醒词。然后下载SDK包(需要从SDK包里找到jet文件导入开发工程里,并将jet文件路径通过wakeupConfig接口传给模块)。
【ios平台使用模块的配置】
1,配置 plist 文件
在 iOS 9 下直接进行 HTTP 请求时会收到错误提示。不能直接使用 HTTP 进行请求,需要在 Info.plist 新增一段用于控制 ATS 的配置:
2,云编译时的配置
云编译时,需要申请访问的权限:麦克风、定位(使用期间)、定位(始终)、通讯录
3,动态库配置 ——- 附加模块制作
由于科大讯飞的 SDK 是动态生成的。所以需要开发者将动态生成的的 SDK 打包成一个附加自定义模块上传 APICloud 平台。制作方法如下:
下载 模块 zip 包并解压,把 zip 包内 target 目录下的 iflyMSC.framework 文件替换为自己从科大讯飞开放平台动态生成(包括语音听写、在线语音合成、语音唤醒功能的sdk包)的。然后重新压缩为 zip 包文件上传自定义模块,云编译时勾选该模块。
【android平台该模块配置】
动态库配置 ——- 附加模块制作
由于科大讯飞的 SDK 是动态生成的。所以需要开发者将动态生成的的 SDK 打包成一个附加自定义模块上传 APICloud 平台。制作方法如下:
下载 voiceRecognizerAppendix模块zip包并解压,把zip包内source目录下的Msc.jar和Sunflower.jar替换为第二步中sdk目录下xx\Android_awaken_1121_59ba21e0\libs\下的同名文件(如果sdk中没有Sunflower.jar,就不需要添加了);把zip包内target目录下libmsc.so文件替换为第二步中sdk目录下xx\Android_awaken_1121_59ba21e0\libs\armeabi\下的同名文件,然后重新压缩为 zip 包文件上传自定义模块,云编译时勾选该模块。
【tips】 : 相关错误码描述,进入查看,更详细的错误说明http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=13056
【注意】:无论是 android 端还是 iOS 端,唤醒功能都是需要jet文件的。jet 文件在 iOS 和 android 端不能共用,可通过 wakeupConfig 接口分别配置。android端没找到唤醒appid.jet文件,会报25000错误码
模块接口
createUtility
创建科大讯飞引擎
createUtility({params}, callback(ret, err))
android_appid:
- 类型:字符串
- 描述:从科大讯飞开放平台得到的 appid(android端)
ios_appid:
- 类型:字符串
- 描述:从科大讯飞开放平台得到的 appid(iOS端)
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
status:true //布尔类型;操作成功状态值,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.createUtility({
android_appid: ‘******’
}, function(ret, err) {
if (ret.status) {
api.alert({ msg: '创建成功'});
} else {
api.alert({ msg: "创建失败" });
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
recognizeConfig
语音识别参数配置
recognizeConfig({params}, callback(ret))
params
config:
- 类型:JSON 对象
- 描述:识别语音时的参数配置
- 内部字段:
{
vadbos: '5000', //(可选项)字符串类型;前断点时间(静音时间,即用户多长时间不说话做超时处理),范围是0-10000单位ms;默认:5000
vadeos: '5000', //(可选项)字符串类型;后断点时间(静音时间,即用户多长时间不说话做超时处理),单位ms,范围是0-10000;默认:5000
timeout: '30000', //(可选项)字符串类型;语音输入超时时间,单位ms;默认:30000
netTimeout: '20000', //(可选项)字符串类型;网络连接超时时间,单位ms;默认:20000
rate: '16000', //(可选项)字符串类型;采样率(支持16000,8000);默认:16000
dot: false //(可选项)布尔类型;是否有标点符号;默认:false
language:'zh_cn', // (可选项) 字符串;语言环境;默认值:zh_cn;取值范围:zh_cn(简体中文);en_us(美式英文)
accent:'mandarin' // (可选项) 字符串;语言区域,仅当language为zh_cn时有效;默认值:mandarin;取值范围:cantonese(粤语);henanese(河南话)(android不支持);lmz(四川话)(ios不支持);mandarin(普通话)
}
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true //布尔类型;操作成功状态值,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.recognizeConfig({
config: {
vadbos: '5000',
vadeos: '5000',
timeout: '30000',
netTimeout: '20000',
rate: '16000',
dot: false
}
}, function(ret) {
if (ret.status) {
api.alert({ msg: '配置成功' });
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
recognizeStart
开始语音识别,注意:同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错。若有需要多次回话, 请通过 addEventListener 接口监听 onError ,在该回调事件内请求下一路回话。
recognizeStart({params}, callback(ret))
params
audioFileName:
- 类型:字符串
- 描述:(可选项)录制的音频文件保存名字(如123.pcm,一定要加后缀名),结束后文件笛子(绝对路径)会在 addEventListener 监听recognizeResult 回调函数里获取;若不传则不保存
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true //布尔类型;操作成功状态值,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.recognizeStart(function(ret) {
if (ret.status) {
} else {
api.alert({ msg: "开始失败"});
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
recognizeStop
停止录音,调用此函数会停止录音,并开始进行语音识别。
recognizeStop()
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.recognizeStop();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
recognizeCancel
取消本次会话。
recognizeCancel()
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.recognizeCancel();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
recogizeListening
语音识别是否正在录音
recogizeListening(callback(ret))
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
listening:true //布尔类型;是否正在录音,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.recogizeListening(function(ret){
if (ret.listening) {
api.alert({ msg: '正在录音'});
} else {
api.alert({ msg: "没有正在录音" });
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
readConfig
语音朗读配置
readConfig({params}, callback(ret))
params
- 类型:JSON 对象
- 描述:识别语音时的参数配置
- 内部字段:
{
speed: '50', //(可选项)字符串类型;语速,范围是0-100单位ms;默认:50
volume: '50', //(可选项)字符串类型;音量,单位ms,范围是0-100;默认:50
pitch: '50', //(可选项)字符串类型;音调,单位ms,范围:0-100;默认:50
rate: '16000', //(可选项)字符串类型;采样率(支持16000,8000);默认:16000
voice: ‘xiaoyan’ //(可选项)字符串类型;发音人;默认:xiaoyan
//xiaoyan:小燕-女青、中英、普通话
//xiaoyu:小宇-男青、中英、普通话
//catherine:凯瑟琳-女青、英语
//henry:亨利-男青、英语
//vimary:玛丽-女青、英语
//vixy:小研-女青、中英、普通话
//vixq:小琪-女青、中英、普通话
//vixf:小峰-男青、中英、普通话
//vixl:小梅-女青、中英、粤语
//vixq:小莉-女青、中英、台湾普通话
//vixr:小蓉-女青、中、四川话
//vixyun:小芸-女青、中、东北话
//vixk:小坤-男青、中、河南话
//vixqa:小强-男青、中、湖南话
//vixying:小莹-女青、中、陕西话
//vinn:楠楠-女童、中、普通话
//vils:老孙-男老、中、普通话
}
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true //布尔类型;操作成功状态值,true|false
}
示例代码
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
startRead
开始合成(播放), 调用此函数进行合成,如果发生错误会回调错误 addEventListener readComplete
,合成的文本的最大的字节数为1k
recognizeStart({params})
params
audioFileName:
- 类型:字符串
- 描述:(可选项)录制的音频文件保存名字(如123.wav,一定要加后缀名),结束后文件笛子(绝对路径)会在 addEventListener 监听 回调函数里获取;若不传则不保存;(注:android保存的格式有pcm和wav,一般android手机上保存格式为wav, 有些手机可能无法播放pcm)
readString:
- 类型:字符串
- 描述:要朗读的字符串,最大的字节数为1k
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.startRead({
audioFileName: '123.pcm',
readString: 'hello 柚子'
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
startSynthesize
开始合成(不播放), 调用此函数进行合成,如果发生错误会回调错误 addEventListener readComplete
,合成的文本的最大的字节数为1k
startSynthesize({params})
params
audioFileName:
- 类型:字符串
- 描述:(可选项)录制的音频文件保存名字(如123.pcm,一定要加后缀名),结束后文件笛子(绝对路径)会在 addEventListener 监听 回调函数里获取;若不传则不保存;(android会默认生成一个文件并保存,默认生成的文件格式为wav)
readString:
- 类型:字符串
- 描述:要朗读的字符串,最大的字节数为1k
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.startSynthesize({
audioFileName: '123.pcm',
readString: 'hello 柚子'
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
pauseRead
暂停播放之后,合成不会暂停,仍会继续,如果发生错误则会回调错误addEventListener readComplete
,
pauseRead()
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.pauseRead();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
resumeRead
恢复播放
resumeRead()
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.resumeRead();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
stopRead
停止播放
stopRead()
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.stopRead();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
isReading
识别正在语音识别录音
isReading(callback(ret))
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
reading:true //布尔类型;是否正在播放语音,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.isReading(function(ret){
if (ret.reading) {
api.alert({ msg: '正在播放'});
} else {
api.alert({ msg: "没有正在播放" });
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
wakeupConfig
语音唤醒配置
wakeupConfig({params},callback(ret))
params
ios_wordPath:
- 类型:字符串
- 描述:从下载的SDK 包内获取的 jet 文件的路径,要求本地路径(fs://、widget://)
android_wordPath:
- 类型:字符串
- 描述:从下载的SDK 包内获取的 jet 文件的路径,要求本地路径(widget://)
continue:
- 类型:布尔
- 描述:(可选项)设置唤醒服务周期,true:表示唤醒成功后继续录音,并保持唤醒状态;fals:表示唤醒成功后停止录音
- 默认:true
threshold:
- 类型:字符串
- 描述: 唤醒门限值,格式如下默认值,0:表示第一个唤醒词,-20表示对应的门限值。1:表示第二个唤醒词,-20表示对应的门限值
- 默认:’0:-20;1:-20;’
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true //布尔类型;操作成功状态值,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.wakeupConfig({
wordPath: 'widget://res/wakeupresource.jet',
continue: true
},function(ret){
if (ret.status) {
api.alert({ msg: '配置成功'});
} else {
api.alert({ msg: "配置失败" });
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
wakeupStart
语音唤醒开始
wakeupStart(callback(ret))
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true //布尔类型;操作成功状态值,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.wakeupStart(function(ret){
if (ret.status) {
api.alert({ msg: '开始成功'});
} else {
api.alert({ msg: "开始失败" });
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
wakeupStop
语音唤醒停止,注意与cancel的区别,紧紧停止服务,并不释放资源
wakeupStop(callback(ret))
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true //布尔类型;操作成功状态值,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.wakeupStop(function(ret){
if (ret.status) {
api.alert({ msg: '停止成功'});
} else {
api.alert({ msg: "停止失败" });
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
wakeupCancel
语音唤醒取消
wakeupCancel(callback(ret))
ret:
- 类型:JSON 对象
- 内部字段:
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.wakeupCancel(function(ret){
if (ret.status) {
api.alert({ msg: '取消成功'});
} else {
api.alert({ msg: "取消失败" });
}
});
可用性
iOS系统,Android系统
wakeupIsListening
语音唤醒是否正在录音
wakeupIsListening(callback(ret))
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
listening:true //布尔类型;是否正在录音,true|false
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.wakeupIsListening(function(ret){
if (ret.listening) {
} else {
api.alert({ msg: "没有正在录音" });
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
addEventListener
添加监听
addEventListener({params},callback(ret))
params
name:
- 描述:监听的事件的名字
取值范围:
- beginOfWakeupSpeech:录音开始(语音唤醒)
- onEndOfWakeupSpeech:录音结束(语音唤醒)
- onWakeupError:会话错误(语音唤醒)
- wakeupResult:唤醒结果(语音唤醒)
wakeupVolume:唤醒录音的音量返回频率与录音数据返回回调频率一致,范围:0-100(语音唤醒)
readComplete:当整个合成结束之后会回调此事件,回调参数内含错误信息(语音朗读)
readBegin:语音朗读开始合成(语音朗读)
- readPause:语音朗读暂停播放(语音朗读)
- readResumed:语音朗读恢复播放(语音朗读)
- readCancel:语音朗读正在取消,当调用
cancel
之后会回调此函数(语音朗读) - readBufferProgress:语音朗读音频文件缓冲进度(语音朗读)
readProgress:语音朗读恢进度(语音朗读)
recognizeResult:语音识别结果(语音识别)
beginOfSpeech:录音开始(语音识别)
- onEndOfSpeech:录音结束(语音识别)
- onError:会话错误(语音识别)
- volume:语音识别时录音的音量(改事件实时回调,范围从0-30)返回频率与录音数据返回回调频率一致(语音识别)
- recognizeCancel:语音识别取消事件,当调用了
recogizeCancel
函数之后,会回调此函数,在调用了 recogizeCancel函数和回调 onError 之前会有一个短暂时间,您可以在此函数中实现对这段时间的界面显示。
- 注意: 在进行语音识别过程中,当调用
recognizeCancel
函数时,引擎不会自动结束,需要等到回调此函数,才表示此次会话结束。在没有回调此函数之前如果重新调用了recognizeStart
函数则会报错误
realTime:
- 类型:布尔
- 描述:(可选项)当 name 为 recognizeResult 时,是否实时返回识别结果
- 默认:false
callback(ret)
ret:
- 类型:JSON 对象
- 描述:所监听事件的回调,当 name 为beginOfWakeupSpeech 、onEndOfWakeupSpeech 、readBegin 、readPause、readResumed、readCancel 、beginOfSpeech、onEndOfSpeech、recognizeCancel 时,只有触发事件,没有回调参数。
- 内部字段:
{
error: { //JSON 对象;错误信息,当 name 为 onError、onWakeupError时返回的值
code: , //数字类型;错误码
type: , //数字类型;错误类型
msg: //字符串类型;错误信息
}
readComplete:{ //JOSN对象;语音合成完成后的回调
error: { //JSON 对象;错误信息,若语音合成发生错误时返回值
code: , //数字类型;错误码
type: , //数字类型;错误类型
msg: //字符串类型;错误信息
}
audioFilePath: '' //字符串类型;录音文件绝对路径
}
wakeupResult: {} //JOSN对象;唤醒成功后的结果,当 name 为 wakeupResult 时返回的值
recognizeResult:{//JOSN对象;语音识别后的结果,当 name 为 recognizeResult 时返回的值
isLast: true, //字符串类型;是否是最后一次返回语音识别结果,用于实时语音识别时判断识别结束
result: '', //字符串类型;识别结果
audioFilePath: '' //字符串类型;录音文件绝对路径
}
volume: 30 //数字类型;录音音量大小(实时回调),当 name 为 volume、wakeupVolume时返回的值
readProgress: { //JSON对象;朗读进度数据
progress: '', //字符串类型;当前朗读进度
endPos: '', //字符串类型;当前播放文本的起始位置,0-100
beginPos: '' //字符串类型;当前播放文本的结束位置,0-100
}
readBufferProgress: { //JSON对象;朗读音频文件缓冲进度数据
progress: '', //字符串类型;缓冲进度
msg: '' //字符串类型;缓冲的信息
}
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.addEventListener({
name: 'wakeupResult'
},function(ret){
api.alert({ msg: JSON.stringify(ret)});
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
removeEventListener
移除已添加的监听
removeEventListener({params},callback(ret))
params
name:
- 类型:字符串
- 描述:监听的事件的名字
- 取值范围:
- beginOfWakeupSpeech:录音开始
- onEndOfWakeupSpeech:录音结束
- onWakeupError:会话错误
- wakeupResult:唤醒结果
- wakeupVolume:唤醒录音的音量
- readComplete:当整个合成结束之后会回调此事件
- readBegin:语音朗读开始合成
- readPause:语音朗读暂停播放
- readResumed:语音朗读恢复播放
- readCancel:语音朗读正在取消
- readBufferProgress:语音朗读音频文件缓冲进度
- readProgress:语音朗读恢进度
- recognizeResult:语音识别结果
- beginOfSpeech:录音开始
- onEndOfSpeech:录音结束
- onError:会话错误
- volume:语音识别时录音的音量
- recognizeCancel:语音识别取消事件
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.removeEventListener({
name: 'wakeupResult'
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
addHUD
添加音量大小指示器,
当使用语音唤醒、语音识别功能时,会涉及到录音功能。
可通过本接口在界面上添加一个音量指示器,实时显示录音音量大小。
如下图(67*35)所示:
addHUD({params}, callBack(ret, err))
params
center:
- 类型:JSON 对象
- 描述:(可选项)音量指示器锚点坐标
- 内部字段:
{
x: , //(可选项)数字类型;x坐标;默认:40
y: //(可选项)数字类型;y坐标:默认:20
}
alphas:
- 类型:数组
- 描述:(可选项)单条指示器每个指示条的透明度组成的数组。本数组顺序同 orientation 指示的方向。
- 默认:[1,1,1,1,1,1,1,1]
gradientColors:
- 类型:数组
- 描述:(可选项)单条指示器每个指示条的顶部和底部色值配置组成的数组,模块会将两色值渐变处理,渐变色分界点是从上往下30%的位置。本数组顺序同 orientation 指示的方向。
- 内部字段:
[{
top: '#5f42c8', //(可选项)字符串类型;指示条顶部色值,支持rgb、rgba、#;默认:#5f42c8
bottom: '#ff4e00' //(可选项)字符串类型;指示条底部色值,支持rgb、rgba、#;默认:#ff4e00
}]
orientation:
- 类型:字符串
- 描述:(可选项)指示波传递方向
- 默认值:right_left
- 取值范围:
- right_left:从右往左
- left_right:从左往右
target:
- 类型:字符串
- 描述:(可选项)指示器对象
- 默认值:recognizer
- 取值范围:
- recognizer:语音识别的音量指示器
- wakeup:语音唤醒时的音量指示器
bg:
- 类型:字符串
- 描述:(可选项)录音标识的背景色,支持 rgb,rgba,#
- 默认值:rgba(0,0,0,0)
fixedOn:
- 类型:字符串类型
- 描述:(可选项)模块视图添加到指定 frame 的名字(只指 frame,传 window 无效)
- 默认:模块依附于当前 window
fixed:
- 类型:布尔
- 描述:(可选项)模块是否随所属 window 或 frame 滚动
- 默认值:true(不随之滚动)
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
id:'' //字符串类型;指示器的标识,支持统一页面打开多个模块
}
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.addHUD({
center: {
x: 40,
y: 100
},
gradientColor: {
top: '#5f42c8',
bottom: '#ff4e00'
},
orientation: 'right_left',
target: 'recognizer',
bg: '#AAAAAA',
fixedOn: api.frameName,
fixed: false
}, function(ret) {
var volume = ret.id;
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
showHUD
显示音量大小指示器
showRecordHUD({params})
params
id:
- 类型:字符串
- 描述:(可选项)操作的模块对象 id,若不传则显示所有已打开的模块对象
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.showHUD({
id: '1'
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
hideHUD
隐藏音量指示器
hideHUD({params})
params
id:
- 类型:字符串
- 描述:(可选项)操作的模块对象 id,若不传则隐藏所有已打开的模块对象
示例代码
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.hideHUD({
id: '1'
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
closeHUD
关闭音量指示器
closeHUD({params})
params
id:
- 类型:字符串
- 描述:(可选项)操作的模块对象 id,若不传则关闭所有已打开的模块对象
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.closeHUD({
});
可用性
iOS系统,Android系统