声音在前几分钟有效但过了一会儿.play()没有播放任何声音。似乎有一个巨大的持续时间没有声音播放声音停止工作。
它在桌面,iOS和通用android浏览器上运行良好。我只是在使用移动chrome作为浏览器的Android设备上遇到这个问题。
答案 0 :(得分:1)
原来这是一个Chrome错误,如果30秒内没有播放声音,会导致网络音频停止播放声音。
https://code.google.com/p/chromium/issues/detail?id=518863
修复似乎是要观看
audioContext.currentTime
当它在30秒后卡住时会创建一个新的audioContext。
我最终使用的解决方案如下:
注意我正在使用移相器库 - 所以这个确切的解决方案对你不起作用 - 但它会给你一般的想法
//This is run using a timer event every second
//this.game.time.events.loop(1000, this.checkAudioContext, this);
evil.AudioManager.prototype.checkAudioContext=function(){
//work out when the audio context has stopped
if(this.game.sound.context.currentTime-this.last_context_time===0){
//close out the existing context and create a new one
//you will also need new gain nodes if you are using them
this.game.sound.context.close();
this.game.sound.context=new AudioContext();
this.game.sound.masterGain= this.game.sound.context.createGain();
this.game.sound.masterGain.gain.volume=this.volume;
this.game.sound.masterGain.connect(this.game.sound.context.destination);
//now go through every sound and connect them to the new context
//creating gain nodes as we go.
for(var key in this.tracks){
var snd=this.tracks[key].snd;
snd.context=this.game.sound.context;
snd.masterGainNode = this.game.sound.masterGain;
snd.gainNode=this.game.sound.context.createGain();
snd.gainNode.gain.value = snd.volume * this.volume;
snd.gainNode.connect(snd.masterGainNode);
}
}else{
//update out time variable
this.last_context_time=ctx.currentTime;
}
}
答案 1 :(得分:0)
你有什么版本的phaser和android?对我而言,我试过的4分钟歌曲似乎没有问题。即使屏幕移动,它在恢复时仍然没有任何问题。一个肮脏的解决方案是添加一个每2分钟播放一次无声声音的循环,例如只需刷新"声音管理器,如果这解决了你的问题。