2016-08-01 121 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); 
    } 
};