我如何判断我是否默认使用alsa还是pulse-audio?(切换到i3窗口管理器)

我可能没有理解核心概念,如果我错了,请纠正我。
Ubuntu带有两个不同的音频渲染服务器,pulse和alsa。Alsa是pulse的中间层吗?基本上我需要知道我正在使用哪一个。
我需要知道的原因是,我正在尝试从unity切换到i3-wm。在设置i3时,我发现没有声音,并找到了this thread。它指定了各种选项来绑定我的笔记本电脑音量增加和减少键的功能,在我调整了一些选项之后,我得到了非常刺耳的声音,这就是为什么(我猜)我需要知道我实际上正在使用哪个。
1个回答

Ubuntu使用ALSA和PulseAudio来控制声音的输入和输出。
ALSA作为基于内核的系统,将您的声音硬件连接到操作系统。系统中的所有声卡都将使用驱动程序和特定的设置进行控制。大部分工作都在幕后完成,用户无需干预。
此外,ALSA还提供了控制声音系统的库和工具。我们可能遇到的最常用的工具是alsamixer,这是一个半图形化的终端应用程序,用于控制系统中所有声卡和配置文件的音量和静音状态。
我们可以仅使用ALSA将声音输出到声卡,而无需使用PulseAudio或任何其他声音服务器。
在ALSA的基础上,PulseAudio声音服务器提供了进一步的工具,以更好地控制我们的声音系统。通过模块定义音量级别、音频卡配置文件、输出接收器或输入源等,以便大多数Ubuntu应用程序轻松访问。
与ALSA一样,PulseAudio也被设计为尽可能少地需要用户交互。每当我们需要改变音量、平衡或输入/输出设备时,我们或者我们的应用程序调用的是一个PulseAudio模块或应用程序。
作为PulseAudio的专业替代方案,JACK音频服务器提供了更多与声音硬件交互的选项和更好的低延迟支持。只有少数音乐制作应用程序需要运行JACK,而它可以与PulseAudio并行运行。
应用程序/桌面集成
Ubuntu声音系统还可以通过从Unity/GNOME桌面运行的应用程序进行控制,例如音量控制小程序。
是否使用声音控制取决于应用程序的开发人员。有些应用程序只使用ALSA,有些需要PulseAudio,有些需要JACK。
因此,无论我们在Ubuntu上安装另一个桌面管理器,我们可能会失去特定于桌面的控制声音的应用程序,但是ALSA和PulseAudio仍将在后台运行以进行声音控制。
我们可能需要安装其他软件包,例如pavucontrol,即基于GTK的pulseaudio音量控制应用程序。

ALSA或PulseAudio中有任何一个正在运行吗?

ALSA和PulseAudio都配备了命令行应用程序,可以打印出我们音频系统的状态。

  • PulseAudio:

    pactl list
    
  • ALSA:

    aplay -l
    
如果声音系统没有运行,两者都会出错。ALSA将与内核一起加载,PulseAudio稍后启动。如果不是这种情况,我们可以从终端手动启动PulseAudio:
pulseaudio [options]  ## option -D starts the daemon

如果我们遇到音频问题,我建议在我们进一步解决音频问题之前阅读由David Henningsson撰写的不应该做的事情

2@Takkat 的解释太棒了,非常感谢。我已经花了很长时间试图对 Linux 和 Ubuntu 中的音频系统有一个基本的理解。 - AlexN
在我的树莓派系统中,"pactl list" 返回 "Connection refused",但是 "pactl --server 127.0.0.1 list" 可以工作。导出环境变量 "PULSE_SERVER=127.0.0.1" 允许 pulseaudio 客户端正确连接。有任何想法我可能漏掉了什么吗?这是在树莓派上。 - Joao Costa
1很棒的解释!不幸的是,“David Henningsson关于我们不应该做的事情”的链接已经失效。 - Sybille Peters
@SybillePeters:非常感谢您的通知。这篇帖子不幸已经移动了 - 在我编辑的页面上继续向下滚动,仍然可以阅读到它。 - Takkat
你能否在这个精彩的解释上再补充一些内容,或者谈谈PortAudio在这里的关系? - matanster
1@matanster: PortAudio是一个非常棒的API,用于开发跨平台音频应用程序。它在Ubuntu上默认没有安装,但可以通过设置来安装。 - Takkat
目前似乎没有替代ALSA本身的选择,而我理解上述所有选择都是基于ALSA的。然而,ossaudiodev似乎被描述为正在逐渐被弃用(https://www.python.org/dev/peps/pep-0594/#ossaudiodev)。 - matanster
1现在我们可以将PipeWire添加到方程式中(pactl info | grep 'Server Name')。 - Pablo Bianchi