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
处理程序。
我正在尝试使用网络音频创建一个非常简单的音乐播放器 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
处理程序。