Browse Source

Merge branch 'DISTRHO:main' into update-surge

pull/807/head
rl2939 GitHub 2 weeks ago
parent
commit
65af58afc8
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
42 changed files with 8339 additions and 240 deletions
  1. +1
    -1
      .github/ISSUE_TEMPLATE/bug.yaml
  2. +19
    -15
      .github/workflows/build.yml
  3. +9
    -4
      .gitmodules
  4. +20
    -8
      Makefile
  5. +3
    -1
      README.md
  6. +1
    -1
      carla
  7. +1
    -0
      deps/Makefile
  8. +1
    -1
      deps/PawPaw
  9. +6
    -1
      docs/LICENSES.md
  10. +11
    -0
      docs/OSC-REMOTE-CONTROL.md
  11. +1
    -1
      dpf
  12. +2175
    -0
      patches/examples/nooneknowspeter_-_Catalyst.vcv
  13. +2055
    -0
      patches/examples/nooneknowspeter_-_Velour.vcv
  14. +3631
    -0
      patches/examples/nooneknowspeter_-_Xmas.vcv
  15. +1
    -1
      plugins/Befaco
  16. +1
    -1
      plugins/CVfunk
  17. +1
    -9
      plugins/Cardinal/plugin.json
  18. +47
    -3
      plugins/Cardinal/src/HostTime.cpp
  19. +0
    -1
      plugins/DrumKit
  20. +1
    -1
      plugins/HetrickCV
  21. +1
    -1
      plugins/JW-Modules
  22. +67
    -39
      plugins/Makefile
  23. +1
    -1
      plugins/Sapphire
  24. +1
    -0
      plugins/Venom
  25. +1
    -0
      plugins/WSTD-Drums
  26. +1
    -0
      plugins/eightfold
  27. +1
    -1
      plugins/kocmoc
  28. +189
    -34
      plugins/plugins.cpp
  29. +6
    -52
      src/CardinalCommon.cpp
  30. +2
    -2
      src/CardinalPlugin.cpp
  31. +3
    -3
      src/CardinalPluginContext.hpp
  32. +1
    -1
      src/CardinalRemote/Makefile
  33. +2
    -16
      src/CardinalUI.cpp
  34. +3
    -0
      src/Makefile
  35. +7
    -1
      src/Makefile.cardinal.mk
  36. +2
    -1
      src/custom/RemoteNanoVG.cpp
  37. +21
    -20
      src/custom/dep.cpp
  38. +11
    -1
      src/custom/glfw.cpp
  39. +17
    -14
      src/override/Scene.cpp
  40. +13
    -0
      src/override/plugin.cpp
  41. +2
    -2
      utils/macOS/Info_JACK.plist
  42. +2
    -2
      utils/macOS/Info_Native.plist

+ 1
- 1
.github/ISSUE_TEMPLATE/bug.yaml View File

@@ -5,7 +5,7 @@ body:
id: version
attributes:
label: Version
value: "24.12"
value: "26.01"
validations:
required: true
- type: dropdown


+ 19
- 15
.github/workflows/build.yml View File

@@ -3,11 +3,12 @@ name: build
on: [push, pull_request]

env:
CACHE_VERSION: 11
CACHE_VERSION: 14
CARDINAL_UNDER_WINE: 1
CIBUILD: true
DEBIAN_FRONTEND: noninteractive
LIBGL_ALWAYS_SOFTWARE: true
PAWPAW_CI: 1
PAWPAW_FAST_MATH: 1
PAWPAW_SKIP_GLIB: 1
PAWPAW_SKIP_LTO: 1
@@ -23,7 +24,7 @@ jobs:
target: [aarch64, armhf, i686, riscv64, x86_64]
runs-on: ubuntu-latest
container:
image: ubuntu:20.04
image: ubuntu:22.04
steps:
- name: Install git
run: |
@@ -125,7 +126,7 @@ jobs:
*.tar.gz

linux-x86_64-debug:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -157,7 +158,7 @@ jobs:
*.tar.xz

macos:
runs-on: macos-13
runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
@@ -179,6 +180,7 @@ jobs:
key: macos-universal-v${{ env.CACHE_VERSION }}
- name: Setup dependencies
run: |
brew uninstall --force --ignore-dependencies cmake
./deps/PawPaw/.github/workflows/bootstrap-deps.sh macos-universal-10.15
- name: Build extra dependencies
run: |
@@ -228,10 +230,12 @@ jobs:
files: |
${{ github.event.repository.name }}-*.pkg

modaudio:
mod-plugin-builder:
strategy:
matrix:
include:
- name: darkglass-anagram
target: darkglass-anagram
- name: modduo
target: modduo-static
extraflags: MODDUO=true
@@ -239,7 +243,7 @@ jobs:
target: modduox-static
- name: moddwarf
target: moddwarf
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -254,7 +258,7 @@ jobs:
- name: Set up dependencies
run: |
sudo apt-get update -qq
sudo apt-get install -yqq acl bc curl cvs git mercurial rsync subversion wget bison bzip2 flex gawk gperf gzip help2man nano perl patch tar texinfo unzip automake binutils build-essential cpio libtool libncurses-dev pkg-config python libtool-bin liblo-dev qemu-user-static
sudo apt-get install -yqq acl bc curl cvs git mercurial rsync subversion wget bison bzip2 flex gawk gperf gzip help2man nano perl patch tar texinfo unzip automake binutils build-essential cpio libtool libncurses-dev pkg-config python3 libtool-bin liblo-dev qemu-user-static
sudo apt-get install -yqq pandoc texlive-latex-recommended texlive-latex-extra
sudo apt-get clean
- name: Bootstrap toolchain
@@ -422,7 +426,7 @@ jobs:
export PATH="/usr/lib/ccache:${PATH}"
source deps/PawPaw/local.env ${{ matrix.target }}
make features
make NOOPT=true -j $(nproc)
xvfb-run make NOOPT=true -j $(nproc)
- name: Build cross-compiled (carla)
if: steps.cache.outputs.cache-hit == 'true'
shell: bash
@@ -471,7 +475,7 @@ jobs:
Cardinal-*.zip

headless:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -488,7 +492,7 @@ jobs:
make HEADLESS=true -j $(nproc)

lto:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -505,7 +509,7 @@ jobs:
make WITH_LTO=true -j $(nproc) native

sysdeps:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -521,7 +525,7 @@ jobs:
make SYSDEPS=true -j $(nproc)

source-tarball:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -561,7 +565,7 @@ jobs:
/home/runner/*/*/cardinal*.tar.xz

plugin-validation:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -583,8 +587,8 @@ jobs:
- name: Set up dependencies
run: |
# custom repos
wget https://launchpad.net/~kxstudio-debian/+archive/kxstudio/+files/kxstudio-repos_11.1.0_all.deb
sudo dpkg -i kxstudio-repos_11.1.0_all.deb
wget https://launchpad.net/~kxstudio-debian/+archive/kxstudio/+files/kxstudio-repos_11.2.0_all.deb
sudo dpkg -i kxstudio-repos_11.2.0_all.deb
sudo apt-get update -qq
# build-deps
sudo apt-get install -yqq libdbus-1-dev libgl1-mesa-dev liblo-dev libx11-dev libxcursor-dev libxext-dev libxrandr-dev


+ 9
- 4
.gitmodules View File

@@ -49,9 +49,9 @@
[submodule "plugins/ValleyAudio"]
path = plugins/ValleyAudio
url = https://github.com/ValleyAudio/ValleyRackFree.git
[submodule "plugins/DrumKit"]
path = plugins/DrumKit
url = https://github.com/SVModular/DrumKit.git
[submodule "plugins/WSTD-Drums"]
path = plugins/WSTD-Drums
url = https://github.com/Wasted-Audio/WSTD-Drums.git
[submodule "carla"]
path = carla
url = https://github.com/falkTX/Carla.git
@@ -260,4 +260,9 @@
[submodule "plugins/admiral"]
path = plugins/admiral
url = https://github.com/wapiflapi/admiral.git

[submodule "plugins/eightfold"]
path = plugins/eightfold
url = https://github.com/scanner-darkly/eightfold.git
[submodule "plugins/Venom"]
path = plugins/Venom
url = https://github.com/DaveBenham/VenomModules

+ 20
- 8
Makefile View File

@@ -1,12 +1,12 @@
#!/usr/bin/make -f
# DISTRHO Cardinal Plugin
# Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
# Copyright (C) 2021-2025 Filipe Coelho <falktx@falktx.com>
# SPDX-License-Identifier: GPL-3.0-or-later

ROOT = .
include $(ROOT)/Makefile.base.mk

# -----------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# Set version

# also set in:
@@ -15,20 +15,20 @@ include $(ROOT)/Makefile.base.mk
# src/CardinalPlugin.cpp `getVersion`
# utils/macOS/Info_{JACK,Native}.plist
# .github/ISSUE_TEMPLATE/bug.yaml src/CardinalCommon.cpp src/CardinalPlugin.cpp utils/macOS/Info_{JACK,Native}.plist
VERSION = 24.12
VERSION = 26.01

# --------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# Build targets

all: cardinal carla deps dgl plugins gen resources

# --------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# Build config

PREFIX ?= /usr/local
DESTDIR ?=

# --------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# Carla config

CARLA_EXTRA_ARGS = \
@@ -44,7 +44,16 @@ ifneq ($(DEBUG),true)
CARLA_EXTRA_ARGS += EXTERNAL_PLUGINS=true
endif

# --------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# DGL config

ifeq ($(WASM),true)
UI_TYPE = gles2
else
UI_TYPE = opengl
endif

# ---------------------------------------------------------------------------------------------------------------------
# Check for required system-wide dependencies

