1、概述

通过微信小程序wx.startRecord()和wx.stopRecord()接口录音并上传silk录音文件至服务器,通过ffmpeg将silk录音文件转成wav录音文件,再通过百度语音识别 REST API 获取语音识别后的结果。

2、代码实现

录音和语音文件上传

//index.js

//开始录音。当主动调用wx.stopRecord,

//或者录音超过1分钟时自动结束录音,返回录音文件的临时文件路径。

//当用户离开小程序时,此接口无法调用。

wx.startRecord({

success: function (res) {

console.log('录音成功' + JSON.stringify(res));

that.setData({

voiceButtonName: '语音识别',

voicePlayButtonName: '开始播放',

tempFilePath: res.tempFilePath

})

//上传语音文件至服务器

wx.uploadFile({

url: 'https://你的域名/upload',

filePath: res.tempFilePath,

name: 'file',

// header: {}, // 设置请求的 header

formData: {

'msg': 'voice'

}, // HTTP 请求中其他额外的 form data

success: function (res) {

// success

console.log('begin');

console.log(res.data);

var json = JSON.parse(res.data);

console.log(json.msg);

var jsonMsg = JSON.parse(json.msg);

console.log(jsonMsg.result);

wx.navigateTo({

url: '../voicePage/voicePage?voiceData=' + jsonMsg.result.join('')

})

},

fail: function (err) {

// fail

console.log(err);

},

complete: function () {

// complete

}

})

},

fail: function (res) {

//录音失败

that.setData({

voiceButtonName: '语音识别'

})

console.log('录音失败' + JSON.stringify(res));

}

})

setTimeout(function () {

//结束录音

wx.stopRecord()

}, 60000)

node.js服务端接收语音文件代码

//upload.js

//使用koa-multer这个组件

var multer = require('koa-multer');

var router = require('koa-router')();

var path = require('path');

//存储文件至path.resolve('./voice-file')路径

var upload = multer({ dest: path.resolve('./voice-file')});

router.post('/', upload.single('file'), async function (ctx, next) {

//这是就文件的具体信息

console.log(ctx.req.file);

});

silk文件转wav文件

我使用的是

silk-v3-decoder 使用方法

//upload.js

var exec = require('child_process').exec;

function silkToWav(file){

return new Promise(function (resolve, reject) {

exec('sh converter.sh ' + file + ' wav', function(err,stdout,stderr){

if(err) {

resolve({

result : false,

msg : stderr

});

} else {

//var data = JSON.parse(stdout);

console.log(stdout);

console.log(stderr);

//console.log(err);

resolve({

result : true,

msg : ''

});

}

});

});

}

百度语音识别 REST API识别wav文件

1、通过API Key和Secret Key获取的access_token

通过API Key和Secret Key获取的access_token文档

//speech.js

speech.getAccessToken = function(){

return new Promise(function (resolve, reject) {

request({

url: 'https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=(你自己的API key)&client_secret=(你自己的Secret Key)',

method: 'get',

headers: {

'content-type': 'application/json'

}

}, function (error, response, data) {

if (error){

resolve({

'result' : false,

'msg' : '出现错误: ' + JSON.stringify(error)

});

}else {

resolve({

'result' : true,

'msg' : data

});

}

});

});

}

2、通过token 调用百度语音识别 REST API识别接口

//speech.js

speech.recognize = function(base64String, size){

return new Promise(function (resolve, reject) {

request({

url: 'http://vop.baidu.com/server_api',

method: 'post',

headers: {

'content-type': 'application/json'

},

// len + speech方式

body: JSON.stringify({

"format":"wav",

"rate":16000,

"channel":1,

"token":'(你的token)',

"cuid":"9e:eb:e8:d4:67:00",

"len":size,

"speech":base64String

})

//url + callback方式

//body: JSON.stringify({

// "format":"wav",

// "rate":16000,

// "channel":1,

// "token":'(你的token)',

// "cuid":'9eebe8d46700',

// "url":'http://ihealth-wx.s1.natapp.cc/download?name=123.wav',

// "callback":'http://ihealth-wx.s1.natapp.cc/callback'

//})

}, function (error, response, data) {

if (error){

resolve({

result : false,

msg : '出现错误: ' + JSON.stringify(error)

});

}else {

resolve({

result : true,

msg : data

});

}

});

});

}

3、语音识别优化

通过上述操作后,发现识别的内容和实际内容差别很大

百度语音识别 REST API文档

查看文档可知:采样率:8000/16000 仅支持单通道

在ffmpeg里对应的设置方式分别是:

-ar rate 设置采样率

-ac channels 设置声道数

修改converter.sh文件,修改为下图所示

修改后的converter.sh文件

4、如何还不明白,怎么办?

请私信我或者下载源码

