uniapp实现语音输入功能(微信小程序、H5)
前言
近期使用uniapp做了一个社区项目,要求兼容微信小程序和h5页面,其中有一个需求需要使用语音输入事件描述(转成文字,该事件描述也可以进行填写)。因为没有接第三方语音,所以只能找别的方法实现具体功能。
微信小程序的实现方法
主要使用微信小程序第三方插件“WechatSI(微信同声传译)”实现语音识别功能。
- 进入微信小程序管理后台,在设置下的第三方设置的插件管理去添加插件"微信同声传译"
- 在项目中的
manifest.json
文件配置插件,填写该插件的版本号和appId(都可以在插件的详情中找到)
- 在实现语音识别功能的页面引入该插件
注:因为语音输入功能,小程序和h5是分开实现,所以使用了条件编译指令实现各自的代码
- 在页面写了一个录音的按钮,并添加相应事件
/**
* 初始化语音识别回调 需要再onLoad()函数中调用
*/
initRecord: function() {
manager.onStart = res => {
this.formData.words = "正在录音"
};
//有新的识别内容返回,则会调用此事件
manager.onRecognize = (res) => {
this.formData.words = res.result;
}
// 识别结束事件
manager.onStop = (res) => {
this.formData.words = res.result;
}
},
startRecord: function() {
manager.start({
duration: 60000,
lang: "zh_CN"
});
},
stopRecord: function() {
manager.stop();
},
H5页面的实现方法
原本一开始使用浏览器原生的Web Speech API(SpeechRecognition接口)接收语音输入并将其转换为文本,但是弄出来始终会报错"Error occurred in recognition: network”(网络连接问题),打包放到线上也会出现此问题,也没找到方法解决,就放弃使用该方法了
后面在网上找到使用迅飞语音听写(流式版)WebAPI实现语音转文字的方法
注:此接口是免费的,只能转1分钟内的语音,每天使用次数也有限制;并且需要去迅飞开放平台注册账户(只限新用户),创建应用拿到迅飞语音听写(流式版)WebAPI服务接口认证信息,分别是appId、apiKey、 apiSecret参数。感觉也不太好,果然还是使用第三方正式的语音API比较好。
引入需要的js文件,并在页面调用相关事件
//需要再onLoad()函数中调用
initRecord() {
let _this = this;
_this.voice = new Voice({
appId: '',
apiSecret: '',
apiKey: '',
onTextChange: function(text) {
//监听识别结果的变化
_this.formData.words = text;
}
});
},
startRecord() {
this.voice.start()
},
stopRecord() {
this.voice.stop()
},