skjack-vcv icon indicating copy to clipboard operation
skjack-vcv copied to clipboard

First-class JACK support for VCV Rack

This plugin aims to bring first class support for the JACK Audio Connection Kit to VCV Rack.

It has not been profitable to work on, so it is maintained or developed on a whim.

[[https://www.ko-fi.com/V7V6RG3E][You are still free to send a tip or commission a module. ]]

[[https://www.ko-fi.com/V7V6RG3E][https://www.ko-fi.com/img/donate_sm.png]]

  • Modules ** JACK Audio

#+CAPTION: Annotated image of the JACK Audio module. [[doc/module-fs8.png]]

  • There are four input and four output ports.
  • Output ports are marked with an off-color accent.
  • Each port may be named.

*** Four ports is not enough for me! You have some options:

  1. Just add another =JACK Audio=. Seriously.
  2. 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.

** 8 RACK->JACK This is the same as a =JACK Audio= excepting all ports output to JACK.

** 8 JACK->RACK This is the same as a =JACK Audio= excepting all ports output to Rack.

  • JACK Quirks

** Port names

*** 0.6.7 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.

*** 0.6.6 All port names had to be unique across an entire Rack instance. Names appeared exactly in JACK as they appeared in Rack.

** TODO Latency information 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.

  • Compatibility

** Patched Rack's with JACK in RtAudio 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.

** Audio and rcm's Audio 16 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:

  1. A crash when exiting Rack,
  2. Rack crashing when trying to delete the =Audio= or =Audio 16=.

Some workarounds are known:

  1. Delete the offending models from patches,
  2. Leave them be (leave the =Audio= modules blank so they read "ALSA" but do not show a device such as =default-8=.

** Systems without a JACK server Special support has been added to address:

  1. Running on machines with JACK, but the server is turned off.
  2. 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.

  • Licenses and Credits

** Graphics The module graphics template was designed by github user [[https://github.com/infamedavid][@infamedavid (David Rodriguez)]], and are available via CC-BY.

** 3270 Font The [[https://github.com/rbanffy/3270font][3270 terminal font]] is used under the BSD-3 license.

** SkJACK 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.

** JACK 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.