ALSA 和 PulseAudio 有什么关系?

Han*_*etz 62 audio linux

在尝试让我的声音工作时,我想知道 ALSA 和 PulseAudio 的作用。我已经安装并且想知道,例如,他们中的哪一个需要知道我的声卡。

两者似乎都可以互相使用,ALSA 有一个pulseaudio 插件,在我的系统上,alsa 在pulseaudio 中显示为声卡。

两者中的哪一个是做什么的,它们是替代品还是互补品?

Apa*_*che 67

ALSA 是内核级混音器,它直接管理您的声卡。ALSA 本身一次只能处理一个应用程序。当然,还有' dmix ',它是为了解决这个问题而编写的。(这是一个 ALSA 模块。)

PulseAudio 是一个软件混音器,位于用户空间之上(就像您运行应用程序一样)。当它运行时,它使用 Alsa - 没有 dmix - 并自行管理各种混合,设备,网络设备,一切。

在 2014 年,您仍然只能运行 ALSA。但是除非你自己编译你的应用程序并在任何地方启用 ALSA 支持——或者使用像 Gentoo 这样的基于源代码的发行版——否则你可能会遇到混合问题。发行版发布的预编译应用程序通常只支持 Pulseaudio,而不是纯 ALSA。例如,Ubuntu 更喜欢 PulseAudio。它默认带有 PulseAudio,因此每个应用程序都被编译为仅使用 PulseAudio。

PulseAudio 确实有它的好处。人们说它适用于跨网络处理音频,它解决了在纯 ALSA 下发生的多声道音频流的一些问题。据推测,为 PA 开发应用程序也更容易。在最终用户方面,选择新设备、通过应用程序控制音量等都很容易。

然而,在默认配置中,它在混合中增加了相当多的延迟。对于某些需要低延迟的任务(如某些游戏和软件)来说,这是一个很大的问题。

OSS 是这两者的替代品,但它没有在 GPL 下获得许可,这使得它不太可能被发行版大量采用。

插图

典型的 PulseAudio 驱动的声音系统,如 Ubuntu:

  • 内核:ALSA -> 用户空间:PulseAudio -> app1、app2、app3
  • 在典型的 Linux 系统中,PulseAudio 混合来自所有不同应用程序的音频,并将它们向上馈送到 ALSA。

阿尔萨:

  • 内核:ALSA -> dmix -> 用户空间:app1、app2、app3
  • 仅使用纯 ALSA,您需要 dmix 来混合多个应用程序。没有它,ALSA 一次只能播放来自一个应用程序的音频流。

开源软件:

  • 内核:OSS -> 用户空间:app1、app2、app3
  • 使用 OSS,用户态应用程序直接与内核中的 OSS 对话,后者混合了流本身。

总而言之,在您目前的典型系统中,ALSA 直接与您的声卡对话,而 Pulseaudio 与您的应用程序和程序对话并将其输入 ALSA。

  • 哦别想。显卡也是一堆.. 说白了Linux不是桌面用的。Xorg 是一个 X _server_,所以你基本上启动了一个 SERVER 并观看它(废话?是的)。在 MAC、Windows、Haiku 上,GUI 从内核运行(好吧,它在内核内部)。好。它会有意义不是吗?此外,没有本机接口。就像在 Windows 上一样,Windows.Forms。在 MAC 可可上。在这里,您只能使用 FAT 工具包,例如 GTK、Qt。| 网络是一致的,它在内核中,它可以(如果制造商提供像英特尔这样的好驱动程序,那好吧)......就是这样。 (7认同)
  • `在 MAC、Windows、Haiku 上,GUI 从内核运行(好吧,它在内核内部)。好。它会有意义不是吗?` 实际上它没有。还记得“破坏系统的 NT 4 视频驱动程序”的糟糕过去吗?是的,这就是导致它的原因 - 在内核空间中运行蹩脚的驱动程序。你认为微软为什么突然全力支持将签名驱动程序导入 Windows?答对了!因为糟糕的驱动程序导致系统崩溃。让他们签名意味着让他们**审查**,并且一点点 QA 有很长的路要走...... (3认同)
  • @Skiki - 我意识到答案现在已经过时了,但是您能否提供 Valve 放弃 Linux 的参考资料?就我所见,他们仍在全力以赴,请注意双关语。 (3认同)
  • 实际上,每次我发现 Pulseaudio 时,我都会发现问题!有趣的是,似乎(至少根据我的经验)内核的 RT 版本也有问题,也就是说……您想要一个简单的 linux 环境来播放音乐吗?你在考虑新的 UbuntuStudio 吗?好吧,再想想... :D (2认同)
  • Avery:现在支持可卸载模块。所以如果它崩溃了,它只会重新加载图形适配器的模块。但据我所知,它们仍然是模块。(不在用户空间中运行......这是不可能的)。| 关于 SDL:它是... 每个游戏编写者都抱怨它,因为它会导致性能缓慢、问题复杂等。(我不会列出它们,请通过搜索检查。)即使是开源传输大亨使用 SDL 也很慢。 (2认同)