当浏览器不支持时,是否有正确的cancelAndHoldAtTime替代方案?

时间:2017-12-30 17:57:16

标签: web-audio web-audio-api

使用WAA(网络音频Api)我使用noexcept创建淡入和淡出,可以在用户按下“停止”按钮时取消淡入淡出。

停止功能看起来像这样:

exponentialRampToValueAtTime

完整的函数包含在Promise中,因为我需要在stop( this._gainNode.gain.cancelAndHoldAtTime(this._AudioContext.currentTime); this._gainNode.gain.exponentialRampToValueAtTime(0.000001, this._AudioContext.currentTime + fadeDuration); )后执行其他操作;

问题是在某些浏览器中fadeDuration没有退出,我得到了一些我不知道如何防止的讨厌的剪辑。支持cancelAndHoldAtTime的情况也是如此。

我尝试了cancelValuesAndHoldAtTime,但没有用。

是否有解决方法或正确替代cancelScheduledValues

2 个答案:

答案 0 :(得分:2)

您可以通过调用setValueAtTime(v, t)来进行近似,其中t是用户按下停止按钮的上下文时间,v是指数时的估计值t 1}}。

你可能仍会遇到一个小故障,但它可能比仅使用cancelScheduledValues要好得多。

这就是将cancelAndHoldAtTime添加到API的原因。

答案 1 :(得分:0)

虽然对于the one recommended来说cancelAndHoldAtTime可能是Raymond Toy的最佳选择,但要彻底删除剪辑和任何毛刺,我最终要做的是在振荡器之间产生“主要增益”获得和destination

OSC - > oscGain - > mainGain - >扬声器。

在我做任何事情之前,我将mainGain然后cancelScheduledValues以及所有其他内容关闭到oscGain