// 每一个音频消息都有自己的 ctx。
// 可以有多个 ctx,每次播放都能知道是哪个 ctx 在调用,从而让其他的 ctx pause。
// 消息销毁,记得处理 ctx。
// 主要是同步跨 ctx 的操作,保证只有一个 ctx 播放
let allCtx = {};
let inUseCtx = null;
let allComm = {}
function proxier(ctx){
let __play__ = ctx.play;
let __pause__ = ctx.pause;
ctx.play = playProxier;
ctx.pause = pauseProxier;
function playProxier(){
// 如果正在播放的不是自己,暂停
if(inUseCtx && inUseCtx != this){
inUseCtx.pause();
}
__play__.call(this);
inUseCtx = this;
}
function pauseProxier(){
// 只有是自己才 pause
if(inUseCtx == this){
__pause__.call(this);
}
}
}
module.exports = {
getCtx(mid){
let returnCtx = allCtx[mid];
if(!returnCtx){
returnCtx = wx.createInnerAudioContext();
allCtx[mid] = returnCtx;
proxier(returnCtx);
}
return returnCtx;
},
getAllCtx(){
wx.setStorageSync("allCtx", JSON.stringify(Object.keys(allCtx)));
return allCtx
},
getCommponet(mid,comm){
let curComm = allComm[mid]
if (!curComm) {
allComm[mid] = comm
}
return allComm
}
};