跳转到主要内容

使用模式自动连接JACK端口

项目描述

jack-matchmaker

自动连接JACK端口,当它们出现并且与启动时在命令行或从文件中提供的端口模式匹配时。

Latest version Date of latest release Project status GNU General Public License 2 Python versions Distribution format

描述

jack-matchmaker是一个小型的命令行实用程序,它监听JACK客户端的端口注册,并在端口名称与启动时在命令行提供的端口模式对之一匹配时连接这些端口。jack-matchmaker 永远不会断开任何端口。

端口号模式指定为位置参数对或从文件中读取(见下文),默认情况下始终解释为Python正则表达式。一对模式中的第一个模式与输出(可读)端口和输入(可写)端口进行匹配,而一对模式中的第二个模式仅与输入端口进行匹配。可以根据需要提供任意数量的模式对。

如果第一个模式匹配输入端口,则与该输入端口相连的所有输出端口将连接到匹配第二个模式的输入端口。

模式匹配

  • 正常端口名称
  • 端口别名
  • 在端口元数据中设置的漂亮名称

您可以通过运行jack-matchmaker -oian来列出所有可用的输出和输入端口及其别名和漂亮名称。

安装

在安装软件之前,请参阅“要求”部分。

然后只需这样做

$ pip install jack-matchmaker

对于Arch Linux用户,还有一个AUR包可用。

用法

运行jack-matchmaker -h(或--help)以显示有关可用命令行选项的帮助。

有关如何将jack-matchmaker作为systemd用户服务使用的说明,请参阅下文“systemd服务”部分。

示例

使用精确匹配模式自动将Fluidsynth的前两个端口连接到音频输出

$ jack-matchmaker -e \
    fluidsynth:l_01 system:playback_1 \
    fluidsynth:r_01 system:playback_2

输出端口和输入端口的模式都可以是正则表达式。如果输出端口上找到匹配项,则匹配的端口将连接到所有匹配相应输入端口模式的输入端口。

$ jack-matchmaker \
    'fluidsynth:l_\d+' 'system:playback_[13]' \
    'fluidsynth:r_\d+' 'system:playback_[24]'

您还可以在输出端口模式中使用命名正则表达式组,并将它们匹配的端口名称子串填充到输入端口模式中的占位符中

$ jack-matchmaker \
    'system:midi_capture_(?P<num>\d+)$' 'mydaw:midi_in_track_{num}'

还将所有连接到系统输出的端口自动连接到FFmpeg录制实例

$ jack-matchmaker \
    'system:playback_(?P<num>\d+)$' 'ffmpeg:input_{num}'

正则表达式和精确匹配

默认情况下,端口名称模式始终解释为Python正则表达式,并使用区分大小写的匹配与端口名称、别名和漂亮名称进行匹配。它们锚定到它们匹配的字符串的开始,即它们必须匹配端口名称的开始,但如果端口名称在模式匹配的部分之后继续,它们仍然匹配。

例如,模式client:out_\d匹配client:out_1client:out_2等,也匹配client:out_10(即使尾随零不包括在模式中),但不匹配otherclient:out_1

您仍然可以通过在模式开头使用.*来匹配具有任意前缀的端口名称,例如.*client:out_\d

要将模式锚定到匹配字符串的末尾,请在模式末尾使用一个$。例如,client:out_[12]$将匹配client:out_1client:out_2,但不匹配client:out_10client:out_21等。

要使用精确字符串匹配而不是正则表达式匹配,请使用-e--exact-matching命令行选项。当此选项提供时,模式必须与端口名称(或别名或漂亮名称)完全匹配。您仍然可以使用正则表达式模式,方法是将模式括在正斜杠中,例如

$ jack-matchmaker -e system:capture_1 '/myclient:in_l_\d+/'

所有这些都适用于作为位置命令行参数提供的模式以及列在模式文件(见下文)中的模式。

模式匹配组替换

输出端口模式可以包含一个或多个带有语法(?P...)命名组,其中三个点代表一个子正则表达式。该子正则表达式匹配端口名称的部分,可以作为输入端口模式中对应组名的占位符的替换值。占位符使用Python字符串格式化语法。

示例

$ jack-matchmaker \
    'mysynth:out_(?P<channel>[lr])_\d+$' 'myfx:in_{channel}$'

这将把所有命名为mysynth:out_l_1mysynth:out_l_2等的端口连接到myfx:in_l,并将所有命名为mysynth:out_r_1mysynth:out_r_2等的端口连接到myfx:in_r

模式文件

除了在命令行上作为位置参数列出端口模式外,端口模式还可以放入文本文件中。

