Plugin wrapper around VCV Rack

Overview

DISTRHO Cardinal

Cardinal, the Rack!

! THIS PROJECT IS A WORK IN PROGRESS !

This is a DPF-based plugin wrapper around VCV Rack, using its code directly instead of forking the project.
The target is to have a proper, self-contained, fully free and open-source plugin version of Rack.
See project overview document for an overview on how the project source code is structured.

Cardinal contains Rack, some 3rd-party modules and a few internal utilities all in a single binary.
It does not load external modules and does not connect to the official Rack library/store.

Because it is using DPF, Cardinal already supports LV2 and VST2 with an extra JACK standalone mode if self-compiled.
A VST3 version is in progress, already part of the build but still experimental.

The project should be considered in beta state at the moment.

Plugin variants

Cardinal provides 3 plugin variants - "main", Synth and FX.
They are all equivalent in performance and behaviour, with only the IO and metadata that changes.
This is because some hosts are very strict on which plugins are allowed as instruments vs FX, so separate variants of the same plugin are needed.

FX and Synth variants both have 2 audio outputs, while "main" has 8.
All variants have MIDI input and output support.

Main

This variant provides 8 audio inputs and outputs and 10 CV inputs and outputs.

NOTE: Due to VST2 format not supporting CV ports, this variant is not available for VST2.

Synth

This variant provides 2 audio outputs but no audio inputs or CV ports.
Plugin type is set as "instrument".

FX

This variant provides 2 audio inputs and outputs, but no CV ports.
Plugin type is set as regular "effect".

Screenshots

Because people will ask for it. It is, well... Rack.
But a couple of modules background's have their colors flipped, because damn we want proper dark mode!

screenshot1 screenshot2

Current status

Most of the features already work, you can assume things work in general except when stated otherwise.
Currently the following features are known NOT to work:

  • VST3 support incomplete/experimental #41
  • Factory (plugin-provided) presets #58

Current builds

If you want to try this out early, checkout the GitHub actions tab.
There is absolutely no warranty, use at your own risk and all that...

Community chat

Currently we are all on #cardinal IRC room in irc.libera.chat server.
Come join us in your favorite IRC client or through a Matrix bridge.

License

Cardinal is licensed under GPLv3+, see LICENSE for more details.
An overview of the included code and linked submodules can be seen here.

Included modules

At the moment the following 3rd-party modules are provided:

  • 21kHz
  • AS
  • Amalgamated Harmonics
  • Animated Circuits
  • Aria Salvatrice
  • Atelier
  • Audible Instruments
  • Bacon Music
  • Befaco
  • Bidoo
  • Bogaudio
  • cf
  • ChowDSP
  • DrumKit
  • E-Series
  • Fehler Fabrik
  • Fundamental
  • Glue the Giant
  • Grande
  • HetrickCV
  • Impromptu
  • JW-Modules
  • LifeFormModular
  • Little Utils
  • Lomas Modules
  • Lyrae Modules
  • MindMeld
  • Mog
  • mscHack
  • Rackwindows
  • repelzen
  • Sonus Modular
  • Valley
  • ZZC
  • ZetaCarinae

Additionally Cardinal provides its own modules for DAW/Host automation, time position and internal plugin hosting.

Restrictions

Being an open-source project, all included 3rd-party modules must be opensource and have a GPLv3+ compatible license. GPLv3-only modules are not allowed.

Special care also needs to be taken with artwork licensing.
Cardinal allows the use of CC-NC because how prevalent it is across many Rack modules, but it should be avoided if possible.
Also, unless the module is really essential, CC-ND is not allowed.

Dependencies should be kept at a minimum, as otherwise it quickly grows the complexity of the build.
Online access (such as phone-home) is not allowed.

Why

Cardinal was created first and foremost as a way to have Rack as a proper open-source audio plugin.
A proper audio plugin should be self-contained as much as possible, as to not interfere with the DAW/Host. Loading external modules clearly goes against this idea.
Not to mention being open-source, otherwise we are at the mercy of the wishes of a company for what we can and cannot do, which is not something Cardinal's authors wish to abide by.

A self-contained plugin can't be overstated, as DLL/shared-object symbol conflicts can trigger hard-to-debug crashes.
While Rack tries to mitigate this as much as possible, crashes due to conflicting modules have already been seen in v2 builds.
On the other side, Cardinal redefines class and function names as needed to avoid as many conflicts as possible.

