使用快速更新的脉冲响应实现卷积混响

时间:2015-01-25 20:20:35

标签: javascript signal-processing web-audio

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

据我所知,要播放的脉冲响应(IR)和音频信号(x)必须以块的形式分割,以进行循环卷积。这需要扩展到动态卷积内核。

现在有一个令人费解的部分:在当前帧中开始的音频信号x的声音块以当前IR开始。在下一帧中,可以使用更新的IR,因此这个新IR的一部分需要与x的第一个块进行卷积(因为它仍然在那个房间内响起),并且第二个x块必须与新IR的开始。 (插图即将推出)

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

1 个答案:

答案 0 :(得分:0)

直到音频工作者上线为Web音频添加线程,浏览器javascript的单线程性质严格限制任何实时繁重的工作 - 我在浏览器在协商Web Socket时使用Web Audio进行渲染时遇到了这种情况使用Node.js服务器提供流媒体音频 - 自从使用Web Worker(WW)解决后 - 查找WW的称为Transferable Objects的风格,允许将 HUGE 类型的数组传输到WW /来自WW - 我可以发布一个示例用法,如果需要只是给一个喊...祝你好运