5

再会,

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

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

我们谁是正确的?我的理由是,由于 PulseAudio 位于 ALSA 之上,甚至封装了它,除非它提供自己的低级调用,否则它不可能提供更好的延迟。

谢谢你。

4

1 回答 1

10

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

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

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

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

于 2015-03-25T10:05:36.880 回答