我正在完成关于声学光线追踪的硕士论文,使用 WebGL 作为 GPU 马力的访问点,并使用 WebAudio 来驱动声卡。假设光线追踪器的实现方式是,在图形渲染引擎以每秒 30 帧的速度运行时,它每帧都会提供更新的脉冲响应。因此,一个房间会显示在屏幕上,人们可以在该房间中移动并获得实时图形和声音信息。
据我了解,脉冲响应 (IR) 以及要播放的音频信号 (x) 必须分成 block 以进行循环卷积。这需要扩展到动态卷积核。
现在出现了一个令人费解的部分:当前帧中开始的音频信号x的声音 block 以当前IR开始。在下一帧中,更新的 IR 可用,因此该新 IR 的一部分需要与 x 的第一个 block 进行卷积(因为它仍然在该房间中响起),并且 x 的第二个 block 也必须与 x 的第一个 block 进行卷积。新 IR 的开始。 (稍后会有插图)
该框架在浏览器(Chrome)中运行,因此这个卷积工作需要在 JavaScript 中完成。我是 WebAudio 的新手,但由于对 AudioWorkers 的支持仍然出色,我需要以其他方式实现它。由于这是一项繁重的处理任务,有没有人有想法在 JavaScript 中解决这个问题以实时渲染音频链?
最佳答案
在音频工作人员上线向 Web 音频添加线程之前,浏览器 javascript 的单线程性质严格限制任何实时繁重的工作 - 当我在协商 Web Socket 时要求浏览器使用 Web 音频进行渲染时,我经历过这一点与 Node.js 服务器的流量以提供流音频 - 由于使用 Web Worker (WW) 解决了 - 查找称为 Transferable Objects 的 WW 风格,它允许将 HUGE 类型数组传输到 WW 或从 WW 传输 -如果需要的话,我可以发布一个示例用法,只是喊一声......祝你好运
关于javascript - 实现具有快速更新脉冲响应的卷积混响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28141038/