【问题标题】:Howlerjs playing audio twice when using once()Howlerjs 在使用 once() 时播放音频两次
【发布时间】:2019-03-25 15:30:45
【问题描述】:

我正在使用 Howler.js 开发一个我正在开发的小闹钟。

对于我的闹钟,我想在当前时间与预定时间匹配时依次播放 2 个音频文件。

我有这个代码:

var play_sound = window[data.sound];

presound.play();
presound.once('end', function(){
    play_sound.play();
});

问题是,这段代码播放了我的presound 2 次,然后是play_sound。我不希望它播放前音 2 次,只播放一次。

如果我将代码更改为

presound.play();
play_sound.play();

它似乎有效,它不会同时播放它们,但我担心在某些情况下它可能会。所以我想避免这些文件同时播放,并且我也想避免它们中的任何一个播放不止一次。

如何在利用事件确保没有重叠的同时做我想做的事情?

我也试过这个:

presound.once('play', function() {
    presound.once('end', function() {
        play_sound.play();
    });
});

presound.play();

但它也会播放我的presound 两次。

【问题讨论】:

  • 我相信您可能使用了错误的事件。而不是 end 它应该是 onend per the docs
  • @SpencerPollock 这不是它在示例Listen for events: 中所说的。如果它是一个不正确的事件,它不会抛出一个错误吗?
  • 您将提供一个完整的测试用例,因为您显示的代码只会播放一次声音,因此您正在做的其他事情一定会导致问题。
  • @JamesSimpson 这完整的测试用例。当我使用该事件时,它会播放两次前音,然后播放play_sound。如果没有事件,它只会播放每个声音一次。
  • 这不是完整的测试用例,因为没有办法拿走你拥有的东西并对其进行测试。它甚至不包括嚎叫的设置位置。

标签: javascript howler.js


【解决方案1】:

Here 我可以看到end 事件的另一个例子:

// Fires when the sound finishes playing.
sound.on('end', function(){
  console.log('Finished!');
});

您是否尝试使用on 而不是once

UPD:

无法重现问题。

我使用的代码 sn-p:

function clickme() {
  var presound = new Howl({
    src: ['sound.m4a'],
    html5: true
  });

  var play_sound = new Howl({
    src: ['sound2.mp3'],
    html5: true
  });

  presound.play();

  // Fires when the sound finishes playing.
  presound.once('end', function() {
    play_sound.play();
  });
}
<html>

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/howler/2.1.1/howler.core.min.js"></script>
</head>

<body>
  <input type="button" onclick="clickme()" value="Hello" />
</body>

</html>

【讨论】:

  • 我不想使用on,因为每次函数运行时我可能会调用不同的声音,如果我使用on,它会在每次函数运行时创建一个新事件永远不会消失
猜你喜欢
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
相关资源
最近更新 更多