Howlerjs使用一次()播放音频两次

时间:2019-03-25 15:30:46

标签: javascript howler.js

我正在使用Howler.js处理一个正在工作的小闹钟。

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

我有以下代码:

var play_sound = window[data.sound];

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

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

如果我将代码更改为

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

这似乎可行,但不能同时播放,但我担心在某些情况下可能会奏效。因此,我希望避免同时播放这些文件,并且也希望避免其中任何一个播放不止一次。

在利用事件来确保没有重叠时,我该怎么做?

我也尝试过:

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

presound.play();

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

1 个答案:

答案 0 :(得分:0)

Here我可以看到另一个带有end事件的示例:

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

您尝试使用on而不是once吗?

UPD:

无法重现问题。

我使用的代码段:

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>