Support for ARM and non-mainstream platforms (for example BSD) has also always been missing from the official Rack since the start.
While we can patch the Rack free version to support these, same can't be done with Rack Pro with it being a closed-source product.
The online library/store only supports a very specific set of platforms too, so non-supported platforms would need any 3rd-party modules to be manually compiled to make them usable.

Unhappiness with the audio threading behaviour of Rack also plays a role.
Both audio and MIDI should be locked to the host audio thread as to minimize (or even altogether remove) latency and jitter.
The use of separate threads for MIDI is bad design, one that has been corrected in DAWs and JACK-MIDI for several years...
But Rack's use of RtMidi requires separate threading, so Cardinal does not use it.

Other relevant reasons include:

  • LV2 plugin version from the start
  • Proper dark mode support
  • Proper optimized build (because all code is compiled to a single file, we can use LTO over the whole thing)
  • Real CV ports to and from the plugin
  • Removing online access from the plugin and included modules (no phone-home here!)
  • Works as a test case for DPF and Carla
  • It is fun :)

Vs. Rack Pro

It needs to be said that Cardinal project and its author(s) do not wish anything bad to the original/official Rack project.
In fact, Cardinal wouldn't exist if not for Rack v2 release. (which has many needed things to make a plugin version work)

Cardinal and Rack should be able to co-exist friendly and peacefully, as they clearly have different targets.
It is likely most people will prefer to use Rack Pro for its official support and its big module collection (including commercial ones).

A feature comparison between Cardinal and Rack Pro can be seen here.

