1.在失去焦点时播放背景音乐引擎并没有创建声音通道导致获得焦点时无法对声音通道进行恢复播放。
2.同理,在静音状态下播放音乐时没有创建声音通道再恢复静音时照样无法对声音通道回复播放,背景音乐很长或者不切换背景音乐时则永远无声!
个人解决办法如下,对引擎代码 SoundManager.playSound 方法做了修改,多则删减,少则补足,请官方酌情修复此bug!
SoundManager.playSound=function(url,loops,complete,soundClass,startTime){
(loops===void 0)&& (loops=1);
(startTime===void 0)&& (startTime=0);
// if (!SoundManager._isActive || !url)return null;
if (!url)return null;
if (SoundManager._muted)return null;
SoundManager._recoverWebAudio();
url=URL.formatURL(url);
if (url==SoundManager._tMusic){
// if (SoundManager._musicMuted)return null;
}else {
if (Render.isConchApp){
var ext=Utils.getFileExtension(url);
if (ext !="wav" && ext !="ogg"){
alert("The sound only supports wav or ogg format,for optimal performance reason,please refer to the official website document.");
return null;
}
}
// if (SoundManager._soundMuted)return null;
};
var tSound;
if (!Browser.onMiniGame){
tSound=Laya.loader.getRes(url);
}
if (!soundClass)soundClass=SoundManager._soundClass;
if (!tSound){
tSound=new soundClass();
tSound.load(url);
Loader.cacheRes(url,tSound);
};
var channel;
channel=tSound.play(startTime,loops);
if (!channel)return null;
channel.url=url;
channel.volume=(url==SoundManager._tMusic)? SoundManager.musicVolume :SoundManager.soundVolume;
channel.completeHandler=complete;
//---------------add start
if(url==SoundManager._tMusic){
if(SoundManager._musicMuted){
channel.pause();
}
}else{
if(SoundManager._soundMuted){
channel.pause();
}
}
if(!SoundManager._isActive){
channel.pause();
}
//---------------add end
return channel;
}[/code] [code][url=https://ask.layabox.com/question/3721]是此问题的补充[/url]
2018.10.19
此方法存在内存泄漏,<URL url="https://ask.layabox.com/question/39136">另见</URL>