Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTML5音频不';在我实际旋转Nexus 7之前,我不会玩_Html_Html5 Audio_Nexus 7 - Fatal编程技术网

HTML5音频不';在我实际旋转Nexus 7之前,我不会玩

HTML5音频不';在我实际旋转Nexus 7之前,我不会玩,html,html5-audio,nexus-7,Html,Html5 Audio,Nexus 7,我正在尝试使用Android Chrome浏览器让HTML5音频精灵在Nexus7上工作。要更改正在播放的音频,请更改音频播放器的源,然后重新加载音频播放器 然后,我必须检测两个“timeupdate”事件,以确保音频实际上正在播放,因为 这是一个大页面的一部分,所以我不能全部发布,但设置基本上归结为: <body> <audio id="myAudioPlayer" src="audio_1.wav"> <script type=javascript&g

我正在尝试使用Android Chrome浏览器让HTML5音频精灵在Nexus7上工作。要更改正在播放的音频,请更改音频播放器的源,然后重新加载音频播放器

然后,我必须检测两个“timeupdate”事件,以确保音频实际上正在播放,因为

这是一个大页面的一部分,所以我不能全部发布,但设置基本上归结为:

<body>
    <audio id="myAudioPlayer" src="audio_1.wav">

<script type=javascript>
    function changeAudio() {
        var audioplayer = document.getElementByID("myAudioPlayer");
        audioplayer.currentSrc = getNextAudioClip();
        audioplayer.load();  
        audioplayer.play();
        audioplayer.addEventListener('timeupdate', firstTimeUpdate, false);
    }

    function firstTimeUpdate() {
        this.removeEventListener('timeupdate', firstTimeUpdate, false);
        this.addEventListener('timeupdate', secondTimeUpdate, false);
        this.play();
    }

   function secondTimeUpdate() {
        this.removeEventListener('timeupdate', secondTimeUpdate, false);
        this.addEventListener('timeupdate', timeSliderUpdate, false);
    }
</script>
</body>

函数changeAudio(){
var audioplayer=document.getElementByID(“myAudioPlayer”);
audioplayer.currentSrc=getNextAudioClip();
audioplayer.load();
audioplayer.play();
audioplayer.addEventListener('timeupdate',firstTimeUpdate,false);
}
函数firstTimeUpdate(){
this.removeEventListener('timeupdate',firstTimeUpdate,false);
this.addEventListener('timeupdate',secondTimeUpdate,false);
这个。play();
}
函数secondTimeUpdate(){
this.removeEventListener('timeupdate',secondTimeUpdate,false);
this.addEventListener('timeupdate',timeSliderUpdate,false);
}
因此,这在最初几次运行良好。音频已更改,“timeupdate”将激发以使我们转到firstTimeUpdate(),然后音频开始播放,“timeupdate”将再次激发以使我们转到secondTimeUpdate()

但是第六次或第七次我更改音频时,第二个“timeupdate”事件不会触发,因此永远不会达到secondTimeUpdate(),除非我将Nexus 7旋转90度,然后再将其旋转回来,然后音频开始播放,第二个“timeupdate”事件触发,所有事情都重新开始工作

这种情况一直持续到我第12次或第13次更改音频,在这之前,观察到相同的情况。getNextAudioClip()函数工作正常(即返回有效的音频文件)

我被这个难住了。有人能猜到这里到底发生了什么,或者为什么旋转Nexus7来“修复”它吗

编辑:好的,在多花点时间来处理这个问题之后,这个问题似乎与垃圾收集有关。旋转Nexus7似乎会触发之前加载的音频精灵上的垃圾收集,从而允许新精灵加载和播放。更改到不同的选项卡,然后再返回也可以做到这一点。所以,如果我能以某种方式自动获得这个音频GC,我可以有一个解决办法