Мне любопытно, почему осцилляторы onended метод не могут быть использованы для создания музыкального секвенсора и почему использование метода «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()
}
}
Чтобы уточнить - события Javascript не запускаются немедленно, они находятся в очереди. И много чего происходит в этом цикле событий Javascript - как рендеринг, компоновка и сборка мусора - поэтому его нельзя запускать с постоянным интервалом. Таким образом, вы получите время от времени. – cwilso
Я вижу, поэтому мой код решает проблему с планированием событий на лету, но это не решает проблему рендеринга/замедления браузера – William