2017-04-17 127 views
0

停止所有预定的声音所以我有一堆,我在下面的代码中调用时间表功能加载音频采样:网络音频API:从打

let audio; 

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

    for(let i = 0; i < 8; i++) { 
     scheduler(audioStart, next); 
     next++; 
    } 
} 

这里是音频调度功能:

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

它的工作正常,并播放预定的声音,因为它应该。

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

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

回答

1

您需要跟踪您在调度程序中创建的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); 
}