Javascript 为什么我的音调.循环停止了看似随机的循环?

Javascript 为什么我的音调.循环停止了看似随机的循环?,javascript,tone.js,Javascript,Tone.js,我的循环似乎随机停止。可能是什么问题 我试着用循环音。事件,同样的事情发生了。也许,这是我对Tone.Loop和Internal Transport.scheduleOnce中时间解释方式的理解。循环可能会在任何时候停止,因此,如果函数超过10秒,请刷新并重新运行该函数,或者让它运行,直到Tone.loop最终停止,但它可能会停止。我可以保证。你可以让它在做其他事情时播放,当声音的音量停止进退时,你就会知道循环停止了。通过将循环的本质直接绑定到音调的“滴答”事件,我绕过了这个问题;当时一切似乎都

我的循环似乎随机停止。可能是什么问题

我试着用循环音。事件,同样的事情发生了。也许,这是我对Tone.Loop和Internal Transport.scheduleOnce中时间解释方式的理解。循环可能会在任何时候停止,因此,如果函数超过10秒,请刷新并重新运行该函数,或者让它运行,直到Tone.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;
    }

循环应该永远运行。

找到解决方案了吗?我在Tone.Transport.scheduleOnce()中看到了同样的情况。随机停止。我也有这个问题,不知道为什么它只是随机停止。最近,我扔掉了整个Tone.js库,并使用了完整的网络音频和其他功能。