2021级山软项目实训(六)——语音识别接口实现

目录

一、微信录音

二、百度语音识别


一、微信录音

        使用微信自带的录音接口进行录音。这一部分非常麻烦,因为需要向微信官方申请权限,官方那边要求特别多,经历了一而再再而三的修改和与微信小程序客服的够同,最终是成功申请下来了录音的权限。

        需要现在页面上方创建一个RecorederManager,如下:

let recorderManager = wx.getRecorderManager();

        使用其中的四个功能。

        其一是start。标志着录音从此刻开始。其中的options是录音的一些参数,我们这里将参数设置为百度语音识别接口中所要求的录音参数。

    recorderManager.start(options);

        百度语音识别要求音频文件最长时间为1分钟,采样率为16000,numberOfChannel为1,encodeBitRate为24000-64000之间,推荐为48000,音频格式为pcm等格式。Options如下:

let options = {
  duration: 60000,
  sampleRate: 16000,
  numberOfChannels: 1,
  encodeBitRate: 48000,
  format: 'pcm',
}

        其二是OnStart。其功能是监听录音开始的事件,我们这里用来显示录音是否开始,以便进行测试和调试。

    recorderManager.onStart(() => {
      console.log("Start Recording!")
    })

        其三是stop。标志着录音从此刻开始。

    recorderManager.stop();

        其四是OnStop。这个是监听录音结束事件的,会返回录音的音频临时地址TempFilePath。这个函数也是最最最最最让人无语的,因为经常性的不执行,而且还是间歇性的不执行。微信小程序开发社区中有29页反应这个问题。

        我们需要接收临时的音频地址并储存,然后得到音频文件的长度,即bit数,这是组成向百度语音识别接口传递的json文件的必须品。因此调用wx.getFileInfo得到其长度。

        完整的代码如下所示:

 stopRecord: function() {
    this.setData({
      isRecording: false,
      recordingTipVisible: false
    });
    recorderManager.stop();
    recorderManager.onStop((res) => {
      console.log("End Recording!")
      this.setData({
        tempVoicePath: res.tempFilePath
      });
      // 获取语音文件的长度
      wx.getFileInfo({
        filePath: this.data.tempVoicePath,
        success: (res) => {
            this.setData({
                VoiceLength: res.size
            })
            console.log("length", res.size)
            this.Recognize();
        },
        fail: (error) => {
          console.log("fail", error)
        }
    })
})
},

二、百度语音识别

        上一篇博客提到我们需要用Apikey和SecretKey通过百度智能云提供的接口换取token进行语音识别,我们这里不过多赘述,代码如下(Apikey和SecretKey已经码住):

// 获取token
getToken: function() {
  const url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + Apikey + '&client_secret=' + SecretKey;
  wx.request({
      url: url,
      method: 'POST',
      success: (res) => {
          console.log("access_token", res)
          this.setData({
              token: res.data.access_token
          })
      }
  })
},

        我们需要把上面得到的音频文件和音频文件的长度、采样等信息一同打包成json文件发送给百度语音识别接口,然后得到返回值。

        如果未能连接到百度语音识别的服务器或识别结果为空,我们会弹窗显示语音识别失败。

        如果成功识别我们会把识别得到的信息添加到data.msg中,由于百度这个语音识别准确性不高,因此我们的返回信息会填到输入框中,供用户进行修改。然后点击发送即可发送内容。

        代码如下:

// 获取语音识别
Recognize: function() {
  console.log("filePath: ", this.data.tempVoicePath)
  console.log("token:", this.data.token)
  console.log("VoiceLength", this.data.VoiceLength)
  wx.getFileSystemManager().readFile({
      filePath: this.data.tempVoicePath,
      encoding: 'base64',
      success: (res) => {
          wx.request({
              url: 'http://vop.baidu.com/server_api',
              data: {
                  token: this.data.token,
                  cuid: "zhaoxuhuihuixuzhao",
                  format: "pcm",
                  rate: 16000,
                  channel: 1,
                  speech: res.data,
                  len: this.data.VoiceLength
              },
              headers: {
                  'Content-Type': 'application/json'
              },
              method: "POST",
              success: (res) => {
                  if (res.data.result == '') {
                      console.log("error", res)
                      wx.showToast({
                        title: "语音识别失败",
                        icon: "error",
                        duration: 1000
                      })
                  } else {
                      console.log("test", res.data)
                      this.setData({
                          msg: res.data.result
                      })
                  }
              },
              fail: (res) => {
                  console.log("error", res)
                  wx.showToast({
                    title: "语音识别失败",
                    icon: "error",
                    duration: 1000
                  })
              }
          })
      }
  })
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值