2016-04-11 1 views
1

Мне любопытно, почему осцилляторы 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() 


     } 
    } 

ответ

2

Это, вероятно, не совсем так, как вы хотите, потому что вы не можете точно зависеть от того, когда onended уволен. Вероятно, будет случайный разрыв между тем, когда один осциллятор остановится и начнется следующее.

+1

Чтобы уточнить - события Javascript не запускаются немедленно, они находятся в очереди. И много чего происходит в этом цикле событий Javascript - как рендеринг, компоновка и сборка мусора - поэтому его нельзя запускать с постоянным интервалом. Таким образом, вы получите время от времени. – cwilso

+0

Я вижу, поэтому мой код решает проблему с планированием событий на лету, но это не решает проблему рендеринга/замедления браузера – William

Смежные вопросы