使用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
答案 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