首页 > 解决方案 > 为音频添加混响会使其失真且响亮

问题描述

我为一个游戏制作了一个网站来制作唱片和分享音乐,一些用户问我是否可以添加一个混响选项来打开/关闭混响(这是为了模拟在洞穴里),我用谷歌搜索了一下,发现了关于webAudio api 与 convolver 节点混响。 老实说,我对此不太了解,但我试图让它发挥作用,最后我做到了:

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”是解码后的音频文件,它似乎可以工作,但声音很大而且失真,我在这里有一个演示,要查看开/关混响之间的区别,只需按下右侧的“R”按钮和然后按中间的音符按钮。

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

标签: javascriptaudioweb-audio-api

解决方案


卷积器当然可以用于混响,但您要提供的“缓冲区”不应与您正在播放的音频相同。相反,它应该被赋予一个混响内核(或脉冲响应),它可以是预先计算的或实际的录音。它对应于空间对声音脉冲的反应。您可能可以在网上找到合适的免版税内核,但我自己从未寻找过。

更多关于Wikipedia 上的卷积混响。


推荐阅读