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

标签 javascript signal-processing web-audio-api

我正在完成关于声学光线追踪的硕士论文,使用 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/

相关文章:

javascript - 如何用纯 JavaScript 编写以下 JQuery 函数?

signal-processing - STM32 - 读取 I2S 以录制 .WAV 文件。声音断断续续,是什么原因造成的?

audio - 调频(FM)代码段

javascript - 使用 AnalyserNode 提高 FFT 分辨率

Javascript Web 音频 API - AudioContext 到 base64

javascript - 如何使用 jQuery 捕获不同父级下具有相同类的 html 元素?

javascript - JS获取名称中有空格的对象的嵌套属性

javascript - 播放多个连续音频文件后出现延迟

javascript - 如何在被透明 div 覆盖时突出显示 HTML 文本?

c++ - 基本正弦波振荡器上的无毛刺频率变化