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