尝试连接一个小的Web Audio应用程序的延迟效果,似乎无法让它听起来不错。看起来很简单,但没有得到我想要的结果。希望延迟说明一遍又一遍地重复,慢慢消失。我可以实现其中的增益部分,但似乎无法获得反馈回路部分,因此延迟继续。有人能指出我正确的方向吗?
这是相关代码。增加了第二次延迟,希望延伸但不完全是我想要的。
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);
}
谢谢!
答案 0 :(得分:1)
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);
正是我在寻找的东西。
答案 1 :(得分:0)
我没试过,但在addDelay === true
的情况下,也许你想要删除这一行:
gainNode.connect(ctx.destination);
我也不确定你为什么这么做
gainNode.connect(delay);
gainNode.connect(delay2);
你的意思是将两个延迟节点级联在一起吗?如果你这样做,你可以使用延迟时间较长的延迟节点。
以下是一个似乎有用的小例子:https://jsfiddle.net/n6782bpf/不确定这是否是你想要的。