记录的第一个样本的AudioContext currentTime是什么?

时间:2018-11-01 04:40:35

标签: javascript low-latency audiocontext web-mediarecorder

使用Web Audio API,创建一个bufferSource,并使用一个新的MediaRecorder来同时进行记录。我正在用内置麦克风录制从扬声器发出的声音。

如果我播放原始录音和新录音,则两者之间会有很大的滞后。 (对我来说大约200ms。)如果我在调用两个“开始”方法时console.log记录globalAudioCtx.currentTime的值,则这两个数字是完全相同的。 Date.now()的值也完全相同。

此延迟在哪里引入?音速带来的延迟大约是我听到的延迟的1000倍。

简而言之,我如何才能使这两个样本完全同时播放?

我正在使用Linux上的Chrome。

1 个答案:

答案 0 :(得分:0)

  

此延迟在哪里引入?

同时播放和录制。

您的声卡有一个缓冲区,软件必须一次将音频小片段地写入该缓冲区。如果软件无法跟上,则会听到杂音。因此,将缓冲区大小设置为足够大以防止发生这种情况。

在记录端也是如此。如果缓冲区不够大,如果软件不能足够快地从该缓冲区读取数据,则录制的音频数据将丢失,从而导致断断续续和丢失音频。

浏览器未使用声卡的最低延迟操作模式。您可以应用一些调整(例如,在Windows和Chrome上使用WASAPI和独占模式),但是您会受到浏览器开发人员的摆布,他们没有像您和我这样的人来设计它。

无论缓冲区大小有多低,仍然会有滞后。这就是基于计算机的数字音频的本质。

  

我如何才能使这两个样本完全同时播放?

您必须延迟采样之一才能使它们恢复同步。