gpt4 book ai didi

javascript - WebAudio FDN 无损原型(prototype)在使用单独的反馈增益时不稳定

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:25 25 4
gpt4 key购买 nike

我正尝试按照 this article 在 WebAudio 中构建 FDN 混响器.

有一个 Householder FDN 的简化实现它对所有延迟使用共同的反馈增益并且看起来非常稳定。

但是,当我尝试实现由 matrix 混合的更一般情况时我似乎无法使其稳定。

我内联了大部分代码以缩小问题范围,并将其放在 JSFiddle 中.
编辑:警告,不稳定情况下的高音量。

区别在于:

var feedback = context.createGain();
feedback.gain.value = gainValue;

for(var i=0; i<n; i++) {
this.delays[i].connect(feedback);
feedback.connect(this.delays[i]);
}

相比于:

for(var i=0; i<n; i++) {
for(var o=0; o<n; o++) {
var feedback = context.createGain();
feedback.gain.value = gainValue;

this.delays[i].connect(feedback);
feedback.connect(this.delays[o]);
}
}

当我对所有延迟使用通用反馈 GainNode 时,它​​工作正常。当我为所有延迟创建单独的反馈 GainNodes 时,使用相同的 gainValue,它变得不稳定。

我做错了什么?

编辑: 来自 the article 的澄清.

As mentioned in §3.4, an "ideal" late reverberation impulse response should resemble exponentially decaying noise [314]. It is therefore useful when designing a reverberator to start with an infinite reverberation time (the "lossless case") and work on making the reverberator a good "noise generator". Such a starting point is [often] referred to as a lossless prototype [153,430]. Once smooth noise is heard in the impulse response of the lossless prototype, one can then work on obtaining the desired reverberation time in each frequency band (as will be discussed in §3.7.4 below).

最佳答案

增益节点相互增加体积。如果您使用多个增益节点,则需要将它们的值除以事件增益节点的数量。

因此,如果您同时有 10 个增益节点,则增益节点的音量将为 value/10(事件增益节点的数量)。您需要先将增益节点的值编辑为新值。因此最好将所有 Gain 节点存储在一个数组中并对其进行循环。

我没有尝试过,但我认为它应该有效。这在物理上完全是无稽之谈,因为如果你有十个人在同一个房间里哭泣,分贝计仍然像一个人哭一样大声。尝试更多地以数学方式考虑增益节点,它们将信号加起来。

顺便说一句,你的 Reverb 很棒。

关于javascript - WebAudio FDN 无损原型(prototype)在使用单独的反馈增益时不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490730/

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