Giter Site home page Giter Site logo

skjack-vcv's Introduction

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.

You are still free to send a tip or commission a module.

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

Modules

JACK Audio

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.

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 @infamedavid (David Rodriguez), and are available via CC-BY.

3270 Font

The 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.

skjack-vcv's People

Contributors

skrylar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

skjack-vcv's Issues

unespected behavior with duplicated names

actually I think it is not a bug, is a normal behavior

I add a Skjack module and rename the input as 01, 02, 03, 04 and the output as 01, 02, 03, 04
if I try to connect something using a graphic tool (Claudia in this case) is not allowed to connect anything to the inputs sockets (it seem like jack assume the named 01, 02, 03 ,04 socket are outputs and it cant connects with other ouputs )
a second issue occurs if I "Duplicate" using the right mouse btton menu the Skjack module, it create 4 additional inputs and 4 additional outputs named 01, 02, 03, 04 respectively.
if I try to connect something to the second module outputs , the connection jump to the socket of the first module that have the same name

all that can be fixed renaming and avoiding duplicate names to the inputs and outputs and restarting the rack.

is there a way to avoid this behavior?, however I think is a topic to be considered in a future manual

Prevent multiple modules from blocking Rack

  • When adding a new buffered module, the buffers of existing modules should be cleared
  • Only a single buffered module should mutex lock Rack

This should allow you to use as many JACK Audio type modules as needed.

Fix port names on duplication

Not sure if we are told when our module is duplicated, but port names should be modified when the user does this to avoid... problems.

#11

Port renaming isn't saved if JACK is dead

Renaming ports shows up in the text fields, but is not committed to the module (and thus saved in the .vcv file) if JACK is dead at the time.

I noticed this testing on Windows where no JACK was installed.

Resampling?

It doesn't appear to work, even though its partially copied from VCV's Core. Someone probably would like this to work in their studio.

8-IN and 8-OUT

Just an easier way to get more ports of a single type.

feature request Jack CV output

(for a strange reason I wrote this feature request in the vcv rack bug tracker. I thought I had written it here, however here is)

I m thinking in a module that actually is very similar to the SKjack 8 out (perhaps arranged horizontally like a mixer) that the main feature of this module is a offset-multiply knob (or slider)

the single knob will commute the functions of the both knobs of the befaco Attenuverter depending if a signal is connected or not to the channel output

  • if a cable is connected to the output channel the knob will multiply by a value between -1 and 1
  • if any is connected to the channel the knob will offset the value ( allowing negative and positive values)

what is useful this module for?

this module allow send principally CV out from the vcv rack since jack allow send and use jack CV (some software compatible with jack cv are Carla that also allow convert cv to midi , NON mixer, Ingen and even another instance of vcv rack , maybe jack through the network and hardware -I have not tried this- among others software and uses)

also allow handle the volume of the audio output.

the actual SKjack can do it beside a befaco atenueverter

Shorter default port names

The solution to #5 is to use an actual port naming scheme instead of just stringifying the pointer to the module. Probably will use hashids for this because we can just grab some pre-made code to do it.

A new maintainer for 1.0

