2016-04-11 20 views
1

Osilatörlerin neden olan yöntemi neden bir müzik sıralayıcı oluşturmak için kullanılamayacağını ve "two clocks" yönteminin neden daha iyi kullanıldığını merak ediyorum.Bir müzik parçacığı oluşturmak için neden özyinelemeli bir osilatörün özelliği kullanılamaz?

İşte düşündüğüm bir kaba (kinda çalışan) kod çizimi.

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() 


     } 
    } 

cevap

2

Bu, muhtemelen istediğiniz gibi çalışmaz, çünkü sonlandırılanın ne zaman tetiklendiğine bağlı olamayacağınız anlamına gelmez. Muhtemelen bir osilatörün durması ile bir sonraki başlangıç ​​arasında rastgele bir boşluk olacak.

+1

Netleştirmek için - Javascript olayları hemen tetiklenmez, sıraya dizilirler. Ve bu Javascript olay döngüsünde render oluşturma ve düzen ve çöp toplama gibi birçok şey devam ediyor, bu yüzden tutarlı bir aralıkta ateşlenmeyebilir. Janky zamanlamasını bu şekilde alacaksın. – cwilso

+0

Anladığım kadarıyla, kodum olayları zamanlama olaylarıyla anında çözüyor, ancak tarayıcı oluşturma/yavaşlama sorununu çözmüyor – William

İlgili konular