ALSA vs PulseAudio - 延迟问题

时间:2015-03-25 00:42:30

标签: linux audio linux-device-driver alsa pulseaudio

美好的一天,

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

此外,据我所知,ALSA与Linux有关,但PulseAudio只是作为ALSA之上的抽象层,可以在其他平台上运行。我的结论是,ALSA会在大多数 Linux 系统上提供较低的音频延迟,而我的同事认为PulseAudio提供更好(更短)的延迟,无论如何。

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

谢谢。

1 个答案:

答案 0 :(得分:5)

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

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

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

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