当浏览器不支持时,是否有 cancelAndHoldAtTime 的正确替代方法?
Is there a correct alternative to cancelAndHoldAtTime when the browser does not support this?
使用 WAA(网络音频 Api)我正在使用 exponentialRampToValueAtTime
创建淡入淡出效果,用户按下 "stop" 按钮可以取消该淡入淡出效果。
停止函数看起来像这样:
this._gainNode.gain.cancelAndHoldAtTime(this._AudioContext.currentTime);
this._gainNode.gain.exponentialRampToValueAtTime(0.000001, this._AudioContext.currentTime + fadeDuration);
完整的功能被包裹在一个Promise中,因为我需要在停止后做一些其他事情(fadeDuration
);
问题是在某些浏览器中 cancelAndHoldAtTime
不会退出,我会收到一些我不知道如何防止的令人讨厌的剪辑。 cancelValuesAndHoldAtTime
得到的支持更少。
我试过 cancelScheduledValues
但没有用。
是否有 cancelAndHoldAtTime
的解决方法或正确的替代方法
您可以通过调用 setValueAtTime(v, t)
进行近似,其中 t
是用户按下停止按钮的上下文时间,v
是当时指数的估计值t
.
您可能仍然会遇到问题,但它可能比仅使用 cancelScheduledValues
.
要好得多
这就是 cancelAndHoldAtTime
被添加到 API 的原因。
虽然 cancelAndHoldAtTime
的最佳替代方案可能是 for Raymond Toy,但为了完全移除剪辑和任何故障,我最终做的是在振荡器增益和destination
OSC -> oscGain -> mainGain -> 扬声器。
在我做任何事情之前,我关闭 mainGain
然后 cancelScheduledValues
和所有其他东西到 oscGain
使用 WAA(网络音频 Api)我正在使用 exponentialRampToValueAtTime
创建淡入淡出效果,用户按下 "stop" 按钮可以取消该淡入淡出效果。
停止函数看起来像这样:
this._gainNode.gain.cancelAndHoldAtTime(this._AudioContext.currentTime);
this._gainNode.gain.exponentialRampToValueAtTime(0.000001, this._AudioContext.currentTime + fadeDuration);
完整的功能被包裹在一个Promise中,因为我需要在停止后做一些其他事情(fadeDuration
);
问题是在某些浏览器中 cancelAndHoldAtTime
不会退出,我会收到一些我不知道如何防止的令人讨厌的剪辑。 cancelValuesAndHoldAtTime
得到的支持更少。
我试过 cancelScheduledValues
但没有用。
是否有 cancelAndHoldAtTime
您可以通过调用 setValueAtTime(v, t)
进行近似,其中 t
是用户按下停止按钮的上下文时间,v
是当时指数的估计值t
.
您可能仍然会遇到问题,但它可能比仅使用 cancelScheduledValues
.
这就是 cancelAndHoldAtTime
被添加到 API 的原因。
虽然 cancelAndHoldAtTime
的最佳替代方案可能是 destination
OSC -> oscGain -> mainGain -> 扬声器。
在我做任何事情之前,我关闭 mainGain
然后 cancelScheduledValues
和所有其他东西到 oscGain