javascript - 为音频添加混响会使其失真且响亮
问题描述
我为一个游戏制作了一个网站来制作唱片和分享音乐,一些用户问我是否可以添加一个混响选项来打开/关闭混响(这是为了模拟在洞穴里),我用谷歌搜索了一下,发现了关于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 的实现中犯了一些错误,但我不知道是什么原因造成的,我该如何解决?
解决方案
卷积器当然可以用于混响,但您要提供的“缓冲区”不应与您正在播放的音频相同。相反,它应该被赋予一个混响内核(或脉冲响应),它可以是预先计算的或实际的录音。它对应于空间对声音脉冲的反应。您可能可以在网上找到合适的免版税内核,但我自己从未寻找过。
更多关于Wikipedia 上的卷积混响。
推荐阅读
- laravel - Laravel Eloquent 模型范围多个条件
- r - R-shiny 下载按钮说明
- reactjs - GraphQL _ Apollo-client - 直接在组件中传递 guery 变量
- ionic3 - Ionic/Angular:从另一个网站读取任何 HTML 页面
- reactjs - React - 在 componentDidMount 中访问上下文
- asp.net - 创建单页应用程序的最佳堆栈/解决方案,允许多个用户实时贡献并查看更改
- python - 给定序列的均值和方差,如何生成具有确定性随机游走和漂移的时间序列数据?
- google-sheets - 使用 API 密钥更改数据
- azure - 2个域名是否可以将一个Azure Web应用程序与应用程序网关一起使用?如何?
- symfony - 存储库中的查询生成器:错误:未定义类“AppBundle\Entity\”