我目前正在为音乐家开发一个基于网络的协作录音平台,类似于移植到网络的基本 DAW(具有额外的社交/共享功能)。无论如何,我的目标是让它 100% 无闪存,所以我已经阅读了很多关于 HTML5 的内容,特别是 Web Audio API(这本书帮助很大,顺便说一句)。
为了从用户的麦克风录制音频,我使用 getUserMedia() 制作了一个自定义版本的RecorderJS。简而言之,我将 getUserMedia() 的输出路由到 ScriptProcessorNode,该 ScriptProcessorNode 每隔 4096 个样本将 inputBuffer 的内容写入一个数组,该数组稍后会导出到一个 PCM WAV 文件。到目前为止,它工作正常。
问题是录制过程的开始涉及两件事:播放所有先前录制的音轨,因此音乐家有一个可以在其上播放的引用,以及开始实际录制(即,将缓冲区写入数组)。
虽然在用户录制时麦克风的声音没有可听的延迟或延迟,但当录制结束并播放所有音轨时,新录制的音轨会有轻微的延迟。
这可能是什么原因造成的?有哪些可能的解决方案?
我想我可以通过将播放发送到同一个处理器节点然后找出它们实际开始的时间来找到两个事件之间的时间差,以补偿任何延迟。为此,我需要让 ScriptProcessorNode 在通道 1 和 2 上接收例如 getUserMedia 内容,并在通道 3 和 4 上播放,但我无法完成这项工作。我尝试将这两个源路由到处理器节点,也尝试使用合并/拆分器,但似乎没有任何效果。它们都在通道 1 和 2 上到达处理器节点,而通道 3 和 4 则为空。
抱歉,如果这是题外话或不包含实际代码(如有必要,我很乐意提供),但在这方面没有做太多的事情,所以任何想法都会受到欢迎。
提前致谢!