[]1.7.19.1 beta 背景音乐在舞台失焦和静音状态下可能导致的无法播放的异常问题!

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;
}
 
[url=https://ask.layabox.com/question/3721]是此问题的补充[/url]


2018.10.19
此方法存在内存泄漏,[url=https://ask.layabox.com/question/39136]另见[/url]
已邀请:

Victor

赞同来自: bq49

我不知道出于什么考虑官方会拒绝对我的问题进行优化,咬定为引擎的机制,可能是我建议的代码太过粗糙,也可能是官方确实没有时间去优化,亦或是有其他考虑。但是我相信大多数开发者在游戏开发过程中肯定会遇到类似问题:
1.在切换背景音乐的时候恰巧没有焦点,再获得焦点时没有声音。
2.在静音时播放了唯一的长背景音乐,再开启声音时没有声音。
这两个问题看似如官方所说不重新播放无法恢复。实际上是赤裸裸的体验上的细节问题,可能大多数开发者会直接在应用层做一些复杂的操作去规避这个问题,但这不是最好的实现。
另外,我既然愿意摆着工作不做,花时间来论坛上去反映问题,我是真心希望Laya能越来越好。产品的用户体验才是最重要的不是吗?

Aar0n

赞同来自:

我们引擎静音状态下相当于停止播放,如果不重新播放是无法恢复的,,失去焦点的话,切回来是会自动回复的。。这个引擎代码开发者可以自己随意修改,但是我们的正式引擎是不会纳入这段代码的。

zsq

赞同来自:

头像很6

wanghailong

赞同来自:

大兄弟 你的头像影响到我了!

allTime

赞同来自:

问一下,现在2.0版本上还有这问题啊, SoundManager.playSound改了代码也没用,静音状态下播放音乐,再恢复时就没声音了

要回复问题请先

商务合作
商务合作