Linux 新手:我如何使用 Jack?Linux 声音是如何工作的?
我有一个应用程序试图通过 ALSA 或 JACK 输出声音,但我没有听到任何声音。
这里有几篇文章,从中我了解到 ALSA 是 linux 的内核模式声音驱动程序,而 libasound 是应用程序接口的用户空间库。
此外,PulseAudio 和 JACK 是音频服务器/路由器,允许多个应用程序控制多个硬件和应用程序。
这是一篇很好的文章如何路由all-applications -> jack -> PulseAudi -> ALSA
。看起来很简单,但是我不明白为什么需要这么多层。为什么不直接jack到alsa?
我能理解你的困惑,我去过那里:)
让我们从这样一个事实开始,即 PulseAudio,就像 JACK 一样,在某种意义上都是声音服务器,但考虑到不同的目标。JACK 面向专业音频用户/音乐家,而 PA 旨在提供易用性。
音频路线与您在问题中的路线略有不同。
all-applications->PA to jack sink->jack audio server -> libasound and ALSA.
Run Code Online (Sandbox Code Playgroud)
通过这种方式,作为通常默认音频输出(接收器)的 PA 将声音通过管道传输到插孔。上面在 jack's patchbay 中看起来像这样(在接收器和源模块加载之后load-module
)
“系统”条目由 ALSA 后端提供,而 PA 插孔接收器和源由 PA 提供到插孔模块。
如果你正在运行一些 ubuntu,那么你可以在 qjackctl -> setup -> "options" tab -> execute after startup 中添加以下内容
pactl load-module module-jack-sink channels=2; pactl load-module module-jack-source channels=2; pactl set-default-sink jack_out; pactl set-default-source jack_in
Run Code Online (Sandbox Code Playgroud)
以上应加载“PA to jack”模块(每个2通道L+R),并将所有应用程序的默认播放设备设置为PA to jack sink模块。此外,它将线路输入/麦克风输入连接到 PA 到插孔源输入,以便需要访问默认输入设备(例如 Skype)的应用程序可以通过 PA 到插孔源模块获得它。
现在,如果应用程序向 ALSA 输出声音,它应该通过默认设备播放,即通过pulseaudio。这就引出了一个问题,你真的需要杰克吗?那是哪个应用程序?
在任何情况下,如果应用程序可以识别插孔,它应该显示在 qjackctl 的跳线台上,然后您可以根据需要将其连接到音频路径中。
有关更多信息,请参见此处。JACK 的FAQ和wiki也非常有帮助。