簡體   English   中英

咆哮JS暫停/恢復故障

[英]Howler js pause/resume trouble

我正在使用Howler js庫在通過Electron運行的應用程序中設置播放器。 首先,一切似乎都運行良好,但是使用該應用程序幾周后,便反復出現了一個錯誤,但並沒有持續發生: 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秒的文件,然后恢復當前曲目。 發生錯誤時,我檢查了控制台,它什么也沒說。 我不知道該錯誤來自何處,關於該庫的工作原理信息不多。 我真的需要一些幫助,謝謝。

編輯:還有一件事情,當pause()不起作用時,如果我單擊play() ,軌道將從頭開始播放,並且我可以控制軌道的第二個實例。 就像初審已到盡頭,但仍在播放。

在不知道您使用的是哪個版本的Howler或其他什么代碼可能使事情混亂的情況下,我認為可能會有所幫助:您無需跟蹤暫停狀態。 “播放”方法可以解決這一問題。 我已經使用以下方法使其工作:

// 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);
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM