我想快速淡出一个振荡器,以消除从简单停止它时得到的砰砰声/嘶嘶声。克里斯·威尔逊(Chris Wilson)建议使用technique来设置setTargetAtTime的增益。

现在我不太了解它的最后一个参数'timeConstant':

它的单位是什么?秒?
要在1ms内达到目标值,我必须输入什么?

最佳答案

克里斯·威尔逊(Chris Wilson)那家伙,真麻烦。 :)

setTargetAtTime是指数衰减。该参数是一个时间常数:

“timeConstant是在给出阶跃输入响应(从0到1的值转换)的情况下,一阶线性连续时不变系统达到值1-1/e(大约63.2%)所花费的时间。”

因此,对于每个“时间常数”的时间长度,电平将下降超过2/3rds(假设增益为1,并且您将目标设置为0。在某个时刻,衰减变得非常接近零,它低于噪声阈值,因此您无需担心。它永远不会“达到目标值”,它会连续逼近目标值,尽管当然在某些时候,差值会低于您可以达到的精度代表一个 float 。

我建议您尝试一下,但是这里有个快速的猜测可以帮助您入门:

// only setting this up as a var to multiply it later - you can hardcode.
// initial value is 1 millisecond - experiment with this value if it's not fading
// quickly enough.
var timeConstant = 0.001;

gain = ctx.createGain();
// connect up the node in place here
gain.gain.setTargetAtTime(0, ctx.currentTime, timeConstant);

// by my quick math, 8x TC should take you to around 2.5% of the original level
// - more than enough to smooth the envelope off.
myBufferSourceNode.stop( ctx.currentTime + (8 * timeConstant) );

关于html - Web音频: how does timeConstant in setTargetAtTime work?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20588678/

10-10 14:18