2017-04-17 5 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); 
} 
関連する問題