1

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

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

这种延迟是在哪里引入的?由于声速引起的延迟大约是我听到的声音的 1000 倍。

简而言之,我怎样才能让这两个样本同时播放?

我在 Linux 上的 Chrome 中工作。

4

1 回答 1

0

这种延迟是在哪里引入的?

无论是播放还是录音。

您的声卡有一个缓冲区,软件必须一次将音频小块写入该缓冲区。如果软件跟不上,就会听到断断续续的音频。因此,缓冲区大小设置得足够大以防止这种情况发生。

在录制端也是如此。如果缓冲区不够大,如果软件无法足够快地从缓冲区中读取,录制的音频数据就会丢失,从而导致音频断断续续和丢失。

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

不管缓冲区大小有多低,仍然会有延迟。这就是基于计算机的数字音频的本质。

我怎样才能让这两个样本同时播放?

您必须延迟其中一个样本以使它们恢复同步。

于 2018-11-01T05:08:28.517 回答