【问题标题】:Howler js pause/resume troubleHowler js暂停/恢复故障
【发布时间】:2016-08-01 08:37:58
【问题描述】:

我正在使用 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(),曲目将从头开始播放,并且我可以控制曲目的第二个实例。就像第一个实例已经结束,但仍在播放。

【问题讨论】:

  • 我建议更新到最新版本 2.0.0。
  • 抱歉这么久才回复。更新确实解决了这个问题,谢谢。

标签: javascript howler.js


【解决方案1】:

在不知道您使用的是什么版本的 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);
    }
};

【讨论】:

  • 如果我们使用选项 html5=true - HOWLER.Howl({..., html5: true, ...}); 则不起作用
  • 但是如果我们设置服务器 Accept-Ranges:bytes 它将按预期工作。
猜你喜欢
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多