2015-08-22 31 views
12

Osilatöre başladığım zaman durdurun ve sonra yeniden başlatın; Aşağıdaki hatayı alıyorum: (Web Ses API'sı) Osilatör düğümü hatası: Birden fazla başlatma başlatılamıyor

Uncaught InvalidStateError: Failed to execute 'start' on 'OscillatorNode': cannot call start more than once. 

Açıkçası ben ses "dur" için gain kullanabilirsiniz ama bu beni yoksul uygulama vurur. Tekrar başlatabilmek için osilatörü durdurmanın daha etkili bir yolu nedir?

kodu (jsfiddle)

var ctx = new AudioContext(); 
var osc = ctx.createOscillator(); 

osc.frequency.value = 8000; 

osc.connect(ctx.destination); 

function startOsc(bool) { 
    if(bool === undefined) bool = true; 

    if(bool === true) { 
     osc.start(ctx.currentTime); 
    } else { 
     osc.stop(ctx.currentTime); 
    } 
} 

$(document).ready(function() { 
    $("#start").click(function() { 
     startOsc(); 
    }); 
    $("#stop").click(function() { 
     startOsc(false); 
    }); 
}); 

(soru anda) Güncel çözüm: http://jsfiddle.net/xbqbzgt2/2/

Final çözüm: http://jsfiddle.net/xbqbzgt2/3/

+0

Uygulama kısıtlaması gibi görünüyor .. Her bir start() 'da yeni bir' OscillatorNode 'oluşturmaya çalışabilirsiniz. –

cevap

15

daha iyi bir yolu bir kez oscillatorNode başlayıp bağlamak olacaktır/gerektiğinde grafikten oscillatorNode ayırın, yani:

var ctx = new AudioContext(); 
var osc = ctx.createOscillator(); 
osc.frequency.value = 8000;  
osc.start();  
$(document).ready(function() { 
    $("#start").click(function() { 
     osc.connect(ctx.destination); 
    }); 
    $("#stop").click(function() { 
     osc.disconnect(ctx.destination); 
    }); 
}); 

Bu nasılyapılan Ses kapatma içinde 0 (mozilla web audio api belgeleri)

1

Ben şimdiye kadar bulduğum en iyi çözüm kullanmak istediğiniz her zaman oscillator yeniden oluştururken AYNI audioContext tutmaktır t.

http://jsfiddle.net/xbqbzgt2/3/

Bilginize yalnızca (benim donanım başına ya da en azından) 6 audioContext tarayıcı sayfası ömrü başına nesneleri oluşturabilirsiniz:

Uncaught NotSupportedError: Failed to construct 'AudioContext': The number of hardware contexts provided (6) is greater than or equal to the maximum bound (6). 
İlgili konular