Как audioParam.exponentialRampToValueAtTime работа?
Я не могу получить скользящее изменение объема через exponentialRampToValueAtTime GainNode.
вот пример:
var context = new AudioContext(),
osc = context.createOscillator(),
gain = context.createGain();
osc.frequency.value = 440; // A note
osc.start( 0 );
osc.connect( gain );
gain.gain.value = 0;
gain.connect( context.destination );
gain.gain.cancelScheduledValues( 0 );
gain.gain.setValueAtTime( 0, context.currentTime );
gain.gain.exponentialRampToValueAtTime( 1, context.currentTime + 2 );
в моем понимании это должно постепенно увеличивать объем, пока не достигнет 1 (100%), и весь этот процесс должен занять 2 секунды. Правильно ли это предположение?
Если это так, почему он остается на 0 в течение 2 секунд и внезапно переключается на полный объем?
спасибо заранее за ваше время и усилия.
2 ответов
похоже, что этой функции не нравится значение 0. FF бросает "SyntaxError: была указана недопустимая или незаконная строка". Ниже код будет правильно скатываться. Смотрите на Plnkr.
var context = new AudioContext(),
osc = context.createOscillator(),
gain = context.createGain();
osc.frequency.value = 440.0; // A note
osc.start( 0 );
osc.connect( gain );
gain.connect( context.destination );
gain.gain.setValueAtTime(0.0001, context.currentTime); // <-- line of interest
gain.gain.exponentialRampToValueAtTime(1, context.currentTime + 10 );
обновление: "исключение NotSupportedError должно быть вызвано, если это значение меньше или равно 0, или если значение во время предыдущего события меньше или равно 0" в соответствии веб-аудио спецификация. Как выяснил @cwilso (см. Примечание.)