createUtility addEventListener removeEventListener
本插件封装了 科大讯飞 的SDK 的语音听写、语音唤醒、语音在线合成功能。
使用本插件之前需要先去科大讯飞开放平台注册开发者账号,然后 创建app 获取 appid ,接着给创建的 app 添加语音听写、在线语音合成、语音唤醒服务。按照科大讯飞官方给的提示,配置唤醒词。然后下载SDK包(需要从SDK包里找到jet文件导入开发工程里,并将jet文件路径通过wakeupConfig接口传给插件)。
【ios平台使用插件的配置】
1,配置 plist 文件
在 iOS 9 下直接进行 HTTP 请求时会收到错误提示。不能直接使用 HTTP 进行请求,需要在 Info.plist 新增一段用于控制 ATS 的配置:
<key>NSAppTransportSecurity</key> <dict>
<key>NSAllowsArbitraryLoads</key> <true/>
</dict>
2,应用打包时的配置
应用打包时,需要申请访问的权限:麦克风、定位(使用期间)、定位(始终)、通讯录
3,动态库配置 ----- 附加插件制作
由于科大讯飞的 SDK 是动态生成的。所以需要开发者将动态生成的的 SDK 打包成一个附加自定义插件上传 YonBuilder移动开发 平台。制作方法如下:
下载 voiceRecognizerAppendix 插件 zip 包并解压,把 zip 包内 target 目录下的 iflyMSC.framework 文件替换为自己从科大讯飞开放平台动态生成(包括语音听写、在线语音合成、语音唤醒功能的sdk包)的。然后重新压缩为 zip 包文件上传自定义插件,应用打包时勾选该插件。
【android平台该插件配置】
动态库配置 ----- 附加插件制作
由于科大讯飞的 SDK 是动态生成的。所以需要开发者将动态生成的的 SDK 打包成一个附加自定义插件上传 YonBuilder移动开发 平台。制作方法如下:
下载 voiceRecognizerAppendix插件zip包并解压,下载的科大讯飞sdk中的所有.jar文件替换掉zip包内source目录下的jar文件,下载的科大讯飞sdk中的所有.so文件替换掉zip包内target目录或target/arm64-v8a下so文件,然后重新压缩为 zip 包文件上传自定义插件,应用打包时勾选该插件。
【tips】 : 相关错误码描述,进入http://www.xfyun.cn/doccenter/faq?go=contitle66查看,更详细的错误说明http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=13056
【注意】:无论是 android 端还是 iOS 端,唤醒功能都是需要jet文件的。jet 文件在 iOS 和 android 端不能共用,可通过 wakeupConfig 接口分别配置。android端没找到唤醒appid.jet文件,会报25000错误码
创建科大讯飞引擎
createUtility({params}, callback(ret, err))
android_appid:
ios_appid:
ret:
{
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({params}, callback(ret))
config:
{
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(普通话)
}
ret:
{
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及更高版本
开始语音识别,注意:同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错。若有需要多次回话, 请通过 addEventListener 接口监听 onError ,在该回调事件内请求下一路回话。
recognizeStart({params}, callback(ret))
audioFileName:
ret:
{
status:true //布尔类型;操作成功状态值,true|false
}
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.recognizeStart(function(ret) {
if (ret.status) {
api.alert({ msg: "开始成功"});
} else {
api.alert({ msg: "开始失败"});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
停止录音,调用此函数会停止录音,并开始进行语音识别。
recognizeStop()
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.recognizeStop();
iOS系统,Android系统
可提供的1.0.0及更高版本
取消本次会话。
recognizeCancel()
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.recognizeCancel();
iOS系统,Android系统
可提供的1.0.0及更高版本
语音识别是否正在录音
recogizeListening(callback(ret))
ret:
{
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及更高版本
音频文件的写入
fileIdentify({params}, callback(ret))
filePath:
ret:
{
status:true //布尔类型;操作成功状态值,true|false
string:'' //字符串类型;识别转换后的文字
}
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.fileIdentify(function(ret) {
if (ret.status) {
api.alert({ msg: "开始成功"});
} else {
api.alert({ msg: "开始失败"});
}
});
iOS系统
可提供的1.0.0及更高版本
语音朗读配置
readConfig({params}, callback(ret))
config:
{
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:小莹-女青、中、陕西话
//vixx:小新-男童、中、普通话
//vinn:楠楠-女童、中、普通话
//vils:老孙-男老、中、普通话
}
ret:
{
status:true //布尔类型;操作成功状态值,true|false
}
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.readConfig({
config:{
speed: '50',
volume: '50',
pitch: '50',
rate: '16000',
voice: 'xiaoyan'
}
}, function(ret) {
if (ret.status) {
api.alert({ msg: '配置成功' });
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
开始合成(播放), 调用此函数进行合成,如果发生错误会回调错误 addEventListener readComplete
,合成的文本的最大的字节数为1k
recognizeStart({params})
audioFileName:
readString:
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.startRead({
audioFileName: '123.pcm',
readString: 'hello 柚子'
});
iOS系统,Android系统
可提供的1.0.0及更高版本
开始合成(不播放), 调用此函数进行合成,如果发生错误会回调错误 addEventListener readComplete
,合成的文本的最大的字节数为1k
startSynthesize({params})
audioFileName:
readString:
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.startSynthesize({
audioFileName: '123.pcm',
readString: 'hello 柚子'
});
iOS系统,Android系统
可提供的1.0.0及更高版本
暂停播放之后,合成不会暂停,仍会继续,如果发生错误则会回调错误addEventListener readComplete
,
pauseRead()
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.pauseRead();
iOS系统,Android系统
可提供的1.0.0及更高版本
恢复播放
resumeRead()
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.resumeRead();
iOS系统,Android系统
可提供的1.0.0及更高版本
停止播放
stopRead()
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.stopRead();
iOS系统,Android系统
可提供的1.0.0及更高版本
识别正在语音识别录音
isReading(callback(ret))
ret:
{
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({params},callback(ret))
ios_wordPath:
android_wordPath:
continue:
threshold:
ret:
{
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(callback(ret))
ret:
{
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及更高版本
语音唤醒停止,注意与cancel的区别,紧紧停止服务,并不释放资源
wakeupStop(callback(ret))
ret:
{
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(callback(ret))
ret:
{
status:true //布尔类型;操作成功状态值,true|false
}
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.wakeupCancel(function(ret){
if (ret.status) {
api.alert({ msg: '取消成功'});
} else {
api.alert({ msg: "取消失败" });
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
语音唤醒是否正在录音
wakeupIsListening(callback(ret))
ret:
{
listening:true //布尔类型;是否正在录音,true|false
}
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.wakeupIsListening(function(ret){
if (ret.listening) {
api.alert({ msg: '正在录音'});
} else {
api.alert({ msg: "没有正在录音" });
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
添加监听
addEventListener({params},callback(ret))
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:
ret:
{
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({params},callback(ret))
name:
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.removeEventListener({
name: 'wakeupResult'
});
iOS系统,Android系统
可提供的1.0.0及更高版本
添加音量大小指示器,
当使用语音唤醒、语音识别功能时,会涉及到录音功能。
可通过本接口在界面上添加一个音量指示器,实时显示录音音量大小。
如下图(67*35)所示:
addHUD({params}, callBack(ret, err))
center:
{
x: , //(可选项)数字类型;x坐标;默认:40
y: //(可选项)数字类型;y坐标:默认:20
}
alphas:
gradientColors:
[{
top: '#5f42c8', //(可选项)字符串类型;指示条顶部色值,支持rgb、rgba、#;默认:#5f42c8
bottom: '#ff4e00' //(可选项)字符串类型;指示条底部色值,支持rgb、rgba、#;默认:#ff4e00
}]
orientation:
target:
bg:
fixedOn:
fixed:
ret:
{
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及更高版本
显示音量大小指示器
showRecordHUD({params})
id:
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.showHUD({
id: '1'
});
iOS系统,Android系统
可提供的1.0.0及更高版本
隐藏音量指示器
hideHUD({params})
id:
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.hideHUD({
id: '1'
});
iOS系统,Android系统
可提供的1.0.0及更高版本
关闭音量指示器
closeHUD({params})
id:
var voiceRecognizer = api.require('voiceRecognizer');
voiceRecognizer.closeHUD({
id: '1'
});
iOS系统,Android系统
可提供的1.0.0及更高版本