| @@ -5,7 +5,7 @@ body: | |||||
| id: version | id: version | ||||
| attributes: | attributes: | ||||
| label: Version | label: Version | ||||
| value: "25.06" | |||||
| value: "25.10" | |||||
| validations: | validations: | ||||
| required: true | required: true | ||||
| - type: dropdown | - type: dropdown | ||||
| @@ -180,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: | | ||||
| @@ -425,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 | ||||
| @@ -263,3 +263,6 @@ | |||||
| [submodule "plugins/eightfold"] | [submodule "plugins/eightfold"] | ||||
| path = plugins/eightfold | path = plugins/eightfold | ||||
| url = https://github.com/scanner-darkly/eightfold.git | url = https://github.com/scanner-darkly/eightfold.git | ||||
| [submodule "plugins/Venom"] | |||||
| path = plugins/Venom | |||||
| url = https://github.com/DaveBenham/VenomModules | |||||
| @@ -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 = 25.06 | |||||
| VERSION = 25.10 | |||||
| # -------------------------------------------------------------- | |||||
| # --------------------------------------------------------------------------------------------------------------------- | |||||
| # 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) | ||||
| @@ -196,6 +196,7 @@ 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) | - [WSTD-Drums](https://github.com/Wasted-Audio/WSTD-Drums) | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit c9b60551497a7a9b76d86d694b6af08afe96335c | |||||
| Subproject commit 1d8dcb5aab5e0c30352e9f928ce3e40cbc86a439 | |||||
| @@ -90,6 +90,7 @@ 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 | | | | WSTD-Drums | CC0-1.0 | | | ||||
| | WhatTheRack | WTFPL | | | | WhatTheRack | WTFPL | | | ||||
| @@ -266,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 | | | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit 8c30f9f1eddba89805f4131aeb2d6ca3e31a46b1 | |||||
| Subproject commit 04eb91490c70a0c3f524e473087e263d8a9d550f | |||||
| @@ -1 +1 @@ | |||||
| Subproject commit a116e6b18ac05974a23509cc47adfd86e8406385 | |||||
| Subproject commit 51f2b4e61cde7978fb84cdd892a1d3aaedc0ff5b | |||||
| @@ -192,15 +192,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", | ||||
| @@ -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) | ||||
| @@ -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 | ||||
| @@ -810,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) | ||||
| @@ -1310,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 | ||||
| @@ -2821,6 +2820,15 @@ $(BUILD_DIR)/ValleyAudio/%.cpp.o: ValleyAudio/%.cpp | |||||
| -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 $<" | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit e2bcefcaa7753f017cd131a28aae0e5e346aafec | |||||
| Subproject commit ef10da4e2578162b2db2f6534857d6504491daf4 | |||||
| @@ -0,0 +1 @@ | |||||
| Subproject commit 1dc0e0612b75fcf4849f28cb6e569e3b6f13981a | |||||
| @@ -343,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" | ||||
| @@ -892,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" | ||||
| @@ -1011,6 +1020,7 @@ 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; | extern Plugin* pluginInstance__WSTD_Drums; | ||||
| @@ -1147,12 +1157,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 | ||||
| @@ -1164,11 +1174,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 | ||||
| @@ -2048,6 +2053,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); | ||||
| @@ -2069,6 +2075,16 @@ static void initStatic__CVfunk() | |||||
| 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 | ||||
| } | } | ||||
| } | } | ||||
| @@ -2578,7 +2594,7 @@ 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"); | ||||
| @@ -3221,6 +3237,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); | |||||
| } | } | ||||
| } | } | ||||
| @@ -3469,6 +3486,81 @@ 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(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; | ||||
| @@ -3669,6 +3761,7 @@ 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__WSTD_Drums(); | ||||
| @@ -99,7 +99,7 @@ void destroyStaticPlugins(); | |||||
| } | } | ||||
| } | } | ||||
| const std::string CARDINAL_VERSION = "25.06"; | |||||
| const std::string CARDINAL_VERSION = "25.10"; | |||||
| // ----------------------------------------------------------------------------------------------------------- | // ----------------------------------------------------------------------------------------------------------- | ||||
| @@ -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) | ||||
| @@ -414,7 +414,7 @@ protected: | |||||
| uint32_t getVersion() const override | uint32_t getVersion() const override | ||||
| { | { | ||||
| return d_version(0, 25, 6); | |||||
| return d_version(0, 25, 10); | |||||
| } | } | ||||
| int64_t getUniqueId() const override | int64_t getUniqueId() const override | ||||
| @@ -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. | ||||
| @@ -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) | ||||
| @@ -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 | ||||
| @@ -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 | ||||
| @@ -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; } | ||||
| @@ -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; | |||||
| } | |||||
| @@ -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; | ||||
| @@ -11,7 +11,7 @@ | |||||
| <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>25.06</string> | |||||
| <string>25.10</string> | |||||
| <key>LSMinimumSystemVersion</key> | <key>LSMinimumSystemVersion</key> | ||||
| <string>10.15</string> | <string>10.15</string> | ||||
| <key>NSHumanReadableCopyright</key> | <key>NSHumanReadableCopyright</key> | ||||
| @@ -11,7 +11,7 @@ | |||||
| <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>25.06</string> | |||||
| <string>25.10</string> | |||||
| <key>LSMinimumSystemVersion</key> | <key>LSMinimumSystemVersion</key> | ||||
| <string>10.15</string> | <string>10.15</string> | ||||
| <key>NSHumanReadableCopyright</key> | <key>NSHumanReadableCopyright</key> | ||||