ifeq ($(SYSDEPS),true)
@@ -183,7 +192,7 @@ endif

dgl:
ifneq ($(HEADLESS),true)
$(MAKE) opengl -C dpf/dgl $(DGL_EXTRA_ARGS)
$(MAKE) $(UI_TYPE) -C dpf/dgl $(DGL_EXTRA_ARGS)
endif

plugins: deps
@@ -229,6 +238,9 @@ clap: carla deps dgl plugins resources
lv2: carla deps dgl plugins resources
$(MAKE) lv2 -C src $(CARLA_EXTRA_ARGS)

mapi: carla deps dgl plugins resources
$(MAKE) mapi -C src $(CARLA_EXTRA_ARGS)

vst2: carla deps dgl plugins resources
$(MAKE) vst2 -C src $(CARLA_EXTRA_ARGS)



+ 3
- 1
README.md View File

@@ -145,7 +145,7 @@ At the moment the following 3rd-party modules are provided:
- [CVfunk](https://github.com/codygeary/CVfunk-Modules)
- [dBiz](https://github.com/dBiz/dBiz)
- [DHE Modules](https://github.com/dhemery/DHE-Modules)
- [DrumKit](https://svmodular.com/plugin/vcv/drumkit.html)
- [eightfold](https://github.com/scanner-darkly/eightfold)
- [EnigmaCurry](https://github.com/EnigmaCurry/EnigmaCurry-vcv-pack)
- [E-Series](https://github.com/VCVRack/ESeries)
- [ExpertSleepers Encoders](https://expert-sleepers.co.uk/vcvrack_encoders.html)
@@ -196,8 +196,10 @@ At the moment the following 3rd-party modules are provided:
- [Surge XT](https://github.com/surge-synthesizer/surge-rack)
- [unless_modules](https://gitlab.com/unlessgames/unless_modules)
- [Valley](https://github.com/ValleyAudio/ValleyRackFree)
- [Venom](https://github.com/DaveBenham/VenomModules)
- [Voxglitch](https://github.com/clone45/voxglitch)
- [WhatTheRack](https://github.com/korfuri/WhatTheRack)
- [WSTD-Drums](https://github.com/Wasted-Audio/WSTD-Drums)
- [ZetaCarinae](https://github.com/mhampton/ZetaCarinaeModules)
- [ZZC](https://github.com/zezic/ZZC)



+ 1
- 1
carla

@@ -1 +1 @@
Subproject commit 17000e7fe99459b25a50094a8b00bdfa12f2bfbc
Subproject commit 011867b6bcd592a510b4ec157c032fcdac23d6ef

+ 1
- 0
deps/Makefile View File

@@ -57,6 +57,7 @@ SPACE +=
CMAKE = cmake
CMAKE += -DCMAKE_INSTALL_LIBDIR=lib
CMAKE += -DCMAKE_INSTALL_PREFIX='$(RACK_DEP_PATH)'
CMAKE += -DCMAKE_POLICY_VERSION_MINIMUM=3.5
CMAKE += -DBUILD_SHARED_LIBS=OFF

# make sure debug/release matches


+ 1
- 1
deps/PawPaw

@@ -1 +1 @@
Subproject commit 0985cf8d1c3a00b1958ef90e0f1aa511b865241a
Subproject commit f6eaed13bdeccec013d81ba2261f98aa8f452702

+ 6
- 1
docs/LICENSES.md View File

@@ -39,7 +39,7 @@ Below follows a list of all code licenses used in Cardinal and linked submodules
| CVfunk | MIT | |
| dBiz | GPL-3.0-or-later | |
| DHE-Modules | MIT | |
| DrumKit | CC0-1.0 | |
| eightfold | GPL-3.0-or-later | |
| EnigmaCurry | GPL-3.0-or-later | |
| E-Series | GPL-3.0-or-later | |
| ExpertSleepers Encoders | MIT | |
@@ -90,7 +90,9 @@ Below follows a list of all code licenses used in Cardinal and linked submodules
| Surge XT | GPL-3.0-or-later | |
| unless_modules | GPL-3.0-or-later | |
| Valley | GPL-3.0-or-later | |
| Venom | GPL-3.0-or-later | |
| Voxglitch | GPL-3.0-or-later | |
| WSTD-Drums | CC0-1.0 | |
| WhatTheRack | WTFPL | |
| ZetaCarinae | GPL-3.0-or-later | |
| ZZC | GPL-3.0-or-later | |
@@ -178,6 +180,7 @@ Below is a list of artwork licenses from plugins
| DHE-Modules/* | MIT | Same license as source code |
| DrumKit/* | CC0-1.0 | |
| DrumKit/component/NovaMono.ttf | OFL-1.1-RFN | |
| eightfold/* | GPL-3.0-or-later | No artwork specific license provided |
| EnigmaCurry/res/fonts/dseg/* | OFL-1.1-RFN | |
| EnigmaCurry/res/fonts/Fantasque/* | OFL-1.1 | |
| EnigmaCurry/res/fonts/manrope/* | OFL-1.1 | |
@@ -201,6 +204,7 @@ Below is a list of artwork licenses from plugins
| ImpromptuModular/res/comp/complib/* | CC-BY-NC-4.0 | |
| JW-Modules/* | BSD-3-Clause | No artwork specific license provided |
| JW-Modules/DejaVuSansMono.ttf | Bitstream-Vera | Unused in Cardinal |
| JW-Modules/res/fonts/ShareTechMono-Regular.ttf | OFL-1.1 | |
| kocmoc/* | GPL-3.0-or-later | No artwork specific license provided |
| LifeFormModular/* | MIT | No artwork specific license provided |
| LilacLoop/* | GPL-3.0-or-later | No artwork specific license provided |
@@ -263,6 +267,7 @@ Below is a list of artwork licenses from plugins
| ValleyAudio/din1451alt.ttf | CC-BY-3.0-DE | |
| ValleyAudio/DSEG14Classic-*.ttf | OFL-1.1-RFN | |
| ValleyAudio/ShareTechMono-*.ttf | OFL-1.1-RFN | |
| Venom/* | GPL-3.0-or-later | No artwork specific license provided |
| voxglitch/* | GPL-3.0-or-later | No artwork specific license provided |
| voxglitch/ShareTechMono-Regular.ttf | OFL-1.1-RFN | |
| WhatTheRack/* | WTFPL | |


+ 11
- 0
docs/OSC-REMOTE-CONTROL.md View File

@@ -23,6 +23,17 @@ If all went well opening the "Engine" menu again should show a checkmark, indica
For the moment there is no error dialog or information in case things go wrong.
If you are unable to connect, make sure your OS network firewall settings allows opening port 2228.

### Automatic startup on headless builds

If you do a headless build there is no UI to click on to enable remote control, so for this reason the headless builds (standalone, not plugins) will have OSC remote control enabled by default.

To change the port for the OSC server use the `CARDINAL_REMOTE_HOST_PORT` environment variable, for example:
```sh
env CARDINAL_REMOTE_HOST_PORT=2228 CardinalNative
```

This can be useful for starting Cardinal where no mouse/keyboard are attached but you want remote control.

## TouchOSC example setup

A TouchOSC compatible file is available [here](https://github.com/DISTRHO/Cardinal/raw/main/patches/touchosc/24-direct-fader-params.tosc).


+ 1
- 1
dpf

@@ -1 +1 @@
Subproject commit 32d911c1decd721520e44adce2ca7a92ca0ec4f0
Subproject commit d4c2ce6e3da43ae328876146b60d2d2cca5caa44

+ 2175
- 0
patches/examples/nooneknowspeter_-_Catalyst.vcv
File diff suppressed because it is too large
View File


+ 2055
- 0
patches/examples/nooneknowspeter_-_Velour.vcv
File diff suppressed because it is too large
View File


+ 3631
- 0
patches/examples/nooneknowspeter_-_Xmas.vcv
File diff suppressed because it is too large
View File


+ 1
- 1
plugins/Befaco

@@ -1 +1 @@
Subproject commit 5a80023d86e0f67ead3e27385170310cd430d44c
Subproject commit 5914634cd91cf11cc32394616252beb19c5c934c

+ 1
- 1
plugins/CVfunk

@@ -1 +1 @@
Subproject commit a116e6b18ac05974a23509cc47adfd86e8406385
Subproject commit 51f2b4e61cde7978fb84cdd892a1d3aaedc0ff5b

+ 1
- 9
plugins/Cardinal/plugin.json View File

@@ -171,6 +171,7 @@
"description": "Converts a monophonic audio signal to CV pitch",
"manualUrl": "https://github.com/DISTRHO/Cardinal/blob/main/docs/CARDINAL-MODULES.md#audio-to-cv-pitch",
"tags": [
"Tuner",
"Utility"
]
},
@@ -192,15 +193,6 @@
"Utility"
]
},
{
"slug": "MPV",
"name": "MPV",
"description": "An embed video player inside Cardinal",
"manualUrl": "https://github.com/DISTRHO/Cardinal/blob/main/docs/CARDINAL-MODULES.md#mpv",
"tags": [
"Visual"
]
},
{
"slug": "SassyScope",
"name": "Sassy Scope",


+ 47
- 3
plugins/Cardinal/src/HostTime.cpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2026 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -37,14 +37,22 @@ struct HostTime : TerminalModule {
kHostTimeClock,
kHostTimeBarPhase,
kHostTimeBeatPhase,
kHostTimeBPM,
kHostTimeCount
};

enum BarDivisions {
Bars1 = 1,
Bars4 = 4,
Bars8 = 8
};

const CardinalPluginContext* const pcontext;

rack::dsp::PulseGenerator pulseReset, pulseBar, pulseBeat, pulseClock;
float sampleTime = 0.0f;
uint32_t lastProcessCounter = 0;
BarDivisions barDivision = Bars1;
// cached time values
struct {
bool reset = true;
@@ -122,7 +130,9 @@ struct HostTime : TerminalModule {
{
timeInfo.beat = 1;
++timeInfo.bar;
pulseBar.trigger();

if (timeInfo.bar % barDivision == 1)
pulseBar.trigger();
}
}

@@ -148,7 +158,8 @@ struct HostTime : TerminalModule {
? tick / pcontext->ticksPerBeat
: 0.0f;
const float barPhase = playingWithBBT && pcontext->beatsPerBar > 0
? ((float) (timeInfo.beat - 1) + beatPhase) / pcontext->beatsPerBar
? ((float)((timeInfo.bar - 1) % barDivision) + (timeInfo.beat - 1) + beatPhase)
/ (pcontext->beatsPerBar * barDivision)
: 0.0f;

lights[kHostTimeRolling].setBrightness(playing ? 1.0f : 0.0f);
@@ -166,10 +177,25 @@ struct HostTime : TerminalModule {
outputs[kHostTimeClock].setVoltage(hasClock ? 10.0f : 0.0f);
outputs[kHostTimeBarPhase].setVoltage(barPhase * 10.0f);
outputs[kHostTimeBeatPhase].setVoltage(beatPhase * 10.0f);
outputs[kHostTimeBPM].setVoltage(playingWithBBT ? std::log2(pcontext->beatsPerMinute / 120.0) : 0.0);
}

void processTerminalOutput(const ProcessArgs&) override
{}

json_t* dataToJson() override {
json_t* rootJ = json_object();
json_object_set_new(rootJ, "barDivision", json_integer(barDivision));
return rootJ;
}

void dataFromJson(json_t* rootJ) override {
if (json_t* bdJ = json_object_get(rootJ, "barDivision")) {
int value = json_integer_value(bdJ);
if (value == Bars1 || value == Bars4 || value == Bars8)
barDivision = static_cast<BarDivisions>(value);
}
}
};

// --------------------------------------------------------------------------------------------------------------------
@@ -200,6 +226,7 @@ struct HostTimeWidget : ModuleWidgetWith8HP {
addOutput(createOutput<PJ301MPort>(Vec(startX, startY_cv + 4 * padding), m, HostTime::kHostTimeClock));
addOutput(createOutput<PJ301MPort>(Vec(startX, startY_cv + 5 * padding), m, HostTime::kHostTimeBarPhase));
addOutput(createOutput<PJ301MPort>(Vec(startX, startY_cv + 6 * padding), m, HostTime::kHostTimeBeatPhase));
addOutput(createOutput<PJ301MPort>(Vec(startX, startY_cv + 7 * padding), m, HostTime::kHostTimeBPM));

const float x = startX + 28;
addChild(createLightCentered<SmallLight<GreenLight>> (Vec(x, startY_cv + 0 * padding + 12), m, HostTime::kHostTimeRolling));
@@ -239,6 +266,7 @@ struct HostTimeWidget : ModuleWidgetWith8HP {
nvgFontSize(args.vg, 11);
drawOutputLine(args.vg, 5, "Bar Phase");
drawOutputLine(args.vg, 6, "Beat Phase");
drawOutputLine(args.vg, 7, "BPM");

nvgBeginPath(args.vg);
nvgRoundedRect(args.vg, startX - 1.0f, startY_top, 98.0f, 38.0f, 4); // 98
@@ -286,6 +314,22 @@ struct HostTimeWidget : ModuleWidgetWith8HP {

ModuleWidget::drawLayer(args, layer);
}

void appendContextMenu(Menu* menu) override {
struct BarDivisionItem : MenuItem {
HostTime* module;
HostTime::BarDivisions value;
void onAction(const event::Action& e) override {
module->barDivision = value;
}
};

menu->addChild(new MenuSeparator);
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Bar Division"));
menu->addChild(construct<BarDivisionItem>(&BarDivisionItem::text, "Bars/1", &BarDivisionItem::module, module, &BarDivisionItem::value, HostTime::Bars1));
menu->addChild(construct<BarDivisionItem>(&BarDivisionItem::text, "Bars/4", &BarDivisionItem::module, module, &BarDivisionItem::value, HostTime::Bars4));
menu->addChild(construct<BarDivisionItem>(&BarDivisionItem::text, "Bars/8", &BarDivisionItem::module, module, &BarDivisionItem::value, HostTime::Bars8));
}
};
#else
struct HostTimeWidget : ModuleWidget {


+ 0
- 1
plugins/DrumKit

@@ -1 +0,0 @@
Subproject commit b94c5deb9b93d810f582221f03db8a6feaee6679

+ 1
- 1
plugins/HetrickCV

@@ -1 +1 @@
Subproject commit 49e2bc0f6a3ef4d1616b78d6280a6d4e7ee222d3
Subproject commit 8c46fbe13acdcb87991719bddcc6ec8abcf152ef

+ 1
- 1
plugins/JW-Modules

@@ -1 +1 @@
Subproject commit 9d8f8515deb20d7e14ca85b4c1d04ec6b66b3e8d
Subproject commit 72c8b569dd2cc12ce16abe2da582fc58e07c3d54

+ 67
- 39
plugins/Makefile View File

@@ -255,18 +255,12 @@ PLUGIN_FILES += Cardinal/src/glBars.cpp
endif
endif

ifneq ($(STATIC_BUILD),true)
ifneq ($(MOD_BUILD),true)
PLUGIN_FILES += Cardinal/src/AudioFile.cpp
ifneq ($(WASM),true)
PLUGIN_FILES += Cardinal/src/Carla.cpp
PLUGIN_FILES += Cardinal/src/Ildaeil.cpp
endif
ifneq ($(HEADLESS),true)
ifeq ($(HAVE_X11),true)
PLUGIN_FILES += Cardinal/src/EmbedWidget.cpp
PLUGIN_FILES += Cardinal/src/MPV.cpp
endif
endif
endif

ifneq ($(HEADLESS),true)
@@ -560,7 +554,7 @@ PLUGIN_FILES += $(filter-out Befaco/src/plugin.cpp Befaco/src/MidiThing.cpp,$(wi
PLUGIN_FILES += $(wildcard Befaco/src/noise-plethora/*/*.cpp)

# modules/types which are present in other plugins
BEFACO_CUSTOM = ADSR Mixer chowdsp Burst RecordButton
BEFACO_CUSTOM = ADSR Mixer chowdsp Burst RecordButton Mixer2 Slew

BEFACO_FLAGS = $(filter-out -fsingle-precision-constant,$(filter-out -std=gnu++11,$(BUILD_CXX_FLAGS)))
BEFACO_FLAGS += -std=gnu++17
@@ -678,7 +672,7 @@ COMPUTERSCARE_CUSTOM = Quantizer PanelBorder
PLUGIN_FILES += $(filter-out CVfunk/src/plugin.cpp,$(wildcard CVfunk/src/*.cpp))

# modules/types which are present in other plugins
CVFUNK_CUSTOM = Steps
CVFUNK_CUSTOM = Steps Node

# --------------------------------------------------------------
# dBiz
@@ -695,17 +689,15 @@ DBIZ_CUSTOM_PER_FILE = LERP MultiFilter Oscillator calcOutput sineOsc subBank
PLUGIN_FILES += $(filter-out DHE-Modules/src/plugin.cpp,$(wildcard DHE-Modules/src/modules/*/init.cpp))

# --------------------------------------------------------------
# DrumKit

PLUGIN_FILES += $(wildcard DrumKit/src/*.cpp)
PLUGIN_FILES += $(wildcard DrumKit/src/controller/*.cpp)
PLUGIN_FILES += $(wildcard DrumKit/src/view/*.cpp)
PLUGIN_FILES += $(wildcard DrumKit/src/model/*.cpp)
PLUGIN_FILES += $(wildcard DrumKit/deps/*.cpp)
PLUGIN_FILES += $(wildcard DrumKit/deps/SynthDevKit/src/*.cpp)
# eightfold

PLUGIN_FILES += $(filter-out eightfold/src/plugin.cpp,$(wildcard eightfold/src/*.cpp))
# modules/types which are present in other plugins
DRUMKIT_CUSTOM = ADSR Envelope LowFrequencyOscillator
EIGHTFOLD_CUSTOM = Comparator comparator


EIGHTFOLD_FLAGS = $(filter-out -std=gnu++11,$(BUILD_CXX_FLAGS))
EIGHTFOLD_FLAGS += -std=gnu++17

# --------------------------------------------------------------
# EnigmaCurry
@@ -812,7 +804,7 @@ IHTSYN_CUSTOM_PER_FILE += mv_statevariable

PLUGIN_FILES += $(filter-out JW-Modules/src/JWModules.cpp JW-Modules/src/Str1ker.cpp,$(wildcard JW-Modules/src/*.cpp))

ifneq ($(STATIC_BUILD),true)
ifneq ($(MOD_BUILD),true)
PLUGIN_FILES += JW-Modules/src/Str1ker.cpp
PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/ip/*.cpp)
PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/osc/*.cpp)
@@ -824,7 +816,7 @@ endif
endif

# modules/types which are present in other plugins
JW_CUSTOM = PlayHead Quantizer
JW_CUSTOM = PlayHead Quantizer Arrange

# --------------------------------------------------------------
# kocmoc
@@ -832,7 +824,7 @@ JW_CUSTOM = PlayHead Quantizer
PLUGIN_FILES += $(filter-out kocmoc/src/plugin.cpp,$(wildcard kocmoc/src/*.cpp))

# modules/types which are present in other plugins
KOCMOC_CUSTOM = Phasor __ct_base __ct_comp
KOCMOC_CUSTOM = Diode Phasor __ct_base __ct_comp

# --------------------------------------------------------------
# LifeFormModular
@@ -1312,6 +1304,11 @@ PLUGIN_BINARIES += ValleyAudio/src/XFADE.bin
VALLEYAUDIO_CUSTOM = $(DRWAV) Chord DigitalDisplay
VALLEYAUDIO_CUSTOM_PER_FILE = TempoKnob

# --------------------------------------------------------------
# Venom

PLUGIN_FILES += $(filter-out Venom/src/plugin.cpp,$(wildcard Venom/src/*.cpp))

# --------------------------------------------------------------
# Voxglitch

@@ -1327,6 +1324,19 @@ VOXGLITCH_CUSTOM_PER_FILE = AudioBuffer GateSequencer Grain SamplePlayer Sequenc

PLUGIN_FILES += $(filter-out WhatTheRack/src/WhatTheRack.cpp,$(wildcard WhatTheRack/src/*.cpp))

# --------------------------------------------------------------
# WSTD-Drums

PLUGIN_FILES += $(wildcard WSTD-Drums/src/*.cpp)
PLUGIN_FILES += $(wildcard WSTD-Drums/src/controller/*.cpp)
PLUGIN_FILES += $(wildcard WSTD-Drums/src/view/*.cpp)
PLUGIN_FILES += $(wildcard WSTD-Drums/src/model/*.cpp)
PLUGIN_FILES += $(wildcard WSTD-Drums/deps/*.cpp)
PLUGIN_FILES += $(wildcard WSTD-Drums/deps/SynthDevKit/src/*.cpp)

# modules/types which are present in other plugins
WSTD_DRUMS_CUSTOM = ADSR Envelope LowFrequencyOscillator

# --------------------------------------------------------------
# ZetaCarinaeModules

@@ -1446,6 +1456,7 @@ clean:
PLUGIN_LIST = $(subst /plugin.json,,$(wildcard */plugin.json))

UNWANTED_FILES = HetrickCV/res/illustrator - deprecated/MyModule.svg
UNWANTED_FILES += $(wildcard "HetrickCV/res/affinity redo/*")
UNWANTED_FILES += $(wildcard Meander/res/*)
UNWANTED_FILES += $(wildcard Mog/res/*)
UNWANTED_FILES += $(wildcard Mog/res/*/*)
@@ -1475,7 +1486,7 @@ RESOURCE_FILES += BaconPlugs/res/midi/goldberg
RESOURCE_FILES += Befaco/res/SpringReverbIR.f32
RESOURCE_FILES += cf/playeroscs
RESOURCE_FILES += DHE-Modules/svg
RESOURCE_FILES += DrumKit/res/samples
RESOURCE_FILES += WSTD-Drums/res/samples
RESOURCE_FILES += Meander/res
RESOURCE_FILES += MindMeldModular/res/ShapeMaster/CommunityPresets
RESOURCE_FILES += MindMeldModular/res/ShapeMaster/CommunityShapes
@@ -2198,7 +2209,7 @@ $(BUILD_DIR)/AS/%.cpp.o: AS/%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(AS_CUSTOM),$(call custom_module_names,$(m),AS)) \
$(foreach m,$(AS_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),AS_$(shell basename $*))) \
$(foreach m,$(AS_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),AS_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__AS \
-Wno-unused-private-field

@@ -2254,7 +2265,7 @@ $(BUILD_DIR)/Bidoo%.cpp.o: Bidoo%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(BIDOO_CUSTOM),$(call custom_module_names,$(m),Bidoo)) \
$(foreach m,$(BIDOO_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),Bidoo_$(shell basename $*))) \
$(foreach m,$(BIDOO_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),Bidoo_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__Bidoo \
-DSKIP_MINGW_FORMAT \
-IBidoo/src/dep/gverb/include \
@@ -2274,7 +2285,7 @@ $(BUILD_DIR)/BogaudioModules%.cpp.o: BogaudioModules%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(BOGAUDIO_CUSTOM),$(call custom_module_names,$(m),Bogaudio)) \
$(foreach m,$(BOGAUDIO_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),Bogaudio_$(shell basename $*))) \
$(foreach m,$(BOGAUDIO_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),Bogaudio_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__BogaudioModules \
-DRACK_SIMD=1 \
-DSKIP_MINGW_FORMAT \
@@ -2327,7 +2338,7 @@ $(BUILD_DIR)/dBiz/src/%.cpp.o: dBiz/src/%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(DBIZ_CUSTOM),$(call custom_module_names,$(m),dBiz)) \
$(foreach m,$(DBIZ_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),dBiz_$(shell basename $*))) \
$(foreach m,$(DBIZ_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),dBiz_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__dBiz

$(BUILD_DIR)/DHE-Modules/src/%.cpp.o: DHE-Modules/src/%.cpp
@@ -2338,14 +2349,12 @@ $(BUILD_DIR)/DHE-Modules/src/%.cpp.o: DHE-Modules/src/%.cpp
-DpluginInstance=pluginInstance__DHE \
-IDHE-Modules/src

$(BUILD_DIR)/DrumKit/%.cpp.o: DrumKit/%.cpp
$(BUILD_DIR)/eightfold/src/%.cpp.o: eightfold/src/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(DRUMKIT_CUSTOM),$(call custom_module_names,$(m),DrumKit)) \
-DpluginInstance=pluginInstance__DrumKit \
-Dinit=init__DrumKit \
-Wno-sign-compare
$(SILENT)$(CXX) $< $(EIGHTFOLD_FLAGS) -c -o $@ \
$(foreach m,$(EIGHTFOLD_CUSTOM),$(call custom_module_names,$(m),eightfold)) \
-DpluginInstance=pluginInstance__eightfold

$(BUILD_DIR)/EnigmaCurry/src/%.cpp.o: EnigmaCurry/src/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@@ -2489,7 +2498,7 @@ $(BUILD_DIR)/ImpromptuModular%.cpp.o: ImpromptuModular%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM),$(call custom_module_names,$(m),ImpromptuModular)) \
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),ImpromptuModular_$(shell basename $*))) \
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),ImpromptuModular_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__ImpromptuModular \
-Wno-format-truncation

@@ -2498,7 +2507,7 @@ $(BUILD_DIR)/ihtsyn/%.cpp.o: ihtsyn/%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(IHTSYN_CUSTOM),$(call custom_module_names,$(m),ihtsyn)) \
$(foreach m,$(IHTSYN_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),ihtsyn_$(shell basename $*))) \
$(foreach m,$(IHTSYN_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),ihtsyn_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__ihtsyn

$(BUILD_DIR)/JW-Modules/src/WavHead.cpp.o: JW-Modules/src/WavHead.cpp
@@ -2619,7 +2628,7 @@ $(BUILD_DIR)/mscHack/%.cpp.o: mscHack/%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(MSCHACK_CUSTOM),$(call custom_module_names,$(m),mscHack)) \
$(foreach m,$(MSCHACK_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),mscHack_$(shell basename $*))) \
$(foreach m,$(MSCHACK_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),mscHack_$(shell basename -- $*))) \
-DthePlugin=pluginInstance__mscHack \
-Dinit=init__mscHack \
-Wno-class-memaccess \
@@ -2700,7 +2709,7 @@ $(BUILD_DIR)/Prism/%.cpp.o: Prism/%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(PRISM_CUSTOM),$(call custom_module_names,$(m),Prism)) \
$(foreach m,$(PRISM_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),Prism_$(shell basename $*))) \
$(foreach m,$(PRISM_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),Prism_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__Prism \

$(BUILD_DIR)/rackwindows/%.cpp.o: rackwindows/%.cpp
@@ -2744,6 +2753,7 @@ $(BUILD_DIR)/Sapphire/%.cpp.o: Sapphire/%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -std=gnu++17 -c -o $@ \
$(foreach m,$(SAPPHIRE_CUSTOM),$(call custom_module_names,$(m),Sapphire)) \
-DSKIP_MINGW_FORMAT \
-DpluginInstance=pluginInstance__sapphire

$(BUILD_DIR)/sonusmodular/%.cpp.o: sonusmodular/%.cpp
@@ -2773,7 +2783,7 @@ $(BUILD_DIR)/stoermelder-packone/%.cpp.o: stoermelder-packone/%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(STOERMELDER_PACKONE_CUSTOM),$(call custom_module_names,$(m),stoermelder_p1)) \
$(foreach m,$(STOERMELDER_PACKONE_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),stoermelder_p1_$(shell basename $*))) \
$(foreach m,$(STOERMELDER_PACKONE_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),stoermelder_p1_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__stoermelder_p1 \
-Dinit=init__stoermelder_p1

@@ -2803,19 +2813,28 @@ $(BUILD_DIR)/ValleyAudio/%.cpp.o: ValleyAudio/%.cpp
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(VALLEYAUDIO_CUSTOM),$(call custom_module_names,$(m),ValleyAudio)) \
$(foreach m,$(VALLEYAUDIO_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),ValleyAudio_$(shell basename $*))) \
$(foreach m,$(VALLEYAUDIO_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),ValleyAudio_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__ValleyAudio \
-DSTDIO_OVERRIDE=ValleyAudio \
-IValleyAudio/src \
-Wno-sign-compare \
-Wno-unused-but-set-variable

$(BUILD_DIR)/Venom/%.cpp.o: Venom/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(VENOM_CUSTOM),$(call custom_module_names,$(m),Venom)) \
-DSKIP_MINGW_FORMAT \
-DpluginInstance=pluginInstance__Venom \
-lglfw

