ALSA 和 PulseAudio 有何关系?

ALSA 和 PulseAudio 有何关系?

虽然尝试让我的声音发挥作用,我想知道 ALSA 和 PulseAudio 的作用。我都安装了,我想知道,例如,它们中的哪一个需要知道我的声卡。

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

两者各起什么作用,是替代品还是互补品?

答案1

ALSA 是内核级混音器,它直接管理声卡。ALSA 本身一次只能处理一个应用程序。当然,还有'混合',它是为了解决这个问题而编写的。(它是一个 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 -> 用户空间:app1、app2、app3
  • 通过 OSS,用户空间应用程序可以直接与内核中的 OSS 对话,而 OSS 本身会混合流。

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

答案2

ALSA会谈正确的到声卡,只能处理 1 个应用程序。

然而Pulseaudio安装后,1 个应用程序ALSA就是处理,pulseaudio 需要的音频数据全部应用程序和然后供稿ALSA

以下是流程:

ALSA:

用户空间:app1,(app2,app3)-> ALSA -> SoundCARD。

app2 和 app3 之所以出现()是因为 ALSA 没有处理它们。

脉冲音频:

用户空间:app1、app2、app3 -> PulseAudio -> ALSA -> SoundCARD。

然而,OSS 有所不同。

开源软件:

用户空间 -> 内核 -> OSS -> 声卡

OSS 自行进行混合。

希望它能回答这个问题!

相关内容