小程序语音识别Demo

2021-07-08 10:20:23 浏览数 (2)

首先引入小程序语音识别插件

代码语言:javascript复制
let plugin = requirePlugin("WechatSI")
let manager = plugin.getRecordRecognitionManager()

然后在wxml中设置对应的方法

代码语言:javascript复制
 <i-icon type="translation_fill" catchtouchstart="streamRecord" catchtouchend="endStreamRecord" size="28" color="#3176F7" />

最后在js中写对应的逻辑

首先在onLoad中初始化

代码语言:javascript复制
onLoad(option) {
    this.initRecord();
}

然后定义对应的方法及逻辑

代码语言:javascript复制
  //语音识别
  streamRecord() {
    manager.start({
      lang: 'zh_CN',
    })
  },

  endStreamRecord() {
    manager.stop()
  },
  initRecord() {
    //有新的识别内容返回,则会调用此事件
    manager.onRecognize = (res) => {
      let text = res.result
      console.log('onRecognize',text)
      switch (this.data.speechType) {
        case '1':
          this.setData({
            'infoFrom.damageAddress': text,
          })
          break;
        case '2':
          this.setData({
            'infoFrom.surveySite': text,
          })
          break;
        case '3':
          this.setData({
            'infoFrom.context': text,
          })
          break;
      }

    }
    // 识别开始事件
    manager.onStart = (res) => {
      console.log("成功开始录音识别", res)
    }

    // 识别结束事件
    manager.onStop = (res) => {
      let text = res.result
      if (text == '') {
        // 用户没有说话,可以做一下提示处理...
        return
      }
      console.log(text)
      console.log('onStop',text)
      switch (this.data.speechType) {
        case '1':
          this.setData({
            'infoFrom.damageAddress': text,
          })
          break;
        case '2':
          this.setData({
            'infoFrom.surveySite': text,
          })
          break;
        case '3':
          this.setData({
            'infoFrom.context': text,
          })
          break;
      }
      // 得到完整识别内容就可以去翻译了
      // this.translateTextAction()
    }
  },

translateTextAction() {
    const lfrom = 'zh_CN'
    const lto = 'en_US'
    plugin.translate({
      lfrom: lfrom,
      lto: lto,
      content: this.data.context,
      tts: true, // 需要合成语音
      success: (resTrans) => {
        // 翻译可以得到 翻译文本,翻译文本的合成语音,合成语音的过期时间
        let text = resTrans.result
        this.setData({
          translateText: text
        })
        // 得到合成语音让它自动播放出来
        wx.playBackgroundAudio({
          dataUrl: resTrans.filename,
          title: '',
        })
      },
    })
    wx.startRecord({
      success: e => {
        wx.qy.translateVoice({
          filePath: e.tempFilePath,
          success: (res) => {
            this.setData({
              context: res.translateResult,
            })
          }
        })
      }
    })
  },

0 人点赞