나는 연주하는 각 노트마다 새로운 오실레이터를 만듭니다.웹 오디오 API : 모든 오실레이터를 음소거하고 멜로디를 일시 중지하는 방법
function playSound(freq, duration) {
var attack = 5,
decay = duration,
gain = context.createGain(),
osc = context.createOscillator();
gain.connect(context.destination);
gain.gain.setValueAtTime(0, context.currentTime);
gain.gain.linearRampToValueAtTime(0.1, context.currentTime + attack/1000);
gain.gain.linearRampToValueAtTime(0, context.currentTime + decay/1000);
osc.frequency.value = freq;
osc.type = "sine";
osc.connect(gain);
osc.start(0);
setTimeout(function() {
osc.stop(0);
osc.disconnect(gain);
gain.disconnect(context.destination);
}, decay)
}
멜로디는 for 루프에서 재생되며 여기서 playSound가 호출됩니다. 일시 중지 버튼을 클릭하면 멜로디를 음소거하고 for 루프를 일시 중지하여 다시 재생 버튼을 클릭하면 멜로디가 다시 시작됩니다. 현재 발진기를 모두 연결 해제하려면 어떻게합니까?
웹 오디오에서는 오디오 노드를 일시 중지 할 수는 없지만 중지해야하며 다시 시작할 때 노드를 다시 만들어야합니다. 당신은 이미 이것을 알고있을 것입니다. 아래 @cwilso 대답은 정확합니다. 나중에 상호 작용할 노드에 대한 참조를 저장해야합니다. – OJay