我也遇到类似的问题,虽然没有定位到最根本的原因,发现只有WebAudioSound才会播放不出来,所以在游戏切回前台的时候,重新创建AudioContext,然后就能正常播放了。
static _visibilityChange() {
if (ILaya.stage.isVisibility) {
SoundManager._recreateWebAudio(() => { SoundManager._stageOnFocus(); });
}
else {
SoundManager._stageOnBlur();
}
}
static _recreateWebAudio(cb) {
if (WebAudioSound.webAudioEnabled) {
WebAudioSound.ctx.close().then(function () {
const AudioContext = window.AudioContext
|| window.webkitAudioContext || window.mozAudioContext;
const newCtx = new AudioContext();
if (newCtx) { //最多可以创建6个AudioContext,超过后为会为空
WebAudioSound.ctx = newCtx;
WebAudioSound.setUnlocked(false);
WebAudioSound.initWebAudio();
cb();
}
});
}
}
我用的laya的版本是2.3,2.3会遇到提前加载音频的时候,加载的音频都会被创建成为WebAudioSound。所以背景音想用到AudioSound就不能提前加载,而是直接调用playMuisc播放,或者自己去改源码。