经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » 微信小程序 » 查看文章
微信小程序和百度的语音识别接口详解
来源:jb51  时间:2019/5/7 8:31:15  对本文有异议

介绍

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

技术关键字

  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

  1. <button type='default' bindtouchstart='startrecorderHandel' bindtouchend="sendrecorderHandel">开始8录音</button>
  2. <view>
  3. 你说的话是:
  4. <view>
  5. {{msg}}
  6. </view>
  7. </view>

index.js

  1. // 录音对象
  2. const recorderManager = wx.getRecorderManager();
  3.  
  4. function sendRecord(src) {
  5. var obj = {
  6. // 已经在花生壳中映射到本地端口-3001
  7. url: "http://xxx:34306/post",
  8. filePath: src,
  9. name: "fffile",
  10. header: {
  11. 'Content-Type': 'application/json'
  12. },
  13. success: function (result) {
  14. var data = JSON.parse(result.data);
  15. // msg 为最终语音识别的字符串
  16. var msg = data.result;
  17. // 获取当前页面对象
  18. var page = getCurrentPages()[0];
  19. page.setData({ msg: msg });
  20. },
  21. fail: function (err) {
  22. console.log(err);
  23. }
  24. };
  25. wx.uploadFile(obj)
  26. }
  27.  
  28. // 结束录音的时候触发
  29. recorderManager.onStop((res) => {
  30. // 获取文件路径-提交到后台-后台发送到百度
  31. sendRecord(res.tempFilePath);
  32. })
  33.  
  34. recorderManager.onError((res) => {
  35. console.log("error", res);
  36. });
  37.  
  38. Page({
  39.  
  40. /**
  41. * 页面的初始数据
  42. */
  43. data: {
  44. msg: ""
  45. },
  46. // 按下按钮的时候触发
  47. startrecorderHandel() {
  48. // 开始录音
  49. recorderManager.start({
  50. });
  51. },
  52. // 松开按钮的时候触发-发送录音
  53. sendrecorderHandel() {
  54. // 结束录音
  55. recorderManager.stop();
  56. },
  57.  
  58. /**
  59. * 生命周期函数--监听页面加载
  60. */
  61. onLoad: function (options) {
  62. wx.authorize({
  63. scope: 'record'
  64. })
  65. }
  66. })

后台nodejs接口文件目录

index.js

  1. var express = require('express');
  2. var app = express();
  3. var fs = require('fs');
  4. var Multiparty = require('multiparty');
  5. // 转码工具
  6. var ffmpeg = require('fluent-ffmpeg');
  7. var AipSpeechClient = require("baidu-aip-sdk").speech;
  8.  
  9. // #region 创建百度授权
  10. // 设置APPID/AK/SK
  11. var APP_ID = "xxx";
  12. var API_KEY = "xxx";
  13. var SECRET_KEY = "xxx";
  14.  
  15. // 百度请求对象
  16. var client = new AipSpeechClient(APP_ID, API_KEY, SECRET_KEY);
  17.  
  18.  
  19. // 新建一个对象,建议只保存一个对象调用服务接口
  20. app.post('/post', function (req, res, next) {
  21. //生成multiparty对象,并配置上传目标路径
  22. var form = new Multiparty.Form({
  23. uploadDir: 'uploads/'
  24. });
  25. //上传完成后处理
  26. form.parse(req, function (err, fields, files) {
  27. var filesTemp = JSON.stringify(files, null, 2);
  28. var inputFile = files.fffile[0];
  29. var uploadedPath = inputFile.path;
  30. var command = ffmpeg();
  31. command.addInput(uploadedPath)
  32. // 将1.aac 变为1.wav
  33. .save(uploadedPath.slice(0, -3) + "wav")
  34. .on('error', function (err) {
  35. console.log(err);
  36. })
  37. .on('end', function () {
  38. // 将录音文件转为buffer
  39. var voice = fs.readFileSync(uploadedPath.slice(0, -3) + "wav");
  40. var voiceBuffer = new Buffer(voice);
  41.  
  42. // 发送buffer到百度接口 返回语音对应的字符串
  43. client.recognize(voiceBuffer, 'wav', 16000).then(function (result) {
  44. console.log('<recognize>: ' + JSON.stringify(result));
  45. res.end(JSON.stringify(result));
  46. }, function (err) {
  47. console.log(err);
  48. });
  49. });
  50. });
  51. });
  52. var server = app.listen(3001, function () {
  53. var host = server.address().address;
  54. var port = server.address().port;
  55. console.log('Example app listening at http://%s:%s', host, port);
  56. });

启动

下载项目

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

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

配置 后台的接口地址

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

输入 npm i 安装依赖

输入 命令 启动项目 npm run start

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

注意事项

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

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

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号