ALSA和PulseAudio有何关系?


30

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

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

两者中的哪一个是替代品还是互补品?

Answers:


32

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:
内核:ALSA-> dmix->用户名:app1,app2,app3
仅使用纯ALSA,您需要dmix才能混合多个应用程序。没有它,ALSA一次只能播放一个应用程序的音频流。

OSS:
内核:OSS->
用户空间:app1,app2,app3 使用OSS,用户空间应用程序直接与内核中的OSS通信,后者将流本身混合在一起。

综上所述,在当今的典型系统中,ALSA直接与您的声卡对话,而Pulseaudio与您的应用程序和程序对话,并将其输入ALSA。


2
实际上,每次我找到Pulseaudio时,我都会发现问题!有趣的是,似乎(至少根据我的经验)内核的RT版本也有问题,也就是说...您是否想要一个简单的linux环境播放音乐?您在考虑新的UbuntuStudio吗?好吧,再想想...:D
dag729'5

4
哦,不要想。图形也是一大堆。Linux并不是为了简单明了地将其用于桌面。Xorg是X 服务器,因此您基本上可以启动SERVER并对其进行监视(这是胡说八道吗?)。在MAC,Windows,Haiku上,GUI从内核运行(可以在内核内部运行)。好。这是有道理的吗?另外,没有本机接口。就像在Windows上一样,Windows.Forms。在MAC可可上。在这里,您只能使用FAT工具包,例如GTK,Qt。网络被同意,它在内核中,它可以(如果制造商提供像英特尔一样的良好驱动程序,可以)...就这样。
阿帕奇

3
On MAC, Windows, Haiku, GUI runs from the kernel (okay its inside the kernel). Well. It would make sense doesnt it? 其实不是。还记得“ NT 4视频驱动程序破坏了系统”的旧时光吗?是的,这就是导致它的原因-在内核空间中运行糟糕的驱动程序。您为什么认为Microsoft突然全力以赴将签名驱动程序带入Windows?答对了!因为糟糕的驱动程序导致系统崩溃。得到他们的签名意味着要对其进行审查,并且进行质量检查的过程很漫长……
艾利·佩恩

1
Avery:现在支持可卸载模块。因此,如果崩溃,它将仅重新加载图形适配器的模块。但据我所知,它们仍然是模块。(不在用户空间中运行。.这是不可能的)。| 关于SDL:.. ks。每个游戏编写者都会抱怨它,因为它会导致性能下降,问题复杂等。
Apache

2
@Skiki-我知道答案现在已经过时了,但是您能提供一些Valve放弃Linux的参考吗?据我所知,他们仍然在全力以赴。
汇总
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.