Javascript Howler js暂停/恢复故障
我正在使用Howler js库在运行Electron的应用程序中设置播放器。首先,一切似乎都很好,但在使用该应用程序几周后,一个bug反复出现,但不是经常出现:Javascript Howler js暂停/恢复故障,javascript,howler.js,Javascript,Howler.js,我正在使用Howler js库在运行Electron的应用程序中设置播放器。首先,一切似乎都很好,但在使用该应用程序几周后,一个bug反复出现,但不是经常出现:pause()函数不起作用。下面是一些代码: 初始化: var is_paused = true; var currentTrack = "track1"; var tracks = {"track1" : new Howl({urls: ['path/to/track1.mp3']}),
pause()
函数不起作用。下面是一些代码:
初始化:
var is_paused = true;
var currentTrack = "track1";
var tracks = {"track1" : new Howl({urls: ['path/to/track1.mp3']}),
"track2" : new Howl({urls: ['path/to/track2.mp3']}),
"track3" : new Howl({urls: ['path/to/track3.mp3']})
};
然后我有几个按钮用于播放/继续、暂停、停止和播放特定曲目:
$('#playS').click(function(){
if (is_paused){
tracks[currentTrack].play();
is_paused = false;
}
});
$('#pauseS').click(function(){
tracks[currentTrack].pause();
is_paused = true;
});
$('.trackBtn').click(function(){
tracks[currentTrack].stop();
currentTrack = $(this).attr('id');
tracks[currentTrack].play();
is_paused = false;
});
问题是,有时(通常在播放曲目40-45分钟后),pause()
函数什么也不做,这真的很烦人,因为我需要暂停曲目并播放另一个30秒的文件,然后恢复当前曲目。当错误发生时,我检查了控制台,它完全没有说什么。我不知道这个bug是从哪里来的,关于这个库是如何工作的,没有太多的信息。我真的需要一些帮助,谢谢你
编辑:还有一件事,当
pause()
不起作用时,如果我单击play()
该曲目将从一开始播放,并且我可以控制该曲目的第二个实例。就像第一个实例已经结束,但仍在运行。在不知道您使用的是什么版本的Howler,或者其他代码可能会把事情搞砸的情况下,我认为有一件事可能会有所帮助:您不需要跟踪暂停状态。“玩”的方法可以解决这个问题。我已经通过以下方式实现了:
//如果暂停,则不会播放,因此。。。
暂停=!myhowling.playing()代码>
我注意到的另一件事是,您有currentTrack=$(this.attr('id')代码>在你的(我想这是一个)停止按钮。不幸的是,我不太了解JQuery,不知道这是否有什么问题(我自己更喜欢Dojo)。但是看起来,currentTrack
可能被设置为列表中不存在的某个值(这将中断tracks[currentTrack]
)。您可能需要进入控制台,键入曲目[“track1”]
,当前曲目
等以查看它们的值。您甚至可以执行曲目[currentTrack].play()代码>并查看发生了什么。我不确定你是否知道你能做到(当我发现这一点时,这对我是一个巨大的帮助)
至于从一开始就开始的“不暂停”,我自己也在努力解决这个问题;目前还没有明确的方法(没有resume()
,pause(false)
等等),我在谷歌上看到了更多关于这个主题的问题,所以你并不孤单。我尝试过seek
方法,但没有成功。如果/当我在这方面取得突破时,我会发表评论。:)
编辑:我从一开始就看懂了这出戏。它确实涉及到“seek”以及整个“instanceid”概念(我从文档中从未真正理解过它的重要性)
这是我正在做的一个项目的一个例子(也是一个游戏);它不涉及JQuery(抱歉),但它应该为您提供如何解决问题的要点
var myBgMusic = new Howl(...);
var myMusicID = myBgMusic.play(); // The docs say play() returns an ID, and I'll be passing that to "seek" later.
var paused = false;
var saveSeek;
function TogglePause() {
if (paused) {
myBgMusic.play(myMusicID);
myBgMusic.seek(saveSeek, myMusicID);
} else {
myBgMusic.pause();
saveSeek = myBgMusic.seek(myMusicID);
}
};
我建议更新到最新版本2.0.0。抱歉,我等了这么久才回复。更新确实解决了这个问题,谢谢。如果我们使用选项html5=true-HOWLER.Howl({…,html5:true,…}),它就不起作用了;但是,如果我们设置服务器接受范围:字节,它将按预期工作。