我刚刚开始研究 NaCl,希望能够制作音频浏览器扩展。文档中有一个正弦波演示,因此制作合成器似乎很简单。
我很想知道是否可以在输出之前捕获浏览器音频流,以便可以应用实时效果。这可能吗?
我刚刚开始研究 NaCl,希望能够制作音频浏览器扩展。文档中有一个正弦波演示,因此制作合成器似乎很简单。
我很想知道是否可以在输出之前捕获浏览器音频流,以便可以应用实时效果。这可能吗?
不仅是可能的。我已经做到了。您创建一个 ScriptProcessorNode,其 onaudioprocess 回调获取输入缓冲区并通过 postMessage 将其传递给等待的 NaCl 模块。一旦 NaCl 模块完成处理,它就会通过 postMessage 将其发送回 JavaScript。ScriptProcessorNode 必须输出一些内容,因此您会引入 1 帧延迟,并且 ScriptProcessorNode 会复制从 NaCl 接收到的最近处理的输出。
流程如下所示:
ScriptProcessorNode -> postMessage 输入缓冲区到 NaCl
ScriptProcessorNode -> 将从 NaCl 接收到的最新缓冲区复制到输出缓冲区。
NaCl -> 接收音频样本缓冲区,对其进行处理并将其发回。
如果您希望我在 GitHub 上发布代码或有其他问题,请告诉我。
HTH,约翰