$(BUILD_DIR)/voxglitch/%.cpp.o: voxglitch/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(VOXGLITCH_CUSTOM),$(call custom_module_names,$(m),Voxglitch)) \
$(foreach m,$(VOXGLITCH_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),Voxglitch_$(shell basename $*))) \
$(foreach m,$(VOXGLITCH_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),Voxglitch_$(shell basename -- $*))) \
-DpluginInstance=pluginInstance__Voxglitch \
-DSKIP_MINGW_FORMAT

@@ -2826,6 +2845,15 @@ $(BUILD_DIR)/WhatTheRack/%.cpp.o: WhatTheRack/%.cpp
$(foreach m,$(WHATTHERACK_CUSTOM),$(call custom_module_names,$(m),WhatTheRack)) \
-DpluginInstance=pluginInstance__WhatTheRack

$(BUILD_DIR)/WSTD-Drums/%.cpp.o: WSTD-Drums/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(WSTD_DRUMS_CUSTOM),$(call custom_module_names,$(m),WSTD_Drums)) \
-DpluginInstance=pluginInstance__WSTD_Drums \
-Dinit=init__WSTD_Drums \
-Wno-sign-compare

$(BUILD_DIR)/ZamAudio/%.cpp.o: ZamAudio/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"


+ 1
- 1
plugins/Sapphire

