я только заметил, что это, кажется, не представляется возможным изменить gain.value
в виде gainNode
с помощью метода setValueAtTime()
или setValueCurveAtTime()
, когда нет генератора подключен или когда генератор еще не начался.Web Audio: значение коэффициента изменения до генератора начинает
setValueAtTime
после того, что генератор начинает
Например, в этом случае, setValueAtTime
будет работать, как ожидалось:
var context = new AudioContext();
var gain = context.createGain();
gain.connect(context.destination);
var osc = context.createOscillator();
osc.frequency.value = 300;
osc.connect(gain);
osc.start();
gain.gain.setValueAtTime(0, context.currentTime + 1);
Начнется осциллятора и усиление 1
в течение 1 секунды. Затем gain.gain.value
переместится на 0
.
setValueAtTime
до того, что генератор начинает
Однако, если мы устанавливаем коэффициент усиления с setValueAtTime
до осциллятор начинает
var context = new AudioContext();
var gain = context.createGain();
gain.connect(context.destination);
var osc = context.createOscillator();
osc.frequency.value = 300;
osc.connect(gain);
osc.start(context.currentTime + 1);
gain.gain.setValueAtTime(0, context.currentTime);
gain.gain.value
пробудет до 1.
Установите gain.gain.value
без setValueAtTime
Странно, что это haviour не видно, если мы устанавливаем коэффициент усиления непосредственно
var context = new AudioContext();
var gain = context.createGain();
gain.connect(context.destination);
var osc = context.createOscillator();
osc.frequency.value = 300;
osc.connect(gain);
osc.start(context.currentTime + 1);
gain.gain.value = 0;
Значение усиления всегда будет оставаться на 0.
Когда я играл с API, я вспоминаю, что нужно подключить генератор к 'gain.gain' (' osc.connect (gain.gain) '), что, вероятно, не имеет ничего общего с проблемой, и я «Не совсем уверен, но вы могли бы попробовать это. – schroffl