Я хочу начать исчезать, но затем смогу отменить это и постепенно исчезнуть с текущего уровня громкости.
Сначала я попробовал это:
gainNode.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 5);
setTimeout(function(){
gainNode.gain.cancelScheduledValues(audioCtx.currentTime);
gainNode.gain.exponentialRampToValueAtTime(1, audioCtx.currentTime + 5);
}, 3000);
( скрипка )
Это не сработало ни в Firefox, ни в Chrome. Затухание начинается, затем, когда срабатывает функция тайм-аута, значение усиления просто возвращается к 1.
Затем я обнаружил, что этот работает в Chrome:
gainNode.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 5);
setTimeout(function(){
const val = gainNode.gain.value;
gainNode.gain.cancelScheduledValues(audioCtx.currentTime);
gainNode.gain.setValueAtTime(val, audioCtx.currentTime);
gainNode.gain.exponentialRampToValueAtTime(1, audioCtx.currentTime + 5);
}, 3000);
( скрипка )
... Но не в Firefox, поскольку он возвращает последнее установленное значение усиления вместо вычисленного, которое равно 1, поэтому оно переходит от 1 к 1, поэтому результат такой же, как в моей первой попытке .
Так что у меня остались вопросы ...
- Совместима ли моя последняя спецификация решения или просто ошибка Chrome?
- Существует ли кросс-браузерное (хотя бы Firefox + Chrome) решение этой проблемы?
- Существует ли кросс-браузерное решение проблемы, совместимое со спецификацией?