小程序中提供了兩種錄音的API,wx.startRecord和wx.getRecorderManager(),前一個(gè)現(xiàn)在微信團(tuán)隊(duì)已經(jīng)不再維護(hù),所以在這里寫一下新的錄音管理,比之前要強(qiáng)大
基礎(chǔ)庫(kù) 1.6.0 開始支持,低版本需做兼容處理,獲取全局唯一的錄音管理器 recorderManager。
// 錄音管理
let record = function (recorderManager) {
this.recorderManager = recorderManager
this.recordStart()
}
record.prototype = {
// 開始錄音
start: function (startObj) {
this.recorderManager.start(startObj)
},
//錄音開始事件
recordStart: function () {
this.recorderManager.onStart(() => {
console.log(this.recorderManager, 'this.recorderManager')
})
}
}
//錄音管理,new 出 第二階段的實(shí)例
recorderManager = wx.getRecorderManager()
that.newRecord = new record(recorderManager)
that.newRecord.recorderManager.onStop((res) => {
console.log(res, '獲取錄制完的鏈接')
})
//播放錄音
innerAudioContext = wx.createInnerAudioContext()
innerAudioContext.onEnded(() => {
console.log("音頻自然播放結(jié)束")
})
startRecord() {
let that = this,
startObj = {
duration: 60000,
sampleRate: 44100,
numberOfChannels: 1,
encodeBitRate: 192000,
format: 'mp3',
frameSize: 50
}
//錄音開始
that.newRecord.start(startObj)
// 錄音計(jì)時(shí)器
recordTimeInterval = setInterval(function () {
}, 1000)
},
stopRecord() {
clearInterval(recordTimeInterval);
//停止錄音事件
this.newRecord.recorderManager.stop()
}
// 播放錄音
playVoice(e) {
let that = this
let srcPath = e.currentTarget.dataset.temppath, // 點(diǎn)擊當(dāng)前傳遞的播放鏈接
duration = e.currentTarget.dataset.duration, // 錄音時(shí)間
index = e.currentTarget.dataset.index // 索引
checkArr[index] = srcPath //用于頁(yè)面判斷播放一個(gè),另一個(gè)暫停
// 播放
innerAudioContext.obeyMuteSwitch = false
innerAudioContext.src = srcPath
innerAudioContext.play()
// 時(shí)間減少器
playTimeInterval = setInterval(() => {
let playTime = that.data.playTime += 1
}, 1000)
}
// 停止播放
stopVoice(forIndex, e) {
let index;
e !== undefined ? index = e.currentTarget.dataset.index : index = forIndex
clearInterval(playTimeInterval)
checkArr[index] = undefined
innerAudioContext.stop()
}
// 只能播放一個(gè)
onePlayFor(tempFilePath, src) {
tempFilePath.forEach((el, i) => {
if (el.tempFilePath !== src) {
this.stopVoice(i)
}
})
}