Issues
  • Project related news (was: Gathering interested people)

    Project related news (was: Gathering interested people)

    Leave a comment if you want to help. This does not do anything yet besides building VCV sources, I need to do some experiments for it first to see what is the best approach. Seems that we only need to create a variant of https://github.com/VCVRack/Rack/blob/v2/adapters/standalone.cpp for plugins, and then add in some hardcoded module for IO (audio, midi and transport sync)

    opened by falkTX 178
  • Build issues for BSD

    Build issues for BSD

    The bundled QuickJS breaks:

    quickjs.c:1426:5: error: use of undeclared identifier 'malloc_usable_size'; did you mean 'js_malloc_usable_size'?
        malloc_usable_size,
        ^~~~~~~~~~~~~~~~~~
        js_malloc_usable_size
    quickjs.c:1180:8: note: 'js_malloc_usable_size' declared here
    size_t js_malloc_usable_size(JSContext *ctx, const void *ptr)
           ^
    qjs.c:249:5: error: use of undeclared identifier 'malloc_usable_size'; did you mean 'js_malloc_usable_size'?
        malloc_usable_size,
        ^~~~~~~~~~~~~~~~~~
        js_malloc_usable_size
    ./quickjs.h:353:8: note: 'js_malloc_usable_size' declared here
    size_t js_malloc_usable_size(JSContext *ctx, const void *ptr);
           ^
    

    but we have the latest released version as a port/package: quickjs-2021.03.27

    Please add a build-time option to use external dependencies.

    opened by yurivict 56
  • focus issues for VST2 in Ableton Live, Bitwig and other hosts

    focus issues for VST2 in Ableton Live, Bitwig and other hosts

    Hi, finally I can get it working! Cardinal Parameter is gorgeous, thank you! VST2 has no issues with template.vcv so far so it runs. Some issues if you will:

    1. Sometimes when changing focus between DAW, explorer and the plugin itself it loses focus in module browser search field. I can't even type any symbols, every time they are different then I was intented to type and all in CAPS LOCK somehow.
    2. More annoying issue than the previous one - any action with windows explorer like save, open, literally anything causes Live's crash. It seems like you said before more porting to windows issues that the plugin itself

    Cheers! EDIT: hotkeys also don't work... EDIT2: When closing Ableton's project with 5 instances of Cardinal it hangs Ableton and got "doesn't respong" message from windows when trying close it. Seems something with RAM but I don't sure :-)

    bug help wanted 
    opened by vcvrackideas 51
  • Deploy Failed fron Ableton to MODULARE DUO X

    Deploy Failed fron Ableton to MODULARE DUO X

    Hi, since update 22.3 / 22.4 simply cardianl no longer works for my MOD DUO X. I tried to make any patch (even very simple) by putting a normal Plateau reverb and saving to MOD. When I restart, the pedal board loads but there will be no more audio and therefore it does not work. Also useless for anything else concerning cardinal, midi sync, internal midi.

    Error is always the same: I do a patch on Ableton through the VST, I execute the deploy that works, sending audio to the MOD duo (for example a simple connected VCO). I run the save inside the pacth bank and after reboot it won’t work anymore. To get it working again I will have to open ableton again, load the VST and deploy again. Needless to say, it doesn’t work without a computer.

    this is an example of a simple patch I made to test but it doesn’t work https://pedalboards.moddevices.com/pedalboards/62296d22c21e5a25880ccbd6 plus the prints have never been able to view the print screens inside Cardinal MINI.

    Tried to uninstall everything and install again, it just doesn’t work in my case anymore.

    From the video you can see clearly, it works as long as you do not turn off the device, even saving as you can see there will be no more way to make the clock emit, both internal and external

    https://www.youtube.com/watch?v=5yI3FDOmPt8&feature=youtu.be

    thanks for any help

    attached a simple pact made on the vst TEST_VCO.vcv.zip

    Tried using the VST on reaper but no results

    opened by aveniridm 17
  • Missing entry method in VST2 plugin

    Missing entry method in VST2 plugin

    Since awhile I cannot load the vst files anymore, they don't appear in Ardour nor in Bitwig.

    Ardour info scanning: _[Info]: Scanning: /home/sn/.vst/CardinalFX.vst/CardinalFX.so [ERROR]: Missing entry method in VST2 plugin '/home/sn/.vst/CardinalFX.vst/CardinalFX.so' [WARNING]: Cannot open VST2 module '/home/sn/.vst/CardinalFX.vst/CardinalFX.so' Scan Failed.

    [Info]: Scanning: /home/sn/.vst/CardinalSynth.vst/CardinalSynth.so [ERROR]: Missing entry method in VST2 plugin '/home/sn/.vst/CardinalSynth.vst/CardinalSynth.so' [WARNING]: Cannot open VST2 module '/home/sn/.vst/CardinalSynth.vst/CardinalSynth.so' Scan Failed.

    [Info]: Scanning: /home/sn/.vst/Cardinal.vst/Cardinal.so [WARNING]: Cannot open VST2 module '/home/sn/.vst/Cardinal.vst/Cardinal.so' Scan Failed._

    If I remember correctly this started happening around the time Cardinal got renamed to CardinalFX

    opened by sc3sc3 15
  • Reaper Win11 x64 rendering issues - HiDPI

    Reaper Win11 x64 rendering issues - HiDPI

    Hi there! Thank you for your effort on a great little project.

    Cardinal Commit: 6c82749f2a19dac13af79cb4ecff0c6b0a8845d0 : "Make host audio meters independant from each other" Reaper version: v6.49/win64 rev 9cce1b Issue: range of crashes + display corruption issues in Reaper.

    LV2 - crashes application on plugin load win11-x64-reaper-lv2-crash VST3: crashes upon click / interaction. win11-x64-reaper-vst3-crash VST: Display misrenders and click interaction with drop down boxes misses target. lots of missing visuals. win11-x64-reaper-vst-corruption

    opened by Semiote 14
  • No keyboard input in reaper, Vst3 crashes reaper

    No keyboard input in reaper, Vst3 crashes reaper

    -Keyboard input doesn't work at all, only mouse input. (I thought this was just a matter of it not being supported yet at first, but realised it works in Carla standalone. It also works within carla vst.)

    -Vst3 crashes reaper, lv2 and vst loads fine.

    -In ShapeMaster from MindMeld, when you change tabs at the top the length knob disappears and you have to copy and paste the instance of Cardinal to get it back, or close and reopen the project. This happens within Carla as well.

    If there's a way to supply logs for these issues I'd be happy to do that, just tell me how.

    opened by TheGuyWhoo 14
  • 20.2: Fails to install: bin/Cardinal.vst3/Contents/*-*: No such file or directory

    20.2: Fails to install: bin/Cardinal.vst3/Contents/*-*: No such file or directory

    cp -rL bin/Cardinal.vst3/Contents/*-*      /usr/ports/audio/cardinal/work/stage/usr/local/lib/vst3/Cardinal.vst3/Contents/
    cp: bin/Cardinal.vst3/Contents/*-*: No such file or directory
    
    opened by yurivict 13
  • crash reloading a reaper project on ArchLinux

    crash reloading a reaper project on ArchLinux

    Thanks for your great work!!

    On reaper/linux/arch cardinal works as far as I could test, but I cannot reload projects saved with a cardinal instance. Reaper crashes on load.

    I am sorry for not providing logs. Where would they be?

    Thanks!

    opened by trummerschlunk 12
  • VCA-1 produces visual glitches

    VCA-1 produces visual glitches

    Not sure if issue with VCV or Cardinal. But having this module on the board makes the entire plugin window green. Moving VCA out of the way mitigates the issue. Seems like the module is not closing/stopping a drawing operation properly, so the green used for its bars gets set for all modules.

    bug 
    opened by falkTX 12
  • Pitchbend on Host MIDI CC module does not work

    Pitchbend on Host MIDI CC module does not work

    When using VSTi(2) Cardinal on Reaper on Win8 (not sure about VST3 or VST2), the default Pitch bend output in Host MIDI CC, well, does not output anything. Note that Pitch bending on the regular Host MIDI module works as normal.

    opened by rafaelferreiraql 11
  • Cardinal's Ildaeil doesn't know where my JSFX are

    Cardinal's Ildaeil doesn't know where my JSFX are

    Hello!

    I want to give the Ildaeil my JSFX path on Windows. It's c:\Users\ (my name)\AppData\Roaming\Reaper\Effects. Can you give an option to set a custom path, or at least add that as a default for Windows? Thanks!

    opened by fotisandstuff 2
  • Audio meter drops to 0 when DAW window in not in focus

    Audio meter drops to 0 when DAW window in not in focus

    Hi,

    I just started using Cardinal in REAPER on macOS and noticed an issue. When I switch from REAPER to another window, the sounds generated by Cardinal will stop and the audio meters in REAPER will drop to 0 as well. From my initial testings, the issue only appears in both VST3 and LV2 versions of Cardinal, and doesn't appear in any versions of CardinalFX or Cardinal Synth.

    Technical details:

    MacBook Pro 13 inch (2018), Intel i7 macOS Monterey 12.4(21F79) Cardinal-macOS-intel-22.5 REAPER 6.61

    opened by ShredderWalnut 0
  • Problem with host reset on nightly

    Problem with host reset on nightly

    In win64 nightly 62181c10 , I have a problem with drum beats like the ones in the patch "falkTX_-_Salomonis-MonoRegen.vcv". The snare goes out of sync many times, and the Aria Salvatrice sequencers are also affected. I temporarily solved the problem by routing the snare and the sequencers' "Reset" inputs to Host Time's "Playing" output instead of its "Reset" output. I use VST2 CardinalSynth on Reaper v6.59 (Windows 10 x64).

    opened by fotisandstuff 5
  • Remote host and port should be configurable

    Remote host and port should be configurable

    Cardinal has a great feature to automatically update a remote embedded instance, originally for the MOD devices. I'm currently trying to get Cardinal onto Zynthian, where this functionality would also be very useful. Cardinal itself runs fine there as LV2, by the way (compiled on Raspberry Pi 4).

    However, Cardinal has the remote host and port hardcoded to 192.168.51.1:2228. Zynthian is its own actual network device, and often doesn't have a fixed IP address or hostname. Hence, it'd be nice if this can be read from a configuration file.

    I realize that no configuration file exists yet, and currently all user settings are stored as plugin data. I think we could do this in a few ways:

    A) Introduce a configuration file B) Configure this from environment variables

    (A) would be the way to go if there are other settings that might want to live there (e.g. framerate skip, which typically wouldn't differ from instance to instance)

    (B) would work as an initial approach, but it'd be messy since you'd have to set the environment variables for the host running Cardinal (if not standalone) and hope they make it across.

    Any thoughts?

    opened by jypma 8
  • a request for docb modules

    a request for docb modules

    https://github.com/docb?tab=repositories

    Hello, I would like to make a request on adding Docb Modules to Cardinal if possible. Thank you.

    Edit: Tho On the vcv page they are under "GPL-3.0-or-later" the Github repositories are linked with "GNU General Public License v3.0". So don't really know what to make of it.

    opened by MessyBookshelf 7
  • Keyboard input problem

    Keyboard input problem

    I have installed both the stable and the nightly build into LMMS and Cakewalk and in both cases, when trying for example to search for a module in the module browser or any other keyboard related action, the window seems to not have focus and the input is sent to the DAW directly instead of Cardinal interface.

    opened by geduardcatalindev 1
Releases(22.05)
Owner
DISTRHO
DISTRHO
Header only wrapper around Hex-Rays API in C++20.

HexSuite HexSuite is a header only wrapper around Hex-Rays API in C++20 designed to simplify the use of Hex-Rays and IDA APIs by modern C++ features.

Can Bölük 116 Jun 22, 2022
A Walkie-Talkie based around the ESP32 using UDP broadcast or ESP-NOW

Overview We've made a Walkie-Talkie using the ESP32. Explanatory video Audio data is transmitted over either UDP broadcast or ESP-NOW. So the Walkie-T

atomic14 209 Jun 24, 2022
around — adaptive rounding operation

around — adaptive rounding operation Attempts to perform nice rounding of a floating point number, like a human would do. Usage: around.h #include "ar

Jan Ringoš 2 Jan 24, 2022
Growtopia internal cheat focused around enhancements and framework, that is loaded automatically. By: ama6nen

CREDITS TO AMA6NEN ORIGINAL REPO: https://github.com/ama6nen/INZERNAL INZERNAL INZERNAL has been discontinued for public usage and a private version t

TheC0mpany 9 Jun 4, 2022
RaspberryPiCM4Handheld7Inch - A single source for all of the information around my Raspberry Pi CM4 7" Handheld

Raspberry Pi CM4 Handheld 7 - Aegis" A repository for the Aegis, a 7" Raspberry Pi CM4 handheld device. NOTE: This is still a work in progress. The de

null 219 Jun 6, 2022
Project to remove the 'dotted focus box' around your selections in Windows 11.

Thank you https://github.com/mrexodia/NoFlashWindow for providing this template. With out it this would not have been as easy. Do not run the 32 bit i

null 14 Apr 22, 2022
imGuIZMO.quat is a ImGui widget: like a trackball it provides a way to rotate models, lights, or objects with mouse, and graphically visualize their position in space, also around any single axis (Shift/Ctrl/Alt/Super)

imGuIZMO.quat v3.0 imGuIZMO.quat is a ImGui widget: like a trackball it provides a way to rotate models, lights, or objects with mouse, and graphicall

Michele Morrone 254 Jun 12, 2022
IA32-compatible operating system themed around bees.

Table of Contents Apiofirm - an operating system for IA32-compatible architectures. Features Bootloader Building i686 Cross Compiler modifications Api

null 4 Feb 6, 2022
mini-plugin host as plugin

DISTRHO Ildaeil DISTRHO Ildaeil is mini-plugin host working as a plugin, allowing one-to-one plugin format reusage. Load a VST2 plugin inside a LV2 ho

DISTRHO 40 Jun 25, 2022
An Arduino wrapper to @sdima1357's usb_soft_host esp-idf example

ESP32 USB Soft Host library for Arduino IDE This is mainly a wrapper around the excellent work of Dmitry Samsonov (@sdima1357) with esp32_usb_soft_hos

tobozo 102 Jun 19, 2022
C Wrapper for skottie

Skottie can only be linked statically on the windows platform. If you use SkottieWrapper, you don’t need to directly link the Skottie library and allow C language projects to use Skottie indirectly

Jiong Chang 7 Apr 21, 2022
A simple wrapper for 'pacman' with a syntax similar to 'apt' to help people transitioning to Arch and Arch based distributions like Manjaro.

aptpac aptpac is a program which helps with the transition to Arch Linux and Arch based distros like Manjaro. It simplifies using pacman as it works l

Itai Nelken 11 Jun 13, 2022
TouchEngine wrapper for openFrameworks

ofxTouchEngine TouchEngine wrapper for openFrameworks Caution This repository is in very rough and experimental stage.

nariakiiwatani 9 Jan 22, 2022
Wrapper DLL for NieR Automata (PC ver.) to disable LODs & fix AO issues

NieRAutomata-LodMod An XInput/DXGI wrapper DLL that hooks into NieR Automata (Steam ver.) and disables object LODs, improving visual quality & fixing

emoose 23 May 18, 2022
Standalone MinHook wrapper for Golang.

Standalone version of GoMinHook! Credit to https://github.com/NaniteFactory/gominhook and https://github.com/TsudaKageyu/minhook as almost all of the

null 3 Jun 4, 2022
Python wrapper for DMLab maze generator

dmlab-maze-generator Python wrapper for DMLab C++ maze generator. Usage !pip install dmlab-maze-generator from dmlab_maze_generator import create_ran

null 1 Oct 29, 2021
A C++ wrapper library for the monome serialosc protocol

serialoscpp A C++ wrapper library for the monome serialosc protocol Credits oscpack: Ross Bencina http://www.rossbencina.com/code/oscpack serialosc: 2

Isabel 1 Nov 2, 2021
Physx wrapper for the Beef Programming Language

physx-beef Physx wrapper for the Beef Programming Language physx-rs Prerequisites To initialize submodules run git submodule update --init --recursive

Aleš Mlakar 1 Nov 15, 2021
Poly2tri lua wrapper

Poly2tri lua wrapper This is a Lua wrapper around poly2tri. It provides fast, stable Constrained Delauney Triangulation of convex or concave polygons

Dima 9 Nov 25, 2021