Browse Source

Merge branch 'DISTRHO:main' into update-dbiz

pull/802/head
rl2939 GitHub 1 month ago
parent
commit
3a5655f3c8
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
38 changed files with 469 additions and 235 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. +1
    -1
      plugins/Befaco
  13. +1
    -1
      plugins/CVfunk
  14. +1
    -9
      plugins/Cardinal/plugin.json
  15. +43
    -3
      plugins/Cardinal/src/HostTime.cpp
  16. +0
    -1
      plugins/DrumKit
  17. +1
    -1
      plugins/HetrickCV
  18. +1
    -1
      plugins/JW-Modules
  19. +67
    -39
      plugins/Makefile
  20. +1
    -1
      plugins/Sapphire
  21. +1
    -0
      plugins/Venom
  22. +1
    -0
      plugins/WSTD-Drums
  23. +1
    -0
      plugins/eightfold
  24. +1
    -1
      plugins/kocmoc
  25. +189
    -34
      plugins/plugins.cpp
  26. +6
    -52
      src/CardinalCommon.cpp
  27. +2
    -2
      src/CardinalPlugin.cpp
  28. +1
    -1
      src/CardinalRemote/Makefile
  29. +0
    -14
      src/CardinalUI.cpp
  30. +3
    -0
      src/Makefile
  31. +7
    -1
      src/Makefile.cardinal.mk
  32. +2
    -1
      src/custom/RemoteNanoVG.cpp
  33. +21
    -20
      src/custom/dep.cpp
  34. +11
    -1
      src/custom/glfw.cpp
  35. +17
    -14
      src/override/Scene.cpp
  36. +13
    -0
      src/override/plugin.cpp
  37. +2
    -2
      utils/macOS/Info_JACK.plist
  38. +2
    -2
      utils/macOS/Info_Native.plist

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

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


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

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


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


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


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


modaudio:
mod-plugin-builder:
strategy: strategy:
matrix: matrix:
include: include:
- name: darkglass-anagram
target: darkglass-anagram
- name: modduo - name: modduo
target: modduo-static target: modduo-static
extraflags: MODDUO=true extraflags: MODDUO=true
@@ -239,7 +243,7 @@ jobs:
target: modduox-static target: modduox-static
- name: moddwarf - name: moddwarf
target: moddwarf target: moddwarf
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
@@ -254,7 +258,7 @@ jobs:
- name: Set up dependencies - name: Set up dependencies
run: | run: |
sudo apt-get update -qq 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 install -yqq pandoc texlive-latex-recommended texlive-latex-extra
sudo apt-get clean sudo apt-get clean
- name: Bootstrap toolchain - name: Bootstrap toolchain
@@ -422,7 +426,7 @@ jobs:
export PATH="/usr/lib/ccache:${PATH}" export PATH="/usr/lib/ccache:${PATH}"
source deps/PawPaw/local.env ${{ matrix.target }} source deps/PawPaw/local.env ${{ matrix.target }}
make features make features
make NOOPT=true -j $(nproc)
xvfb-run make NOOPT=true -j $(nproc)
- name: Build cross-compiled (carla) - name: Build cross-compiled (carla)
if: steps.cache.outputs.cache-hit == 'true' if: steps.cache.outputs.cache-hit == 'true'
shell: bash shell: bash
@@ -471,7 +475,7 @@ jobs:
Cardinal-*.zip Cardinal-*.zip


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


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


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


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


plugin-validation: plugin-validation:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
@@ -583,8 +587,8 @@ jobs:
- name: Set up dependencies - name: Set up dependencies
run: | run: |
# custom repos # 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 sudo apt-get update -qq
# build-deps # build-deps
sudo apt-get install -yqq libdbus-1-dev libgl1-mesa-dev liblo-dev libx11-dev libxcursor-dev libxext-dev libxrandr-dev 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"] [submodule "plugins/ValleyAudio"]
path = plugins/ValleyAudio path = plugins/ValleyAudio
url = https://github.com/ValleyAudio/ValleyRackFree.git 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"] [submodule "carla"]
path = carla path = carla
url = https://github.com/falkTX/Carla.git url = https://github.com/falkTX/Carla.git
@@ -260,4 +260,9 @@
[submodule "plugins/admiral"] [submodule "plugins/admiral"]
path = plugins/admiral path = plugins/admiral
url = https://github.com/wapiflapi/admiral.git 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 #!/usr/bin/make -f
# DISTRHO Cardinal Plugin # 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 # SPDX-License-Identifier: GPL-3.0-or-later


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


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


