我想了解Web音頻API時序和調度方法。網絡音頻API振盪器節點對象的生命期和停止()方法
但我還沒有完全瞭解振盪器節點的stop()
方法。
在這裏,我試圖安排打4振盪器120 BPM的節奏。
但好像只要stop()
方法踢上發佈時,它停止所有的振盪器。
下面是代碼:
var context = new webkitAudioContext();
var now = context.currentTime;
var tempo = 120;
var releaseTime = 0.5;
var secondsPerBeat = 60.0/tempo;
for(var i = 0; i < 4; i++){
var now = context.currentTime;
var osc = context.createOscillator();
osc.connect(context.destination);
osc.start(now + (i*secondsPerBeat));
var now = context.currentTime;
osc.stop(now + releaseTime);
}
這是爲什麼發生,我該如何避免這種情況?
感謝
你確定他們在同一時間停止嗎?我認爲你的問題是一個循環非常快,所以你作爲一個人,看到他們在同一時刻停止,而他們不是。 – MisterJ
我不明白這個問題:你問他們現在停止+ releaseTime ...所以他們這樣做。 ? – GameAlchemist
@VincentPiel假設當for循環被調用時,它必須創建了四個不同的振盪器節點,但它清楚的是一個。令人困惑的是緩衝區源和振盪器節點的相似性,因爲在BufferSourceNode上執行完全相同的操作時,它會創建新的緩衝區並播放和停止,而不會干擾其他預定的音符。 – zya