This plugin aims to bring first class support for the JACK Audio Connection Kit to VCV Rack.
This is a port of Skrylar’s JACK Audio to VCV Rack 2 with some added UX enhancements
- Currently we create new ports instead of renaming them, as I rename everything first it’s not a huge issue for me #1
- Currently sometimes Rack crashes on close #3
- There are four input and four output ports.
- Output ports are marked with an off-color accent.
- Each port may be named.
You have some options:
- Just add another
JackAndRack
. Seriously. - Add one of the special 8 inbound or outbound modules.
JACK modules are designed to cooperate with one another. They will feed audio to JACK or to Rack and only one of them will block Rack while waiting for audio to be processed. You can consult the power meter for proof.
This is the same as a JackAndRack
excepting all ports output to JACK.
This is the same as a JackAndRack
excepting all ports output to Rack.
Port names have -in
or -out
suffixes added in the background. This
matches how applications usually work in the JACK ecosystem. It also
makes it possible to run Rack effects where both input and output
channels are named “reverb.”
Input ports must have unique names across all inputs in a Rack instance. All output ports must have unique names across all outputs in a Rack instance.
This is a compatibility breaking change.
All port names had to be unique across an entire Rack instance. Names appeared exactly in JACK as they appeared in Rack.
We do not currently calculate and report processing delay between a signal entering Rack and exiting it. This means none of the delay compensation logic works and you may end up with desyncs if running more than one Rack instance or certain DAWs.
The issue is known and some attempt to fix this issue is scheduled.
Some users are running versions of Rack which contain patched RtAudio
libraries. These patches allow you to use JACK with the native Audio
modules.
Experience has shown that while this works enough to get audio to and from Rack, it does not integrate well with the JACK ecosystem. I do not support these special builds.
ALSA, JACK and Pulse Audio tend to compete for exclusive access to the
sound card. Having an Audio
module from Core
, or an Audio 16
from rcm
will result in issues.
These issues have mostly been reported as:
- A crash when exiting Rack,
- Rack crashing when trying to delete the
Audio
orAudio 16
.
Some workarounds are known:
- Delete the offending models from patches,
- Leave them be (leave the
Audio
modules blank so they read “ALSA” but do not show a device such asdefault-8
.
Special support has been added to address:
- Running on machines with JACK, but the server is turned off.
- Running on machines where no JACK server is even installed.
In both cases the modules will simply do nothing. You may still name ports and hook them up, and those will work if loaded in to a Rack instance with a functioning JACK server.
- Clone the VCV Rack sources locally `git clone https://github.com/VCVRack/Rack`
- Create a symlink to the repo at `/opt/rack`
- Build a copy of rack a) Update Rack’s submodules `cd /opt/rack` `git submodule update –init –recursive` b) Build Rack’s submodules `cd /opt/rack/dep` `make` (Unfortunately I had to uninstall pipewire and reinstall jack to get this to work) c) Build Rack itself, `cd /opt/rack` `make`
- In the stjack-vcv2 repo run `meson build` install anything that’s missing until its succesful
- Compile the plugin `cd build` `ninja`
- Run `gen_package.sh` to create the .vcvplugin, this will appear in `dist`
The panel graphics in the res directory is licensed under CC BY-NC-ND 4.0. You may not create modified adaptations of these graphics.
This plugin is made available under GPL3.
Previous versions were available under the BSD license. As Rack itself is no longer available under those terms, and we incorporate code from that project, this is no longer the case.
A copy of the JACK client headers are included under src/jack
, which
are made available to us under the LGPL license.
We have included them because it primarily simplifies compiling the plugin on Windows (MinGW2) targets.