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