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

标签 javascript html5-audio web-audio-api

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

首先我尝试了这个:

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/

相关文章:

javascript - 如何从 Three.JS AudioContext 将音频连接到 MediaStream

javascript - 使用 navigator.getUserMedia (Javascript) 访问移动麦克风

javascript - 通过 attributes.getNamedItem 获取元素的实际宽度/高度值

javascript - 分配具有不同余数的 JavaScript 数字

javascript - 使用 firestore 的 Angular 异步验证器

javascript - Mac 版 Firefox 上的 Audio.js 和 .ogg

html - Chrome 忽略音频预加载 ="metadata"

javascript - 获取多个字符串之间的字符串,即 HTML 标签

javascript - 在 touchstart 上播放音频

javascript - 在 Safari 和 Edge 中将 Float32Array 复制到新的 AudioBuffer