更新记录
1.0.1(2022-11-25)
1.支持Android端的Websocket实时语音识别 2.支持iOS端的Websocket实时语音识别 4.只支持Websocket方式的实时语音识别
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.1 - 10.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 14 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
注意:使用本插件一定要认证阅读说明
插件说明
- 支持Android端的Websocket实时语音识别
- 支持iOS端的Websocket实时语音识别
- 只支持Websocket方式的实时语音识别
- 拓展对接第三方语音技术厂商的Websocket实时语音识别(在uni-app Speech模块不满足使用时)
- 使用本插件时需要第三方语音技术厂商提供Websocket服务地址、appid、appkey等
- 使用本插件详细参考示例项目
- 使用本插件前,建议先试用没问题再购买
插件准备
- 以百度语音为例,获取百度语音应用的appid、appkey等
- 成为开发者,并创建应用获得appid、appkey等,参考https://cloud.baidu.com/doc/SPEECH/s/qknh9i8ed
- 实时语音识别-websocket API,参考https://cloud.baidu.com/doc/SPEECH/s/2k5dllqxj
插件引入
// 引入插件
let speech = uni.requireNativePlugin('YiDian-Speech');
插件使用(这里只展示核心代码,详细参考示例项目)
// baidu:百度智慧云-语音技术-语音识别-websocket
// zhihui:智慧家庭运营中心->语音识别能力-websocket
apiChannel: 'baidu',
// 这里以百度语音为例
// 百度语音识别的参数,参考“插件准备”去申请百度语音应用的appid、appkey等
// 语音识别websockey地址
baiduUrl: 'ws://vop.baidu.com/realtime_asr',
// 语音识别的appId
baiduAppId: 2725****,
// 语音识别的appKey
baiduAppKey: 'Fb2DdyMXpe5c5ifTkP16****',
// 音频编码:pcm
format: 'pcm',
// 采样率:16000
sampleRate: 16000,
// websocket服务地址
url: '',
// 数据帧大小
frameSize: 5120,
// 开始帧鉴权json数据
startJson: '',
// 结束帧标记json数据
finishJson: '',
// 根据不同语音厂商初始化api
initApi() {
// 不同语音识别厂商的Api不同,百度语音的实时语音识别-websocket API,参考https://cloud.baidu.com/doc/SPEECH/s/2k5dllqxj
if(this.apiChannel == 'baidu') {
// 百度实时语音识别-websocket的文档: https://cloud.baidu.com/doc/SPEECH/s/2k5dllqxj
this.url = this.baiduUrl+'?sn='+uuid(true);
let startObj = {
type: 'START',
data: {
appid: this.baiduAppId,
appkey: this.baiduAppKey,
dev_pid: 15372,
cuid: 'cuid_test1',
format: this.format,
sample: this.sampleRate
}
}
let finishObj = {
type: 'FINISH'
}
this.startJson = JSON.stringify(startObj);
this.finishJson = JSON.stringify(finishObj);
}
},
// 开始语音识别。不同语音识别厂商的Api不同,百度语音的实时语音识别-websocket API,参考https://cloud.baidu.com/doc/SPEECH/s/2k5dllqxj
start() {
this.initApi();
this.starting = true;
this.text = '';
this.tempText = '';
this.task = 0;
this.taskMsg = '';
this.volume = 0;
speech.start(
{
// websocket服务地址
url: this.url,
// 数据帧大小
frameSize: this.frameSize,
// 开始帧鉴权数据
startJson: this.startJson,
// 结束帧数据
finishJson: this.finishJson
},
// 调用结果
(res) => {
/**
* code
* -1 麦克风权限被拒或options参数错
* 0 语音识别连接开始
* 1 语音识别连接成功
* 2 语音识别连接失败
* 3 语音识别连接关闭
* 4 语音识别连接异常或网络异常
*/
if(res.code == '0') {
this.task = res.task;
}
if(this.task == res.task) {
this.taskMsg = res.msg;
}
},
// 识别结果回调
(res) => {
if(this.task == res.task) {
if(this.apiChannel == 'baidu') {
let data = JSON.parse(res.text || '{}');
// 一句话的临时识别结果示例:
if(data.err_msg == 'OK' && data.type == 'MID_TEXT') {
this.tempText = data.result || '';
}
// 一句话的最终识别结果:
else if(data.err_msg == 'OK' && data.type == 'FIN_TEXT') {
this.text += data.result;
this.tempText = '';
}
}
else if(this.apiChannel == 'zhihui') {
let datd = JSON.parse(res.text || '{}');
let data = datd.data || {};
if(datd.resultCode == 200 && data.varText) {
this.tempText = data.varText || '';
}
else if(datd.resultCode == 200 && data.text) {
this.text += data.text;
this.tempText = '';
}
}
}
},
// 音量结果回调
(res) => {
if(this.task == res.task) {
this.volume = res.volume;
}
}
);
},
// 结束语音识别
stop() {
this.starting = false;
speech.stop((res) => {
});
}