jack-matchmaker


Namejack-matchmaker JSON
Version 0.11.0 PyPI version JSON
download
home_page
SummaryAuto-connect JACK ports as they appear using patterns
upload_time2023-06-30 09:08:10
maintainer
docs_urlNone
author
requires_python>=3.8
license
keywords jack midi audio multimedia music
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # jack-matchmaker

Auto-connect [JACK] ports as they appear and when they match the port patterns
given on the command line or read from a file.

[![Latest version](https://shields.io/pypi/v/jack-matchmaker)](https://pypi.org/project/jack-matchmaker)
[![Date of latest release](https://shields.io/github/release-date/SpotlightKid/jack-matchmaker)](https://github.com/SpotlightKid/jack-matchmaker/releases)
![Project status](https://shields.io/pypi/status/jack-matchmaker)
[![GNU General Public License 2](https://shields.io/pypi/l/jack-matchmaker)](./LICENSE)
![Python versions](https://shields.io/pypi/pyversions/jack-matchmaker)
[![Distribution format](https://shields.io/pypi/format/jack-matchmaker)](https://pypi.org/project/jack-matchmaker/#files)


## Description

`jack-matchmaker` is a small command line utility that listens to port
registrations by JACK clients and connects these ports when their names match
one of the port pattern pairs given on the command line at startup.
`jack-matchmaker` **never disconnects any ports.**

The port name patterns are specified as pairs of positional arguments or read
from a file (see below) and *by default* are always interpreted as
[Python regular expressions], where the first pattern of a pair is matched
against both output (readable) ports and input (writeable) ports, and the
second pattern of a pair is matched only against input ports. As many pattern
pairs as needed can be given.

If the first pattern matches an input port, all output ports connected to that
input port will be connected to the input ports matching the second pattern.

Patterns are matched against:

- normal port names
- port aliases
- [pretty-names]
  set in the port meta data

You can run `jack-matchmaker -oian` to list all available output and input
ports with their aliases and pretty-names.


## Installation

Before you install the software, please refer to the section
"Requirements".

Then simply do:

```con
$ pip install jack-matchmaker
```

There is also an [AUR package] available for Arch Linux users.


## Usage

Run `jack-matchmaker -h` (or `--help`) to show help on the available command
line options.

See also the section "Systemd service" below on how to use `jack-matchmaker` as
a systemd user service.

### Examples

Automatically connect the first two ports of Fluidsynth to the audio outs using
*exact matching* mode:

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

Both the output port and the input port patterns can be regular expressions. If
a match is found on an output port, the matching port will be connected to
*all* input ports, which match the corresponding input port pattern:

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

You can also use named regular expression groups in the output port pattern and
fill the port name sub-strings they match to into placeholders in the input
port pattern:

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

Automatically connect all ports going to the system output to an FFmpeg
recording instance as well:

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


### Regular expression and exact matching

By default port name patterns are always interpreted as
[Python regular expressions] and are matched against port names, aliases and
pretty-names using case-sensitive matching. They are anchored to the start of
the string they match, i.e. they must match the start of the port name, but
they still match, if the port name continues after the part the pattern matches.

E.g. the pattern `client:out_\d` matches `client:out_1`, `client:out_2` etc.
and also `client:out_10` (even though the trailing zero is not included in the
pattern), but does not match `otherclient:out_1`.

You can still match port names with arbitrary prefixes by using `.*` at the
start of the pattern, e.g. `.*client:out_\d`.

To anchor the pattern to the end of the matched string as well, use a `$` at
the end of the pattern. E.g `client:out_[12]$` will match `client:out_1` and
`client:out_2`, but not `client:out_10`, `client:out_21` etc.

To use exact string matching instead of regular expression matching, use the
`-e`, `--exact-matching` command line option. When this option is given,
patterns must match port names (or aliases or pretty-names) exactly. You can
still use regular expression patterns by enclosing a pattern in forward
slashes, e.g. like so:

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

All this applies to patterns given as positional command line arguments *and*
to patterns listed in a pattern file (see below).


### Pattern match group substitution

An output port pattern can contain one or more *named groups* with the syntax
`(?P<name>...)`, where the three dots represent a sub regular expression. The
part of the port name matched by this sub regex, is available as a substitution
value for a placeholder corresponding to the name of group in the input port
pattern. Placeholders use the [Python string formatting] syntax.

Example:

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

This would connect all ports named `mysynth:out_l_1`, `mysynth:out_l_2` and so
on to `myfx:in_l` and all ports named `mysynth:out_r_1`, `mysynth:out_r_2` and
so on to `myfx:in_r`.

### Pattern files

In addition to or instead of listing port patterns as as positional arguments
on the command line, port patterns can also be put in a textfile.

The `-p`, `--pattern-file` option instructs the program to read the patterns
from the file path given as the option value. The file must list one port
pattern per line, where the first line of every pair of two lines specifies the
output port pattern, and the second specifies the input port pattern. Empty
lines and lines starting with a hash-sign (`#`) are ignored and whitespace at
the start of the end of each line is stripped.

Example 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
```


#### Easy pattern file creation

Set up your JACK connections using GUI tools like `QJackCtl` or `Carla` first.
Then use `jack-matchmaker -c > patterns` to save a the current JACK connections
in the file `patterns` in a *pattern file compatible* format. You may then edit
this file and and delete or add pattern pairs as needed.

When using the `-c` option, you can also optionally give one or more regular
expression patterns as positional arguments on the command line. In that case
only connections, where any of the given patterns is matching (part of) either
the output or input port names, are listed. If the patterns contain any
uppercase letters, they will be matched in a case-sensitive fashion, if not,
they will be matched case-insensitively. The patterns are matched against the
full port name, including the client name. For example:

```con
$ jack-matchmaker -c JACK
```

This would list connections, where one of the connected ports contains "JACK"
in its name, but not if it contained only "jack" or "Jack" (unless matched by
another pattern).


#### Reloading the pattern file

When you send a HUP signal to a running `jack-matchmaker` process, the file
that was specified on the command line when the process was started is re-read
and the resulting patterns replace *all* previously used patterns (including
those listed as positional command line arguments!). If there should be an
error reading the file, the pattern list will then be empty.

On systemd you can use `systemctl --user reload jack-matchmaker` to reload the
pattern file.


## JACK server connection

`jack-matchmaker` needs a connection to a running JACK server to be notified
about new ports. On start-up it tries to connect to JACK until a connection can
be established or the maximum number of connection attempts is exceeded. This
number can be set with the command line option `-m`, `--max-attempts`, which
defaults to `0` (i.e. infinite attempts or until interrupted).
`jack-matchmaker` waits for 3 seconds between each connection attempt by
default. Change this interval with the option `-I`, `--connect-interval`.

When `jack-matchmaker` is connected and the JACK server is stopped, the
shutdown event is signaled to `jack-matchmaker`, which then enters the
connection loop described above again.

To disconnect from the JACK server and stop `jack-matchmaker`, send an INT
signal to the process, usually done by pressing Control-C in the terminal where
`jack-matchmaker` is running.


## Systemd service

You can optionally install `jack-matchmaker` as a systemd user service:

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

To start the service, edit `/etc/conf.d/jack-matchmaker` according to your
needs (see section "Environment file" below) and then start the service with:

```con
$ systemctl --user start jack-matchmaker
```

To stop it again:

```con
$ systemctl --user stop jack-matchmaker
```

To reload the pattern file:

```con
$ systemctl --user reload jack-matchmaker
```


### Environment file

The `jack-matchmaker` systemd user service reads an environment file, which is
expected to be located at `/etc/conf.d/jack-matchmaker`. In this file, you can
set the following service startup settings as environment variables:

`PATTERN_FILE` (default: `"/etc/jack-matchmaker/patterns.txt"`)

A file with port pattern pairs to read at startup as described above in section
"Pattern files".

`PATTERNS`

A space-separated list of port patterns in pairs of two. The default list is
empty and it is recommened to use `PATTERN_FILE` instead when running
`jack-matchmaker` as a systemd service, unless the patterns should remain
static and never change.

`CLIENT_NAME` (default: `"jack-matchmaker"`)

Set the JACK client name used by `jack-matchnmaker` to the given value.

`CONNECT_INTERVAL` (default: `3`)

Set the interval in seconds between attempts to connect to JACK server to the
given numeric value.

`EXACT_MATCHING`

Enable literal matching mode. Patterns must match port names exactly. To still
use regular expressions, surround a port pattern with forward slashes, e.g.
`"/system:out_\d+/"`.

Set `EXACT_MATCHING` to any value to enable it.

`MAX_ATTEMPTS` (default: `0`)

Set the maximum number of attempts to connect to JACK server before giving up.
The default value `0` means to keep on trying until interrupted.

`VERBOSITY` (default: `INFO`)

Set output verbosity level. Choices are: `DEBUG`, `INFO`, `WARNING`, and
`ERROR`.


## Requirements

- A version of Python 3 with a `ctypes` module (i.e. PyPy 3 works too)
- [pyjacklib]
- [cachetools]
- [JACK] version 1 or 2
- Linux, OS X (untested) or Windows (untested, no signal handling)


## License

`jack-matchmaker` is licensed under the GNU Public License Version v2.

Please see the file `LICENSE` for more information.

## Author

`jack-matchmaker` was written by Christopher Arndt 2016 - 2023.


## Acknowledgements

`jack-matchmaker` is written in Python and depends on the [pyjacklib] module,
which was originally taken from falkTX's [Cadence] application but now turned
into a stand-alone Python package and was heavily modified and extended in
the process.

It was inspired by [jack-autoconnect], which also auto-connects JACK ports, but
doesn't support port aliases or meta data pretty-names. jack-autoconnect is
also written in C++, and therefore probably faster and less memory hungry.

The idea to read ports (patterns) from a file and re-read them on the HUP
signal was "inspired" by [aj-snapshot].

There is also a similar tool called `jack-plumbing`, part of the [jack-tools]
package on popular Linux distributions.


[AUR package]: https://aur.archlinux.org/packages/jack-matchmaker/
[Cadence]: https://github.com/falkTX/Cadence/blob/master/src/jacklib.py
[aj-snapshot]: https://aj-snapshot.sourceforge.net/
[cachetools]: https://github.com/tkem/cachetools/
[jack-autoconnect]: https://github.com/kripton/jack_autoconnect
[JACK]: http://jackaudio.org/
[jack-tools]: https://packages.ubuntu.com/search?keywords=jack-tools&searchon=names&suite=all&section=all
[pretty-names]: https://github.com/jackaudio/jackaudio.github.com/wiki/JACK-Metadata-API
[pyjacklib]: https://github.com/jackaudio/pyjacklib
[Python regular expressions]: https://docs.python.org/3/library/re.html#regular-expression-syntax
[Python string formatting]: https://docs.python.org/3/library/string.html#formatstrings

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "jack-matchmaker",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "JACK,MIDI,audio,multimedia,music",
    "author": "",
    "author_email": "Christopher Arndt <info@chrisarndt.de>",
    "download_url": "https://files.pythonhosted.org/packages/83/8a/124f80cf9bb90925cccce673aeae621d62e65029e0fba21d98da0e5df9e3/jack_matchmaker-0.11.0.tar.gz",
    "platform": null,
    "description": "# jack-matchmaker\n\nAuto-connect [JACK] ports as they appear and when they match the port patterns\ngiven on the command line or read from a file.\n\n[![Latest version](https://shields.io/pypi/v/jack-matchmaker)](https://pypi.org/project/jack-matchmaker)\n[![Date of latest release](https://shields.io/github/release-date/SpotlightKid/jack-matchmaker)](https://github.com/SpotlightKid/jack-matchmaker/releases)\n![Project status](https://shields.io/pypi/status/jack-matchmaker)\n[![GNU General Public License 2](https://shields.io/pypi/l/jack-matchmaker)](./LICENSE)\n![Python versions](https://shields.io/pypi/pyversions/jack-matchmaker)\n[![Distribution format](https://shields.io/pypi/format/jack-matchmaker)](https://pypi.org/project/jack-matchmaker/#files)\n\n\n## Description\n\n`jack-matchmaker` is a small command line utility that listens to port\nregistrations by JACK clients and connects these ports when their names match\none of the port pattern pairs given on the command line at startup.\n`jack-matchmaker` **never disconnects any ports.**\n\nThe port name patterns are specified as pairs of positional arguments or read\nfrom a file (see below) and *by default* are always interpreted as\n[Python regular expressions], where the first pattern of a pair is matched\nagainst both output (readable) ports and input (writeable) ports, and the\nsecond pattern of a pair is matched only against input ports. As many pattern\npairs as needed can be given.\n\nIf the first pattern matches an input port, all output ports connected to that\ninput port will be connected to the input ports matching the second pattern.\n\nPatterns are matched against:\n\n- normal port names\n- port aliases\n- [pretty-names]\n  set in the port meta data\n\nYou can run `jack-matchmaker -oian` to list all available output and input\nports with their aliases and pretty-names.\n\n\n## Installation\n\nBefore you install the software, please refer to the section\n\"Requirements\".\n\nThen simply do:\n\n```con\n$ pip install jack-matchmaker\n```\n\nThere is also an [AUR package] available for Arch Linux users.\n\n\n## Usage\n\nRun `jack-matchmaker -h` (or `--help`) to show help on the available command\nline options.\n\nSee also the section \"Systemd service\" below on how to use `jack-matchmaker` as\na systemd user service.\n\n### Examples\n\nAutomatically connect the first two ports of Fluidsynth to the audio outs using\n*exact matching* mode:\n\n```con\n$ jack-matchmaker -e \\\n    fluidsynth:l_01 system:playback_1 \\\n    fluidsynth:r_01 system:playback_2\n```\n\nBoth the output port and the input port patterns can be regular expressions. If\na match is found on an output port, the matching port will be connected to\n*all* input ports, which match the corresponding input port pattern:\n\n```con\n$ jack-matchmaker \\\n    'fluidsynth:l_\\d+' 'system:playback_[13]' \\\n    'fluidsynth:r_\\d+' 'system:playback_[24]'\n```\n\nYou can also use named regular expression groups in the output port pattern and\nfill the port name sub-strings they match to into placeholders in the input\nport pattern:\n\n```con\n$ jack-matchmaker \\\n    'system:midi_capture_(?P<num>\\d+)$' 'mydaw:midi_in_track_{num}'\n```\n\nAutomatically connect all ports going to the system output to an FFmpeg\nrecording instance as well:\n\n```con\n$ jack-matchmaker \\\n    'system:playback_(?P<num>\\d+)$' 'ffmpeg:input_{num}'\n```\n\n\n### Regular expression and exact matching\n\nBy default port name patterns are always interpreted as\n[Python regular expressions] and are matched against port names, aliases and\npretty-names using case-sensitive matching. They are anchored to the start of\nthe string they match, i.e. they must match the start of the port name, but\nthey still match, if the port name continues after the part the pattern matches.\n\nE.g. the pattern `client:out_\\d` matches `client:out_1`, `client:out_2` etc.\nand also `client:out_10` (even though the trailing zero is not included in the\npattern), but does not match `otherclient:out_1`.\n\nYou can still match port names with arbitrary prefixes by using `.*` at the\nstart of the pattern, e.g. `.*client:out_\\d`.\n\nTo anchor the pattern to the end of the matched string as well, use a `$` at\nthe end of the pattern. E.g `client:out_[12]$` will match `client:out_1` and\n`client:out_2`, but not `client:out_10`, `client:out_21` etc.\n\nTo use exact string matching instead of regular expression matching, use the\n`-e`, `--exact-matching` command line option. When this option is given,\npatterns must match port names (or aliases or pretty-names) exactly. You can\nstill use regular expression patterns by enclosing a pattern in forward\nslashes, e.g. like so:\n\n```con\n$ jack-matchmaker -e system:capture_1 '/myclient:in_l_\\d+/'\n```\n\nAll this applies to patterns given as positional command line arguments *and*\nto patterns listed in a pattern file (see below).\n\n\n### Pattern match group substitution\n\nAn output port pattern can contain one or more *named groups* with the syntax\n`(?P<name>...)`, where the three dots represent a sub regular expression. The\npart of the port name matched by this sub regex, is available as a substitution\nvalue for a placeholder corresponding to the name of group in the input port\npattern. Placeholders use the [Python string formatting] syntax.\n\nExample:\n\n```con\n$ jack-matchmaker \\\n    'mysynth:out_(?P<channel>[lr])_\\d+$' 'myfx:in_{channel}$'\n```\n\nThis would connect all ports named `mysynth:out_l_1`, `mysynth:out_l_2` and so\non to `myfx:in_l` and all ports named `mysynth:out_r_1`, `mysynth:out_r_2` and\nso on to `myfx:in_r`.\n\n### Pattern files\n\nIn addition to or instead of listing port patterns as as positional arguments\non the command line, port patterns can also be put in a textfile.\n\nThe `-p`, `--pattern-file` option instructs the program to read the patterns\nfrom the file path given as the option value. The file must list one port\npattern per line, where the first line of every pair of two lines specifies the\noutput port pattern, and the second specifies the input port pattern. Empty\nlines and lines starting with a hash-sign (`#`) are ignored and whitespace at\nthe start of the end of each line is stripped.\n\nExample file:\n\n```\n# Left channel\n# This will match output ports of any client named\n# 'out_1', 'out_l', 'output_1' or 'output_l'\n.*:out(put)?_(1|l)$\n    system:playback_1\n\n# Right channel\n# This will match output ports of any client named\n# 'out_2', 'out_r', 'output_2' or 'output_r'\n.*:out(put)?_(2|r)$\n    system:playback_2\n\n# Another common naming scheme for output ports:\n.*:Out L\n    system:playback_1\n\n.*:Out R\n    system:playback_2\n```\n\n\n#### Easy pattern file creation\n\nSet up your JACK connections using GUI tools like `QJackCtl` or `Carla` first.\nThen use `jack-matchmaker -c > patterns` to save a the current JACK connections\nin the file `patterns` in a *pattern file compatible* format. You may then edit\nthis file and and delete or add pattern pairs as needed.\n\nWhen using the `-c` option, you can also optionally give one or more regular\nexpression patterns as positional arguments on the command line. In that case\nonly connections, where any of the given patterns is matching (part of) either\nthe output or input port names, are listed. If the patterns contain any\nuppercase letters, they will be matched in a case-sensitive fashion, if not,\nthey will be matched case-insensitively. The patterns are matched against the\nfull port name, including the client name. For example:\n\n```con\n$ jack-matchmaker -c JACK\n```\n\nThis would list connections, where one of the connected ports contains \"JACK\"\nin its name, but not if it contained only \"jack\" or \"Jack\" (unless matched by\nanother pattern).\n\n\n#### Reloading the pattern file\n\nWhen you send a HUP signal to a running `jack-matchmaker` process, the file\nthat was specified on the command line when the process was started is re-read\nand the resulting patterns replace *all* previously used patterns (including\nthose listed as positional command line arguments!). If there should be an\nerror reading the file, the pattern list will then be empty.\n\nOn systemd you can use `systemctl --user reload jack-matchmaker` to reload the\npattern file.\n\n\n## JACK server connection\n\n`jack-matchmaker` needs a connection to a running JACK server to be notified\nabout new ports. On start-up it tries to connect to JACK until a connection can\nbe established or the maximum number of connection attempts is exceeded. This\nnumber can be set with the command line option `-m`, `--max-attempts`, which\ndefaults to `0` (i.e. infinite attempts or until interrupted).\n`jack-matchmaker` waits for 3 seconds between each connection attempt by\ndefault. Change this interval with the option `-I`, `--connect-interval`.\n\nWhen `jack-matchmaker` is connected and the JACK server is stopped, the\nshutdown event is signaled to `jack-matchmaker`, which then enters the\nconnection loop described above again.\n\nTo disconnect from the JACK server and stop `jack-matchmaker`, send an INT\nsignal to the process, usually done by pressing Control-C in the terminal where\n`jack-matchmaker` is running.\n\n\n## Systemd service\n\nYou can optionally install `jack-matchmaker` as a systemd user service:\n\n```con\n$ install -Dm644 systemd/jack-matchmaker.conf /etc/conf.d/jack-matchmaker\n$ install -Dm644 systemd/jack-matchmaker.service -t /usr/lib/systemd/user\n```\n\nTo start the service, edit `/etc/conf.d/jack-matchmaker` according to your\nneeds (see section \"Environment file\" below) and then start the service with:\n\n```con\n$ systemctl --user start jack-matchmaker\n```\n\nTo stop it again:\n\n```con\n$ systemctl --user stop jack-matchmaker\n```\n\nTo reload the pattern file:\n\n```con\n$ systemctl --user reload jack-matchmaker\n```\n\n\n### Environment file\n\nThe `jack-matchmaker` systemd user service reads an environment file, which is\nexpected to be located at `/etc/conf.d/jack-matchmaker`. In this file, you can\nset the following service startup settings as environment variables:\n\n`PATTERN_FILE` (default: `\"/etc/jack-matchmaker/patterns.txt\"`)\n\nA file with port pattern pairs to read at startup as described above in section\n\"Pattern files\".\n\n`PATTERNS`\n\nA space-separated list of port patterns in pairs of two. The default list is\nempty and it is recommened to use `PATTERN_FILE` instead when running\n`jack-matchmaker` as a systemd service, unless the patterns should remain\nstatic and never change.\n\n`CLIENT_NAME` (default: `\"jack-matchmaker\"`)\n\nSet the JACK client name used by `jack-matchnmaker` to the given value.\n\n`CONNECT_INTERVAL` (default: `3`)\n\nSet the interval in seconds between attempts to connect to JACK server to the\ngiven numeric value.\n\n`EXACT_MATCHING`\n\nEnable literal matching mode. Patterns must match port names exactly. To still\nuse regular expressions, surround a port pattern with forward slashes, e.g.\n`\"/system:out_\\d+/\"`.\n\nSet `EXACT_MATCHING` to any value to enable it.\n\n`MAX_ATTEMPTS` (default: `0`)\n\nSet the maximum number of attempts to connect to JACK server before giving up.\nThe default value `0` means to keep on trying until interrupted.\n\n`VERBOSITY` (default: `INFO`)\n\nSet output verbosity level. Choices are: `DEBUG`, `INFO`, `WARNING`, and\n`ERROR`.\n\n\n## Requirements\n\n- A version of Python 3 with a `ctypes` module (i.e. PyPy 3 works too)\n- [pyjacklib]\n- [cachetools]\n- [JACK] version 1 or 2\n- Linux, OS X (untested) or Windows (untested, no signal handling)\n\n\n## License\n\n`jack-matchmaker` is licensed under the GNU Public License Version v2.\n\nPlease see the file `LICENSE` for more information.\n\n## Author\n\n`jack-matchmaker` was written by Christopher Arndt 2016 - 2023.\n\n\n## Acknowledgements\n\n`jack-matchmaker` is written in Python and depends on the [pyjacklib] module,\nwhich was originally taken from falkTX's [Cadence] application but now turned\ninto a stand-alone Python package and was heavily modified and extended in\nthe process.\n\nIt was inspired by [jack-autoconnect], which also auto-connects JACK ports, but\ndoesn't support port aliases or meta data pretty-names. jack-autoconnect is\nalso written in C++, and therefore probably faster and less memory hungry.\n\nThe idea to read ports (patterns) from a file and re-read them on the HUP\nsignal was \"inspired\" by [aj-snapshot].\n\nThere is also a similar tool called `jack-plumbing`, part of the [jack-tools]\npackage on popular Linux distributions.\n\n\n[AUR package]: https://aur.archlinux.org/packages/jack-matchmaker/\n[Cadence]: https://github.com/falkTX/Cadence/blob/master/src/jacklib.py\n[aj-snapshot]: https://aj-snapshot.sourceforge.net/\n[cachetools]: https://github.com/tkem/cachetools/\n[jack-autoconnect]: https://github.com/kripton/jack_autoconnect\n[JACK]: http://jackaudio.org/\n[jack-tools]: https://packages.ubuntu.com/search?keywords=jack-tools&searchon=names&suite=all&section=all\n[pretty-names]: https://github.com/jackaudio/jackaudio.github.com/wiki/JACK-Metadata-API\n[pyjacklib]: https://github.com/jackaudio/pyjacklib\n[Python regular expressions]: https://docs.python.org/3/library/re.html#regular-expression-syntax\n[Python string formatting]: https://docs.python.org/3/library/string.html#formatstrings\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Auto-connect JACK ports as they appear using patterns",
    "version": "0.11.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/SpotlightKid/jack-matchmaker/issues",
        "Homepage": "https://github.com/SpotlightKid/jack-matchmaker",
        "Source": "https://github.com/SpotlightKid/jack-matchmaker"
    },
    "split_keywords": [
        "jack",
        "midi",
        "audio",
        "multimedia",
        "music"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ce964dc721ad5faaf851c05360182e122d9679e1c1c522f86635021e3869ef6e",
                "md5": "bb51fdf5efb545038bf706b4b7c70435",
                "sha256": "0f53f63497e121e5edd9a42481985601b496882b89234dbf7c67760434c3c1a4"
            },
            "downloads": -1,
            "filename": "jack_matchmaker-0.11.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bb51fdf5efb545038bf706b4b7c70435",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 17929,
            "upload_time": "2023-06-30T09:08:09",
            "upload_time_iso_8601": "2023-06-30T09:08:09.069309Z",
            "url": "https://files.pythonhosted.org/packages/ce/96/4dc721ad5faaf851c05360182e122d9679e1c1c522f86635021e3869ef6e/jack_matchmaker-0.11.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "838a124f80cf9bb90925cccce673aeae621d62e65029e0fba21d98da0e5df9e3",
                "md5": "170bab1f9d24c7d1fb39e207d59a195f",
                "sha256": "a386c8f8d8f9e0dbbf1b75f2260f8534ed9c7e75875571adbc493b0f6538be1d"
            },
            "downloads": -1,
            "filename": "jack_matchmaker-0.11.0.tar.gz",
            "has_sig": false,
            "md5_digest": "170bab1f9d24c7d1fb39e207d59a195f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 19901,
            "upload_time": "2023-06-30T09:08:10",
            "upload_time_iso_8601": "2023-06-30T09:08:10.938411Z",
            "url": "https://files.pythonhosted.org/packages/83/8a/124f80cf9bb90925cccce673aeae621d62e65029e0fba21d98da0e5df9e3/jack_matchmaker-0.11.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-06-30 09:08:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "SpotlightKid",
    "github_project": "jack-matchmaker",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "jack-matchmaker"
}
        
Elapsed time: 0.11497s