向音频添加混响会使其失真且响亮

Adding reverb to audio makes it distorted and loud

我制作了一个游戏网站来录制和分享音乐,一些用户问我是否可以添加一个混响选项来切换 on/off 混响(这是为了模拟在洞穴中),我用谷歌搜索向上一点 found about the webAudio api reverb with the convolver node. 老实说,我对此不太了解,但我试图让它发挥作用,最后我做到了:

const source = a_ctx.createBufferSource()
source.buffer = buf
source.playbackRate.value = pitchKey;
if(reverbToggled){
    let convolver = a_ctx.createConvolver();
    convolver.buffer = buf
    source.connect(convolver)
    convolver.connect(a_ctx.destination)
}else{
    source.connect(a_ctx.destination)
}
source.start(0)

变量"buf"是解码后的音频文件,貌似可以,但是声音很大而且失真,我有一个demohere,看看有什么区别on/off混响,只需按下右侧的 "R" 按钮,然后按下中间的音符按钮。

有可能我在 convolverNode 的实现中犯了一些错误,但我不完全知道是什么原因导致的,我该如何解决?

卷积器当然可以用来做混响,但是你要给的"buffer"不能和你播放的音频一样。相反,应该给它一个混响内核(或脉冲响应),它可以是预先计算的或实际的录音。它对应于 space 对声音脉冲的反应。您可能可以在网上找到合适的免版税内核,但我自己从未寻找过。

有关卷积混响的更多信息 on Wikipedia