[LayaAir 2.0]背景音乐播放BUG,销毁异常导致的播放异常,里面有修改方案
【异常现象】:1.先播音乐A ,再播音乐B 然后再切回音乐A ,30秒后自动销毁音乐的那个方法会把当前正在播放的音乐A销毁掉。
2.播音乐A,再播音乐B,直接调用销毁方法销毁音乐A 也会导致音乐B播放停止(被销毁)
【异常原因】:H5audio里面dispose方法,通过 _audioCache 获取到的url1对象与url2对象是同一个。
导致的代码逻辑:load方法里面的逻辑:满足条件 (url == ILaya.SoundManager._bgMusic )&&(ad.src != url)就会跑到下方的
if (!ad) 判断中重新塞一遍AudioSound._musicAudio 到 AudioSound._audioCache,销毁背景音乐其实是会销毁当前的播放对象。
【建议方案】:
1.屏蔽背景音乐销毁(audio对象就一个,完全没必要销毁): SoundManager.playMusic方法中_bgMusic移到channel.stop下面。
SoundManager.disposeSoundLater方法开头if(url == SoundManager._bgMusic) return;
2.存背景音乐的_audioCache的key和其他的集合中的背景音乐用同一个key,改变内容前做对象清理,改变背景音乐直接覆盖掉。
没必要demo了吧 - -!
2.播音乐A,再播音乐B,直接调用销毁方法销毁音乐A 也会导致音乐B播放停止(被销毁)
【异常原因】:H5audio里面dispose方法,通过 _audioCache 获取到的url1对象与url2对象是同一个。
导致的代码逻辑:load方法里面的逻辑:满足条件 (url == ILaya.SoundManager._bgMusic )&&(ad.src != url)就会跑到下方的
if (!ad) 判断中重新塞一遍AudioSound._musicAudio 到 AudioSound._audioCache,销毁背景音乐其实是会销毁当前的播放对象。
【建议方案】:
1.屏蔽背景音乐销毁(audio对象就一个,完全没必要销毁): SoundManager.playMusic方法中_bgMusic移到channel.stop下面。
SoundManager.disposeSoundLater方法开头if(url == SoundManager._bgMusic) return;
2.存背景音乐的_audioCache的key和其他的集合中的背景音乐用同一个key,改变内容前做对象清理,改变背景音乐直接覆盖掉。
没必要demo了吧 - -!
没有找到相关结果
已邀请:
要回复问题请先登录
3 个回复
Laya_z
赞同来自: c416288806
c416288806
赞同来自:
SoundManager.playMusic("url2",0);SoundManager.playMusic("url1",0);
等待35秒。音乐没了。
c416288806
赞同来自: