Jack 运行时允许计算机输出吗?

Jack 运行时允许计算机输出吗?

我过去曾尝试过使用 jack,但我从未真正成功地使用过它,因为它让人感觉不知所措,并且它不允许我的计算机音频输出在 jack 运行时继续运行。尝试在我的媒体播放器中播放歌曲时,歌曲在尝试播放 0 秒时挂起;大概他们正在向pulseaudio或alsa写入PCM或其他东西,但写入永远不会完成。

有没有办法让杰克大部分或全部时间在后台运行,同时仍然能够听到计算机音频输出?

就我而言,我有一个 USB 音频接口(Focusrite Scarlett),它连接到一对扬声器,我将其用作默认音频输出,但我不确定输出类型(即 USB 还是内部声卡) )在这里很重要。

我使用的是 Ubuntu 20.04 LTS,运行最新的 HWE 内核(实际上是基本操作系统 Odin,但基于 Ubuntu 20.04)。


编辑:我可以使用 PipeWire 完全绕过所有这些。

PipeWire 是一种低延迟音频系统,可以使用 PulseAudio、ALSA 和 Jack 协议,并且可以轻松替换 PulseAudio 和 Jack。我用 PipeWire 替换了桌面的 PulseAudio 服务器,这并不太难,并且还为 Jack 启用了 PipeWire,所以现在一切都到一个统一的地方,我不需要做愚蠢的解决方法来使事情正常工作,他们只是这样做,一切都变得不那么明智了。

在此输入图像描述

我已经在我的发行版、elementary OS 6 中写了如何执行此操作这个要点

答案1

USB 音频接口在任何时候可能只接受单个音频数据流,因此您需要将来自jack“计算机音频输出”的音频在软件中混合在一起。

在没有 的系统上jack,PulseAudio 通常是执行此操作的组件,但由于jack想要提供绝对最小的延迟和样本同步,因此它需要对声音设备的独占访问。

你可能想阅读这个网页: https://jackaudio.org/faq/pulseaudio_and_jack.html

特别是,我会考虑该页面上的选项 3,它引用了另一个页面: https://github.com/jackaudio/jackaudio.github.com/wiki/WalkThrough_User_PulseOnJack

简而言之:Ubuntu 可能已经将 ALSA 默认为 PulseAudio,因此您只需要确保安装了该软件包,如果您打算一直运行pulseaudio-module-jack,则将此配置放入您的:~/.config/pulse/default.pajack

load-module module-native-protocol-unix
load-module module-jack-sink channels=2
load-module module-jack-source channels=2
load-module module-null-sink
load-module module-stream-restore
load-module module-rescue-streams
load-module module-always-sink
load-module module-suspend-on-idle
set-default-sink jack_out
set-default-source jack_in

根据 USB 音频接口的功能,您可能需要以下部分或全部设置~/.config/pulse/daemon.conf

default-sample-format = float32le
default-sample-rate = 48000
realtime-scheduling = yes
exit-idle-time = -1

(大多数 USB 音频接口仅接受固定采样率的输入 - 通常为 48000 - 因此这可以确保 Pulseaudio 了解此限制并将从桌面音频端传入的所有内容转换为该格式,以使jack工作更轻松。)

如果您使用qjackctl启动jackd,则需要配置如下启动后操作以将 PulseAudio 切换为jack

pactl load-module module-jack-sink channels=2; pactl load-module module-jack-source channels=2; pacmd set-default-sink jack_out

如果您只运行jack一段时间,那么此启动后操作实际上将完成~/.config/pulse/default.pa上述配置的工作,告诉 PulseAudio 将其输出转移到jack启动时。

相关内容