uniapp实现语音输入功能(微信小程序、H5)

前言

近期使用uniapp做了一个社区项目,要求兼容微信小程序和h5页面,其中有一个需求需要使用语音输入事件描述(转成文字,该事件描述也可以进行填写)。因为没有接第三方语音,所以只能找别的方法实现具体功能。

微信小程序的实现方法

主要使用微信小程序第三方插件“WechatSI(微信同声传译)”实现语音识别功能。

  1. 进入微信小程序管理后台,在设置下的第三方设置的插件管理去添加插件"微信同声传译"
  2. 在项目中的manifest.json文件配置插件,填写该插件的版本号和appId(都可以在插件的详情中找到)

image.png

  1. 在实现语音识别功能的页面引入该插件

image.png

注:因为语音输入功能,小程序和h5是分开实现,所以使用了条件编译指令实现各自的代码

  1. 在页面写了一个录音的按钮,并添加相应事件

image.png

/**  
* 初始化语音识别回调  需要再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文件,并在页面调用相关事件

image.png

//需要再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()
},			
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务