2016-08-01 71 views
0

我正在使用咆哮js库在通过Electron运行的应用中设置播放器。首先,一切似乎都运行良好,但在使用应用程序几周后,重复出现一个错误,但不是持续的:pause()函数不起作用。下面是一些代码片段:咆哮js暂停/恢复故障

初始化:

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秒的文件,然后重新开始当前曲目。在发生错误时我检查了控制台,它说什么都没有。我不知道错误来自哪里,关于图书馆工作方式的信息不多。我真的需要一些帮助,预先感谢。

编辑:还有一件事,当pause()不起作用,如果我点击play()轨道从开始播放,并且我控制了这个轨道的第二个实例。这就像第一个例子已经结束,但仍然在玩。

+0

我建议更新到最新版本2.0.0。 –

+0

对不起,我已经很久没有回复。该更新确实解决了问题,谢谢。 – LongDuZboub

回答

0

不知道您使用的是什么版本的咆哮,或者其他代码可能会搞砸,有一件事我认为可能会有所帮助:您不需要跟踪暂停状态。 “玩”的方法照顾。我做了它的工作使用的东西是这样的:

// If it's paused, it's not playing, so... paused = !myHowlInstance.playing();

我注意到另一件事是,你必须在你的currentTrack = $(this).attr('id');(我认为这是一个)停止按钮。不幸的是,我不知道JQuery是否足够了解它是否有什么问题(我自己更像是一个Dojo粉丝)。但它看起来像currentTrack可能被设置为一些值不在您的列表中(这将打破tracks[currentTrack])。您可能想要进入控制台并键入tracks["track1"],currentTrack等以查看它们的值。你甚至可以做tracks[currentTrack].play();,看看会发生什么。我不确定你是否知道你可以这样做(当我发现它时,这是一个帮助我的巨大的)。

至于从一开始就“不停顿”,我现在正在自己挣扎;在这个时候没有明确的方法来做到这一点(没有resume()pause(false)等),并且我在Google和SO上看到了关于这个主题的更多问题,所以你并不孤单。我已经尝试了seek方法,但没有运气。如果/当我在这方面取得突破,我会发表评论。 :)

编辑:我想出了玩的开始的事情。它确实涉及“寻求”,也涉及整个“实例ID”概念(我从未真正理解文档的重要性)。

下面是我正在从事的一个项目(也是一款游戏)的示例;它不涉及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); 
    } 
};