Phaser声音仅在Chrome for Android上停止工作

时间:2015-11-19 01:20:08

标签: google-chrome phaser-framework

声音在前几分钟有效但过了一会儿.play()没有播放任何声音。似乎有一个巨大的持续时间没有声音播放声音停止工作。

它在桌面,iOS和通用android浏览器上运行良好。我只是在使用移动chrome作为浏览器的Android设备上遇到这个问题。

2 个答案:

答案 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分钟播放一次无声声音的循环,例如只需刷新"声音管理器,如果这解决了你的问题。