Javascript Web音频API:停止播放所有预定的声音

Javascript Web音频API:停止播放所有预定的声音,javascript,web-audio-api,Javascript,Web Audio Api,因此,我有一堆加载的音频样本,在下面的代码中调用schedule函数: let audio; function playChannel() { let audioStart = context.currentTime; let next = 0; for(let i = 0; i < 8; i++) { scheduler(audioStart, next); next++; } } 它工作得很好,按预定的时间播放声音

因此,我有一堆加载的音频样本,在下面的代码中调用schedule函数:

let audio;

function playChannel() {
    let audioStart = context.currentTime;
    let next = 0;

    for(let i = 0; i < 8; i++) {
        scheduler(audioStart, next);
        next++;
    }
}
它工作得很好,按预定的时间播放声音

我应该如何停止/取消播放所有预定的声音


因为现在,当我尝试调用
stop()
方法时,它只会停止播放最后一个预定的声音。

您需要跟踪您在调度程序中创建的BufferSource节点(由索引引用),然后运行所有这些节点。例如:

var sources = [];

function scheduler(audioStart, index) {
    audio = context.createBufferSource();
    sources[index] = audio; 
    audio.buffer = audioSamples[index];  //array with all the loaded audio
    audio.connect(context.destination);  
    audio.start(audioStart + (audio.buffer.duration * index));
}

function stopAll() {
    for(let i = 0; i < 8; i++)
        if (sources[i])
          sources[i].stop(0);
}
var源=[];
功能计划程序(audioStart,索引){
audio=context.createBufferSource();
来源[索引]=音频;
audio.buffer=audioSamples[index];//包含所有加载音频的数组
连接(context.destination);
audio.start(audioStart+(audio.buffer.duration*index));
}
函数stopAll(){
for(设i=0;i<8;i++)
如果(来源[i])
源[i]。停止(0);
}
var sources = [];

function scheduler(audioStart, index) {
    audio = context.createBufferSource();
    sources[index] = audio; 
    audio.buffer = audioSamples[index];  //array with all the loaded audio
    audio.connect(context.destination);  
    audio.start(audioStart + (audio.buffer.duration * index));
}

function stopAll() {
    for(let i = 0; i < 8; i++)
        if (sources[i])
          sources[i].stop(0);
}