@@ -1 +1 @@
Subproject commit 9665f4bddb59841ef74ff206fe91345c146fed52
Subproject commit 191fbee21a6be7d9c18eacc6f3a1804455d5358d

+ 1
- 0
plugins/Venom

@@ -0,0 +1 @@
Subproject commit ba95ede2370d340e0f7143dd897ff7e089bda336

+ 1
- 0
plugins/WSTD-Drums

@@ -0,0 +1 @@
Subproject commit 05330ce99f4ec742f906c77ab5d8758a15decb4c

+ 1
- 0
plugins/eightfold

@@ -0,0 +1 @@
Subproject commit a541c5cfdc3fb9ad8e4f345470f817eaf576b987

+ 1
- 1
plugins/kocmoc

@@ -1 +1 @@
Subproject commit eaf7cbf3af0a8525d3c649c53eab476c3052d41b
Subproject commit ea69acab96db49c32601b609cdfe06444ecee0e8

+ 189
- 34
plugins/plugins.cpp View File

@@ -147,10 +147,14 @@ extern Model* modelChord;
#define modelADSR modelBefacoADSR
#define modelMixer modelBefacoMixer
#define modelBurst modelBefacoBurst
#define modelMixer2 modelBefacoMixer2
#define modelSlew modelBefacoSlew
#include "Befaco/src/plugin.hpp"
#undef modelADSR
#undef modelMixer
#undef modelBurst
#undef modelMixer2
#undef modelSlew

// Bidoo
#include "Bidoo/src/plugin.hpp"
@@ -339,9 +343,11 @@ extern Model* modelTestVCF;
#include "cf/src/plugin.hpp"

// CVfunk
#define modelNode modelCVfunkNode
#define modelSteps modelCVfunkSteps
#include "CVfunk/src/plugin.hpp"
#undef modelSteps
#undef modelNode

// ChowDSP
#include "ChowDSP/src/plugin.hpp"
@@ -391,9 +397,8 @@ namespace truth { void init(Plugin*); }
namespace xycloid { void init(Plugin*); }
}

// DrumKit
#include "DrumKit/src/DrumKit.hpp"
void setupSamples();
// eightfold
#include "eightfold/src/plugin.hpp"

// EnigmaCurry
#define modelPulse modelEnigmaCurryPulse
@@ -450,6 +455,7 @@ void saveGtgPluginDefault(const char*, int) {}
extern Model* modelTwoToFour;
extern Model* modelAnalogToDigital;
extern Model* modelASR;
extern Model* modelBinaryCounter;
extern Model* modelBinaryGate;
extern Model* modelBinaryNoise;
extern Model* modelBitshift;
@@ -460,6 +466,7 @@ extern Model* modelChaos2Op;
extern Model* modelChaos3Op;
extern Model* modelChaoticAttractors;
extern Model* modelClockedNoise;
extern Model* modelClockToPhasor;
extern Model* modelComparator;
extern Model* modelContrast;
extern Model* modelCrackle;
@@ -478,6 +485,7 @@ extern Model* modelGingerbread;
extern Model* modelLogicCombine;
extern Model* modelMidSide;
extern Model* modelMinMax;
extern Model* modelNormals;
extern Model* modelPhaseDrivenSequencer;
extern Model* modelPhaseDrivenSequencer32;
extern Model* modelPhasorAnalyzer;
@@ -507,8 +515,10 @@ extern Model* modelPhasorSubstepShape;
extern Model* modelPhasorSwing;
extern Model* modelPhasorTimetable;
extern Model* modelPhasorToClock;
extern Model* modelPhasorToRandom;
extern Model* modelPhasorToLFO;
extern Model* modelPhasorToWaveforms;
extern Model* modelPolymetricPhasors;
extern Model* modelProbability;
extern Model* modelRandomGates;
extern Model* modelRotator;
@@ -566,8 +576,10 @@ extern Model* modelBlankPanel;

// JW-Modules
#define modelQuantizer modelJWQuantizer
#define modelArrange modelJWArrange
#include "JW-Modules/src/JWModules.hpp"
#undef modelQuantizer
#undef modelArrange

// kocmoc
#include "kocmoc/src/plugin.hpp"
@@ -882,6 +894,13 @@ void surgext_rack_update_theme();
// ValleyAudio
#include "ValleyAudio/src/Valley.hpp"

// Venom
#include "Venom/src/plugin.hpp"
namespace Venom
{
void readDefaultThemes();
}

// Voxglitch
#define modelLooper modelVoxglitchLooper
#include "voxglitch/src/plugin.hpp"
@@ -890,6 +909,10 @@ void surgext_rack_update_theme();
// WhatTheRack
#include "WhatTheRack/src/WhatTheRack.hpp"

// WSTD-Drums
#include "WSTD-Drums/src/WSTD_Drums.hpp"
void setupSamples();

// ZetaCarinaeModules
#include "ZetaCarinaeModules/src/plugin.hpp"

@@ -947,7 +970,7 @@ Plugin* pluginInstance__Computerscare;
Plugin* pluginInstance__CVfunk;
Plugin* pluginInstance__dBiz;
Plugin* pluginInstance__DHE;
extern Plugin* pluginInstance__DrumKit;
Plugin* pluginInstance__eightfold;
Plugin* pluginInstance__EnigmaCurry;
Plugin* pluginInstance__ESeries;
Plugin* pluginInstance__ExpertSleepersEncoders;
@@ -997,8 +1020,10 @@ extern Plugin* pluginInstance__stoermelder_p1;
Plugin* pluginInstance__surgext;
Plugin* pluginInstance__unless_modules;
Plugin* pluginInstance__ValleyAudio;
Plugin* pluginInstance__Venom;
Plugin* pluginInstance__Voxglitch;
Plugin* pluginInstance__WhatTheRack;
extern Plugin* pluginInstance__WSTD_Drums;
Plugin* pluginInstance__ZetaCarinaeModules;
Plugin* pluginInstance__ZZC;

@@ -1044,10 +1069,17 @@ struct StaticPluginLoader {
return;
}

// force ABI, we use static plugins so this doesnt matter as long as it builds
json_t* const version = json_string((APP_VERSION_MAJOR + ".0").c_str());
json_object_set(rootJ, "version", version);
json_decref(version);
std::string version;
if (json_t* const versionJ = json_object_get(rootJ, "version"))
version = json_string_value(versionJ);

if (!string::startsWith(version, APP_VERSION_MAJOR + "."))
{
// force ABI, we use static plugins so this doesnt matter as long as it builds
json_t* const versionJ = json_string((APP_VERSION_MAJOR + ".0").c_str());
json_object_set(rootJ, "version", versionJ);
json_decref(versionJ);
}

// Load manifest
p->fromJson(rootJ);
@@ -1132,12 +1164,12 @@ static void initStatic__Cardinal()
#else
spl.removeModule("glBars");
#endif
#ifndef STATIC_BUILD
#ifndef __MOD_DEVICES__
p->addModel(modelAudioFile);
#else
spl.removeModule("AudioFile");
#endif
#if !(defined(DISTRHO_OS_WASM) || defined(STATIC_BUILD))
#if !(defined(DISTRHO_OS_WASM) || defined(__MOD_DEVICES__))
p->addModel(modelCarla);
p->addModel(modelIldaeil);
#else
@@ -1149,11 +1181,6 @@ static void initStatic__Cardinal()
#else
spl.removeModule("SassyScope");
#endif
#if defined(HAVE_X11) && !defined(HEADLESS) && !defined(STATIC_BUILD)
p->addModel(modelMPV);
#else
spl.removeModule("MPV");
#endif
#ifdef HAVE_FFTW3F
p->addModel(modelAudioToCVPitch);
#else
@@ -1614,6 +1641,8 @@ static void initStatic__Befaco()
#define modelADSR modelBefacoADSR
#define modelMixer modelBefacoMixer
#define modelBurst modelBefacoBurst
#define modelMixer2 modelBefacoMixer2
#define modelSlew modelBefacoSlew
p->addModel(modelEvenVCO);
p->addModel(modelRampage);
p->addModel(modelABC);
@@ -1640,9 +1669,16 @@ static void initStatic__Befaco()
p->addModel(modelOctaves);
p->addModel(modelBypass);
p->addModel(modelBandit);
p->addModel(modelAtte);
p->addModel(modelAxBC);
p->addModel(modelMixer2);
p->addModel(modelMuDi);
p->addModel(modelSlew);
#undef modelADSR
#undef modelMixer
#undef modelBurst
#undef modelMixer2
#undef modelSlew

