以下のコード(also live here)は、setTargetAtTimeからの不整合なパフォーマンスを示しているようです... 2秒で最大に膨らまし、7秒で消音してから、12秒で発振器を終了してください"the ugly click")WebAudio:setTargetAtTimeの不規則な動作ですか?
代わりに、2秒で最大に膨らみ、12秒後にまだ終了していないフェードを開始します。その時点で醜いクリックが聞こえます。
これはなぜ起こっているのですか?短い値(コメント付きの//0.3
)は、クリックを避けるのに十分速くドロップすることに注意してください。私はさまざまな状況でこれを試してきました。そして、値が上がるにつれて、適切な停止時間を超えて比例して3番目のパラメータが比例して伸びるように見えます(とにかく0にフェードすると)。 setTargetAtTime
の
<button id = "button" >
Start then stop oscillators
</button>
<script>
var audioContext = new AudioContext();
var fadeIn = 2;
var fadeOut = 5; //0.3
var gainNode = audioContext.createGain();
var osc = audioContext.createOscillator();
osc.type = "sine";
osc.frequency.value = 300;
osc.connect(gainNode);
gainNode.gain.value = 0;
gainNode.connect(audioContext.destination);
function startAndStop() {
osc.start(audioContext.currentTime);
gainNode.gain.setTargetAtTime(1, audioContext.currentTime, fadeIn);
gainNode.gain.setTargetAtTime(0, audioContext.currentTime + fadeIn, fadeOut);
osc.stop(audioContext.currentTime + fadeIn + fadeOut + 5);
};
var button = document.getElementById("button");
button.addEventListener("click", startAndStop);
</script>
[ウェブオーディオAPIは正常に音を止める](https://stackoverflow.com/questions/41511541/web-audio-api-stop-sound-gracefully) – guest271314