Как 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 (см. Примечание.)


документы в Mozilla говорят, что значение должно быть положительным.