为了不让听众感到窒息,我想播放一波,但音量不应从一开始就以 100% 的比例播放,例如,它应该在 2 秒的持续时间内从 0% 变为 100%。
我设置了一个 setTimeout 并且随着时间的推移增加了增益,但我不知道是否有其他更好的方法
var source = aCtx.createBufferSource();
source.buffer = buf;
var gainNode = aCtx.createGain();
gainNode.gain.value = 0
source.connect(gainNode);
gainNode.connect(aCtx.destination);
source.start(0);
setTimeout(function() {
gainNode.gain.value = 0.5
}, 1000)
setTimeout(function() {
gainNode.gain.value = 1
}, 2000)
最佳答案
网络音频 API 提供了一个 library function为此。
AudioParam.linearRampToValueAtTime(value, endTime)
值(value)
一个 float ,表示 AudioParam 将在给定时间上升到的值。
结束时间
一个 double 值,表示在斜坡开始后值的更改将停止的确切时间(以秒为单位)。
所以在你的情况下使用
gainNode.gain.linearRampToValueAtTime(0, 0)
gainNode.gain.linearRampToValueAtTime(1, 2)
关于javascript - 网络音频 api : How to increase continuously the volume of the sound from the beginning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929573/