-p--pattern-file选项指示程序从选项值中指定的文件路径读取模式。该文件必须每行列出一种端口模式,其中每一对两行中的第一行指定输出端口模式,第二行指定输入端口模式。空行和以井号(#)开头的行将被忽略,并且每行的开头和结尾的空白将被删除。

示例文件

# Left channel
# This will match output ports of any client named
# 'out_1', 'out_l', 'output_1' or 'output_l'
.*:out(put)?_(1|l)$
    system:playback_1

# Right channel
# This will match output ports of any client named
# 'out_2', 'out_r', 'output_2' or 'output_r'
.*:out(put)?_(2|r)$
    system:playback_2

# Another common naming scheme for output ports:
.*:Out L
    system:playback_1

.*:Out R
    system:playback_2

轻松创建模式文件

首先使用GUI工具如QJackCtlCarla设置您的JACK连接。然后使用jack-matchmaker -c > patterns将当前JACK连接保存到名为patterns的文件中,格式为兼容模式文件。然后您可以编辑此文件,并根据需要删除或添加模式对。

当使用-c选项时,您也可以可选地以位置参数的形式在命令行上给出一个或多个正则表达式模式。在这种情况下,只有当给定的模式之一匹配(部分)输出或输入端口名称时,才会列出连接。如果模式包含任何大写字母,则按大小写敏感的方式进行匹配,如果不包含,则按不区分大小写的方式进行匹配。模式与完整的端口名称进行匹配,包括客户端名称。例如

$ jack-matchmaker -c JACK

这将列出连接,其中一个连接的端口名称中包含"JACK",但不包含仅包含"jack"或"Jack"的情况(除非另一个模式匹配)。

重新加载模式文件

当您向正在运行的jack-matchmaker进程发送HUP信号时,将重新读取启动进程时在命令行上指定的文件,并使用这些模式替换之前使用的所有模式(包括作为位置命令行参数列出的那些)!如果读取文件时发生错误,则模式列表将为空。

在systemd上,您可以使用systemctl --user reload jack-matchmaker重新加载模式文件。

JACK服务器连接

jack-matchmaker需要连接到正在运行的JACK服务器以通知有关新端口的情况。在启动时,它尝试连接到JACK,直到建立连接或超过最大连接尝试次数。这个数字可以通过命令行选项-m--max-attempts设置,默认为0(即无限尝试或直到中断)。默认情况下,jack-matchmaker在每个连接尝试之间等待3秒钟。您可以使用选项-I--connect-interval更改此间隔。

jack-matchmaker连接且JACK服务器停止时,将向jack-matchmaker发送关闭事件,然后再次进入上述的连接循环。

要断开与JACK服务器的连接并停止jack-matchmaker,向进程发送INT信号,通常在jack-matchmaker运行的终端中按Control-C完成。

Systemd服务

您可以选择将jack-matchmaker安装为systemd用户服务

$ install -Dm644 systemd/jack-matchmaker.conf /etc/conf.d/jack-matchmaker
$ install -Dm644 systemd/jack-matchmaker.service -t /usr/lib/systemd/user

要启动服务,根据需要编辑/etc/conf.d/jack-matchmaker(参见下文“环境文件”部分),然后使用以下命令启动服务:

$ systemctl --user start jack-matchmaker

再次停止它

$ systemctl --user stop jack-matchmaker

重新加载模式文件

$ systemctl --user reload jack-matchmaker

环境文件

jack-matchmaker systemd 用户服务读取环境文件,该文件预期位于 /etc/conf.d/jack-matchmaker。在此文件中,您可以设置以下服务启动设置作为环境变量

PATTERN_FILE(默认:"/etc/jack-matchmaker/patterns.txt"

一个包含端口号和模式对的文件,在启动时读取,如上节“模式文件”中所述。

PATTERNS

两个端口模式的空格分隔列表。默认列表为空,当以 systemd 服务方式运行 jack-matchmaker 时,建议使用 PATTERN_FILE,除非模式应该保持静态且永不更改。

CLIENT_NAME(默认:"jack-matchmaker"

jack-matchmaker 使用的 JACK 客户端名称设置为给定的值。

CONNECT_INTERVAL(默认:3

将尝试连接到 JACK 服务器的间隔设置为给定的数值。

EXACT_MATCHING

启用字面匹配模式。模式必须与端口号完全匹配。要继续使用正则表达式,请将端口号模式用正斜杠包围,例如 "/system:out_\d+/"

EXACT_MATCHING 设置为任何值以启用它。

MAX_ATTEMPTS(默认:0

设置在放弃之前尝试连接到 JACK 服务器前的最大尝试次数。默认值 0 表示在受到干扰之前一直尝试。

VERBOSITY(默认:INFO

设置输出详细程度。选项有:DEBUGINFOWARNINGERROR

要求

  • 带有 ctypes 模块的 Python 3 版本(即 PyPy 3 也适用)
  • pyjacklib
  • cachetools
  • JACK 版本 1 或 2
  • Linux、OS X(未经测试)或 Windows(未经测试,无信号处理)

许可证

jack-matchmaker 根据 GNU 公共许可证版本 v2 许可。

请参阅 LICENSE 文件获取更多信息。

作者

jack-matchmaker 由 Christopher Arndt 编写于 2016 - 2023。

致谢

jack-matchmaker 使用 Python 编写,并依赖于 pyjacklib 模块,该模块最初来自 falkTX 的 Cadence 应用程序,但现在已转变为独立的 Python 包,并在过程中进行了大量修改和扩展。

它受到 jack-autoconnect 的启发,后者也自动连接 JACK 端口,但不支持端口别名或元数据美名。jack-autoconnect 也是用 C++ 编写的,因此可能更快,占用内存更少。

从文件中读取端口(模式)并在 HUP 信号上重新读取的想法“受到启发”于 aj-snapshot

还有另一个类似的工具称为 jack-plumbing,它是流行 Linux 发行版中 jack-tools 软件包的一部分。

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源代码发行版

jack_matchmaker-0.11.0.tar.gz (19.9 kB 查看哈希值)

上传时间 源代码

构建发行版

jack_matchmaker-0.11.0-py3-none-any.whl (17.9 kB 查看哈希值)

上传时间 Python 3

支持