• Stars
    star
    2,231
  • Rank 20,649 (Top 0.5 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created about 3 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Virtual modular synthesizer plugin

DISTRHO Cardinal

Cardinal, the Rack!

Cardinal is a free and open-source virtual modular synthesizer plugin, available as CLAP, LV2, VST2 and VST3 audio plugin for FreeBSD, Linux, macOS and Windows.
Plus AU and JACK or Native audio standalone for some systems.
It is based on the popular VCV Rack but with a focus on being a fully self-contained plugin version.

More specifically, this is a DPF-based plugin wrapper around VCV Rack, using its code directly instead of forking the project, with the target of having a proper, self-contained, fully free and open-source plugin version of Rack.
See the why section below for the reasons Cardinal exists, also for frequently asked questions check this FAQ document.

Cardinal contains Rack, some 3rd-party modules and a few internal utilities all in a single binary.
All "Core" modules from Rack have been replaced by Cardinal equivalents, simplified to better work for an audio plugin.

Cardinal does not load external modules and does not connect to the official Rack library/store.
All VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues.

Current status

Cardinal should be considered stable, if you spot any bugs please report them.
Currently the following should be noted:

  • CLAP support is a work-in-progress DPF#383
  • Windows 32bit builds still have a few problematic modules #80

Stable release

Cardinal releases have official builds for Linux, macOS and Windows.
You can find these under https://github.com/DISTRHO/Cardinal/releases.

There are Linux builds for various architectures (armhf, arm64, i686, riscv64 and x86_64), macOS "universal" (arm64 + intel) and Windows 32 and 64bit builds. Both macOS and Windows builds have an installer.
Install instructions are available here.

Note: Neither the macOS or Windows builds are signed, so expect warnings saying they are from an "untrusted developer".

Nightly builds

You can find builds for pretty much any recent Cardinal commit here.
Just click on any successful build, and scroll to the bottom to find the builds.
(note the canvas-like area in the middle prevents mouse wheel scrolling)

A GitHub account is required in order to download these builds.

Building

Basic building instructions are available in BUILDING.md.

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 AU and VST2 formats not supporting CV ports, this variant is not available for those formats.
NOTE: This variant is not available in CLAP yet, to be added in a later release

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

Mini

This is a special variant with a very small, hand-picked module selection and limited IO (2 audio ports plus 5 CV).

There are 2 main reasons for this variant to exist:

  1. make it easier for users new to the modular world to get a working setup, by only having some of the best possible modules available to choose from
  2. hand-pick modules that are simple enough to work reliably in a remote setup

For now the list of selected modules is quite small, intentionally. We will add a few more as the need appears.
All included modules support polyphony, reducing confusion for new users not yet used to mono vs poly approach in Rack/Cardinal.

The 2nd reason (only having simple modules) is needed in order to support DSP/UI separation.
Having this in place means we can run the DSP on a different machine than the UI.
This is particularly interesting for running Cardinal on embed systems, being controlled remotely via a web browser or a native desktop application. Already doable with LV2 from 23.02 onwards, later on this will be made possible on standalone too.

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!

Module browser

screenshot

Basic patching

screenshot

Carla and Ildaeil plugin hosts

screenshot

Custom Fundamental modules design

screenshot

Included modules

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

Additionally Cardinal provides its own modules for DAW/Host automation, time position, audio to CV pitch conversion and internal plugin hosting.

Adding modules

Install new modules on a Cardinal build is not possible, but we can add new modules to the build.
Details on this are available here.
Also check this wiki page where we discuss possible modules to include.

Module restrictions

All included modules are open-source and have a GPLv3+ compatible license. (GPLv3-only modules are not allowed)
It is a requirement that the final Cardinal binary is GPLv3+ licensed.

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

Worth noting that a few modules have artwork licensed separately from their code.
These licenses range from CC-0 to CC-NC-ND to custom (used with permission).
An overview of the included artwork licenses can be seen here.

Even though CC-NC is problematic for packaging (some linux distributions are commercial in nature), Cardinal allows their use because of how prevalent they are across many Rack modules.
Even the Rack "Component Library" (which can be considered the base widget elements) is CC-NC licensed.

Any artwork that uses a custom license has had explicit permission to be used in Cardinal.

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

License

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

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.

More Repositories

1

DPF

DISTRHO Plugin Framework
C++
654
star
2

DISTRHO-Ports

Linux audio plugins and LV2 ports
C++
261
star
3

Ildaeil

mini-plugin host as plugin
C++
125
star
4

DPF-Plugins

Collection of DPF-based plugins for packaging
C++
101
star
5

PawPaw

Cross-Platform build scripts for audio plugins
Shell
63
star
6

MVerb

DISTRHO MVerb
C++
54
star
7

Nekobi

DISTRHO Nekobi
C++
49
star
8

ProM

DISTRHO ProM
C++
39
star
9

JUCE

The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
C++
34
star
10

DPF-Widgets

Official and Community made reusable GUI widgets for DPF
C++
26
star
11

Mini-Series

DISTRHO Mini-Series
C++
25
star
12

OneKnob-Series

Collection of stupidly simple but well-polished and visually pleasing audio plugins
C++
25
star
13

Kars

DISTRHO Kars
C++
15
star
14

DIE-Plugins

DISTRHO Imported Effect Plugins
C
13
star
15

glBars

DISTRHO glBars
C++
12
star
16

DISTRHO-Ports-Extra

Extra "ports" of juce-based plugins using the distrho build system
C
12
star
17

imgui-template-plugin

Template repository for doing audio plugins with DPF and ImGui
C++
11
star
18

PitchTrackingSeries

C
10
star
19

ndc-Plugs

DISTRHO ndc Plugs
C++
8
star
20

Fadeli

Faust Demo Library as Audio Plugins
Faust
8
star
21

DPF-Max-Gen

DPF with Max Gen
Max
7
star
22

JuicePlugins

DISTRHO Juice Plugins
C++
7
star
23

dpf-makefile-action

A GitHub action for DPF-based plugins using Makefile
6
star
24

dear-plugins

Collection of audio plugins based on Dear ImGui and DPF
C
6
star
25

plugin-examples

DPF Plugin examples
C++
6
star
26

elements-template-plugin

Template repository for doing audio plugins with DPF and Cycfi Elements
C++
6
star
27

lvgl-template-plugin

Template repository for doing audio plugins with DPF and LVGL
C
5
star
28

gl-examples

DPF OpenGL examples
Makefile
4
star
29

Zinc

Utility audio plugin for getting sound out of plugin hosts into JACK
C++
4
star
30

Website

DISTRHO Website
PHP
3
star
31

imgui-template-app

Template repository for doing applications with DPF and ImGui
CMake
3
star
32

Cardinal-Website

Cardinal Website
CSS
2
star
33

mod-wasm-template-plugin

Template repository for doing audio plugins with DPF and ImGui, targetting MOD Audio platform
C++
2
star
34

dpf-cmake-action

A GitHub action for DPF-based plugins using CMake
1
star
35

STK-Plugins

C++
1
star