audioparam 39;s更改如何延迟?
How can an AudioParam's change be delayed
当尝试实现ADSR信封时,很容易实现ADS攻击,衰减和维持,因为所有这些值的时间都是同时已知的。然而,如果试图实现这个信封的释放部分,我遇到了麻烦。
问题是我已经记下了提前安排的事件。然而AudioParams。然而,linearRampToValueAtTime只接受两个参数:斜坡应该结束的时间和它应该结束的值。
如何产生一个在特定时间开始的斜坡?
/**
* @param attack {int}
* @param decay {int}
* @param sustain {number} 0-100 percentage of overall level
* @param release {int} time for volume to reach 0
*/
function ADSR(attack, decay, sustain, release) {
this.attack = attack;
this.decay = decay;
this.sustain = sustain;
this.release = release;
function applyTo(audioParam, time) {
audioParam.linearRampToValueAtTime(1, time+attack);
audioParam.linearRampToValueAtTime(this.sustain/100, time+attack+decay);
}
this.applyTo = applyTo;
function applyRelease(audioParam, time, audioNode) {
// here I want to apply the release starting at the time given
// ending at time + this.time
}
return time;
}
根据规范事件是按顺序计算的,因此如果您在rampToValueAtTime
之前安排了setValueAtTime
,则坡道将在此之后计算:
audioParam.setValueAtTime(audioParam.value, time);
audioParam.linearRampToValueAtTime(0, time+this.time);
如果你正在寻找的东西,斜坡,同时保持当前值(时间斜坡取决于当前值和给定的目标值之间的差异),我建议你使用setTargetAtTime
系统。这应该是有用的,正如规范中提到的,例如在您的情况下它是有用的:
在给定时间以给定时间常数的速率开始指数接近目标值。在其他用途中,这对于实现ADSR信封的"衰减"answers"释放"部分很有用。
它使用一个timeConstant来计算,它定义了应该花费多少时间才能上升到1 - 1/e (around 63.2%)
。
audioParam.setTargetAtTime(<target_value>, <start_Time>, <timeConstant>);
时间常数越大,跃迁越慢。我建议您尝试一下这个值,看看适合您的情况。
相关文章:
- 可以简化嵌套的延迟Q Promises解析吗
- onclick函数需要双击,因为类分配延迟
- 更多延迟动画
- 对父作用域的指令更新延迟了一步
- 为JS函数添加延迟
- 带有延迟的循环每次应运行5次
- 关键帧之间的css3动画延迟
- 如何在有延迟的情况下对两个代码进行积分
- 如何为.css状态的更改添加延迟
- Angular.js延迟控制器初始化
- 在延迟时设置Whois脚本
- 如何在Javascript中延迟setInterval
- 如何在一个元素动画之后延迟
- 如何将一个方法延迟到另一个方法首先完成,javascript
- jQuery延迟了ajax调用的循环
- 如何减少在移动网络应用程序上播放声音的延迟
- 如何将GreaseMonkey中的XMLHttpRequest延迟到目标页面加载完成
- 实现延迟的jquery更改事件处理程序
- HTML5相机缓冲和延迟(延迟镜像)
- Javascript“Firefly”背景导致网站延迟延迟