首页 > 解决方案 > 一段时间后,每个播放节点都会触发 `ended` 事件两次

问题描述

对于我在 Windows 上的 Chrome、Edge 和 Opera 中的ended每个实例,该事件会触发两次(或更多)。AudioScheduledSourceNodeFirefox 似乎每个节点都会触发一次上述事件。

var buffersPlaying = 0;

function bufferEnded() {
    // This function is called twice (or more?) per one source node
    buffersPlaying -= 1;  
}

function play(output, buffer) {
    const source = context.createBufferSource();
    source.buffer = buffer;
    source.connect(output);
    source.start(context.currentTime);
    source.addEventListener('ended', bufferEnded);
    buffersPlaying += 1;
}

起初,ended每个节点只触发一次该事件,但在几分钟和数千次播放声音之后,该事件开始为一些播放的缓冲区触发两次。

事件触发两次是正常的,还是浏览器错误?

标签: javascriptchromiumweb-audio-api

解决方案


推荐阅读