let audioCtxFc = require("audioCtxFactory"); let playStatus = require("playStatus"); if (wx.setInnerAudioOption) { wx.setInnerAudioOption({ obeyMuteSwitch: false, autoplay: true }) } Component({ properties: { msg: { type: Object, val: {} }, }, data: { playStatus: playStatus, curStatus: playStatus.STOP, time: "0'", opcity: 1, __comps__: { audioCtx: null, } }, methods: { audioPlay(){ wx.inter && clearInterval(wx.inter) let audioCtx = this.data.__comps__.audioCtx; var curl = '' wx.downloadFile({ url: this.data.msg.msg.url, header: { "X-Requested-With": "XMLHttpRequest", Accept: "audio/mp3", Authorization: "Bearer " + this.data.msg.msg.token }, success(res){ curl = res.tempFilePath; console.log('音频本地',audioCtx) //renderableMsg.msg.url = res.tempFilePath; audioCtx.src = curl; audioCtx.play(); }, fail(e){ console.log("downloadFile failed", e); wx.showToast({ title: "下载失败,请检查网络状态", duration: 1000 }); } }); }, audioPause(auCtx){ //let audioCtx = this.data.__comps__.audioCtx; let audioCtx = this.data.__comps__.audioCtx = audioCtxFc.getCtx(this.data.msg.mid) || auCtx audioCtx&&audioCtx.pause(); }, addEvent(){ let audioCtx = this.data.__comps__.audioCtx; audioCtx.onPlay(this.onPlaying); audioCtx.onPause(this.onPause); audioCtx.onWaiting(this.onPause); audioCtx.onStop(this.onDone); audioCtx.onEnded(this.onDone); audioCtx.onError(this.onDone); audioCtx.onWaiting(this.onWait) //audioCtx.onTimeUpdate(this.onTimeUpdate); }, delEvent(){ let audioCtx = this.data.__comps__.audioCtx; audioCtx.offPlay(this.onPlaying); audioCtx.offPause(this.onPause); audioCtx.offWaiting(this.onPause); audioCtx.offStop(this.onDone); audioCtx.offEnded(this.onDone); audioCtx.offError(this.onDone); audioCtx.offWaiting(this.onWait) // 多次播放会丢失这个回调,所以不用卸载 // audioCtx.offTimeUpdate(this.onTimeUpdate); }, }, // lifetimes created(){}, attached(){ console.log(this.properties.msg.msg) this.setData({ time: this.properties.msg.msg.length + "''", style: this.properties.msg.style }) }, moved(){}, detached(){ let audioCtx = this.data.__comps__.audioCtx = audioCtxFc.getCtx(this.data.msg.mid); this.audioPause(audioCtx); this.delEvent(); //audioCtx.destroy(); }, ready(){ let self = this let curl = '' let audioCtx = this.data.__comps__.audioCtx = audioCtxFc.getCtx(this.data.msg.mid); audioCtx.autoplay = false; audioCtx.loop = false; // this.onPlaying = () => { //console.log("onPlaying", JSON.stringify(this.data)); this.setData({ curStatus: playStatus.PLAYING, }); wx.inter && clearInterval(wx.inter) wx.inter = setInterval(() => { let opcity = this.data.opcity; this.setData({ opcity: opcity == 1 ? 0.4 : 1 }) }, 500) }; this.onPause = () => { // console.log("onPause", JSON.stringify(this.data)); // 第二次播放会立即抛出一个异常的 onPause if(parseInt(this.data.time, 10) < 1){ return; } this.setData({ curStatus: playStatus.PAUSE, opcity: 1 //time: "0'", }); }; this.onDone = () => { // console.log("onDone", JSON.stringify(this.data)); this.setData({ curStatus: playStatus.STOP, opcity: 1 //time: "0'", }); clearInterval(wx.inter) }; // 多次播放会丢失这个回调 this.onTimeUpdate = () => { this.setData({ time: (audioCtx.currentTime >> 0) + "'" }); }; this.onWait = () => { } this.addEvent(); }, });