在浏览器中以低延迟捕获声音输入

Posted

技术标签:

【中文标题】在浏览器中以低延迟捕获声音输入【英文标题】:Capturing sound input with low latency in the browser 【发布时间】:2013-07-19 12:55:58 【问题描述】:

是否可以在浏览器中捕获低延迟的声音输入?主要用于录制吉他。 (我知道这也取决于硬件,但我们假设硬件足够好)。 我尝试使用 Web Audio API,但它的延迟有点差。是否还有其他技术可以在浏览器中提供高性能的声音输入捕获?是否可以为此使用 Unity3D?

谢谢。

【问题讨论】:

你在做任何处理吗?我发现延迟在录制吉他的可接受范围内,即使是现场效果也是如此。也许尝试减少您可能正在使用的任何ScriptProcssors 上的bufferSize 用铬?有机会发布一些对您有用的示例吗? 这在 Chrome 中对我来说很好用:gist.github.com/kevincennis/6043052 【参考方案1】:

“Web Audio API 延迟很糟糕”忽略了很多潜在问题。低延迟几乎总是需要一些调整。

1) 在 OSX 上的延迟(通常为 3 毫秒左右)比在 Windows 上的延迟要低得多(通常为 10 毫秒左右)。它在 Linux 上可能非常高,主要是由于硬件调整问题。

2) 可以在大多数系统上调整延迟,但您总是会在数字音频中遇到延迟。

3) 至少在 OSX 上,您还可以通过提高采样率来减少延迟 - 在 44.1kHz 时约为 3ms,但如果您以 88.2kHz 录制,则只有一半。 :)

我通过 Mac 上的网络音频弹奏和录制吉他,我发现它完全可以接受。 YMMV。

哦,ScriptProcessorNodes 对保持低延迟非常不利 - 如果您可以将它们从音频路径中消除,那无疑是最好的。

【讨论】:

我还发现 Linux 有很高的延迟。使用那个最小的例子gist.github.com/kevincennis/6043052 我仍然有太多的延迟来舒适地弹吉他。但是,绕过浏览器,在 alsa 级别连接源和接收器时,我得到了低延迟。这不会使其成为实施问题而不是硬件/驱动程序问题吗? 我在 Windows 10 Chrome 和 Firefox 上都有 200ms 的延迟,简单的例子 (jsfiddle.net/zlelik/xfq3ykp7/49) 没有任何处理。如何使其达到 20-50 毫秒?是否有任何指导,如何调整它并达到20ms?我认为 20 毫秒对我来说是完美的。我也需要它来做吉他:)

以上是关于在浏览器中以低延迟捕获声音输入的主要内容,如果未能解决你的问题,请参考以下文章

无延迟播放声音 iOS

在移动浏览器中以 60 FPS 的速度捕获视频

强制用户使用 HTML5 视频输入捕获以低分辨率捕获视频

在移动网络浏览器中使用 input[type='file'] 捕获照片后,如何在画布中以正确的方向绘制照片?

在浏览器中捕获当前正在播放的声音

是否可以在浏览器中以编程方式捕获页面上的所有事件?