我知道可以使用 Cadence 和 qjackctl 在应用程序之间路由音频,但可以在命令行上执行此操作吗?我只有几个用例,并且希望有一个简单的别名来启动音频软件 JACK 并建立连接。
答案1
当尝试查找可用命令时,Bash 的 Tab 补全功能非常有用,因此在这种情况下:
~$ 杰克Tab jack_alias jack_multiple_metro jack_bufsize jack_net_master jack_capture jack_net_slave jack_capture_gui jack_netsource jack_connect jack-osc jack_control jack-play jack_cpu 插孔管道 jack_cpu_load 千斤顶架 jackd jack_rec jackdbus jack-record jack_disconnect jack_samplerate jack-dl jack-scope jack-dssi-主机 jack_server_control jack_evmon jack_session_notify jack_freewheel jack_showtime jack_iodelay jack_simdtests jack键盘 jack_simple_client jack_latent_client jack_simple_session_client jack_load jack_test jack_lsp jack_thru jack_metro jack_transport jack_midi_dump jack传输 jack_midi_latency_test jack-udp jack_midiseq jack_unload jack_midisine jack_wait jack_monitor_client jack_zombie
jack_connect
听起来jack_disconnect
很有希望,让我们来看看man jack_connect
:
姓名 jack_connect、jack_disconnect - 用于连接和 断开端口 概要 jack_connect [ -s | --server 服务器名称 ] [-h | --help ] 端口 1 端口 2 jack_disconnect [ -s | --server 服务器名称 ] [-h | --help ] 端口 1 端口2 描述 jack_connect 连接两个命名端口。jack_disconnect 断开连接 两个命名端口。
我们需要知道端口名称,jack_lsp
命令将提供现有的端口和连接,请查看man jack_lsp
。我启动了 jackd-server,使用 pulseaudio 和 MIDI 路由到 jackd,这里是 的输出jack_lsp -c
:
~$ jack_lsp-c 系统:capture_1 PulseIn:前左 系统:capture_2 PulseIn:前-右 系统:playback_1 PulseOut:前左 系统:播放_2 PulseOut:前-右 PulseOut:前左 系统:playback_1 PulseOut:前-右 系统:播放_2 PulseIn:前左 系统:capture_1 PulseIn:前-右 系统:capture_2 a2j:Midi Through [14](捕获):Midi Through Port-0 a2j:Midi Through [14](播放):Midi Through Port-0
示例命令:
~$ jack_disconnect PulseOut:front-left system:playback_1
~$ jack_connect PulseOut:front-left system:playback_1
Carla
通过这些命令,我可以成功地断开并重新连接该连接,观察在发出命令时在后台运行的连接消失和重新出现。
答案2
jack_connect 和 jack_disconnect 运行良好,但有局限性
很容易从 GUI 包 qjackctl+patchage(或 cadence+carla)中找出连接命令,
将消息/状态中的文本复制到文本文件以获取连接名称,
也可以通过粘贴到终端中一次测试一个命令
当时有限的 Linux 命令技能无法让我在 QjackCtl 中找到相当于“断开所有连接”按钮的功能,
但我找到了另一种解决方案:
http://aj-snapshot.sourceforge.net/
该命令用于断开 JACK 中的所有内容:
aj-snapshot -jx
但也有“存储”和“恢复”选项,如下alsactl
所示:
aj-snapshot -rjx filename
将清除 JACK 连接并加载保存在“filename”中的所有连接
答案3
是的,您可以执行在 qjackctl GUI 中执行的所有操作,但只需从命令行即可。这包括创建新连接。通过自动化整个 JACK 工作流程来挑战自己!
(除此之外,您还可以做两者都能做的所有事情,但要使用 libjack C 库。)
这是一个 GIF 演示。它显示了我正在运行下面的示例命令,并显示 qjackctl 连接窗口。您可以看到在执行命令时绘制的线条jack_connect
。完成所有连接后,jack_lsp --connections
将显示每个命名端口下的新连接。
以下是示例命令。
<0.o>jack_lsp --connections
system:playback_1
system:playback_2
PulseAudio JACK Sink:front-left
PulseAudio JACK Sink:front-right
PulseAudio JACK Source:front-left
PulseAudio JACK Source:front-right
gst-launch-1.0:in_jackaudiosrc0_1
<0.o>jack_connect 'PulseAudio JACK Sink:front-right' gst-launch-1.0:in_jackaudiosrc0_1
<0.o>jack_connect 'PulseAudio JACK Sink:front-left' gst-launch-1.0:in_jackaudiosrc0_1
<0.o>jack_connect 'PulseAudio JACK Sink:front-left' system:playback_1
<0.o>jack_connect 'PulseAudio JACK Sink:front-right' system:playback_2
<0.o>jack_lsp --connections
system:playback_1
PulseAudio JACK Sink:front-left
system:playback_2
PulseAudio JACK Sink:front-right
PulseAudio JACK Sink:front-left
gst-launch-1.0:in_jackaudiosrc0_1
system:playback_1
PulseAudio JACK Sink:front-right
gst-launch-1.0:in_jackaudiosrc0_1
system:playback_2
PulseAudio JACK Source:front-left
PulseAudio JACK Source:front-right
gst-launch-1.0:in_jackaudiosrc0_1
PulseAudio JACK Sink:front-right
PulseAudio JACK Sink:front-left
您也可以删除所有连接。这是一个 GIF 演示。在演示中,我尝试连接每对命名端口,然后尝试断开每对命名端口。这将为每对无效端口创建警告或错误,因此我将标准输出和错误组合起来,并将它们重定向到空设备。您可以看到为有效连接绘制/擦除的线条。
以下是删除所有连接的示例命令。
<0.o>jack_lsp | while read a; do jack_lsp | while read b; do jack_connect "$a" "$b"; done; done > /dev/null 2>&1
<0.o>jack_lsp | while read a; do jack_lsp | while read b; do jack_disconnect "$a" "$b"; done; done > /dev/null 2>&1