我看到很多说法称 Jack 比 Pulse 更快并且延迟更短。怎么会这样呢?为什么 Pulse 称自己为轻量级,而 Jack 的人称其为胖级?有人能向外行人解释一下这两个守护进程的内部结构吗?
答案1
杰克要求您(知识渊博的用户)配置服务器以确定可能的最低值处理延迟为您的机器。 (处理延迟是指服务器将数据移入/移出客户端应用程序,然后在系统外部发送/接收下一个“块”音频样本所需的时间。)Jack 将按时传送这些音频数据块,或者它会失败并给你一个缓冲区不足(有时称为“丢失”,或持久性有机污染物和点击次数)。如果 Jack 始终出现运行不足的情况,那么您需要使用不同的设置重新启动服务器,或者更改客户端应用程序中的某些内容以提高其效率,以便您能够满足音频截止日期。由于您的服务器设置统一应用于所有客户端,因此 Jack 对于在多个音频应用程序之间路由音频并获取音频非常有用。可预测结果。 (即,这就像将“插孔”插入各种音频组件。)
Pulse 旨在最大限度地减少由于服务器未满足在系统外部发送/接收音频的最后期限而导致音频丢失的次数。它显然试图通过为请求不低的客户端应用程序选择一个大缓冲区来做到这一点处理延迟,然后将样本“注入”到截止日期较早的客户端应用程序的缓冲区中。如果它试图过快地注入样本,以至于错过了最后期限并导致欠载,Pulse 将自动增加客户端向服务器发送音频更新的最短时间。 Pulse 文档明确指出极端主义者低延迟——例如,小于 10 毫秒处理延迟——不是设计目标。鉴于 Linux 本身(可能还有你的硬件)并不是为实时音频调度而设计的,我很容易相信他们。
就用户配置而言,Pulse 是“轻”的。 (有人可能会说 Pulse 具有低配置延迟不幸的是,许多 Linux 音频应用程序显然忽视了这一点。)就其底层复杂性而言,与 Jack 相比,Pulse 很“胖”。
要获得哪个更快的明确答案,您只需获得一个环回设备并测量往返延迟在你自己的系统上了解真相。 往返延迟是系统处理音频并将处理后的内容接收回系统所需的时间。网上有教程解释了如何在 Linux 下执行此操作。这会让你知道你真正追求的是什么,那就是感知延迟——从触发事件(例如,弹奏吉他的琴弦)到您第一次听到所产生的声音(例如,听到吉他和弦)所需的时间。
最后,请记住,在大多数 GNU/Linux 发行版上,Pulse 和 Jack 都位于 ALSA 之上。我知道你只是问杰克与脉冲的事。但是,如果您使用的是可以直接连接到 ALSA 的单个音频应用程序,那么添加 Pulse 或 Jack 就不可能降低您的性能感知延迟比单独的 ALSA 更重要。从这个意义上说,普斯和杰克都是“胖子”。
太棒了;单独的 ALSA 速度最快,Jack 对于将多个音频应用程序链接在一起很有用,而 Pulse 可能是最简单的当您不关心超低延迟时使用。忽略任何使用该术语的文档或讨论潜伏没有解释什么类型的延迟是什么意思。 (不幸的是,Jack 的官方文档和 Lennart 关于 Pulse 的博客文章都属于这一类。)
笔记:可能存在一些边缘情况,您想使用单个音频应用程序,但它有一个糟糕的 ALSA 接口和一个不错的 Jack 接口。在这种情况下,使用 Jack 可能会降低延迟。但如果我们谈论应用程序设计的为了最大限度地减少延迟,这些情况应该很少见。但一定要连接一个环回设备并测试我的假设!
答案2
它们实际上是相似的声音服务器。杰克专为实时/低延迟响应而设计,这是专业级音频解决方案所需要的。脉冲音频更多地针对一般桌面(适用不太严格的需求)。PA似乎比重杰克- 更复杂会导致更多的开销。在 Linux 上都使用阿尔萨斯最终获得真正的输出。使用 PA,数据通常从 ALSA(应用程序输出)路由到 PA(处理)再到 ALSA(输出),这当然比 JACK-ALSA 路由慢。另一方面,它对于无法本地使用它的应用程序来说是透明的,因为它为它们提供了带有 ALSA 接口的虚拟声卡。
在任何情况下,除非您打算制作音乐或者无法在没有每个应用程序音量控制(或通过网络将声音转发到另一台机器)的情况下生活,普通的 ALSA 就可以做得很好,而且开销更少。有些驱动程序可以进行硬件混合,即使不能,ALSA 也可以通过插件进行混合(可以说不像 JACK 那样敏捷,但“正常”使用应该没问题)。
答案3
Jack 适用于需要低延迟的应用程序,例如:音乐家、视频制作者等的音频工程/创作
- 无需重采样!
- 强制软件混合源
- 在应用程序、设备、ladspa/lv2/vst 插件等之间正确路由事物(声音、时间同步等)
- 可以与pulseaudio(桥)一起使用
Pulse 适用于常规桌面应用程序(不要期望低延迟)
- 提供兼容性艺术和静电放电
- 可以用作
alsa
和oss
输出 - 强制软件重采样
- 强制软件混合源
- 软件上混音、下混音等
- 为插件提供了很好的 api(例如:脉冲效应)
- 简单路由(将输出插入另一个设备或应用程序)
- 每个应用程序的音量控制
Alsa 用户空间层(不是驱动程序)执行最小操作([*] 之间的延迟)
在大多数情况下,Pulse 是普通桌面用户的最佳选择。杰克是音乐家等的最佳选择。
答案4
这其实不是一个“vs”的问题。乍一看,我们可以看到它们都是“声音服务器”。因此,或许可以得出结论,人们只需要在它们之间进行选择。事实并非如此。例如,比较摄像机和 FLIR 相机,两者都是相机。但是,人们不只是在它们之间进行“选择”。他们扮演着非常不同的角色,这些角色可以是恭维的,但他们不具有任何竞争性。一种需要插孔,或者一种需要脉冲,或者一种可能两者都需要。选择是由问题域驱动的,而不是由特定延迟等特性驱动的。
至于“FAT”与“非FAT”,该术语的使用方式太多,没有真正的意义。但是,一般来说,当应用程序“为您完成这一切”时,或多或少会使用术语 FAT。 “轻量级”倾向于加载您想要的功能,可能从一系列选项中进行选择,并放弃其余的。 Pulse 是一个“大斑点”程序,只要给它一些参数,它就可以正常运行。无论需要与否,当您启动脉冲时都会加载大量功能。 Jack 是一个很小的、本身无用的程序,您可以在其上粘贴任意数量的插件、程序等来构建您想要的东西。程序员倾向于从机器资源的角度看待世界。
因此,pulse 是一种可变延迟服务器,而 jack 是固定延迟服务器。这些是他们的具体问题领域。如果您只是在看电视或通过网络听音乐,您肯定需要脉搏。如果您想演奏现场电子音乐,您肯定需要杰克。如果您正在看电视并对声音流进行一些繁重的处理,那么您肯定需要两者。