gpt4 book ai didi

javascript - 如何在 Web Audio API 中正确取消当前更改的 AudioParam

转载 作者:数据小太阳 更新时间:2023-10-29 05:22:04 25 4
gpt4 key购买 nike

我正在尝试实现可以​​在任何给定时刻重新启动的音量包络,即使它已经处于参数移动的中间但我无法弄清楚如何在不点击结果音频的情况下执行此操作(关于它们发生的时间似乎有些不规则)。

这可能吗?我看到 AudioParam.cancelScheduledValues() “取消了对 AudioParam 的所有计划的 future 更改”,但我不确定当前正在进行的更改会发生什么。

这是我用来启动/重新启动音量包络的代码。

var now = context.currentTime;
var currentVol = gain.gain.value;
gain.gain.cancelScheduledValues(now);
gain.gain.setValueAtTime(currentVol, now);
gain.gain.exponentialRampToValueAtTime(1, now + volAttack);
gain.gain.exponentialRampToValueAtTime(0.000001, now + volAttack + volDecay);

最佳答案

我发现自定义曲线更可靠且更可控

function expCurve(start, end) {
var count = 10;
var t = 0;
var curve = new Float32Array(count + 1);
start = Math.max(start, 0.0000001);
end = Math.max(end, 0.0000001);
for (var i = 0; i <= count; ++i) {
curve[i] = start * Math.pow(end / start, t);
t += 1/count;
}
return curve;
}


gain.gain.cancelScheduledValues(0);
var currentVol = gain.gain.value;
var now = context.currentTime;
gain.gain.setValueCurveAtTime(expCurve(currentVol, 1), now, volAttack);
gain.gain.setValueCurveAtTime(expCurve(1, 0), now + volAttack, volDecay);

关于javascript - 如何在 Web Audio API 中正确取消当前更改的 AudioParam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com