取消淡出音频然后淡入 - Web Audio API

问题描述 投票:0回答:1

我想开始淡出,但随后能够取消它并从当前音量级别淡入。

首先我尝试了这个:

gainNode.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 5);
setTimeout(function(){
    gainNode.gain.cancelScheduledValues(audioCtx.currentTime);
    gainNode.gain.exponentialRampToValueAtTime(1, audioCtx.currentTime + 5);
}, 3000);

(Qazxswpoi)

这在Firefox或Chrome中都不起作用。淡出开始,然后当超时功能触发时,增益值只会跳回到1。

然后我发现这个适用于Chrome:

fiddle

(Qazxswpoi)

...但不是在Firefox中,因为它返回增益的最后设定值而不是计算值,即1,因此它从1转换为1,因此结果与我的第一次尝试相同。

所以这些给我留下了问题......

  • 我的上一个解决方案规范兼容还是只是Chrome错误?
  • 是否有针对该问题的跨浏览器(至少是Firefox + Chrome)解决方案?
  • 是否有针对该规范兼容的问题的跨浏览器解决方案?
javascript html5-audio web-audio web-audio-api
1个回答
1
投票

我想你想要“cancelAndHoldAtTime()”(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中实现。

© www.soinside.com 2019 - 2024. All rights reserved.