I am disgusted by the bait and switch pulled by Vortico. The short version is:

  • Rack was released as BSD and allowed to be BSD for many years. We were lead to believe this was how Rack was going to be, and certain advanced features sold as plugins.
  • Vortico suddenly opens a thread to "relicense" the program to make sure nobody can do anything commercial with it without his personal blessing.
  • He has previously shown a strange obsession with "ethical modules" (ethics is a deep and murky subject, consisting of many schools, which do not agree with one another.)
  • He mentions there are contracts on stand-by that have been deferred until 1.0.
  • He has mentioned that everyone will need explicit permission to develop a commercial module for 1.0 and beyond, or else you are simply not allowed to do it (as opposed to not being in the plugin manager.)
  • He has been evasive about the motivation (degrading to "well I should be allowed to make money on my IP!" which, conjugated with this assertion he should get first approval, existing contracts and obsession with bigger players, sounds like there is an incredibly high potential for collusion.

As it seems almost guaranteed this will be going through (I have stated on the forums, that it appears the thread was simply checking for outrage and not a discussion--it appears that these sudden, not-before-announced and severe changes are for the appeasal of his contract interests; why else would these matter now and not when the first outside modules appeared?) I am too disgusted to put up with this monopolistic crap.

Jack not detecting module on Rack 1.1.2

I'm on macOS Mojave and JackPilot detects the Jack module in Rack fine when running 1.1.1, but if I load the module in 1.1.2 it doesn't show in the routing window of JackPilot.

Latency information

JACK expects us to inform it how long it takes a signal to enter and finally exit Rack. I assume this information gets used for delay compensation since I've never had to deal with plugin latency using it.

Theme selector

David Rodriguez has made some beautiful faceplates, so we need

  • A menu to select faceplate theme
  • To bring them in as usable options

SK modules graphic component

In order to keep the forum post free of off topic I ll continue in this thread the progress of the development of the graphic components of the SK modules ( I m not sure if "SK modules" is the brand of this modules, isn't?)

The graphics parts are now here: https://github.com/infamedavid/SK-modules-graphic-component released under license CC-BY.

For another graphic parts of the modules (the base, the graphic template and the logo proposal ) I will keep private except that Skrylar decide to release it.

I m using some free fonts in the proyect:
freeSans
3270font

this is a work in progress, I will continue working according to the needs of the project, if you have suggestions, criticism or you are needing a graphic component not included , please let me know

thanks!

Should skjack automatically connect?

All of the other Jack-capable audio software that I use automatically connects to "system:" ports, with some mechanism to choose which ports to connect to -- so that you start the software and you can get audio immediately, without any external configuration.

VCV <--> Jack doesn't do this. It's silent until the user takes action outside of VCV. (I.e., open VCV, create oscillator --> VCA --> Jack output module, hear nothing, think "Is VCV just plain broken?")

So, for every instance of a Jack module, I have to go to qjackctl and manually connect them to the hardware outputs. It makes me want to avoid opening and closing patches.

I'm willing to take a look at this, time permitting, but first I wanted to ask -- is this a deliberate design decision? (I can imagine that you wouldn't want to assume that every Jack module should connect to "system:" -- but I can't help feeling that there must be a better way to handle this than to connect to nothing.)

Mac problem

Built OK ( some warnings) but fails on Rack run:

[0.375 warn src/plugin.cpp:90] Failed to load library /Users/nik/Documents/Rack/plugins/SkJack/plugin.dylib: dlopen(/Users/nik/Documents/Rack/plugins/SkJack/plugin.dylib, 2): Symbol not found: _jack_activate
  Referenced from: /Users/nik/Documents/Rack/plugins/SkJack/plugin.dylib
  Expected in: flat namespace
 in /Users/nik/Documents/Rack/plugins/SkJack/plugin.dylib

Build:

Niks-MacBook-Pro:skjack-vcv nik$ make
c++  -std=c++11 -stdlib=libc++  -DSLUG=SkJack -fPIC -I../../include -I../../dep/include -DVERSION=0.6.0 -MMD -MP -g -O3 -march=nocona -ffast-math -fno-finite-math-only -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.7 -c -o build/src/jack-audio-module-widget.cc.o src/jack-audio-module-widget.cc
In file included from src/jack-audio-module-widget.cc:1:
In file included from src/jack-audio-module-widget.hh:3:
In file included from src/skjack.hh:5:
In file included from /usr/local/include/jack/jack.h:28:
/usr/local/include/jack/types.h:389:71: warning: 'register' storage class
      specifier is deprecated and incompatible with C++17
      [-Wdeprecated-register]
  ...(*JackPortRegistrationCallback)(jack_port_id_t port, int register, void ...
                                                              ^~~~~~~~
/usr/local/include/jack/types.h:411:70: warning: 'register' storage class
      specifier is deprecated and incompatible with C++17
      [-Wdeprecated-register]
  ...(*JackClientRegistrationCallback)(const char* name, int register, void *...
                                                             ^~~~~~~~
In file included from src/jack-audio-module-widget.cc:2:
src/jack-audio-module.hh:11:1: warning: 'JackAudioModule' defined as a struct
      here but previously declared as a class [-Wmismatched-tags]
struct JackAudioModule : Module {
^
src/skjack.hh:11:1: note: did you mean struct here?
class JackAudioModule;
^~~~~
struct
3 warnings generated.
c++  -std=c++11 -stdlib=libc++  -DSLUG=SkJack -fPIC -I../../include -I../../dep/include -DVERSION=0.6.0 -MMD -MP -g -O3 -march=nocona -ffast-math -fno-finite-math-only -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.7 -c -o build/src/jack-audio-module.cc.o src/jack-audio-module.cc
In file included from src/jack-audio-module.cc:1:
In file included from src/jack-audio-module.hh:3:
In file included from src/skjack.hh:5:
In file included from /usr/local/include/jack/jack.h:28:
/usr/local/include/jack/types.h:389:71: warning: 'register' storage class
      specifier is deprecated and incompatible with C++17
      [-Wdeprecated-register]
  ...(*JackPortRegistrationCallback)(jack_port_id_t port, int register, void ...
                                                              ^~~~~~~~
/usr/local/include/jack/types.h:411:70: warning: 'register' storage class
      specifier is deprecated and incompatible with C++17
      [-Wdeprecated-register]
  ...(*JackClientRegistrationCallback)(const char* name, int register, void *...
                                                             ^~~~~~~~
In file included from src/jack-audio-module.cc:1:
src/jack-audio-module.hh:11:1: warning: 'JackAudioModule' defined as a struct
      here but previously declared as a class [-Wmismatched-tags]
struct JackAudioModule : Module {
^
src/skjack.hh:11:1: note: did you mean struct here?
class JackAudioModule;
^~~~~
struct
src/jack-audio-module.cc:6:7: warning: address of array 'this->jport' will
      always evaluate to 'true' [-Wpointer-bool-conversion]
        if (!jport) return;
            ~^~~~~
4 warnings generated.
c++  -std=c++11 -stdlib=libc++  -DSLUG=SkJack -fPIC -I../../include -I../../dep/include -DVERSION=0.6.0 -MMD -MP -g -O3 -march=nocona -ffast-math -fno-finite-math-only -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.7 -c -o build/src/skjack.cc.o src/skjack.cc
In file included from src/skjack.cc:1:
In file included from src/skjack.hh:5:
In file included from /usr/local/include/jack/jack.h:28:
/usr/local/include/jack/types.h:389:71: warning: 'register' storage class
      specifier is deprecated and incompatible with C++17
      [-Wdeprecated-register]
  ...(*JackPortRegistrationCallback)(jack_port_id_t port, int register, void ...
                                                              ^~~~~~~~
/usr/local/include/jack/types.h:411:70: warning: 'register' storage class
      specifier is deprecated and incompatible with C++17
      [-Wdeprecated-register]
  ...(*JackClientRegistrationCallback)(const char* name, int register, void *...
                                                             ^~~~~~~~
In file included from src/skjack.cc:2:
src/jack-audio-module.hh:11:1: warning: 'JackAudioModule' defined as a struct
      here but previously declared as a class [-Wmismatched-tags]
struct JackAudioModule : Module {
^
src/skjack.hh:11:1: note: did you mean struct here?
class JackAudioModule;
^~~~~
struct
src/skjack.cc:34:16: warning: address of array 'module->jport' will always
      evaluate to 'true' [-Wpointer-bool-conversion]
                if (!module->jport) continue;
                    ~~~~~~~~~^~~~~
4 warnings generated.
c++ -o plugin.dylib build/src/jack-audio-module-widget.cc.o build/src/jack-audio-module.cc.o build/src/skjack.cc.o  -shared -undefined dynamic_lookup -stdlib=libc++ -mmacosx-version-min=10.7

-in and -out suffixes for port names

Should automatically affix -in to input ports and -out to output ports, following unofficial JACK conventions. Should be able to toggle this via context menu for users that need exact control over names but default it to on.

#11

Windows build

I didn't think people actually used JACK on Windows, but they seem to be asking for it (plus we need it to be allowed on the plugin manager.)

Skjack V1.0.0: Crash Rack on startup with Jack

OS: opensuse Leap 15.1
Rack: V1.1.3
Hi, If I start VCV Rack with Skjack installed and Jack running, Rack crashes. Log attached.
log.zip
If I start Rack without Jack running it seems ok but that defeats my setup. I have to uninstall Skjack to get VCV Rack to start and behave.

LDD result-

chris@asus-roc:~/.Rack/plugins-v1/SkJack> ldd plugin.so
ldd: warning: you do not have execution permission for `./plugin.so'
linux-vdso.so.1 (0x00007ffd5abca000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f0e5049c000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0e50284000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0e4feca000)
libm.so.6 => /lib64/libm.so.6 (0x00007f0e4fb92000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0e50a49000)
chris@asus-roc:~/.Rack/plugins-v1/SkJack>

Not sure what else to test or do.
Regards,
Chris.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.