微信小程序和百度的语音识别接口详解


Posted in Javascript onMay 06, 2019

介绍

因为项目需要,使用到了微信小程序和百度的语音接口 现在将项目中的一个小模块拿出来单独分享.

技术关键字

  1. 微微信小程序
  2. 百度语音接口
  3. nodejs,express
  4. fluent-ffmegp

环境

  1. windows 10
  2. vs code 1.20.1
  3. 微信小程序开发工具 1.02.1802270
  4. 花生壳-提供域名和内容穿透-用于方便本地远程调试微信小程序

考虑到业务并不复杂,所以就将所有的代码都放在一个页面就可以了(wxml,wxss,js统称为一个页面)

文件目录

微信小程序和百度的语音识别接口详解

页面

微信小程序和百度的语音识别接口详解

index.wxml

<button type='default' bindtouchstart='startrecorderHandel' bindtouchend="sendrecorderHandel">开始8录音</button>
<view>
 你说的话是:
 <view>
 {{msg}}
 </view>
</view>

index.js

// 录音对象
const recorderManager = wx.getRecorderManager();

function sendRecord(src) {
 var obj = {
 // 已经在花生壳中映射到本地端口-3001 
 url: "http://xxx:34306/post",
 filePath: src,
 name: "fffile",
 header: {
  'Content-Type': 'application/json'
 },
 success: function (result) {
  var data = JSON.parse(result.data);
  // msg 为最终语音识别的字符串
  var msg = data.result;
  // 获取当前页面对象
  var page = getCurrentPages()[0];
  page.setData({ msg: msg });
 },
 fail: function (err) {
  console.log(err);
 }
 };
 wx.uploadFile(obj)
}

// 结束录音的时候触发 
recorderManager.onStop((res) => {
 // 获取文件路径-提交到后台-后台发送到百度
 sendRecord(res.tempFilePath);
})

recorderManager.onError((res) => {
 console.log("error", res);
});

Page({

 /**
 * 页面的初始数据
 */
 data: {
 msg: ""
 },
 // 按下按钮的时候触发
 startrecorderHandel() {
 // 开始录音
 recorderManager.start({
 });
 },
 // 松开按钮的时候触发-发送录音
 sendrecorderHandel() {
 // 结束录音
 recorderManager.stop();
 },

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 wx.authorize({
  scope: 'record'
 })
 }
})

后台nodejs接口文件目录

微信小程序和百度的语音识别接口详解

index.js

var express = require('express');
var app = express();
var fs = require('fs');
var Multiparty = require('multiparty');
// 转码工具
var ffmpeg = require('fluent-ffmpeg');
var AipSpeechClient = require("baidu-aip-sdk").speech;

// #region 创建百度授权 
// 设置APPID/AK/SK
var APP_ID = "xxx";
var API_KEY = "xxx";
var SECRET_KEY = "xxx";

// 百度请求对象
var client = new AipSpeechClient(APP_ID, API_KEY, SECRET_KEY);


// 新建一个对象,建议只保存一个对象调用服务接口
app.post('/post', function (req, res, next) {
 //生成multiparty对象,并配置上传目标路径
 var form = new Multiparty.Form({
 uploadDir: 'uploads/'
 });
 //上传完成后处理
 form.parse(req, function (err, fields, files) {
 var filesTemp = JSON.stringify(files, null, 2);
 var inputFile = files.fffile[0];
 var uploadedPath = inputFile.path;
 var command = ffmpeg();
 command.addInput(uploadedPath)
  // 将1.aac 变为1.wav
  .save(uploadedPath.slice(0, -3) + "wav")
  .on('error', function (err) {
  console.log(err);
  })
  .on('end', function () {
  // 将录音文件转为buffer
  var voice = fs.readFileSync(uploadedPath.slice(0, -3) + "wav");
  var voiceBuffer = new Buffer(voice);

  // 发送buffer到百度接口 返回语音对应的字符串
  client.recognize(voiceBuffer, 'wav', 16000).then(function (result) {
   console.log('<recognize>: ' + JSON.stringify(result));
   res.end(JSON.stringify(result));
  }, function (err) {
   console.log(err);
  });
  });
 });
});
var server = app.listen(3001, function () {
 var host = server.address().address;
 var port = server.address().port;
 console.log('Example app listening at http://%s:%s', host, port);
});

启动

下载项目

git clone https://github.com/itcastWsy/wx_baidu.git

使用微信小程序打开 微信前台 目录

配置 后台的接口地址

微信小程序和百度的语音识别接口详解

打开 微信nodejs后台 后台文件夹

输入 npm i 安装依赖

输入 命令 启动项目 npm run start

微信小程序和百度的语音识别接口详解

手机微信扫一扫小程序 - 语音输入 “大吉大利”

微信小程序和百度的语音识别接口详解

注意事项

当使用微信开发工具 发送的语音文件的格式是 aac,但是使用手机微信发送的格式是 m4a 这里直接处理的是m4a 转码工具是ffmpeg

关于花生壳,如果不使用也可以,只不过需要自己代码提交到有外网域名的服务器上接口,注意 开发阶段需要打开小程序开发工具内的 不校验安全域名….的选项

微信小程序和百度的语音识别接口详解

当调用百度接口的时候,需要填写上自己的相关信息

微信小程序和百度的语音识别接口详解

以上所述是小编给大家介绍的微信小程序和百度的语音识别接口详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery拖动插件(jquery.drag)使用介绍
Jun 18 Javascript
js导出格式化的excel 实例方法
Jul 17 Javascript
使用 Node.js 做 Function Test实现方法
Oct 25 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
Feb 27 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
JS加载iFrame出现空白问题的解决办法
May 13 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
layer关闭当前窗口页面以及确认取消按钮的方法
Sep 09 Javascript
微信小程序实现星级评价
Nov 20 Javascript
js实现全选和全不选功能
Jul 28 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 #Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
May 06 #Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 #Javascript
JavaScript中关于base64的一些事
May 06 #Javascript
JavaScript中工厂函数与构造函数示例详解
May 06 #Javascript
微信小程序登录数据解密及状态维持实例详解
May 06 #Javascript
一文了解Vue中的nextTick
May 06 #Javascript
You might like
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
常用python数据类型转换函数总结
2014/03/11 Python
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
python构建自定义回调函数详解
2017/06/20 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
美国知名生活购物网站:Goop
2017/11/03 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
销售行政专员职责
2014/01/03 职场文书
职业规划书如何设计?
2014/01/09 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
大学生团员个人总结
2015/02/14 职场文书
辩论赛新闻稿
2015/07/17 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
CSS基础详解
2021/10/16 HTML / CSS