在HTML5 WebAudio中如何知道声音是停止还是已完成播放?

时间:2016-05-19 20:19:13

标签: javascript html5 events web-audio

我正在尝试使用Web Audio API创建一个非常简单的音乐播放器。其中一个要求是当一个轨道完成时 - 下一个轨道自动启动的功能。

目前我正在订阅'已结束'活动。与

一致的东西
nodeSource.onEnded = function () {}
nodeSource.start(0, offset, duration);

问题来自于'onended'在两种情况下被触发的事实:

  • 声音播放完毕(确切地说是需要的)
  • 有人实际上停止了声音(根本不需要)

我需要一种方法将这两种情况分开。目前我无法在声音缓冲区内找到当前位置的值,因此我可以将它与声音结束时的时间进行比较。

据我所知,可以在播放开始时创建一个单独的计时器,然后检查声音是否仍然在它应该停止之前播放,但这是一种非常奇怪的方式。

有没有办法通过Web Audio本身获得我需要的东西?或者,也许,任何其他的,不那么奇怪的方式?

2 个答案:

答案 0 :(得分:1)

如果有人停止了声音,你的程序必须知道并停止声音。在实际停止声音之前,请删除onended处理程序。

答案 1 :(得分:0)

我发现的所有解决方案都有一些方法可以拿着计时器,我认为没有办法让它更清洁。

这是我发现的一个很好的解决方案,不要使用停止,写代码来暂停它。然后你就不会激活触发器

function stop() {
    sourceNode.stop(0);
    pausedAt = Date.now() - startedAt;
    paused = true;
};

[https://stackoverflow.com/a/18562855/3649914][1]

[1]:此处的代码