微信小程序录音实现
2018-05-10 17:48
281 查看
最近在写一个小程序(原创诗词平台,名字叫作“诗人呀”)的功能,需求是需要把用户的录音记录并上传到服务器,然后调用接口来实现播放功能。
翻阅不少资料都发现小程序对wx.startRecord()接口不在维护,
注意:1.6.0 版本开始,本接口不再维护。建议使用能力更强的 wx.getRecorderManager 接口
需要使用新的接口来处理,官方文档又不符合我的需求,所以就决定自己动手来实现一下录音播放功能。
因此我们使用的使用 wx.getRecorderManager 接口:
首先使用方法获取对象
const recorderManager = wx.getRecorderManager() const innerAudioContext = wx.createInnerAudioContext()
然后写一个button来调用开始录音的方法。
//开始录音的时候 start: function () { const options = { duration: 10000,//指定录音的时长,单位 ms sampleRate: 16000,//采样率 numberOfChannels: 1,//录音通道数 encodeBitRate: 96000,//编码码率 format: 'mp3',//音频格式,有效值 aac/mp3 frameSize: 50,//指定帧大小,单位 KB } //开始录音 recorderManager.start(options); recorderManager.onStart(() => { console.log('recorder start') }); //错误回调 recorderManager.onError((res) => { console.log(res); }) },
再写一个button来调用停止录音的方法。
//停止录音 stop: function () { recorderManager.stop(); recorderManager.onStop((res) => { this.tempFilePath = res.tempFilePath; console.log('停止录音', res.tempFilePath) const { tempFilePath } = res }) },
最后写一个播放声音的方法
//播放声音 play: function () { innerAudioContext.autoplay = true innerAudioContext.src = this.tempFilePath, innerAudioContext.onPlay(() => { console.log('开始播放') }) innerAudioContext.onError((res) => { console.log(res.errMsg) console.log(res.errCode) }) },
这样就完成新API的操作了,WXML代码如下:
<button bindtap="start" class='btn'>开始录音</button> <button bindtap="stop" class='btn'>停止录音</button> <button bindtap="play" class='btn'>播放录音</button>
但是我发现点击播放根本播放不出来。这是为什么呢,路径也可以打印出来,原来小程序返回的临时路径根本无法播放,
需要通过wx.uploadFile()方法来从后台获取处理好的mp3文件来进行播放。
1. setTimeout(function () { 2. var urls = app.globalData.urls + "/Web/UpVoice"; 3. console.log(s.data.recodePath); 4. wx.uploadFile({ 5. url: urls, 6. filePath: s.data.recodePath, 7. name: 'file', 8. header: { 9. 'content-type': 'multipart/form-data' 10. }, 11. success: function (res) { 12. var str = res.data; 13. var data = JSON.parse(str); 14. if (data.states == 1) { 15. var cEditData = s.data.editData; 16. cEditData.recodeIdentity = data.identitys; 17. s.setData({ editData: cEditData }); 18. } 19. else { 20. wx.showModal({ 21. title: '提示', 22. content: data.message, 23. showCancel: false, 24. success: function (res) { 25. 26. } 27. }); 28. } 29. wx.hideToast(); 30. }, 31. fail: function (res) { 32. console.log(res); 33. wx.showModal({ 34. title: '提示', 35. content: "网络请求失败,请确保网络是否正常", 36. showCancel: false, 37. success: function (res) { 38. } 39. }); 40. wx.hideToast(); 41. } 42. });
将onStop中获取到的临时路径上传到你的服务器当中,进行处理语音识别和语义,将返回的结果放到audio播放组件中就可以播放音频了。
实现完成后的小程序部分截图如下:
如果大家对于其他非技术细节也感兴趣的话,欢迎点击此处访问。
相关文章推荐
- 答题微信小程序实现(5):大功告成,整个模板,题库导入/切换/积分/选择对错判断/闯关成功
- 微信小程序 swiper实现块滑动
- 微信小程序商品到详情的实现
- 微信小程序图片实现宽度100%,高度自适应
- ifanr:微信小程序中实现手势缩放图片
- 微信小程序留言功能实现
- 微信小程序实现客服默认自动回复功能
- 微信小程序实现支付功能
- 这篇文章给大家介绍Android开发四大组件之实现电话拦截和电话录音,涉及到android四大基本组件在程序中的应用,对android四大基本组件感兴趣的朋友可以参考下本篇文章
- 微信小程序实现锚点定位楼层跳跃的实例
- 微信小程序 弹框和模态框实现代码
- 微信小程序wx.request实现后台数据交互功能分析
- 实现微信小程序的3rd_session
- 微信小程序中实现首饰缩放图片
- 微信小程序实现折叠展开效果
- 微信小程序商城实现搜索商品功能
- 微信小程序中实现手指缩放图片的示例代码
- 微信小程序项目实践之九宫格实现及item跳转功能
- 基于angular实现模拟微信小程序swiper组件
- 微信小程序 登录的简单实现