为什么不能使用振荡器的递归触发属性来创建音序器?

时间:2016-04-11 15:18:59

标签: javascript web-audio

我很好奇为什么振荡器启动的方法无法用于创建音乐音序器以及为什么使用" two clocks"方法更好。

这是我正在思考的粗略(有点工作)代码草图。

var x = oscillator.onended = function() {
        oscillator = audioContext.createOscillator();
        oscillator.frequency.value = 0;
        oscillator.connect(audioContext.destination);
        oscillator.start(audioContext.currentTime);
        oscillator.stop(audioContext.currentTime + 0.000001);


        oscillator.onended = function() {

            if (Math.abs(item - audioContext.currentTime) >= 1) {
                if (tick === 8) {
                    tick = 1;

                } else {
                    item = audioContext.currentTime;
                    tick += 1;
                    sounds.kick.play();
                }


            }



            x()


        }
    }

1 个答案:

答案 0 :(得分:2)

这可能并不是你想要的,因为你不能完全依赖被触发的时间。在一个振荡器停止和下一个振荡器开始之间可能会出现随机间隙。