Web Audio API: 停止播放所有预定的声音
Web Audio API: Stop all scheduled sounds from playing
所以我有一堆加载的音频样本,我在下面的代码中调用调度函数:
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/cancel 播放所有预定的声音?
因为现在当我尝试调用 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);
}
所以我有一堆加载的音频样本,我在下面的代码中调用调度函数:
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/cancel 播放所有预定的声音?
因为现在当我尝试调用 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);
}