HTML5 WebAudio如何知道声音是停止了还是播放完了?

In HTML5 WebAudio how to know whether sound was stopped or finished playing?

我正在尝试使用网络音频创建一个非常简单的音乐播放器 API。其中一项要求是一个功能,当一首曲目结束时 - 下一首会自动开始。

目前我正在订阅 'ended' 活动。符合

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

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

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

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

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

我发现的所有解决方案都有某种方式来保持计时器,我认为没有比这更干净的解决方案了。

这是我找到的一个很好的解决方案,不要使用停止,写代码暂停it.and那么你不会激活触发器

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

[

[1]:代码在此处找到

如果有人停止了声音,您的程序一定知道并停止了声音。在你真正停止声音之前,删除 onended 处理程序。