Отменить исчезновение звука, а затем исчезнуть - Web Audio API - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу начать исчезать, но затем смогу отменить это и постепенно исчезнуть с текущего уровня громкости.

Сначала я попробовал это:

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) решение этой проблемы?
  • Существует ли кросс-браузерное решение проблемы, совместимое со спецификацией?

1 Ответ

0 голосов
/ 04 сентября 2018

Я думаю, что вы хотите "cancelAndHoldAtTime ()" (https://webaudio.github.io/web-audio-api/#dom-audioparam-cancelandholdattime). К сожалению, пока не реализовано в Firefox.

...