Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Howler js暂停/恢复故障_Javascript_Howler.js - Fatal编程技术网

Javascript Howler js暂停/恢复故障

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']}),

我正在使用Howler js库在运行Electron的应用程序中设置播放器。首先,一切似乎都很好,但在使用该应用程序几周后,一个bug反复出现,但不是经常出现:
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,…}),它就不起作用了;但是,如果我们设置服务器接受范围:字节,它将按预期工作。