前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云智能语音小程序插件实现实时语音识别

腾讯云智能语音小程序插件实现实时语音识别

原创
作者头像
张世强
修改2021-09-24 12:44:05
18.3K3
修改2021-09-24 12:44:05
举报
文章被收录于专栏:zhang

1.项目需求

通过腾讯云语音识别官方提供的小程序插件时间实时语音识别

2.项目准备

前往注册

  • 微信开发者工具

前往下载

  • 腾讯云语音识别小程序插件文档

参考文档

3.项目实践

  • 新建项目
  • 在小程序管理后台添加插件:小程序开发者可在“小程序管理后台-设置-第三方服务-插件管理”中搜索"wx3e17776051baf153",并申请使用。

注意:此插件需要小程序的基础库版本在>= 2.10.0,可以通过如下方式查看您当前的小程序基础库版本

  • 参考如下文档引入腾讯云智能语音小程序插件

https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx3e17776051baf153&token=&lang=zh_CN

"plugins": { "QCloudAIVoice": { "version": "1.2.4", "provider": "wx3e17776051baf153" } },

  • 配置页面
代码语言:javascript
复制
 "pages/pl/pl",

编译生成页面

实现页面Demo

pl.js

代码语言:javascript
复制
// pages/pl/pl.js
const recorderManager = wx.getRecorderManager()  // 获取全局唯一的录音管理器 RecorderManager
const innerAudioContext = wx.createInnerAudioContext()  // 创建内部 audio 上下文 InnerAudioContext 对象。
let plugin = requirePlugin("QCloudAIVoice");  //引入语音识别插件
plugin.setQCloudSecret(1251123904, "AKIDa0CKPR3IE4nPs6T4oKacS3gGnFX?????", "?????7Zlxuc5JI2XnnWyA5k8HF2YooXz", true);//设置腾讯云账号信息,其中appid是数字,secret是字符串,openConsole是布尔值(true/false),为控制台打印日志开关
let manager = plugin.getRecordRecognitionManager();  //获取全局唯一的语音识别管理器
var init  // 声明一个全局变量,let为局部变量
Page({  // 使用Page函数作为Page构造器来注册一个页面
  /**
   * 页面的初始数据
   */
  data: {
    time: 0, // 初始时间
    duration: 600000, // 录音时长为10分钟
    status: 0,  // 语音识别管理器的状态:1为开始,2为停止,
    voiceData:"" ,//语音识别阶段数据,
    resultNumber:1,//识别结果的段数
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    manager.onStart((res) => {
      console.log('recorder start', res.msg);
      this.setData({
        status: 1 // 录音识别开始状态为1
      })
})
manager.onStop((res) => {
      console.log('recorder stop', res.tempFilePath);
      clearInterval(init) // 取消之前的计时
      this.setData({
        status: 2 //录音识别结束后标记状态为2
      })
})
manager.onError((res) => {
      console.log('recorder error', res.errMsg); // 打印录音识别错误信息
})
  },
  /**开始录音并识别 */
  start: function() {
    var that=this
    clearInterval(init) // 取消之前的计时
    this.timeCounter()  // 开始计时
    //开始识别
    manager.start({
      duration:this.data.duration, 
      engine_model_type: '16k_zh',
      // 以下为非必填参数,可跟据业务自行修改
      // hotword_id = '08003a00000000000000000000000000',
      // filter_dirty = 0,
      // filter_modal = 0,
      // filter_punc = 0,
      // convert_num_mode = 0,
      // needvad = 1
      });
    //获取识别内容
    manager.onRecognize((res) => {
      if(res.result || res.resList){
          console.log("识别结果", res.result);
          that.setData({
                    Words: res.result,
            })
      }else if(res.errMsg){
          console.log("recognize error", res.errMsg);
      }
})
  },
  /**
   * 停止识别
   */
  stop: function() {
    manager.stop();
  },
  /**
   * 继续识别
   */
  continue: function() {
    manager.start({
      duration:30000, 
      engine_model_type: '16k_zh',
      // 以下为非必填参数,可跟据业务自行修改
      // hotword_id = '08003a00000000000000000000000000',
      // filter_dirty = 0,
      // filter_modal = 0,
      // filter_punc = 0,
      // convert_num_mode = 0,
      // needvad = 1
      });
  },  
  timeCounter: function(time) {  // 定义一个计时器函数
    var that = this
    if (time == undefined) {
   
      init = setInterval(function() { // 设定一个计时器ID。按照指定的周期(以毫秒计)来执行注册的回调函数
        var time = that.data.time + 1; // 每秒钟计时+1
        that.setData({
          time: time
        })
      }, 1000);
    } else {
      clearInterval(init) // 取消计时
      console.log("暂停计时")
    }
  },
})

pl.wxml

代码语言:javascript
复制
<!--pages/pl/pl.wxml-->
<view class="REC">
  <view class="time">{{status==0?'录音时长':(status==3?'录音结束':'录音中')}}:{{time}} 秒 ({{duration/1000}}秒)</view>
  <view class="rin">
  </view>
  <view class="anniu">
    <view class="{{status==0?'highlight':'gray'}}" bindtap="start" hover-class="skip">录音识别</view>
    <view class="{{status==1?'highlight':'gray'}}" bindtap="stop" hover-class="skip">停止识别</view>
    <view class="{{status==2?'highlight':'gray'}}" bindtap="continue" hover-class="skip">继续识别</view>
  </view>
   <view class="progress">
    <progress percent="{{time*(100/(duration/1000))}}"  stroke-width="10" backgroundColor="#fff" border-radius="15" stroke-width="4" color="#7FFF00" active />
  </view>
</view>
<view class=".REC">
  <textarea placeholder="录音完成后点击识别可将音频转文字" auto-focus value="{{ Words }}" />
</view>

pl.wxss

代码语言:javascript
复制
/* pages/pl/pl.wxss */
.REC {
  border-radius: 50rpx;
  background-color: rgb( 199,237,204 );
  padding: 6rpx 0rpx;
  margin: 15rpx 35rpx;
}

.rin {
  justify-content: space-between;
  align-items: center;
  margin: 0rpx 120rpx;
  display: flex;
}

.rin .show {
  background-color: rgb(178, 228, 228);
  padding: 15rpx;
  width: 210rpx;
  border: 5rpx solid rgb(127, 204, 214);
  border-radius: 20rpx;
  font-size: 28rpx;
  display: flex;
  justify-content: center;
  align-items: center;
}

.rin .hide {
  padding: 15rpx;
  align-items: center;
  border-radius: 20rpx;
  display: flex;
  width: 215rpx;
  font-size: 28rpx;
  justify-content: center;
  border: 5rpx solid #eee;
  pointer-events: none;
  background-color: rgba(137, 190, 178, 0.445);
}

.time {
  text-align: center;
  line-height: 75rpx;
  font-size: 28rpx; 
}

.progress {
  margin: 25rpx;
}

.play {
  margin: 0rpx 25rpx;
}

.content {
  line-height: 60rpx;
  font-size: 28rpx;
  display: flex;
  justify-content: center;
}

.anniu {
  display: flex;
  margin: 10rpx 50rpx;
  justify-content: space-between;
}

.highlight {
  display: flex;
  font-size: 18rpx;
  width: 80rpx;
  height: 80rpx;
  justify-content: center;
  border-radius: 50%;
  align-items: center;
  background-color: rgb(107, 194, 53);
  border: 5rpx solid rgb(127, 204, 214);
}

.skip {
  transform: scale(0.9);
}



.anniu .gray {
  pointer-events: none;
  background-color: rgba(137, 190, 178, 0.445);
  display: flex;
  width: 80rpx;
  height: 80rpx;
  font-size: 18rpx;
  justify-content: center;
  align-items: center;
  border-radius: 50%;
  border: 5rpx solid rgb(241, 244, 245); 
}

pl.json

代码语言:javascript
复制
{
  "navigationBarTitleText": "实时语音识别在线测试",
  "backgroundColor": "#eeeeee"
}
  • 编译-预览-真机扫码测试效果

注:项目源码见附件

备注:此Demo演示的是HTTP协议的封装插件,最新的Websocket插件使用请参考文档 https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx3e17776051baf153&token=&lang=zh_CN

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.项目需求
  • 2.项目准备
  • 3.项目实践
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档