# also set in: # also set in:
@@ -15,20 +15,20 @@ include $(ROOT)/Makefile.base.mk
# src/CardinalPlugin.cpp `getVersion` # src/CardinalPlugin.cpp `getVersion`
# utils/macOS/Info_{JACK,Native}.plist # utils/macOS/Info_{JACK,Native}.plist
# .github/ISSUE_TEMPLATE/bug.yaml src/CardinalCommon.cpp src/CardinalPlugin.cpp 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 = 25.12


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


all: cardinal carla deps dgl plugins gen resources all: cardinal carla deps dgl plugins gen resources


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


PREFIX ?= /usr/local PREFIX ?= /usr/local
DESTDIR ?= DESTDIR ?=


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


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


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

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

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


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


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


plugins: deps plugins: deps
@@ -229,6 +238,9 @@ clap: carla deps dgl plugins resources
lv2: carla deps dgl plugins resources lv2: carla deps dgl plugins resources
$(MAKE) lv2 -C src $(CARLA_EXTRA_ARGS) $(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 vst2: carla deps dgl plugins resources
$(MAKE) vst2 -C src $(CARLA_EXTRA_ARGS) $(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) - [CVfunk](https://github.com/codygeary/CVfunk-Modules)
- [dBiz](https://github.com/dBiz/dBiz) - [dBiz](https://github.com/dBiz/dBiz)
- [DHE Modules](https://github.com/dhemery/DHE-Modules) - [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) - [EnigmaCurry](https://github.com/EnigmaCurry/EnigmaCurry-vcv-pack)
- [E-Series](https://github.com/VCVRack/ESeries) - [E-Series](https://github.com/VCVRack/ESeries)
- [ExpertSleepers Encoders](https://expert-sleepers.co.uk/vcvrack_encoders.html) - [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) - [Surge XT](https://github.com/surge-synthesizer/surge-rack)
- [unless_modules](https://gitlab.com/unlessgames/unless_modules) - [unless_modules](https://gitlab.com/unlessgames/unless_modules)
- [Valley](https://github.com/ValleyAudio/ValleyRackFree) - [Valley](https://github.com/ValleyAudio/ValleyRackFree)
- [Venom](https://github.com/DaveBenham/VenomModules)
- [Voxglitch](https://github.com/clone45/voxglitch) - [Voxglitch](https://github.com/clone45/voxglitch)
- [WhatTheRack](https://github.com/korfuri/WhatTheRack) - [WhatTheRack](https://github.com/korfuri/WhatTheRack)
- [WSTD-Drums](https://github.com/Wasted-Audio/WSTD-Drums)
- [ZetaCarinae](https://github.com/mhampton/ZetaCarinaeModules) - [ZetaCarinae](https://github.com/mhampton/ZetaCarinaeModules)
- [ZZC](https://github.com/zezic/ZZC) - [ZZC](https://github.com/zezic/ZZC)




+ 1
- 1
carla

@@ -1 +1 @@
Subproject commit 17000e7fe99459b25a50094a8b00bdfa12f2bfbc
Subproject commit 1d8dcb5aab5e0c30352e9f928ce3e40cbc86a439

+ 1
- 0
deps/Makefile View File

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


# make sure debug/release matches # 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 | | | CVfunk | MIT | |
| dBiz | GPL-3.0-or-later | | | dBiz | GPL-3.0-or-later | |
| DHE-Modules | MIT | | | DHE-Modules | MIT | |
| DrumKit | CC0-1.0 | |
| eightfold | GPL-3.0-or-later | |
| EnigmaCurry | GPL-3.0-or-later | | | EnigmaCurry | GPL-3.0-or-later | |
| E-Series | GPL-3.0-or-later | | | E-Series | GPL-3.0-or-later | |
| ExpertSleepers Encoders | MIT | | | 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 | | | Surge XT | GPL-3.0-or-later | |
| unless_modules | GPL-3.0-or-later | | | unless_modules | GPL-3.0-or-later | |
| Valley | GPL-3.0-or-later | | | Valley | GPL-3.0-or-later | |
| Venom | GPL-3.0-or-later | |
| Voxglitch | GPL-3.0-or-later | | | Voxglitch | GPL-3.0-or-later | |
| WSTD-Drums | CC0-1.0 | |
| WhatTheRack | WTFPL | | | WhatTheRack | WTFPL | |
| ZetaCarinae | GPL-3.0-or-later | | | ZetaCarinae | GPL-3.0-or-later | |
| ZZC | 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 | | DHE-Modules/* | MIT | Same license as source code |
| DrumKit/* | CC0-1.0 | | | DrumKit/* | CC0-1.0 | |
| DrumKit/component/NovaMono.ttf | OFL-1.1-RFN | | | 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/dseg/* | OFL-1.1-RFN | |
| EnigmaCurry/res/fonts/Fantasque/* | OFL-1.1 | | | EnigmaCurry/res/fonts/Fantasque/* | OFL-1.1 | |
| EnigmaCurry/res/fonts/manrope/* | 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 | | | ImpromptuModular/res/comp/complib/* | CC-BY-NC-4.0 | |
| JW-Modules/* | BSD-3-Clause | No artwork specific license provided | | JW-Modules/* | BSD-3-Clause | No artwork specific license provided |
| JW-Modules/DejaVuSansMono.ttf | Bitstream-Vera | Unused in Cardinal | | 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 | | kocmoc/* | GPL-3.0-or-later | No artwork specific license provided |
| LifeFormModular/* | MIT | No artwork specific license provided | | LifeFormModular/* | MIT | No artwork specific license provided |
| LilacLoop/* | GPL-3.0-or-later | 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/din1451alt.ttf | CC-BY-3.0-DE | |
| ValleyAudio/DSEG14Classic-*.ttf | OFL-1.1-RFN | | | ValleyAudio/DSEG14Classic-*.ttf | OFL-1.1-RFN | |
| ValleyAudio/ShareTechMono-*.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/* | GPL-3.0-or-later | No artwork specific license provided |
| voxglitch/ShareTechMono-Regular.ttf | OFL-1.1-RFN | | | voxglitch/ShareTechMono-Regular.ttf | OFL-1.1-RFN | |
| WhatTheRack/* | WTFPL | | | 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. 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. 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 ## TouchOSC example setup


A TouchOSC compatible file is available [here](https://github.com/DISTRHO/Cardinal/raw/main/patches/touchosc/24-direct-fader-params.tosc). 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 04eb91490c70a0c3f524e473087e263d8a9d550f

+ 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", "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", "manualUrl": "https://github.com/DISTRHO/Cardinal/blob/main/docs/CARDINAL-MODULES.md#audio-to-cv-pitch",
"tags": [ "tags": [
"Tuner",
"Utility" "Utility"
] ]
}, },
@@ -192,15 +193,6 @@
"Utility" "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", "slug": "SassyScope",
"name": "Sassy Scope", "name": "Sassy Scope",


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

@@ -40,11 +40,18 @@ struct HostTime : TerminalModule {
kHostTimeCount kHostTimeCount
}; };


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

const CardinalPluginContext* const pcontext; const CardinalPluginContext* const pcontext;


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

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


@@ -148,9 +157,10 @@ struct HostTime : TerminalModule {
? tick / pcontext->ticksPerBeat ? tick / pcontext->ticksPerBeat
: 0.0f; : 0.0f;
const float barPhase = playingWithBBT && pcontext->beatsPerBar > 0 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; : 0.0f;
lights[kHostTimeRolling].setBrightness(playing ? 1.0f : 0.0f); lights[kHostTimeRolling].setBrightness(playing ? 1.0f : 0.0f);
lights[kHostTimeReset].setBrightnessSmooth(hasReset ? 1.0f : 0.0f, args.sampleTime * 0.5f); lights[kHostTimeReset].setBrightnessSmooth(hasReset ? 1.0f : 0.0f, args.sampleTime * 0.5f);
lights[kHostTimeBar].setBrightnessSmooth(hasBar ? 1.0f : 0.0f, args.sampleTime * 0.5f); lights[kHostTimeBar].setBrightnessSmooth(hasBar ? 1.0f : 0.0f, args.sampleTime * 0.5f);
@@ -170,6 +180,20 @@ struct HostTime : TerminalModule {


void processTerminalOutput(const ProcessArgs&) override 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);
}
}
}; };


// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------
@@ -286,6 +310,22 @@ struct HostTimeWidget : ModuleWidgetWith8HP {


ModuleWidget::drawLayer(args, layer); 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 #else
struct HostTimeWidget : ModuleWidget { 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
endif endif


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


ifneq ($(HEADLESS),true) 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) PLUGIN_FILES += $(wildcard Befaco/src/noise-plethora/*/*.cpp)


# modules/types which are present in other plugins # 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 = $(filter-out -fsingle-precision-constant,$(filter-out -std=gnu++11,$(BUILD_CXX_FLAGS)))
BEFACO_FLAGS += -std=gnu++17 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)) PLUGIN_FILES += $(filter-out CVfunk/src/plugin.cpp,$(wildcard CVfunk/src/*.cpp))


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


# -------------------------------------------------------------- # --------------------------------------------------------------
# dBiz # 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)) 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 # 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 # 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)) 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 += JW-Modules/src/Str1ker.cpp
PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/ip/*.cpp) PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/ip/*.cpp)
PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/osc/*.cpp) PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/osc/*.cpp)
@@ -824,7 +816,7 @@ endif
endif endif


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


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


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


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


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

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

# -------------------------------------------------------------- # --------------------------------------------------------------
# Voxglitch # 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)) 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 # ZetaCarinaeModules


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


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


@@ -2254,7 +2265,7 @@ $(BUILD_DIR)/Bidoo%.cpp.o: Bidoo%.cpp
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(BIDOO_CUSTOM),$(call custom_module_names,$(m),Bidoo)) \ $(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 \ -DpluginInstance=pluginInstance__Bidoo \
-DSKIP_MINGW_FORMAT \ -DSKIP_MINGW_FORMAT \
-IBidoo/src/dep/gverb/include \ -IBidoo/src/dep/gverb/include \
@@ -2274,7 +2285,7 @@ $(BUILD_DIR)/BogaudioModules%.cpp.o: BogaudioModules%.cpp
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(BOGAUDIO_CUSTOM),$(call custom_module_names,$(m),Bogaudio)) \ $(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 \ -DpluginInstance=pluginInstance__BogaudioModules \
-DRACK_SIMD=1 \ -DRACK_SIMD=1 \
-DSKIP_MINGW_FORMAT \ -DSKIP_MINGW_FORMAT \
@@ -2327,7 +2338,7 @@ $(BUILD_DIR)/dBiz/src/%.cpp.o: dBiz/src/%.cpp
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(DBIZ_CUSTOM),$(call custom_module_names,$(m),dBiz)) \ $(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 -DpluginInstance=pluginInstance__dBiz


$(BUILD_DIR)/DHE-Modules/src/%.cpp.o: DHE-Modules/src/%.cpp $(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 \ -DpluginInstance=pluginInstance__DHE \
-IDHE-Modules/src -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)/$<)" -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<" @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 $(BUILD_DIR)/EnigmaCurry/src/%.cpp.o: EnigmaCurry/src/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@@ -2489,7 +2498,7 @@ $(BUILD_DIR)/ImpromptuModular%.cpp.o: ImpromptuModular%.cpp
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM),$(call custom_module_names,$(m),ImpromptuModular)) \ $(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 \ -DpluginInstance=pluginInstance__ImpromptuModular \
-Wno-format-truncation -Wno-format-truncation


@@ -2498,7 +2507,7 @@ $(BUILD_DIR)/ihtsyn/%.cpp.o: ihtsyn/%.cpp
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(IHTSYN_CUSTOM),$(call custom_module_names,$(m),ihtsyn)) \ $(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 -DpluginInstance=pluginInstance__ihtsyn


$(BUILD_DIR)/JW-Modules/src/WavHead.cpp.o: JW-Modules/src/WavHead.cpp $(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 $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(MSCHACK_CUSTOM),$(call custom_module_names,$(m),mscHack)) \ $(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 \ -DthePlugin=pluginInstance__mscHack \
-Dinit=init__mscHack \ -Dinit=init__mscHack \
-Wno-class-memaccess \ -Wno-class-memaccess \
@@ -2700,7 +2709,7 @@ $(BUILD_DIR)/Prism/%.cpp.o: Prism/%.cpp
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(PRISM_CUSTOM),$(call custom_module_names,$(m),Prism)) \ $(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 \ -DpluginInstance=pluginInstance__Prism \


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


$(BUILD_DIR)/sonusmodular/%.cpp.o: sonusmodular/%.cpp $(BUILD_DIR)/sonusmodular/%.cpp.o: sonusmodular/%.cpp
@@ -2773,7 +2783,7 @@ $(BUILD_DIR)/stoermelder-packone/%.cpp.o: stoermelder-packone/%.cpp
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(STOERMELDER_PACKONE_CUSTOM),$(call custom_module_names,$(m),stoermelder_p1)) \ $(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 \ -DpluginInstance=pluginInstance__stoermelder_p1 \
-Dinit=init__stoermelder_p1 -Dinit=init__stoermelder_p1


@@ -2803,19 +2813,28 @@ $(BUILD_DIR)/ValleyAudio/%.cpp.o: ValleyAudio/%.cpp
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(VALLEYAUDIO_CUSTOM),$(call custom_module_names,$(m),ValleyAudio)) \ $(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 \ -DpluginInstance=pluginInstance__ValleyAudio \
-DSTDIO_OVERRIDE=ValleyAudio \ -DSTDIO_OVERRIDE=ValleyAudio \
-IValleyAudio/src \ -IValleyAudio/src \
-Wno-sign-compare \ -Wno-sign-compare \
-Wno-unused-but-set-variable -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 $(BUILD_DIR)/voxglitch/%.cpp.o: voxglitch/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<" @echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(VOXGLITCH_CUSTOM),$(call custom_module_names,$(m),Voxglitch)) \ $(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 \ -DpluginInstance=pluginInstance__Voxglitch \
-DSKIP_MINGW_FORMAT -DSKIP_MINGW_FORMAT


@@ -2826,6 +2845,15 @@ $(BUILD_DIR)/WhatTheRack/%.cpp.o: WhatTheRack/%.cpp
$(foreach m,$(WHATTHERACK_CUSTOM),$(call custom_module_names,$(m),WhatTheRack)) \ $(foreach m,$(WHATTHERACK_CUSTOM),$(call custom_module_names,$(m),WhatTheRack)) \
-DpluginInstance=pluginInstance__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 $(BUILD_DIR)/ZamAudio/%.cpp.o: ZamAudio/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<" @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 modelADSR modelBefacoADSR
#define modelMixer modelBefacoMixer #define modelMixer modelBefacoMixer
#define modelBurst modelBefacoBurst #define modelBurst modelBefacoBurst
#define modelMixer2 modelBefacoMixer2
#define modelSlew modelBefacoSlew
#include "Befaco/src/plugin.hpp" #include "Befaco/src/plugin.hpp"
#undef modelADSR #undef modelADSR
#undef modelMixer #undef modelMixer
#undef modelBurst #undef modelBurst
#undef modelMixer2
#undef modelSlew


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


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


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


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


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


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


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


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

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


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

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


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


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


// NOTE disabled in Cardinal due to MIDI usage // NOTE disabled in Cardinal due to MIDI usage
spl.removeModule("MidiThingV2"); spl.removeModule("MidiThingV2");
@@ -2024,6 +2060,7 @@ static void initStatic__CVfunk()
if (spl.ok()) if (spl.ok())
{ {
#define modelSteps modelCVfunkSteps #define modelSteps modelCVfunkSteps
#define modelNode modelCVfunkNode
p->addModel(modelSteps); p->addModel(modelSteps);
p->addModel(modelEnvelopeArray); p->addModel(modelEnvelopeArray);
p->addModel(modelPentaSequencer); p->addModel(modelPentaSequencer);
@@ -2044,7 +2081,17 @@ static void initStatic__CVfunk()
p->addModel(modelStepWave); p->addModel(modelStepWave);
p->addModel(modelPreeeeeeeeeeessedDuck); p->addModel(modelPreeeeeeeeeeessedDuck);
p->addModel(modelArrange); 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 #undef modelSteps
} }
} }
@@ -2127,27 +2174,19 @@ static void initStatic__DHE()
} }
} }


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


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


@@ -2578,6 +2625,7 @@ static void initStatic__kocmoc()
p->addModel(modelTRG); p->addModel(modelTRG);
p->addModel(modelLADR); p->addModel(modelLADR);
p->addModel(modeluLADR); p->addModel(modeluLADR);
p->addModel(modelDIOD);
p->addModel(modelOP); p->addModel(modelOP);
p->addModel(modelPHASR); p->addModel(modelPHASR);
p->addModel(modelMUL); p->addModel(modelMUL);
@@ -3173,7 +3221,11 @@ static void initStatic__Sapphire()
if (spl.ok()) if (spl.ok())
{ {
p->addModel(modelSapphireChaops); p->addModel(modelSapphireChaops);
p->addModel(modelSapphireEcho);
p->addModel(modelSapphireEchoOut);
p->addModel(modelSapphireEchoTap);
p->addModel(modelSapphireElastika); p->addModel(modelSapphireElastika);
p->addModel(modelSapphireEnv);
p->addModel(modelSapphireFrolic); p->addModel(modelSapphireFrolic);
p->addModel(modelSapphireGalaxy); p->addModel(modelSapphireGalaxy);
p->addModel(modelSapphireGlee); p->addModel(modelSapphireGlee);
@@ -3192,6 +3244,7 @@ static void initStatic__Sapphire()
p->addModel(modelSapphireTout); p->addModel(modelSapphireTout);
p->addModel(modelSapphireTricorder); p->addModel(modelSapphireTricorder);
p->addModel(modelSapphireTubeUnit); 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() static void initStatic__Voxglitch()
{ {
Plugin* p = new Plugin; 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() static void initStatic__ZetaCarinaeModules()
{ {
Plugin* p = new Plugin; Plugin* p = new Plugin;
@@ -3565,7 +3718,7 @@ void initStaticPlugins()
initStatic__CVfunk(); initStatic__CVfunk();
initStatic__dBiz(); initStatic__dBiz();
initStatic__DHE(); initStatic__DHE();
initStatic__DrumKit();
initStatic__eightfold();
initStatic__EnigmaCurry(); initStatic__EnigmaCurry();
initStatic__ESeries(); initStatic__ESeries();
initStatic__ExpertSleepersEncoders(); initStatic__ExpertSleepersEncoders();
@@ -3615,8 +3768,10 @@ void initStaticPlugins()
initStatic__surgext(); initStatic__surgext();
initStatic__unless_modules(); initStatic__unless_modules();
initStatic__ValleyAudio(); initStatic__ValleyAudio();
initStatic__Venom();
initStatic__Voxglitch(); initStatic__Voxglitch();
initStatic__WhatTheRack(); initStatic__WhatTheRack();
initStatic__WSTD_Drums();
initStatic__ZetaCarinaeModules(); initStatic__ZetaCarinaeModules();
initStatic__ZZC(); initStatic__ZZC();




+ 6
- 52
src/CardinalCommon.cpp View File

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Cardinal Plugin * 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 * 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 = "25.12";


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


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


if (asset::userDir.empty()) 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) if (isRealInstance)
{ {
@@ -683,17 +643,10 @@ Initializer::Initializer(const CardinalBasePlugin* const plugin, const CardinalB
#ifndef CARDINAL_COMMON_DSP_ONLY #ifndef CARDINAL_COMMON_DSP_ONLY
if (asset::configDir.empty()) 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) if (isRealInstance)
system::createDirectory(asset::configDir); system::createDirectory(asset::configDir);
#endif
} }
#endif #endif
@@ -875,7 +828,8 @@ void Initializer::stopRemoteServer()
lo_server_thread_stop(oscServerThread); lo_server_thread_stop(oscServerThread);
lo_server_thread_del_method(oscServerThread, nullptr, nullptr); lo_server_thread_del_method(oscServerThread, nullptr, nullptr);
lo_server_thread_free(oscServerThread); lo_server_thread_free(oscServerThread);
oscServerThread = oscServer = nullptr;
oscServerThread = nullptr;
oscServer = nullptr;
} }
#else #else
if (oscServer != nullptr) if (oscServer != nullptr)


+ 2
- 2
src/CardinalPlugin.cpp View File

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Cardinal Plugin * 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 * SPDX-License-Identifier: GPL-3.0-or-later
*/ */
@@ -414,7 +414,7 @@ protected:
uint32_t getVersion() const override uint32_t getVersion() const override
{ {
return d_version(0, 24, 12);
return d_version(0, 25, 12);
} }
int64_t getUniqueId() const override int64_t getUniqueId() const override


+ 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/debussy
SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/goldberg SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/goldberg
SYMLINKED_DIRS_RESOURCES += cf/playeroscs SYMLINKED_DIRS_RESOURCES += cf/playeroscs
SYMLINKED_DIRS_RESOURCES += DrumKit/res/samples
SYMLINKED_DIRS_RESOURCES += Fundamental/presets SYMLINKED_DIRS_RESOURCES += Fundamental/presets
SYMLINKED_DIRS_RESOURCES += GrandeModular/presets SYMLINKED_DIRS_RESOURCES += GrandeModular/presets
SYMLINKED_DIRS_RESOURCES += LyraeModules/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/build/surge-data/wavetables
SYMLINKED_DIRS_RESOURCES += surgext/patches SYMLINKED_DIRS_RESOURCES += surgext/patches
SYMLINKED_DIRS_RESOURCES += surgext/presets 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)) LINK_FLAGS += $(foreach d,$(SYMLINKED_DIRS_RESOURCES),--preload-file=../../bin/CardinalNative.lv2/resources/$(d)@/resources/$(d))
endif endif
LINK_FLAGS += -sALLOW_MEMORY_GROWTH LINK_FLAGS += -sALLOW_MEMORY_GROWTH


+ 0
- 14
src/CardinalUI.cpp View File

@@ -1259,20 +1259,6 @@ protected:
#endif #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: private:
/** /**
Set our UI class as non-copyable and add a leak detector just in case. 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 CardinalFX $(CARDINAL_SYNTH_ARGS)
$(MAKE) au -C CardinalSynth $(CARDINAL_SYNTH_ARGS) $(MAKE) au -C CardinalSynth $(CARDINAL_SYNTH_ARGS)


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

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


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

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


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


USE_VST2_BUNDLE = true 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 += BaconPlugs/res/midi/goldberg
SYMLINKED_DIRS_RESOURCES += cf/playeroscs SYMLINKED_DIRS_RESOURCES += cf/playeroscs
SYMLINKED_DIRS_RESOURCES += DHE-Modules/svg SYMLINKED_DIRS_RESOURCES += DHE-Modules/svg
SYMLINKED_DIRS_RESOURCES += DrumKit/res/samples
SYMLINKED_DIRS_RESOURCES += GrandeModular/presets SYMLINKED_DIRS_RESOURCES += GrandeModular/presets
SYMLINKED_DIRS_RESOURCES += LyraeModules/presets SYMLINKED_DIRS_RESOURCES += LyraeModules/presets
SYMLINKED_DIRS_RESOURCES += Meander/res SYMLINKED_DIRS_RESOURCES += Meander/res
@@ -332,6 +332,7 @@ SYMLINKED_DIRS_RESOURCES += Orbits/presets
SYMLINKED_DIRS_RESOURCES += stoermelder-packone/presets SYMLINKED_DIRS_RESOURCES += stoermelder-packone/presets
SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/fx_presets SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/fx_presets
SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/wavetables SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/wavetables
SYMLINKED_DIRS_RESOURCES += WSTD-Drums/res/samples
endif endif
LINK_FLAGS += $(foreach d,$(SYMLINKED_DIRS_RESOURCES),--preload-file=../../bin/CardinalNative.lv2/resources/$(d)@/resources/$(d)) 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)"' 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 # Enable all possible plugin types and setup resources




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

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Cardinal Plugin * 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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * 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 GLFWcursor* glfwCreateStandardCursor(int) { return nullptr; }
GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor*) {} GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor*) {}
GLFWAPI const char* glfwGetKeyName(int, int) { return nullptr; } GLFWAPI const char* glfwGetKeyName(int, int) { return nullptr; }
GLFWAPI int glfwGetKey(GLFWwindow*, int) { return 0; }
GLFWAPI int glfwGetKeyScancode(int) { return 0; } GLFWAPI int glfwGetKeyScancode(int) { return 0; }
GLFWAPI double glfwGetTime(void) { return 0.0; } GLFWAPI double glfwGetTime(void) { return 0.0; }




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

@@ -54,7 +54,6 @@ enum DarkMode {
kModeCf, kModeCf,
kModeComputerscare, kModeComputerscare,
kModeDHE, kModeDHE,
kModeDrumKit,
kModeESeries, kModeESeries,
kModeLilacLoop, kModeLilacLoop,
kModeLittleUtils, kModeLittleUtils,
@@ -258,19 +257,6 @@ static const struct {
{ kModeDHE, "/DHE-Modules/svg/truth-4.svg", {}, -1 }, { kModeDHE, "/DHE-Modules/svg/truth-4.svg", {}, -1 },
{ kModeDHE, "/DHE-Modules/svg/upstage.svg", {}, -1 }, { kModeDHE, "/DHE-Modules/svg/upstage.svg", {}, -1 },
{ kModeDHE, "/DHE-Modules/svg/xycloid.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 // Custom, runtime dark mode used with permission
{ kModeESeries,"/ESeries/res/E340.svg", {}, -1 }, { kModeESeries,"/ESeries/res/E340.svg", {}, -1 },
// GPL3.0-or-later // GPL3.0-or-later
@@ -284,6 +270,7 @@ static const struct {
{ kModeLittleUtils, "/LittleUtils/res/TeleportOut.svg", {}, -1 }, { kModeLittleUtils, "/LittleUtils/res/TeleportOut.svg", {}, -1 },
// GPL-3.0-or-later // GPL-3.0-or-later
{ kModeKocmoc, "/kocmoc/res/DDLY.svg", {}, -1 }, { kModeKocmoc, "/kocmoc/res/DDLY.svg", {}, -1 },
{ kModeKocmoc, "/kocmoc/res/DIOD.svg", {}, -1 },
{ kModeKocmoc, "/kocmoc/res/LADR.svg", {}, -1 }, { kModeKocmoc, "/kocmoc/res/LADR.svg", {}, -1 },
{ kModeKocmoc, "/kocmoc/res/uLADR.svg", {}, -1 }, { kModeKocmoc, "/kocmoc/res/uLADR.svg", {}, -1 },
{ kModeKocmoc, "/kocmoc/res/MUL.svg", {}, -1 }, { kModeKocmoc, "/kocmoc/res/MUL.svg", {}, -1 },
@@ -373,6 +360,7 @@ enum LightMode {
kModePrism, kModePrism,
kModeRepelzen, kModeRepelzen,
kModeSonusmodular, kModeSonusmodular,
kModeWSTDDrums,
}; };


static const struct { static const struct {
@@ -435,6 +423,11 @@ static const struct {
{ kModeBefaco, "/Befaco/res/panels/Octaves.svg" }, { kModeBefaco, "/Befaco/res/panels/Octaves.svg" },
{ kModeBefaco, "/Befaco/res/panels/Bypass.svg" }, { kModeBefaco, "/Befaco/res/panels/Bypass.svg" },
{ kModeBefaco, "/Befaco/res/panels/Bandit.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+ // GPLv3+
{ kModeCardinal, "/Cardinal/res/AudioFile.svg" }, { kModeCardinal, "/Cardinal/res/AudioFile.svg" },
{ kModeCardinal, "/Cardinal/res/AudioToCVPitch.svg" }, { kModeCardinal, "/Cardinal/res/AudioToCVPitch.svg" },
@@ -588,6 +581,20 @@ static const struct {
{ kModeSonusmodular, "/sonusmodular/res/tropicana.svg" }, { kModeSonusmodular, "/sonusmodular/res/tropicana.svg" },
{ kModeSonusmodular, "/sonusmodular/res/twoff.svg" }, { kModeSonusmodular, "/sonusmodular/res/twoff.svg" },
{ kModeSonusmodular, "/sonusmodular/res/yabp.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 static inline
@@ -624,12 +631,6 @@ bool invertPaintForDarkMode(const DarkMode mode, NSVGshape* const shape, NSVGpai
{ {
switch (mode) 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 // Special case for PathSet shifty gradient
case kModePathSet: case kModePathSet:
paint.gradient->stops[0].color = 0xff7c4919; // 50% darker than main blue 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 * 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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -17,6 +17,7 @@


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


#include <GLFW/glfw3.h> #include <GLFW/glfw3.h>


@@ -207,3 +208,12 @@ GLFWAPI const char* glfwGetKeyName(const int key, int)
default: return nullptr; 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 * 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 * SPDX-License-Identifier: GPL-3.0-or-later
*/ */


@@ -207,20 +207,23 @@ void Scene::step() {
(internal->historyActionIndex != actionIndex (internal->historyActionIndex != actionIndex
&& actionIndex > 0 && actionIndex > 0
&& time - internal->lastSceneChangeTime >= 1.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); 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; 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"}, {"AudibleInstrumentsPreview", "AudibleInstruments"},
{"SequelSequencers", "DanielDavies"}, {"SequelSequencers", "DanielDavies"},
{"DelexanderVol1", "DelexandraVol1"}, {"DelexanderVol1", "DelexandraVol1"},
{"DrumKit", "WSTD-Drums"}
// {"", ""}, // {"", ""},
}; };


@@ -102,6 +103,18 @@ static const std::map<PluginModuleSlug, PluginModuleSlug> moduleSlugFallbacks =
{{"Core", "Notes"}, {"Cardinal", "TextEditor"}}, {{"Core", "Notes"}, {"Cardinal", "TextEditor"}},
{{"Core", "Blank"}, {"Cardinal", "Blank"}}, {{"Core", "Blank"}, {"Cardinal", "Blank"}},
{{"MindMeld-ShapeMasterPro", "ShapeMasterPro"}, {"MindMeldModular", "ShapeMaster"}}, {{"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> <key>CFBundleIdentifier</key>
<string>studio.kx.distrho.cardinal.jack</string> <string>studio.kx.distrho.cardinal.jack</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>24.12</string>
<string>25.12</string>
<key>LSMinimumSystemVersion</key> <key>LSMinimumSystemVersion</key>
<string>10.15</string> <string>10.15</string>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>(C) 2011-2024 Filipe Coelho.
<string>(C) 2011-2025 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> 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> <key>NSHighResolutionCapable</key>
<true/> <true/>


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

@@ -11,11 +11,11 @@
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>studio.kx.distrho.cardinal.native</string> <string>studio.kx.distrho.cardinal.native</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>24.12</string>
<string>25.12</string>
<key>LSMinimumSystemVersion</key> <key>LSMinimumSystemVersion</key>
<string>10.15</string> <string>10.15</string>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>(C) 2011-2024 Filipe Coelho.
<string>(C) 2011-2025 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> 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> <key>NSHighResolutionCapable</key>
<true/> <true/>


Loading…
Cancel
Save