我想开始淡出,但随后能够取消淡出并从当前音量级别淡入。
首先我尝试了这个:
gainNode.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 5);
setTimeout(function(){
gainNode.gain.cancelScheduledValues(audioCtx.currentTime);
gainNode.gain.exponentialRampToValueAtTime(1, audioCtx.currentTime + 5);
}, 3000);
( fiddle )
这在 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);
( fiddle )
...但在 Firefox 中则不然,因为它返回增益的最后设置值而不是计算值,即 1,因此它从 1 转换到 1,因此结果与我第一次尝试时的结果相同.
所以这些给我留下了疑问......
- 我的上一个解决方案规范是兼容的还是只是一个 Chrome 错误?
- 是否有跨浏览器(至少 Firefox + Chrome)解决该问题?
- 是否有跨浏览器解决方案来解决规范兼容的问题?
最佳答案
我想你想要“cancelAndHoldAtTime()”( https://webaudio.github.io/web-audio-api/#dom-audioparam-cancelandholdattime )。不幸的是,尚未在 Firefox 中实现。
关于javascript - 取消音频淡出然后淡入 - Web Audio API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52129072/