实现具有快速更新脉冲响应的卷积混响

Implementing a convolution reverb with rapidly updated impulse responses

本文关键字:响应 卷积 脉冲 更新 实现      更新时间:2023-09-26

我正在做关于声学光线追踪的硕士论文,使用 WebGL 作为 GPU 马力的接入点和 WebAudio 来驱动声卡。假设光线追踪器的实现使得它在图形渲染引擎以每秒 30 帧的速度运行时每帧提供更新的脉冲响应。因此,一个房间显示在屏幕上,人们可以通过实时图形和声学信息在该房间中移动。

我知道脉冲响应(IR)以及要播放的音频信号(x)必须分成块以进行圆形卷积。这需要扩展到动态卷积内核。

现在出现了一个令人费解的部分:在当前帧中启动的音频信号 x 的声音块从当前 IR 开始。在下一帧中,更新的 IR 可用,因此此新 IR 的一部分需要与 x 的第一个块卷积(因为它仍然在该房间中响铃),并且 x 的第二个块必须与新 IR 的开头卷积。(插图将很快跟进)

框架在浏览器(Chrome)中运行,所以这个卷积的东西需要在javascript中完成。我是 WebAudio 的新手,但由于对 AudioWorkers 的支持仍然非常出色,我需要以其他方式实现它。由于这是一项繁重的处理任务,有没有人想过在javascript中解决这个问题以实时渲染音频链?

在音频工作者上线向 Web 音频添加线程之前,浏览器 javascript 的单线程特性严格限制了任何实时繁重的工作 - 当我让浏览器使用 Web 音频渲染时,我遇到了这种情况.js与 Node 服务器协商 Web Socket 流量以提供流音频 - 自从使用 Web Worker (WW) 解决以来 - 查找称为可转移对象的 WW 风格,它允许传输巨大的与 WW 之间的类型数组 - 如果需要,我可以发布一个示例用法,只是大喊大叫......祝你好运