// NOTE disabled in Cardinal due to MIDI usage
spl.removeModule("MidiThingV2");
@@ -2024,6 +2060,7 @@ static void initStatic__CVfunk()
if (spl.ok())
{
#define modelSteps modelCVfunkSteps
#define modelNode modelCVfunkNode
p->addModel(modelSteps);
p->addModel(modelEnvelopeArray);
p->addModel(modelPentaSequencer);
@@ -2044,7 +2081,17 @@ static void initStatic__CVfunk()
p->addModel(modelStepWave);
p->addModel(modelPreeeeeeeeeeessedDuck);
p->addModel(modelArrange);
p->addModel(modelTriDelay);
p->addModel(modelTriDelay);
p->addModel(modelTatami);
p->addModel(modelCartesia);
p->addModel(modelJunkDNA);
p->addModel(modelPicus);
p->addModel(modelNode);
p->addModel(modelWeave);
p->addModel(modelWonk);
p->addModel(modelHammer);
p->addModel(modelHub);
#undef modelNode
#undef modelSteps
}
}
@@ -2127,27 +2174,19 @@ static void initStatic__DHE()
}
}

static void initStatic__DrumKit()
static void initStatic__eightfold()
{
Plugin* const p = new Plugin;
pluginInstance__DrumKit = p;
pluginInstance__eightfold = p;

const StaticPluginLoader spl(p, "DrumKit");
const StaticPluginLoader spl(p, "eightfold");
if (spl.ok())
{
setupSamples();
p->addModel(modelBD9);
p->addModel(modelSnare);
p->addModel(modelClosedHH);
p->addModel(modelOpenHH);
p->addModel(modelDMX);
p->addModel(modelCR78);
p->addModel(modelSBD);
p->addModel(modelGnome);
p->addModel(modelSequencer);
p->addModel(modelTomi);
p->addModel(modelBaronial);
p->addModel(modelMarionette);
p->addModel(modelSDOrcasHeartV2);
p->addModel(modelSDFormation);
p->addModel(modelSDLines);
p->addModel(modelSDTransgate);
p->addModel(modelSDComparator);
}
}

@@ -2383,6 +2422,7 @@ static void initStatic__HetrickCV()
p->addModel(modelTwoToFour);
p->addModel(modelAnalogToDigital);
p->addModel(modelASR);
p->addModel(modelBinaryCounter);
p->addModel(modelBinaryGate);
p->addModel(modelBinaryNoise);
p->addModel(modelBitshift);
@@ -2393,6 +2433,7 @@ static void initStatic__HetrickCV()
p->addModel(modelChaos3Op);
p->addModel(modelChaoticAttractors);
p->addModel(modelClockedNoise);
p->addModel(modelClockToPhasor);
p->addModel(modelComparator);
p->addModel(modelContrast);
p->addModel(modelCrackle);
@@ -2411,6 +2452,7 @@ static void initStatic__HetrickCV()
p->addModel(modelLogicCombine);
p->addModel(modelMidSide);
p->addModel(modelMinMax);
p->addModel(modelNormals);
p->addModel(modelPhaseDrivenSequencer);
p->addModel(modelPhaseDrivenSequencer32);
p->addModel(modelPhasorAnalyzer);
@@ -2440,8 +2482,10 @@ static void initStatic__HetrickCV()
p->addModel(modelPhasorSwing);
p->addModel(modelPhasorTimetable);
p->addModel(modelPhasorToClock);
p->addModel(modelPhasorToRandom);
p->addModel(modelPhasorToLFO);
p->addModel(modelPhasorToWaveforms);
p->addModel(modelPolymetricPhasors);
p->addModel(modelProbability);
p->addModel(modelRandomGates);
p->addModel(modelRotator);
@@ -2526,6 +2570,7 @@ static void initStatic__JW()
if (spl.ok())
{
#define modelQuantizer modelJWQuantizer
#define modelArrange modelJWArrange
p->addModel(modelAdd5);
p->addModel(modelAbcdSeq);
p->addModel(modelBouncyBalls);
@@ -2556,12 +2601,14 @@ static void initStatic__JW()
p->addModel(modelCoolBreeze);
p->addModel(modelPete);
p->addModel(modelTimer);
#ifndef STATIC_BUILD
#ifndef __MOD_DEVICES__
p->addModel(modelStr1ker);
#else
spl.removeModule("Str1ker");
#endif
p->addModel(modelArrange);
#undef modelQuantizer
#undef modelArrange
}
}

@@ -2578,6 +2625,7 @@ static void initStatic__kocmoc()
p->addModel(modelTRG);
p->addModel(modelLADR);
p->addModel(modeluLADR);
p->addModel(modelDIOD);
p->addModel(modelOP);
p->addModel(modelPHASR);
p->addModel(modelMUL);
@@ -3173,7 +3221,11 @@ static void initStatic__Sapphire()
if (spl.ok())
{
p->addModel(modelSapphireChaops);
p->addModel(modelSapphireEcho);
p->addModel(modelSapphireEchoOut);
p->addModel(modelSapphireEchoTap);
p->addModel(modelSapphireElastika);
p->addModel(modelSapphireEnv);
p->addModel(modelSapphireFrolic);
p->addModel(modelSapphireGalaxy);
p->addModel(modelSapphireGlee);
@@ -3192,6 +3244,7 @@ static void initStatic__Sapphire()
p->addModel(modelSapphireTout);
p->addModel(modelSapphireTricorder);
p->addModel(modelSapphireTubeUnit);
p->addModel(modelSapphireZoo);
}
}

@@ -3439,6 +3492,82 @@ static void initStatic__ValleyAudio()
}
}

static void initStatic__Venom()
{
Plugin* const p = new Plugin;
pluginInstance__Venom = p;

const StaticPluginLoader spl(p, "Venom");
if (spl.ok())
{
p->addModel(modelVenomAD_ASR);
p->addModel(modelVenomAuxClone);
p->addModel(modelVenomBayInput);
p->addModel(modelVenomBayNorm);
p->addModel(modelVenomBayOutput);
p->addModel(modelVenomBenjolinOsc);
p->addModel(modelVenomBenjolinGatesExpander);
p->addModel(modelVenomBenjolinVoltsExpander);
p->addModel(modelVenomBernoulliSwitch);
p->addModel(modelVenomBernoulliSwitchExpander);
p->addModel(modelVenomBlocker);
p->addModel(modelVenomBypass);
p->addModel(modelVenomCloneMerge);
p->addModel(modelVenomCompare2);
p->addModel(modelVenomCrossFade3D);
p->addModel(modelVenomHQ);
p->addModel(modelVenomKnob5);
p->addModel(modelVenomLinearBeats);
p->addModel(modelVenomLinearBeatsExpander);
p->addModel(modelVenomLogic);
p->addModel(modelVenomMix4);
p->addModel(modelVenomMix4Stereo);
p->addModel(modelVenomMixFade);
p->addModel(modelVenomMixFade2);
p->addModel(modelVenomMixMute);
p->addModel(modelVenomMixOffset);
p->addModel(modelVenomMixPan);
p->addModel(modelVenomMixSend);
p->addModel(modelVenomMixSolo);
p->addModel(modelVenomMousePad);
p->addModel(modelVenomMultiMerge);
p->addModel(modelVenomMultiSplit);
p->addModel(modelVenomSVF);
p->addModel(modelVenomOscillator);
p->addModel(modelVenomNORS_IQ);
p->addModel(modelVenomNORSIQChord2Scale);
p->addModel(modelVenomPan3D);
p->addModel(modelVenomPolyClone);
p->addModel(modelVenomPolyFade);
p->addModel(modelVenomPolyOffset);
p->addModel(modelVenomPolySHASR);
p->addModel(modelVenomPolyScale);
p->addModel(modelVenomPolyUnison);
p->addModel(modelVenomPush5);
p->addModel(modelVenomQuadVCPolarizer);
p->addModel(modelVenomRecurse);
p->addModel(modelVenomRecurseStereo);
p->addModel(modelVenomReformation);
p->addModel(modelVenomRhythmExplorer);
p->addModel(modelVenomShapedVCA);
p->addModel(modelVenomSlew);
p->addModel(modelVenomSphereToXYZ);
p->addModel(modelVenomThru);
p->addModel(modelVenomVCAMix4);
p->addModel(modelVenomVCAMix4Stereo);
p->addModel(modelVenomVCOUnit);
p->addModel(modelVenomBlank);
p->addModel(modelVenomWaveFolder);
p->addModel(modelVenomWaveMangler);
p->addModel(modelVenomWaveMultiplier);
p->addModel(modelVenomWidgetMenuExtender);
p->addModel(modelVenomWinComp);
p->addModel(modelVenomXM_OP);

Venom::readDefaultThemes();
}
}

static void initStatic__Voxglitch()
{
Plugin* p = new Plugin;
@@ -3493,6 +3622,30 @@ static void initStatic__WhatTheRack()
}
}

static void initStatic__WSTD_Drums()
{
Plugin* const p = new Plugin;
pluginInstance__WSTD_Drums = p;

const StaticPluginLoader spl(p, "WSTD-Drums");
if (spl.ok())
{
setupSamples();
p->addModel(modelBD9);
p->addModel(modelSnare);
p->addModel(modelClosedHH);
p->addModel(modelOpenHH);
p->addModel(modelDMX);
p->addModel(modelCR78);
p->addModel(modelSBD);
p->addModel(modelGnome);
p->addModel(modelSequencer);
p->addModel(modelTomi);
p->addModel(modelBaronial);
p->addModel(modelMarionette);
}
}

