Answers:
杰克要求您-知识渊博的用户-配置服务器以确定计算机可能的最低处理延迟。(处理延迟是指服务器将数据移至客户端应用程序/从客户端应用程序移出数据,然后在系统外部发送/接收下一个“大块”音频样本所需的时间。)Jack将按时交付这些音频数据块,或者它会失败,并给您带来缓冲区不足(有时称为“辍学”),或者弹出并单击)。如果Jack始终处于欠载状态,那么您可以使用不同的设置重新启动服务器,或者更改客户端应用程序中的某些内容以提高它们的效率,从而满足音频截止日期,这是您的工作。由于您的服务器设置统一适用于所有客户端,因此Jack对于在多个音频应用程序之间路由音频并获得可预测的结果非常有用。(即,就像将“ jacks”插入各种音频组件中一样。)
Pulse旨在最大程度地减少由于服务器未达到在系统外发送/接收音频的截止日期而导致音频丢失的次数。显然,它试图通过为不要求低处理延迟的客户端应用程序选择一个较大的缓冲区,然后为那些具有更快截止日期的客户端应用程序“注入”样本到该缓冲区中来尝试这样做。如果它试图尽快注入样品,从而错过了最后期限并导致欠载,Pulse将自动增加最短的时间,让客户端将音频更新发送到服务器。Pulse文档明确指出超低延迟 -例如,小于10ms的处理延迟-不是设计目标。鉴于Linux本身(可能还有您的硬件)并不是为音频的实时调度而设计的,我很容易相信它们。
在用户配置方面,Pulse是“轻”的。(可能会说Pulse的配置延迟很短,不幸的是许多Linux Audio应用程序显然忽略了这一点。)与Jack相比,Pulse的底层复杂性是“胖”的。
要获得更快的确定答案,您只需获得一个环回设备并测量您自己系统上的往返延迟,即可了解真相。 往返延迟是您的系统处理音频并将其处理后的内容接收回系统所需的时间。在线上有教程介绍了如何在Linux下执行此操作。这将使您了解实际的情况,即感知到的延迟 -从触发事件(例如弹奏吉他的弦)到第一次听到声音所花费的时间。结果(例如,听到吉他的和弦)。
最后,请记住,在大多数GNU / Linux发行版中,Pulse和Jack都位于ALSA之上。我知道您只是在问Jack vs. Pulse。但是,如果您使用的是一个可以直接连接到ALSA的音频应用程序,则无法想象添加Pulse或Jack会比单独使用ALSA 降低您的感知延迟。从这个意义上说,脉冲和杰克都是“胖子”。
tldr; 仅ALSA最快,杰克可用于将多个音频应用程序链接在一起,当您不关心超低延迟时,脉冲可能最容易使用。忽略所有使用术语“ 延迟”的文档或讨论,而无需解释延迟的类型。(不幸的是,官方的Jack文档和Lennart的有关Pulse的博客条目都属于此类。)
注意:在某些情况下,您想使用单个音频应用程序,并且它具有粗糙的ALSA接口和不错的Jack接口。在这种情况下,使用Jack可能会降低延迟。但是,如果我们正在谈论旨在最小化延迟的应用程序,那么这种情况应该很少见。但是,请连接回送设备并检验我的假设!
它们实际上是健全的服务器。JACK专为实时/低延迟响应而设计,这是专业级音频解决方案所必需的。PulseAudio的目标更多是针对通用台式机(适用于不太严格的需求)。PA似乎比JACK重-更复杂会导致更多开销。在Linux上,最后都使用ALSA进行实际输出。使用PA时,数据通常从ALSA(应用程序输出)路由到PA(处理)再到ALSA(输出),这当然比JACK-ALSA路由慢。另一方面,它对于不能在本地使用它的应用程序是透明的,因为它为它们提供了带有ALSA接口的虚拟声卡。
在任何情况下,除非您打算制作音乐或没有每个应用程序的音量控制(或通过网络将声音转发到另一台机器)都无法直播,否则普通的ALSA会做得很好,而开销却更少。一些驱动程序可以进行硬件混合,即使不能,硬件也可以通过插件进行混合(可以说不像JACK那样敏捷,但是“正常”使用应该可以)。
Jack适用于需要低延迟的应用程序,例如:音乐人,视频制作者的音频处理/创作
Pulse适用于常规桌面应用程序(不要期望低延迟)
alsa
和oss
输出Alsa用户空间层(不是驱动程序)的作用最小([*]之间的延迟)
在大多数情况下,Pulse是常规桌面用户的最佳选择。杰克是乐迷等的最佳选择。
这实际上不是“ vs”的问题。乍一看,我们可以看到它们都是“声音服务器”。因此,也许可以得出结论,只需要在它们之间进行选择即可。事实并非如此。比较一下,例如摄像机和FLIR摄像机都是摄像机。但是,不仅仅是在它们之间“选择”。他们扮演的角色非常不同,这些角色可以说是恭维,但它们丝毫没有竞争力。一个需要插孔,或者一个需要脉冲,或者一个可能需要两个。选择是由问题域驱动的,而不是像特定延迟这样的功能。
至于“ FAT”与否,该术语以太多的方式使用才有意义。但是,通常,术语FAT或多或少是在应用程序“为您完成全部工作”时使用的。“轻量级”倾向于使您能够加载所需的功能,可能从一组选项中进行选择,而将其余部分丢弃。Pulse是一个“大blob”程序,您可以向其提供一些参数,并且几乎可以使用。是否需要,启动脉冲时会加载大量功能。Jack是一个很小的程序,它本身没有用,您可以将其粘贴到任意数量的插件,程序等上,以构建所需的程序。程序员倾向于从机器资源的角度来看世界。
因此,pulse是可变延迟服务器,而jack是固定延迟服务器。这些是其特定的问题领域。如果您只是在看电视或通过网络听音乐,那么您肯定会想要脉冲。如果您要播放现场电子音乐,则肯定需要插孔。如果您正在看电视并在声音流上进行大量处理,则肯定需要两者。