小程序上对接阿里的语音识别

2021/7/30 20:37:31

本文主要是介绍小程序上对接阿里的语音识别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

通过查询阿里官方文档,《实时语音识别》需要通过服务器中转实现,这里希望简单一点,直接客户端搞定,然后确定使用《一句话识别》中的RESTful API的方式。

实现语音识别分以下几个步骤:

1、小程序录音生成临时录音文件(阿里识别要求pcm编码);

音频格式:PCM编码、16bit采样位数、单声道(mono)。

音频采样率:8000Hz/16000Hz。


//参数
format: 音频编码格式。支持格式:PCM/OPUS。默认:PCM。

2、连接阿里服务器,把录音文件作为请求参数,返回识别的文字;

3、清除临时文件。

实现

1、生成录音文件

首先想到的是wx.startRecord,但是测试发现生成的是silk文件,还需要转换,放弃。

然后微信还提供了另一个录音的api:wx.getRecorderManager(),支持直接录制pcm格式

 于是:

 /**
     * 开始录音
     */

_startRecord(){
      console.log(TAG_NAME, '_startRecord')
      const options = {
        duration: 60000, //指定录音的时长,单位 ms,最大为10分钟(600000),默认为1分钟(60000)
        sampleRate: 16000, //采样率
        numberOfChannels: 1, //录音通道数
        encodeBitRate: 96000, //编码码率
        format: 'pcm', //音频格式,有效值 aac/mp3
        frameSize: 50, //指定帧大小,单位 KB
      }
      //开始录音计时
      //that.recordingTimer();
      //开始录音
      recorderManager.start(options);
      recorderManager.onStart(() => {
        console.log(TAG_NAME, '...recorderManager onStart...')
      });
      //错误回调
      recorderManager.onError((res) => {
        console.log(TAG_NAME, res);
      })
    }

结束录音后,开启语音识别:

/**
     * 结束录音
     */
    _stopRecord(){
      console.log(TAG_NAME, '_stopRecord')
      recorderManager.stop();
      recorderManager.onStop((res) => {
        console.log(TAG_NAME, '...recorderManager onStop...', res.tempFilePath)
        this.setData({tempAudioFilePath: res.tempFilePath})
        //结束录音计时
        //clearInterval(that.data.setInter);

        //开始asr语音识别
        this._startAsr()
      })
    }

识别比较简单:

先获取token,然后

wx.request({
          url: app.globalData.aliAsrServerUrl,
          method: 'POST',
          header:{
            'X-NLS-Token':tokenData.token,
            'Content-type':'application/octet-stream',
            'Host':'nls-gateway.cn-shanghai.aliyuncs.com'
          },
          data: fs.readFileSync(audioFilePath),
          success: (res) =>{
            console.log(TAG_NAME, 'asr success:', res)
            //删除临时文件
            fs.removeSavedFile()
            wx.showToast({
              icon: 'none',
              title: res.data.result,
            })
            this.setData({messageContent: res.data.result})
            this._chat()
          },
          fail: (res) =>{
            console.error(TAG_NAME, 'asr fail:', res)
          }
        })

搞定。

参考资料

https://www.cnblogs.com/westwin/p/11277449.html



这篇关于小程序上对接阿里的语音识别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程