独占 ALSA 的应用程序

独占 ALSA 的应用程序

那么,我的第二个问题是关于网站上的 Linux 音频的。这前一个产生了相当多的介绍性信息。

我已经ALSA安装PulseAudio了。

  • 在安装 PulseAudio 之前,图形“声音”面板中未检测到任何声卡。现在,在“应用程序”下,我看到列出了ALSA plug-in(firefox).为什么需要 PulseAudio 来检测声卡并通过 ALSA 进行播放?

  • alsamixer不起作用 - 使主机静音没有效果。此外,只有一个应用程序可以同时播放 - 启动第二个应用程序报告device busy

所以我的软件混合不起作用。我如何解决它。如何跟踪信号从应用程序到硬件的路径?

请注意,音频是通过 USB 传输的。sais alsamixerno options for ths device我正在修改的控件适用于主板声卡的控件。

答案1

我至少可以回答你的一个问题。请记住,alsa 和pulseaudio 并不是彼此的替代品,它们在软件堆栈中占据不同的位置。 Pulseaudio 添加到 alsa 之上并取代了 alsa 用户区工具。它不会取代 alsa。

在“应用程序”下,我看到列出的 ALSA 插件(firefox)。为什么需要 PulseAudio 来检测声卡并通过 ALSA 进行播放?

恰恰相反。 alsa的pulseaudio插件是针对alsa的,这样它就可以通过pulseaudio播放,或者至少通过WRT firefox播放。然而,我相信它最终必须回到 ALSA,因为 ALSA 是实际的硬件系统(继续阅读),与刚才提到的软件堆栈分层保持一致。

应用程序必须支持脉冲音频才能使用它;一般来说,这意味着他们有自己的某种插件。例如,如果您mpg123在运行pulseaudio的系统上使用但没有安装“mpg123pulseaudio插件”,mpg123可能无法访问输出设备并且会失败。 Pulseaudio 无法“拦截”来自应用程序的声音流:应用程序必须有意启动关系。

ALSA 是应用程序通常使用的低级内核系统(带有一些用户区部分)除非他们安装了更高优先级的插件,例如用于pulseaudio的插件。在这种情况下,它们会流式传输到pulseaudio。 Pulseaudio 是一个更高级别的用户级系统(即,它是不是一个内核子系统并且无法直接访问硬件),然后可以对流执行各种操作,但最终如果您使用本地声卡,它必须将其传递到较低级别的硬件系统。我认为(在 Linux 上)这意味着 ALSA,pulseaudio 在其上保持锁定,这就是为什么其他用户态事物(例如“alsamixer”)无法使用它。 [事实上,这是使用pulseaudio的一个主要原因:否则,声音系统一次只能用于一个应用程序。 Pulseaudio 就是其中一个应用程序,但它与其他应用程序复用。]

alsa firefox插件的问题是flash和pulseaudio不能兼容(要么没有flash插件,要么没有一个可以工作的插件)。所以flash从不寻找pulseaudio,它寻找alsa。该插件的目的是让alsa将声音传递给pulseaudio而不是硬件;当pulseaudio将其传回alsa时,alsa-firefox插件不参与,因此没有循环:alsa与硬件一起工作。简而言之:

Flash/firefox alsa userland 插件用于pulseaudio ->pulseaudio ->alsa 内核空间子系统 ->声卡驱动程序

第一步可以是任何原始源音频应用程序。我不知道为什么不仅仅是一个 flash 脉冲音频插件,但这是一个历史问题。

所以我的软件混合不起作用。我如何解决它?

使用脉冲音频混音器,而不是用户级的 alsa 混音器。

相关内容