微信小程序錄音實現
阿新 • • 發佈:2018-05-10
img ioc start 進行 網絡請求失敗 UNC 播放音頻 toa num
最近在寫一個小程序(原創詩詞平臺,名字叫作“詩人呀”)的功能,需求是需要把用戶的錄音記錄並上傳到服務器,然後調用接口來實現播放功能。
翻閱不少資料都發現小程序對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播放組件中就可以播放音頻了。
實現完成後的小程序部分截圖如下:
如果大家對於其他非技術細節也感興趣的話,歡迎點擊此處訪問。
微信小程序錄音實現