Javascript 网络音频延迟节点引导

Javascript 网络音频延迟节点引导,javascript,web-audio-api,Javascript,Web Audio Api,试图为一个小的网络音频应用程序连接延迟效果,但似乎无法让它听起来很好。看起来很简单,但没有得到我想要的结果。我想让延迟通知重复一遍又一遍,然后慢慢消失。我可以实现其中的增益部分,但似乎无法获得反馈回路部分,因此延迟继续。有人能给我指出正确的方向吗 这是相关代码。增加了第二次延迟,希望延长,但不完全是我想要的 var osc = ctx.createOscillator(); var gainNode = ctx.createGain();

试图为一个小的网络音频应用程序连接延迟效果,但似乎无法让它听起来很好。看起来很简单,但没有得到我想要的结果。我想让延迟通知重复一遍又一遍,然后慢慢消失。我可以实现其中的增益部分,但似乎无法获得反馈回路部分,因此延迟继续。有人能给我指出正确的方向吗

这是相关代码。增加了第二次延迟,希望延长,但不完全是我想要的

            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);
        }

谢谢

我没有尝试这一点,但是在
addDelay===true
的情况下,您可能想删除这一行:

连接(ctx目的地);
我也不知道你为什么要这么做

连接(延迟);
连接(延迟2);
您的意思是将两个延迟节点级联在一起吗?如果你这样做了,你可以只使用一个延迟时间更长的延迟节点


下面是一个似乎有效的小例子:不确定这是否是您想要的。

在Chris Lowis的这篇文章中找到了答案:


这正是我想要的。

谢谢雷蒙德,是的,我正在尝试增加两次延迟,看看这是否会增加结果。今晚我将讨论这个问题,并向您通报结果。再次感谢。我能试一下。我想我在我最初的帖子中没有做足够的澄清,但我所寻找的是一个会持续几次而不是一次的延迟。换句话说,假设我弹奏一个持续时间为十六的音符。我很想听到那个音符每0.25秒左右演奏几次,直到它最终消失。希望这有意义!我需要做什么才能实现这种延迟?谢谢
            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);
        }