聲音在最初的幾分鐘內運行,但過了一段時間.play()不播放任何聲音。看起來如果有很長時間沒有聲音播放聲音停止工作。Phaser聲音僅在Android版Chrome上停止工作
它在桌面,iOS和通用Android瀏覽器上正常工作。我只是在使用手機瀏覽器的Android設備上遇到這個問題。
聲音在最初的幾分鐘內運行,但過了一段時間.play()不播放任何聲音。看起來如果有很長時間沒有聲音播放聲音停止工作。Phaser聲音僅在Android版Chrome上停止工作
它在桌面,iOS和通用Android瀏覽器上正常工作。我只是在使用手機瀏覽器的Android設備上遇到這個問題。
你有什麼版本的相位器和機器人?對我來說,我嘗試了4分鐘的歌曲似乎沒有問題。即使屏幕消失,恢復時也不會有任何問題。一個骯髒的解決方案是添加一個循環,每2分鐘播放一段無聲的聲音,例如只是爲了「刷新」聲音管理器,如果這可以解決您的問題。
事實證明,這是一個Chrome錯誤,如果沒有聲音播放30秒之類的東西,就會導致Web音頻停止播放聲音。
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;
}
}
我我用Canvas和Webaudio使用Phaser v2.1.3。我添加了1秒鐘的空白聲音文件,每30秒循環一次以刷新網絡音頻上下文。那就是訣竅。我確實注意到了音頻環境的簡歷,但是我無法使其工作。我嘗試了一些像 'sound.context.resume()。then(function(){sound.play()});'但那不起作用。我可能需要更好地瞭解audiocontext的工作原理 – user3813559
也許這是一個版本錯誤。我嘗試了2.4.3和2.4.4,它似乎工作。很高興解決方法解決了您的問題! – Apovtx