아래의 코드 (also live here)는 setTargetAtTime과 일치하지 않는 성능을 나타내는 것으로 보입니다. 2 초에 최대로 팽창 한 다음 7 초에 무음으로 변하고 12 초에 발진기를 종료합니다. "the ugly click")WebAudio : setTargetAtTime의 비정상적인 동작입니까?
대신에 최대 2 초에 부풀어 오르고 12 초에 끝나지 않은 페이드가 시작됩니다. 그 시점에서 우리는 추악한 클릭을 듣습니다.
왜 이런 일이 일어 났는지 설명 할 수 있습니까? 짧은 값 (주석이 달린 //0.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