如何在同一音频设备上同时使用JACK和Pulseaudio/ALSA?

如何在同一音频设备上同时使用JACK和Pulseaudio/ALSA?

每当我启动 Hydrogen 时,它都会破坏使用 Pulse 的所有其他应用程序中的音频,例如,在启动 Hydrogen 一次后,我无法再在 Chrome 中播放视频,除非我重新启动 PC 或执行 sudo alsa force-reload。我发现有人遇到过类似的问题,但没有实际的指南来解决这个问题,通常有链接http://jackaudio.org/pulseaudio_and_jack(已移至http://jackaudio.org/faq/pulseaudio_and_jack.html)我正在使用 Ubuntu Studio 14.04 64位。

或者,如果这确实无法实现,有人能告诉我如何在一个声卡上使用 Jack,在另一个声卡上使用 Pulse 吗?这样,我就可以只在需要 JACK 时插入 USB 声卡。

请不要让我使用窗户。

答案1

从 16.04 开始,事情变得简单多了:)

只需安装qjackctl模块pulseaudio-module-jack

apt-get install qjackctl pulseaudio-module-jack

然后配置qjackctl启动后运行以下命令。将其复制到“设置...”>“选项”>“启动后执行脚本”中:

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

就是这样。Pulseaudio 将识别(通过 D-Bus)JACK 已启动,并自动将音频路由到它。当 JACK 停止时,Pulseaudio 将恢复正常路由并再次开始将音频直接发送到卡。

因此(几乎)默认情况下,Pulseaudio 实现了 mmv-ru 上面详述的设置。

答案2

此 YouTube 视频:“Jack 和 PulseAudio 成为朋友 - Linux”似乎有一些答案:

解决方案的关键似乎是确保安装了 pulseaudio-module-jack:

aptitude install pulseaudio-module-jack

然后使用 sudo 编辑 /etc/pulse/default.pa 文件以在手动加载音频驱动程序部分下包含两行:

load-module module-jack-sink
load-module module-jack-source

然后 - 我想 - 重新启动 pulseaudio。我刚刚重新启动了 PC(我知道这很懒),效果很好... 启动 Ardour 不再导致 pulseaudio 死机,它们一起愉快地播放。

答案3

我的解决方案适用于 Fedora 23。

dnf install jack-audio-connection-kit jack-audio-connection-kit-dbus qjackctl

不要触碰 /etc/pulse/default.pa !

配置 qjackctl

设置

~/.config/rncbc.org/QjackCtl.conf 的相关片段:

[Settings]
Server=jack_control start
Driver=alsa
InDevice="hw:PCH,0"
OutDevice="hw:PCH,0"

选项

pactl 的接收器名称可以通过以下方式找到:

pacmd list-sinks

以下是 ~/.config/rncbc.org/QjackCtl.conf 的另一个片段,用于显示完整命令

[Options]
...
StartupScript=true
StartupScriptShell=pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 1
PostStartupScript=true
PostStartupScriptShell=pactl set-default-sink jack_out
ShutdownScript=false
ShutdownScriptShell="pactl unload-module module-jack-sink; pactl load-module module-jack-source"
PostShutdownScript=true
PostShutdownScriptShell="pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 0; pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo"

杂项 “启用 D-Bus 接口”对于 Qjackctl 本身来说很重要。

怎么运行的

现在,PC 启动时仅运行 PulseAudio,一切都自动像没有 Jack 一样运行。

启动 Qjackctl 后,

  1. Qjackctl 启动脚本暂停 Pulseaudio 中的主音频卡并允许 Jack 访问它:pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 1
  2. Jack 通过 d-bus 启动:jack_control start
  3. Pulse 自动检测 D-Bus 上的插孔启动并加载插孔接收器和插孔源。
  4. 启动脚本后的 Qjackctl 将 Pulse 中的默认接收器更改为 jack_out:(pactl set-default-sink jack_out起初看起来没有必要,因为所有正在运行的 PA 客户端都切换到新的接收器,但如果没有此命令,新应用程序将卡在暂停的接收器上)

因此系统重新配置为使用“杰克上方的脉冲”。(我跳过硬件输入暂停,因为我反正也不用它)

如果未选中“在应用程序退出时停止 JACK 音频服务器”,我可以关闭 Qjackctl 并重新运行它而不会干扰设置。

使用 Qjackctl 阻止 Jack 之后,一切都恢复到朴素整洁的 Pulse!

  1. Jackd 由 Qjackctl 通过 dbus 停止 - “启用 D-bus 接口”选项。
  2. d-bus 自动从 Pulseaudio 中移除 jack-source 和 jack-sink
  3. 由于插孔消失,Pulse 音频中的默认接收器已切换到音频卡
  4. 关闭脚本后 Qjackctl 重新激活 Pulseaudio 中的音频卡:pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 1

使用的工具

  1. jackd(来自 pulseaudio-utils 包)
  2. jack_control(来自包 ack-audio-connection-kit-dbus)
  3. Qjackctl(来自 pulseaudio-utils 包)
  4. pactl 通过脚本控制 Pulseaudio(来自 pulseaudio-utils 包)
  5. LANG=C pacmd list-sinks|grep -E "index:|name:|alsa.long_card_name =|alsa.name ="或者LANG=C pactl list sinks|grep -E "(Sink #|Name:|alsa.long_card_name =|alsa.name =)"检测 alsa 设备名称

答案4

Ubuntu 20.04,我发现这是各种答案的混合

  1. 安装 JACK 和 QJackCtl 以及 JACK 的 pulseaudio 接收器和源
sudo apt-get install qjackctl pulseaudio-module-jack
  1. 启动 QJackCtl 并在Setup...--> Options-->中Execute script after Startup粘贴以下内容:
pactl load-module module-jack-sink channels=2; pactl load-module module-jack-source; pacmd set-default-sink jack_out

在此处输入图片描述

  1. 启动 JACK,在 QJackCtl 中 PulseAudio Sink 和 Source 应该连接到系统 在此处输入图片描述

  2. 在 Ubuntu 设置中,选择 JACK Sink 作为输出

在此处输入图片描述

相关内容