尝试为一个小型网络音频应用程序连接延迟效果,但似乎无法让它听起来不错。看起来很简单,但没有得到我想要的结果。想让延迟音符一遍又一遍地重复并慢慢消失。我可以实现其中的增益部分,但似乎无法获得反馈循环部分,因此延迟仍在继续。有人能指出我正确的方向吗?
这是相关代码。添加了第二次延迟,希望能够延长,但并不完全是我想要的。
var osc = ctx.createOscillator();
var gainNode = ctx.createGain();
if (addDelay === false) {
osc.connect(gainNode);
gainNode.connect(ctx.destination);
}
else if (addDelay === true) {
var delay = ctx.createDelay();
var delay2 = ctx.createDelay();
delay.delayTime.value = 0.35;
delay2.delayTime.value = 0.5;
osc.connect(gainNode);
gainNode.connect(ctx.destination);
gainNode.connect(delay);
gainNode.connect(delay2);
delay.connect(gainNode);
delay2.connect(gainNode);
delay.connect(ctx.destination);
delay2.connect(ctx.destination);
}
gainNode.gain.value = 0.0;
gainNode.gain.setTargetAtTime(0.75, ctx.currentTime, 0.1);
gainNode.gain.setTargetAtTime(0.0, ctx.currentTime + sustainFnl, 0.01);
osc.frequency.value = hz * octave / 4;
osc.type = waveType;
osc.start();
osc.stop(ctx.currentTime + sustainFnl + 0.01);
}
谢谢!
最佳答案
在 Chris Lowis 的这篇文章中找到了答案:http://blog.chrislowis.co.uk/2014/07/23/dub-delay-web-audio-api.html
var ctx = new AudioContext();
var audioElement = $('#feedback audio')[0];
audioElement.addEventListener('play', function(){
var source = ctx.createMediaElementSource(audioElement);
var delay = ctx.createDelay();
delay.delayTime.value = 0.5;
var feedback = ctx.createGain();
feedback.gain.value = 0.8;
delay.connect(feedback);
feedback.connect(delay);
source.connect(delay);
source.connect(ctx.destination);
delay.connect(ctx.destination);
正是我正在寻找的东西。
关于javascript - 网络音频延迟节点指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472681/