那么,我的第二个问题是关于网站上的 Linux 音频的。这前一个产生了相当多的介绍性信息。
我已经ALSA
安装PulseAudio
了。
在安装 PulseAudio 之前,图形“声音”面板中未检测到任何声卡。现在,在“应用程序”下,我看到列出了
ALSA plug-in(firefox)
.为什么需要 PulseAudio 来检测声卡并通过 ALSA 进行播放?alsamixer
不起作用 - 使主机静音没有效果。此外,只有一个应用程序可以同时播放 - 启动第二个应用程序报告device busy
。
所以我的软件混合不起作用。我如何解决它。如何跟踪信号从应用程序到硬件的路径?
请注意,音频是通过 USB 传输的。sais alsamixer
,no 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 混音器。