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。