微信小程序之语音识别(附小程序+服务器源码)相关推荐

  1. 微信小游戏《飞机打方块》源码分享

    微信小游戏<飞机打方块>源码分享 游戏使用CocosCreator v2.4.2开发 源码:https://gitee.com/propertygame/cocos-creator3.x- ...

  2. 小程序语音识别+php,微信小程序之语音识别(附小程序+服务器源码)

    1.概述 通过微信小程序wx.startRecord()和wx.stopRecord()接口录音并上传silk录音文件至服务器,通过ffmpeg将silk录音文件转成wav录音文件,再通过百度语音识别 ...

  3. 棋牌微信小游戏之多人在线斗地主源码分享

    游戏说明: 这是一款多人在线的斗地主棋牌游戏,拥有随机匹配功能,有三人同时匹配即可开始游戏.游戏支持微信约战,玩家通过在微信上发送邀请信息给微信好友,好友点击信息即可进入游戏. (PS:需要自己配置自 ...

  4. 小程序源码:全网独家小程序版本独立微信社群人脉系统社群空间站最新源码开源+详细教程

    功能介绍: 1.微信社群是一个集发布.展示社群信息.人脉推广的裂变工具/平台. 2.通过人脉广场,将商家信息通过名片进行展示,让资源对接.人脉推广更加便捷高效.为平台带来更多流量,让平台更有价值. 3 ...

  5. 校园跑腿微信小程序跑腿同学带直播新版源码

    校园跑腿微信小程序跑腿同学带直播新版源码 适用类型 微信小程序 测试环境:系统环境:CentOS Linux 7.6.1810 (Core).运行环境:宝塔 Linux v7.0.3(专业版).网站环 ...

  6. 微信小程序支付功能-服务器端实现(附源码)

    实现了小程序最新的V3版本支付功能, 包括:支付.支付通知.退款.退款通知. 服务器端使用java开发,springboot框架 源码链接在评论中 微信小程序支付功能-服务器端实现(附源码)_哔哩哔哩 ...

  7. 【微信小程序控制硬件⑥ 进阶篇】服务器如何集成七牛云存储SDK,把用户自定义设备图片存储在第三方服务器!

    本博文由热爱分享热爱技术的半颗心脏原创,非官方人员.非组织名义编写,博文如有不对或侵犯您的权益,请及时留言,第一时间纠正! [微信小程序控制硬件①] 全网首发,借助 emq 消息服务器带你如何搭建微信 ...

  8. 微信小程序控制台 报错 对应的服务器证书无效 控制台输入 showRequestInfo() 可以获取更详细信息 原因是ssl证书过期 重新申请即可

    微信小程序控制台 报错 对应的服务器证书无效.控制台输入 showRequestInfo() 可以获取更详细信息 报错原因:域名下的SSL证书过期 我这边报错的原因是ssl证书过期 重新申请后就好了, ...

  9. 为什么C/C++程序员一定要阅读redis源码?腾讯面试教你做人【linux服务器开发】

    为什么C/C++程序员一定要阅读redis源码?腾讯面试教你做人[linux服务器开发] 专注于服务器后台开发,包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastd ...

最新文章

  1. linux下配置apache多站点访问-小案例
  2. 王高利:awstats
  3. 前端学PHP之文件操作
  4. TabSpec和TabHost实例
  5. Linux包系列的知识(附:Ubuntu16.04升级到18.04的案例)
  6. html 如何改变图片形状,图形变换的三种方式是什么?
  7. 【MySQL 】学习笔记千行总结
  8. php输出位置最右,php动态读取数据清除最右边距的方法
  9. Spark 性能相关参数配置详解-shuffle篇
  10. artcore html5,值得收藏的25款免费响应式网页模板_CSS_网页制作
  11. tcpdf最新版 6.2版
  12. UWP 保存用户设置
  13. 基于VUE,VUX组件开发的网易新闻页面搭建过程
  14. centos7永久修改主机名
  15. 在文华财经赢顺云W6和赢顺云手机随身行中如何导入需要的指标
  16. 中国优秀软件架构师感悟录
  17. 正则表达式匹配中文及符号、英文及符号数字空格换行符及常用正则表达式
  18. 【DSP教程】第35章 FIR有限冲击响应滤波器设计
  19. 【WINDOWS / DOS 批处理】for命令详解(八)
  20. 网络安全的威胁与解决方案

热门文章

  1. C# 很基础的那些东西
  2. Bailian4029 数字反转【进制】(POJ NOI0105-29)
  3. Bailian2690 首字母大写【字符串】
  4. Vijos P1335 数独验证【谜题】
  5. BP神经网络——从二次代价函数(Quadratic cost)到交叉熵(cross-entropy cost)代价函数
  6. Eclipse 插件管理
  7. 机器学习、深度学习经典课程
  8. matlab 文本处理
  9. 椭圆基本概念、定理及性质
  10. Python 标准库 —— fractions