1、概述通过微信小程序wx.startRecord()和wx.stopRecord()接口录音并上传silk录音文件至服务器,通过ffmpeg将silk录音文件转成wav录音文件,再通过百度语音识别 REST API 获取语音识 ...
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将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