ALSA 与 PulseAudio - 延迟问题

ALSA vs PulseAudio - Latency Concerns

美好的一天,

我一直在与一位同事就 ALSA 与 PulseAudio 的一些细节进行辩论,需要一些帮助才能得出结论。据我了解,ALSA 相对较低级别,直接与硬件对话,而 PulseAudio 作为服务位于 ALSA 之上。

此外,据我了解,ALSA 与 Linux 相关联,但 PulseAudio 仅充当 ALSA 之上的抽象层,并且可以在其他平台上工作。我的结论是 ALSA 会在大多数 Linux 系统上提供较低的音频延迟,而我的同事认为 PulseAudio 无论如何都会提供更好(更短)的延迟。

我们谁是正确的?我的理由是,由于 PulseAudio 位于 ALSA 之上甚至包裹它,除非它提供自己的低级调用,否则它无法提供更好的延迟。

谢谢。

ALSA(与许多其他声音 API 一样)为要播放的样本提供环形缓冲区。

使用此环形缓冲区的最常见方法是始终将其填满。 这意味着写入 now 的样本仅在播放完缓冲区中的所有其他样本后才会播放,即延迟与缓冲区的大小成正比。 (缓冲区大小可以由应用程序选择,但取决于硬件的能力,并且一旦选择就固定了。)

PulseAudio 能够只填充缓冲区的一部分。 (这不是 ALSA 直接提供的功能,而是需要一个单独的计时器来监控播放进度。) 因此,它可以提供比使用相同缓冲区大小的其他应用程序更低的延迟,但更重要的是,这允许它动态调整延迟,而无需停止和重新配置设备。

其他应用程序也可以这样做,但使用 PulseAudio 比再次实现该缓冲区处理更容易。