我正在制作一款JavaScript游戏,希望基于声音片段创建背景音乐。我想将短的mp3文件播放为一个连续的曲目。我尝试在音频文件上绑定“ended”事件处理程序,但这会导致音频片段之间出现延迟。
为了解决这个问题,我做了一个笨拙的解决方案,但仍然无法正常工作,即在音频即将结束前1秒钟更改它。
为了解决这个问题,我做了一个笨拙的解决方案,但仍然无法正常工作,即在音频即将结束前1秒钟更改它。
Ebuc.manageAudio = function(){
var listener = function (event) {
if (this.currentTime > (this.duration - 1) && Ebuc.bgnext) {
Ebuc.manageAudio();
console.log("aduio");
Ebuc.bgnext = false;
}
if(this.currentTime < 2){
Ebuc.bgnext = true;
console.log("reset");
}
console.log(event);
console.log("listener active")
};
var color = Level.current.color;
if(Ebuc.bgsong == null) {
Ebuc.bgsong = new Audio('assets/sound/' + Resources.audioSetList[color].getcurrentsong());
Ebuc.bgsong.addEventListener('timeupdate', listener, true);
}
else{
Ebuc.bgsong = new Audio('assets/sound/' + Resources.audioSetList[color].getcurrentsong());
}
Ebuc.bgsong.play();
Resources.audioSetList[color].next();
};
这个示例在一开始可以正常运行,但当要从第二个片段切换到第三个片段时,循环停止了。在记录事件监听器时,会有4次日志记录,然后停止。
Q1:为什么这个事件监听器突然消失了? Q2:是否有一种非hack的解决方案来链接这些音频片段。
提前感谢您的帮助。
setTimeout(function(){...}, soundDuration - crossfadeDuration)
就是解决你延迟问题的方法。 - pantalohnes