Почему мой Tone.Loop перестает зацикливаться, казалось бы, случайно?
Кажется, мой цикл останавливается случайно. В чем может быть проблема?
Я попытался использовать зацикленный Tone.Event, и произошло то же самое. Возможно, это мое понимание того, как время интерпретируется в Tone.Loop и во внутреннем Transport.scheduleOnce. Цикл может остановиться в любой момент, поэтому обновите и перезапустите функцию, если она пройдет около 10 секунд, или дайте ей поработать, пока Tone.Loop в конце концов не остановится, но, скорее всего, остановится. Я могу гарантировать это. Вы можете позволить ему играть во время выполнения чего-то еще, вы будете знать, что Цикл остановился, когда громкость звука перестала падать. Я обошел эту проблему, связав сущность цикла непосредственно с событием "тик" Tone.Context; кажется, все работает так, как ожидалось. Тем не менее, я хочу знать, почему Loop не работает.
function testTone(freq) {
let interval = 0.5,
maindip = 0.7;
let osc = new Tone.Oscillator(freq || 100,'sine').sync().start(0),
gain = new Tone.Gain(),
postgain = new Tone.Gain(),
panner = new Tone.Panner3D(-3,-3,-7),
freeverb = new Tone.Freeverb(1),
loop = new Tone.Loop((time)=> {
let div = Math.random(0,1),
dip = 1-div*maindip;
gain.gain.value = dip;
postgain.gain.value = dip;
console.log(time);
Tone.Transport.scheduleOnce((time)=> {
console.log('once upon', time);
gain.gain.value = 1;
postgain.gain.value = 1;
}, '+'+(interval*div/2));
}, interval);
freeverb.wet.value = 0.2;
freeverb.dampening.value = 500;
osc.chain(gain, panner, freeverb, postgain, Tone.Master);
loop.start(0);
Tone.Transport.start();
this.osc = osc;
this.panner = panner;
this.gain = gain;
this.loop = loop;
this.postgain = postgain;
this.reverb = freeverb;
}
Цикл должен работать вечно.