static void initStatic__ZetaCarinaeModules()
{
Plugin* p = new Plugin;
@@ -3565,7 +3718,7 @@ void initStaticPlugins()
initStatic__CVfunk();
initStatic__dBiz();
initStatic__DHE();
initStatic__DrumKit();
initStatic__eightfold();
initStatic__EnigmaCurry();
initStatic__ESeries();
initStatic__ExpertSleepersEncoders();
@@ -3615,8 +3768,10 @@ void initStaticPlugins()
initStatic__surgext();
initStatic__unless_modules();
initStatic__ValleyAudio();
initStatic__Venom();
initStatic__Voxglitch();
initStatic__WhatTheRack();
initStatic__WSTD_Drums();
initStatic__ZetaCarinaeModules();
initStatic__ZZC();



+ 6
- 52
src/CardinalCommon.cpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2026 Filipe Coelho <falktx@falktx.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/

@@ -99,7 +99,7 @@ void destroyStaticPlugins();
}
}

const std::string CARDINAL_VERSION = "24.12";
const std::string CARDINAL_VERSION = "26.01";

// -----------------------------------------------------------------------------------------------------------

@@ -626,47 +626,7 @@ Initializer::Initializer(const CardinalBasePlugin* const plugin, const CardinalB

if (asset::userDir.empty())
{
#if defined(DISTRHO_OS_WASM)
asset::userDir = "/userfiles";
#elif defined(ARCH_MAC)
asset::userDir = system::join(homeDir(), "Documents", "Cardinal");
#elif defined(ARCH_WIN)
asset::userDir = system::join(getSpecialPath(kSpecialPathMyDocuments), "Cardinal");
#else
std::string xdgConfigDir;
if (const char* const xdgEnv = getenv("XDG_CONFIG_HOME"))
xdgConfigDir = xdgEnv;
if (xdgConfigDir.empty())
xdgConfigDir = system::join(homeDir(), ".config");

const std::string xdgDirsConfigPath(system::join(xdgConfigDir, "user-dirs.dirs"));

if (system::exists(xdgDirsConfigPath))
{
std::ifstream xdgDirsConfigFile(xdgDirsConfigPath, std::ios::in|std::ios::ate);
std::string xdgDirsConfig(xdgDirsConfigFile.tellg(), 0);

xdgDirsConfigFile.seekg(0);
xdgDirsConfigFile.read(&xdgDirsConfig[0], xdgDirsConfig.size());

if (const char* const xdgDocsDir = std::strstr(xdgDirsConfig.c_str(), "XDG_DOCUMENTS_DIR=\""))
{
if (const char* const xdgDocsDirNL = std::strstr(xdgDocsDir, "\"\n"))
{
asset::userDir = std::string(xdgDocsDir + 19, xdgDocsDirNL - xdgDocsDir - 19);

if (string::startsWith(asset::userDir, "$HOME"))
asset::userDir.replace(asset::userDir.begin(), asset::userDir.begin() + 5, homeDir());

if (! system::exists(asset::userDir))
asset::userDir.clear();
}
}
}

if (asset::userDir.empty())
asset::userDir = system::join(homeDir(), "Documents", "Cardinal");
#endif
asset::userDir = system::join(getSpecialDir(kSpecialDirDocuments), "Cardinal");

if (isRealInstance)
{
@@ -683,17 +643,10 @@ Initializer::Initializer(const CardinalBasePlugin* const plugin, const CardinalB
#ifndef CARDINAL_COMMON_DSP_ONLY
if (asset::configDir.empty())
{
#if defined(ARCH_MAC) || defined(ARCH_WIN) || defined(DISTRHO_OS_WASM)
asset::configDir = asset::userDir;
#else
if (const char* const xdgEnv = getenv("XDG_CONFIG_HOME"))
asset::configDir = system::join(xdgEnv, "Cardinal");
else
asset::configDir = system::join(homeDir(), ".config", "Cardinal");
asset::configDir = system::join(getSpecialDir(kSpecialDirConfig), "Cardinal");

if (isRealInstance)
system::createDirectory(asset::configDir);
#endif
}
#endif
@@ -875,7 +828,8 @@ void Initializer::stopRemoteServer()
lo_server_thread_stop(oscServerThread);
lo_server_thread_del_method(oscServerThread, nullptr, nullptr);
lo_server_thread_free(oscServerThread);
oscServerThread = oscServer = nullptr;
oscServerThread = nullptr;
oscServer = nullptr;
}
#else
if (oscServer != nullptr)


+ 2
- 2
src/CardinalPlugin.cpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2026 Filipe Coelho <falktx@falktx.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
@@ -414,7 +414,7 @@ protected:
uint32_t getVersion() const override
{
return d_version(0, 24, 12);
return d_version(0, 26, 1);
}
int64_t getUniqueId() const override


+ 3
- 3
src/CardinalPluginContext.hpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2026 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -155,8 +155,8 @@ public:
std::function<void(char* path)> filebrowseraction;
FileBrowserHandle filebrowserhandle;

CardinalBaseUI(const uint width, const uint height)
: UI(width, height),
CardinalBaseUI()
: UI(),
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
context(getRackContextFromPlugin(getPluginInstancePointer())),
#else


+ 1
- 1
src/CardinalRemote/Makefile View File

@@ -229,7 +229,6 @@ SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/chopin
SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/debussy
SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/goldberg
SYMLINKED_DIRS_RESOURCES += cf/playeroscs
SYMLINKED_DIRS_RESOURCES += DrumKit/res/samples
SYMLINKED_DIRS_RESOURCES += Fundamental/presets
SYMLINKED_DIRS_RESOURCES += GrandeModular/presets
SYMLINKED_DIRS_RESOURCES += LyraeModules/presets
@@ -247,6 +246,7 @@ SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/fx_presets
SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/wavetables
SYMLINKED_DIRS_RESOURCES += surgext/patches
SYMLINKED_DIRS_RESOURCES += surgext/presets
SYMLINKED_DIRS_RESOURCES += WSTD-Drums/res/samples
LINK_FLAGS += $(foreach d,$(SYMLINKED_DIRS_RESOURCES),--preload-file=../../bin/CardinalNative.lv2/resources/$(d)@/resources/$(d))
endif
LINK_FLAGS += -sALLOW_MEMORY_GROWTH


+ 2
- 16
src/CardinalUI.cpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2026 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -339,7 +339,7 @@ class CardinalUI : public CardinalBaseUI,

public:
CardinalUI()
: CardinalBaseUI(DISTRHO_UI_DEFAULT_WIDTH, DISTRHO_UI_DEFAULT_HEIGHT),
: CardinalBaseUI(),
#if ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
#ifdef DISTRHO_OS_WASM
fInitializer(new Initializer(static_cast<const CardinalBasePlugin*>(nullptr), this)),
@@ -1259,20 +1259,6 @@ protected:
#endif
}

#if 0
void uiReshape(const uint width, const uint height) override
{
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, width, 0.0, height, -1.0, 1.0);
glViewport(0, 0, width, height);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
#endif

private:
/**
Set our UI class as non-copyable and add a leak detector just in case.


+ 3
- 0
src/Makefile View File

@@ -147,6 +147,9 @@ au: $(TARGETS)
$(MAKE) au -C CardinalFX $(CARDINAL_SYNTH_ARGS)
$(MAKE) au -C CardinalSynth $(CARDINAL_SYNTH_ARGS)

mapi: $(TARGETS)
$(MAKE) mapi -C CardinalFX $(CARDINAL_FX_ARGS)

lv2: $(TARGETS)
$(MAKE) lv2 -C Cardinal
$(MAKE) lv2 -C CardinalFX $(CARDINAL_FX_ARGS)


+ 7
- 1
src/Makefile.cardinal.mk View File

@@ -264,6 +264,7 @@ endif

ifeq ($(WASM),true)
APP_EXT = .js
UI_TYPE = gles2
endif

USE_VST2_BUNDLE = true
@@ -317,7 +318,6 @@ SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/debussy
SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/goldberg
SYMLINKED_DIRS_RESOURCES += cf/playeroscs
SYMLINKED_DIRS_RESOURCES += DHE-Modules/svg
SYMLINKED_DIRS_RESOURCES += DrumKit/res/samples
SYMLINKED_DIRS_RESOURCES += GrandeModular/presets
SYMLINKED_DIRS_RESOURCES += LyraeModules/presets
SYMLINKED_DIRS_RESOURCES += Meander/res
@@ -332,6 +332,7 @@ SYMLINKED_DIRS_RESOURCES += Orbits/presets
SYMLINKED_DIRS_RESOURCES += stoermelder-packone/presets
SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/fx_presets
SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/wavetables
SYMLINKED_DIRS_RESOURCES += WSTD-Drums/res/samples
endif
LINK_FLAGS += $(foreach d,$(SYMLINKED_DIRS_RESOURCES),--preload-file=../../bin/CardinalNative.lv2/resources/$(d)@/resources/$(d))

@@ -408,6 +409,11 @@ endif

BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"'

# --------------------------------------------------------------
# we know what we are doing, promise!

BUILD_CXX_FLAGS += -DDISTRHO_NO_WARNINGS

# --------------------------------------------------------------
# Enable all possible plugin types and setup resources



+ 2
- 1
src/custom/RemoteNanoVG.cpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2025 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -55,6 +55,7 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char*) {}
GLFWAPI GLFWcursor* glfwCreateStandardCursor(int) { return nullptr; }
GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor*) {}
GLFWAPI const char* glfwGetKeyName(int, int) { return nullptr; }
GLFWAPI int glfwGetKey(GLFWwindow*, int) { return 0; }
GLFWAPI int glfwGetKeyScancode(int) { return 0; }
GLFWAPI double glfwGetTime(void) { return 0.0; }



+ 21
- 20
src/custom/dep.cpp View File

@@ -54,7 +54,6 @@ enum DarkMode {
kModeCf,
kModeComputerscare,
kModeDHE,
kModeDrumKit,
kModeESeries,
kModeLilacLoop,
kModeLittleUtils,
@@ -258,19 +257,6 @@ static const struct {
{ kModeDHE, "/DHE-Modules/svg/truth-4.svg", {}, -1 },
{ kModeDHE, "/DHE-Modules/svg/upstage.svg", {}, -1 },
{ kModeDHE, "/DHE-Modules/svg/xycloid.svg", {}, -1 },
// CC0-1.0
{ kModeDrumKit, "/DrumKit/res/Baronial.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/BD9.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/ClosedHH.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/CR78.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/DMX.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/Gnome.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/Marionette.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/OpenHH.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/SBD.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/Sequencer.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/Snare.svg", {}, -1 },
{ kModeDrumKit, "/DrumKit/res/Tomi.svg", {}, -1 },
// Custom, runtime dark mode used with permission
{ kModeESeries,"/ESeries/res/E340.svg", {}, -1 },
// GPL3.0-or-later
@@ -284,6 +270,7 @@ static const struct {
{ kModeLittleUtils, "/LittleUtils/res/TeleportOut.svg", {}, -1 },
// GPL-3.0-or-later
{ kModeKocmoc, "/kocmoc/res/DDLY.svg", {}, -1 },
{ kModeKocmoc, "/kocmoc/res/DIOD.svg", {}, -1 },
{ kModeKocmoc, "/kocmoc/res/LADR.svg", {}, -1 },
{ kModeKocmoc, "/kocmoc/res/uLADR.svg", {}, -1 },
{ kModeKocmoc, "/kocmoc/res/MUL.svg", {}, -1 },
@@ -373,6 +360,7 @@ enum LightMode {
kModePrism,
kModeRepelzen,
kModeSonusmodular,
kModeWSTDDrums,
};

static const struct {
@@ -435,6 +423,11 @@ static const struct {
{ kModeBefaco, "/Befaco/res/panels/Octaves.svg" },
{ kModeBefaco, "/Befaco/res/panels/Bypass.svg" },
{ kModeBefaco, "/Befaco/res/panels/Bandit.svg" },
{ kModeBefaco, "/Befaco/res/panels/Atte.svg" },
{ kModeBefaco, "/Befaco/res/panels/AxBC.svg" },
{ kModeBefaco, "/Befaco/res/panels/Mixer2.svg" },
{ kModeBefaco, "/Befaco/res/panels/MuDi.svg" },
{ kModeBefaco, "/Befaco/res/panels/Slew.svg" },
// GPLv3+
{ kModeCardinal, "/Cardinal/res/AudioFile.svg" },
{ kModeCardinal, "/Cardinal/res/AudioToCVPitch.svg" },
@@ -588,6 +581,20 @@ static const struct {
{ kModeSonusmodular, "/sonusmodular/res/tropicana.svg" },
{ kModeSonusmodular, "/sonusmodular/res/twoff.svg" },
{ kModeSonusmodular, "/sonusmodular/res/yabp.svg" },
// CC0-1.0
{ kModeWSTDDrums, "/WSTD-Drums/res/Baronial.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/BD9.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/ClosedHH.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/CR78.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/DMX.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/Gnome.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/Marionette.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/OpenHH.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/SBD.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/Sequencer.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/Snare.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/Tomi.svg" },
{ kModeWSTDDrums, "/WSTD-Drums/res/component/Knob.svg" },
};

static inline
@@ -624,12 +631,6 @@ bool invertPaintForDarkMode(const DarkMode mode, NSVGshape* const shape, NSVGpai
{
switch (mode)
{
// Special case for DrumKit background gradient
case kModeDrumKit:
std::free(paint.gradient);
paint.type = NSVG_PAINT_COLOR;
paint.color = 0xff191919;
return true;
// Special case for PathSet shifty gradient
case kModePathSet:
paint.gradient->stops[0].color = 0xff7c4919; // 50% darker than main blue


+ 11
- 1
src/custom/glfw.cpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2025 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -17,6 +17,7 @@

#include "Application.hpp"
#include "CardinalPluginContext.hpp"
#include "widget/event.hpp"

#include <GLFW/glfw3.h>

@@ -207,3 +208,12 @@ GLFWAPI const char* glfwGetKeyName(const int key, int)
default: return nullptr;
}
}

int glfwGetKey(GLFWwindow*, const int key)
{
CardinalPluginContext* const context = static_cast<CardinalPluginContext*>(APP);
DISTRHO_SAFE_ASSERT_RETURN(context != nullptr, GLFW_RELEASE);
DISTRHO_SAFE_ASSERT_RETURN(context->event != nullptr, GLFW_RELEASE);

return context->event->heldKeys.find(key) != context->event->heldKeys.end() ? GLFW_PRESS : GLFW_RELEASE;
}

+ 17
- 14
src/override/Scene.cpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2025 Filipe Coelho <falktx@falktx.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/

@@ -207,20 +207,23 @@ void Scene::step() {
(internal->historyActionIndex != actionIndex
&& actionIndex > 0
&& time - internal->lastSceneChangeTime >= 1.0)) {
remoteDetails->first = false;

const std::string& name(APP->history->actions[actionIndex - 1]->name);
static const std::vector<std::string> ignoredNames = {
"move knob",
"move modules",
"move switch",
};
if (std::find(ignoredNames.cbegin(), ignoredNames.cend(), name) == ignoredNames.cend()) {
printf("action '%s'\n", APP->history->actions[actionIndex - 1]->name.c_str());
if (remoteDetails->first) {
remoteDetails->first = false;
remoteUtils::sendFullPatchToRemote(remoteDetails);

if (remoteDetails->screenshot) {
window::generateScreenshot();
} else {
const std::string& name(APP->history->actions[actionIndex - 1]->name);
static const std::vector<std::string> ignoredNames = {
"move knob",
"move modules",
"move switch",
};
if (std::find(ignoredNames.cbegin(), ignoredNames.cend(), name) == ignoredNames.cend()) {
d_debug("action '%s'\n", APP->history->actions[actionIndex - 1]->name.c_str());
remoteUtils::sendFullPatchToRemote(remoteDetails);

if (remoteDetails->screenshot) {
window::generateScreenshot();
}
}
}
internal->historyActionIndex = actionIndex;


+ 13
- 0
src/override/plugin.cpp View File

@@ -48,6 +48,7 @@ static const std::map<std::string, std::string> pluginSlugFallbacks = {
{"AudibleInstrumentsPreview", "AudibleInstruments"},
{"SequelSequencers", "DanielDavies"},
{"DelexanderVol1", "DelexandraVol1"},
{"DrumKit", "WSTD-Drums"}
// {"", ""},
};

@@ -102,6 +103,18 @@ static const std::map<PluginModuleSlug, PluginModuleSlug> moduleSlugFallbacks =
{{"Core", "Notes"}, {"Cardinal", "TextEditor"}},
{{"Core", "Blank"}, {"Cardinal", "Blank"}},
{{"MindMeld-ShapeMasterPro", "ShapeMasterPro"}, {"MindMeldModular", "ShapeMaster"}},
{{"DrumKit", "BassDrum9"}, {"WSTD-Drums", "BassDrum9"}},
{{"DrumKit", "ClosedHiHat"}, {"WSTD-Drums", "ClosedHiHat"}},
{{"DrumKit", "CR78"}, {"WSTD-Drums", "CR78"}},
{{"DrumKit", "DMX"}, {"WSTD-Drums", "DMX"}},
{{"DrumKit", "OpenHiHat"}, {"WSTD-Drums", "OpenHiHat"}},
{{"DrumKit", "SyntheticBassDrum"}, {"WSTD-Drums", "SyntheticBassDrum"}},
{{"DrumKit", "SnareDrumN"}, {"WSTD-Drums", "SnareDrumN"}},
{{"DrumKit", "Tomi"}, {"WSTD-Drums", "Tomi"}},
{{"DrumKit", "Gnome"}, {"WSTD-Drums", "Gnome"}},
{{"DrumKit", "Sequencer"}, {"WSTD-Drums", "Sequencer"}},
{{"DrumKit", "Baronial"}, {"WSTD-Drums", "Baronial"}},
{{"DrumKit", "MarionetteBass"}, {"WSTD-Drums", "MarionetteBass"}},
// {{"", ""}, {"", ""}},
};



+ 2
- 2
utils/macOS/Info_JACK.plist View File

@@ -11,11 +11,11 @@
<key>CFBundleIdentifier</key>
<string>studio.kx.distrho.cardinal.jack</string>
<key>CFBundleShortVersionString</key>
<string>24.12</string>
<string>26.01</string>
<key>LSMinimumSystemVersion</key>
<string>10.15</string>
<key>NSHumanReadableCopyright</key>
<string>(C) 2011-2024 Filipe Coelho.
<string>(C) 2011-2026 Filipe Coelho.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version.</string>
<key>NSHighResolutionCapable</key>
<true/>


+ 2
- 2
utils/macOS/Info_Native.plist View File

@@ -11,11 +11,11 @@
<key>CFBundleIdentifier</key>
<string>studio.kx.distrho.cardinal.native</string>
<key>CFBundleShortVersionString</key>
<string>24.12</string>
<string>26.01</string>
<key>LSMinimumSystemVersion</key>
<string>10.15</string>
<key>NSHumanReadableCopyright</key>
<string>(C) 2011-2024 Filipe Coelho.
<string>(C) 2011-2026 Filipe Coelho.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version.</string>
<key>NSHighResolutionCapable</key>
<true/>


Loading…
Cancel
Save