diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml index 21d67a5..0511b12 100644 --- a/.github/ISSUE_TEMPLATE/bug.yaml +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -5,7 +5,7 @@ body: id: version attributes: label: Version - value: "24.04" + value: "24.05" validations: required: true - type: dropdown diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 71bec68..30750c4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -504,6 +504,7 @@ jobs: - name: Build linux (LTO) run: | make features + make WITH_LTO=true -j $(nproc) mini make WITH_LTO=true -j $(nproc) native sysdeps: diff --git a/.gitmodules b/.gitmodules index 577b352..7d9b38a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -248,3 +248,9 @@ [submodule "plugins/PdArray"] path = plugins/PdArray url = https://github.com/mgunyho/PdArray.git +[submodule "deps/JUCE"] + path = deps/JUCE + url = https://github.com/CardinalModules/JUCE.git +[submodule "plugins/rcm-modules"] + path = plugins/rcm-modules + url = https://github.com/Rcomian/rcm-modules.git diff --git a/Makefile b/Makefile index 6acfa09..b128c43 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ include $(ROOT)/Makefile.base.mk # src/CardinalPlugin.cpp `getVersion` # utils/macOS/Info_{JACK,Native}.plist # .github/ISSUE_TEMPLATE/bug.yaml src/CardinalCommon.cpp src/CardinalPlugin.cpp utils/macOS/Info_{JACK,Native}.plist -VERSION = 24.04 +VERSION = 24.05 # -------------------------------------------------------------- # Build targets @@ -192,6 +192,12 @@ plugins: deps resources: $(MAKE) resources -C plugins +mini-plugins: deps + $(MAKE) mini -C plugins + +mini-resources: + $(MAKE) mini-resources -C plugins + ifneq ($(CROSS_COMPILING),true) gen: cardinal resources dpf/utils/lv2_ttl_generator @$(CURDIR)/dpf/utils/generate-ttl.sh @@ -211,9 +217,12 @@ jack: carla deps dgl plugins resources native: carla deps dgl plugins resources $(MAKE) native -C src $(CARLA_EXTRA_ARGS) -mini: carla deps dgl plugins resources +mini: carla deps dgl mini-plugins mini-resources $(MAKE) mini -C src $(CARLA_EXTRA_ARGS) +au: carla deps dgl plugins resources + $(MAKE) au -C src $(CARLA_EXTRA_ARGS) + clap: carla deps dgl plugins resources $(MAKE) clap -C src $(CARLA_EXTRA_ARGS) diff --git a/Makefile.base.mk b/Makefile.base.mk index e7e468f..de5ee3a 100644 --- a/Makefile.base.mk +++ b/Makefile.base.mk @@ -21,6 +21,7 @@ export DISTRHO_NAMESPACE = CardinalDISTRHO export DGL_NAMESPACE = CardinalDGL export NVG_DISABLE_SKIPPING_WHITESPACE = true export NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST +export USE_FILE_BROWSER = true export USE_NANOVG_FBO = true export WASM_EXCEPTIONS = true export WINDOWS_ICON_ID = 401 @@ -33,6 +34,7 @@ DGL_EXTRA_ARGS = \ DGL_NAMESPACE=$(DGL_NAMESPACE) \ NVG_DISABLE_SKIPPING_WHITESPACE=$(NVG_DISABLE_SKIPPING_WHITESPACE) \ NVG_FONT_TEXTURE_FLAGS=$(NVG_FONT_TEXTURE_FLAGS) \ + USE_FILE_BROWSER=$(USE_FILE_BROWSER) \ USE_NANOVG_FBO=$(USE_NANOVG_FBO) \ WASM_EXCEPTIONS=$(WASM_EXCEPTIONS) \ WINDOWS_ICON_ID=$(WINDOWS_ICON_ID) \ diff --git a/README.md b/README.md index da1eb25..718db52 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ At the moment the following 3rd-party modules are provided: - [Bacon Music](https://github.com/baconpaul/BaconPlugs) - [Befaco](https://github.com/VCVRack/Befaco) - [Bidoo](https://github.com/sebastien-bouffier/Bidoo) +- [Biset](https://github.com/gibbonjoyeux/VCV-Biset) - [Bogaudio](https://github.com/bogaudio/BogaudioModules) - [Catro/Modulo](https://github.com/catronomix/catro-modulo) - [cf](https://github.com/cfoulc/cf) @@ -182,6 +183,7 @@ At the moment the following 3rd-party modules are provided: - [PinkTrombone](https://github.com/VegaDeftwing/PinkTromboneVCV) - [Prism](https://github.com/SteveRussell33/Prism) - [rackwindows](https://github.com/n0jo/rackwindows) +- [RCM](https://github.com/Rcomian/rcm-modules/) - [RebelTech](https://github.com/hemmer/rebel-tech-vcv) - [repelzen](https://github.com/wiqid/repelzen) - [Sapphire](https://github.com/cosinekitty/sapphire) diff --git a/carla b/carla index 3c7d0e7..c37d53a 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 3c7d0e7b914d38a32b733cc5ced0b5696d2f9a03 +Subproject commit c37d53a4216654118e711fa41e88e7e801d5bd9b diff --git a/deps/JUCE b/deps/JUCE new file mode 160000 index 0000000..4aaa2a7 --- /dev/null +++ b/deps/JUCE @@ -0,0 +1 @@ +Subproject commit 4aaa2a7f4c83bd9807070825fbccd9d6d582e34d diff --git a/deps/Makefile b/deps/Makefile index a5bd941..6e985d4 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -266,8 +266,8 @@ ifeq ($(CPU_I386),true) SURGE_CXX_FLAGS += -D__sigemptyset=sigemptyset endif -# use custom JUCE from DISTRHO and Carla -SURGE_CXX_FLAGS += -I$(abspath ../carla/source/modules) +# use custom JUCE +SURGE_CXX_FLAGS += -I$(abspath ../deps/JUCE/modules) # possibly use fftw? # ifeq ($(shell $(PKG_CONFIG) --exists fftw3 fftw3f && echo true),true) @@ -298,7 +298,7 @@ $(SURGE_DEP_PATH)/Makefile: $(SURGE_SRC_PATH)/CMakeLists.txt -DSURGE_SKIP_JUCE_FOR_RACK=TRUE \ -DSURGE_SKIP_LUA=TRUE \ -DSURGE_SKIP_ODDSOUND_MTS=TRUE \ - -DSURGE_JUCE_PATH=$(abspath ../carla/source) \ + -DSURGE_JUCE_PATH=$(abspath ../deps/JUCE) \ -DSURGE_SIMDE_PATH=$(abspath ../src/Rack/dep/simde) \ $(SURGE_SRC_PATH) diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 01641de..d2b048f 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -77,6 +77,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | PinkTrombone | GPL-3.0-or-later | | | Prism | BSD-3-Clause | | | Rackwindows | MIT | | +| RCM | GPL-2.0-or-later | | | repelzen | GPL-3.0-or-later | | | RebelTech | GPL-2.0-or-later | | | Sapphire | GPL-3.0-or-later | | @@ -240,6 +241,7 @@ Below is a list of artwork licenses from plugins | Prism/* | CC-BY-SA-4.0 | | | Prism/RobotoCondensed-Regular.ttf | Apache-2.0 | | | Rackwindows/* | MIT | [Same license as source code](https://github.com/n0jo/rackwindows/issues/15) | +| RCM/* | GPL-2.0-or-later | No artwork specific license provided | | repelzen/* | CC-BY-SA-4.0 | | | RebelTech/* | CC-BY-NC-4.0 | | | Sapphire/* | GPL-3.0-or-later | No artwork specific license provided | diff --git a/dpf b/dpf index 01aca76..8f10cdc 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 01aca7649c1a3a5ee20a47c5ecd3cb2e29395f89 +Subproject commit 8f10cdc4f11a256f597fc39a7ac6de38a28cef57 diff --git a/include/plugincontext.hpp b/include/plugincontext.hpp index 74def30..661b31d 100644 --- a/include/plugincontext.hpp +++ b/include/plugincontext.hpp @@ -89,16 +89,12 @@ struct CardinalPluginContext : rack::Context { const CardinalDISTRHO::MidiEvent* midiEvents; uint32_t midiEventCount; CardinalDISTRHO::Plugin* const plugin; - #ifndef HEADLESS CardinalDGL::NanoTopLevelWidget* tlw; CardinalDISTRHO::UI* ui; - #endif CardinalPluginContext(CardinalDISTRHO::Plugin* const p); void writeMidiMessage(const rack::midi::Message& message, uint8_t channel); - #ifndef HEADLESS bool addIdleCallback(IdleCallback* cb) const; void removeIdleCallback(IdleCallback* cb) const; - #endif }; #ifndef HEADLESS diff --git a/plugins/Cardinal/src/AIDA-X.cpp b/plugins/Cardinal/src/AIDA-X.cpp index 1c9f889..af1dc7a 100644 --- a/plugins/Cardinal/src/AIDA-X.cpp +++ b/plugins/Cardinal/src/AIDA-X.cpp @@ -439,6 +439,7 @@ struct AidaPluginModule : Module { model = newmodel.release(); // if processing, wait for process cycle to complete + using DISTRHO_NAMESPACE::d_msleep; while (oldmodel != nullptr && activeModel.load()) d_msleep(1); diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 9ed7212..98f568e 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -629,11 +629,11 @@ struct IldaeilModule : Module { CarlaEngine* const engine = carla_get_engine_from_handle(fCarlaHostHandle); - water::XmlDocument xml(projectState); + water::XmlDocument xmlState{water::String(projectState)}; { const MutexLocker cml(sPluginInfoLoadMutex); - engine->loadProjectInternal(xml, true); + engine->loadProjectInternal(xmlState, true); } projectLoadedFromDSP(fUI); @@ -1664,7 +1664,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Runner { // save plugin info into cache if (sha1sum != nullptr) { - const water::String configDir(asset::config("Ildaeil")); + const String configDir(asset::config("Ildaeil").c_str()); const water::File cacheFile(configDir + CARLA_OS_SEP_STR "cache" CARLA_OS_SEP_STR + sha1sum); if (cacheFile.create().ok()) @@ -1755,7 +1755,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Runner { if (sha1sum == nullptr) return false; - const water::String configDir(asset::config("Ildaeil")); + const String configDir(asset::config("Ildaeil").c_str()); const water::File cacheFile(configDir + CARLA_OS_SEP_STR "cache" CARLA_OS_SEP_STR + sha1sum); if (cacheFile.existsAsFile()) diff --git a/plugins/Makefile b/plugins/Makefile index 8719cc1..9bcbbcc 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -1002,6 +1002,16 @@ PRISM_CUSTOM = bogaudio Scale PLUGIN_FILES += $(filter-out rackwindows/src/plugin.cpp,$(wildcard rackwindows/src/*.cpp)) +# -------------------------------------------------------------- +# RCM + +PLUGIN_FILES += $(filter-out rcm-modules/src/plugin.cpp,$(wildcard rcm-modules/src/*.cpp)) +PLUGIN_FILES += $(wildcard rcm-modules/src/*.c) +PLUGIN_FILES += $(wildcard rcm-modules/src/PianoRoll/*.cpp) + +# modules/types which are present in other plugins +RCM_CUSTOM = Transport + # -------------------------------------------------------------- # RebelTech @@ -1405,6 +1415,11 @@ ifneq ($(HEADLESS),true) $(MAKE) HEADLESS=true plugins-mini-headless.a endif +mini: plugins-mini$(TARGET_SUFFIX).a +ifneq ($(HEADLESS),true) + $(MAKE) HEADLESS=true plugins-mini-headless.a +endif + clean: rm -f *.a rm -rf $(BUILD_DIR) @@ -1691,6 +1706,7 @@ MINIRESOURCE_FILES += surgext/res/xt/dark/components/knob-pointer-14.svg MINIRESOURCE_FILES += surgext/res/xt/dark/components/knob-pointer-16.svg MINIRESOURCE_FILES += surgext/res/xt/dark/components/mod-button.svg MINIRESOURCE_FILES += surgext/res/xt/dark/components/port.svg +MINIRESOURCE_FILES += surgext/res/xt/dark/panels/fx/BlankNoDisplay.svg MINIRESOURCE_FILES += surgext/res/xt/dark/panels/other/EGLFO.svg MINIRESOURCE_FILES += surgext/res/xt/dark/panels/other/Matrix.svg MINIRESOURCE_FILES += surgext/res/xt/dark/panels/other/Mixer.svg @@ -1793,31 +1809,37 @@ MINIRESOURCE_FILES += surgext/res/xt/glyphs/lt_7.svg # MOD builds only have LV2 main and FX variant ifeq ($(MOD_BUILD),true) -LV2_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) +MINI_RESOURCES = $(MINIPLUGIN_LIST:%=../bin/CardinalMini.lv2/resources/PluginManifests/%.json) +MINI_RESOURCES += $(MINIRESOURCE_FILES:%=../bin/CardinalMini.lv2/resources/%) + +LV2_RESOURCES = $(MINI_RESOURCES) +LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalFX.lv2/resources/PluginManifests/%.json) -LV2_RESOURCES += $(MINIPLUGIN_LIST:%=../bin/CardinalMini.lv2/resources/PluginManifests/%.json) LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/Cardinal.lv2/resources/%) LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalFX.lv2/resources/%) -LV2_RESOURCES += $(MINIRESOURCE_FILES:%=../bin/CardinalMini.lv2/resources/%) # MOD builds only have LV2 FX variant for now else ifeq ($(WASM),true) -LV2_RESOURCES = $(PLUGIN_LIST:%=../bin/CardinalNative.lv2/resources/PluginManifests/%.json) -LV2_RESOURCES += $(MINIPLUGIN_LIST:%=../bin/CardinalMini.lv2/resources/PluginManifests/%.json) +MINI_RESOURCES = $(MINIPLUGIN_LIST:%=../bin/CardinalMini.lv2/resources/PluginManifests/%.json) +MINI_RESOURCES += $(MINIRESOURCE_FILES:%=../bin/CardinalMini.lv2/resources/%) + +LV2_RESOURCES = $(MINI_RESOURCES) +LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalNative.lv2/resources/PluginManifests/%.json) LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalNative.lv2/resources/%) -LV2_RESOURCES += $(MINIRESOURCE_FILES:%=../bin/CardinalMini.lv2/resources/%) else -LV2_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) -LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalFX.lv2/resources/PluginManifests/%.json) LV2_RESOURCES += $(MINIPLUGIN_LIST:%=../bin/CardinalMini.lv2/resources/PluginManifests/%.json) +LV2_RESOURCES += $(MINIRESOURCE_FILES:%=../bin/CardinalMini.lv2/resources/%) + +LV2_RESOURCES = $(MINI_RESOURCES) +LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) +LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalFX.lv2/resources/PluginManifests/%.json) LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalSynth.lv2/resources/PluginManifests/%.json) LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/Cardinal.lv2/resources/%) LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalFX.lv2/resources/%) LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalSynth.lv2/resources/%) -LV2_RESOURCES += $(MINIRESOURCE_FILES:%=../bin/CardinalMini.lv2/resources/%) ifeq ($(MACOS),true) VST2_RESOURCES = $(PLUGIN_LIST:%=../bin/CardinalFX.vst/Contents/Resources/PluginManifests/%.json) @@ -1848,6 +1870,8 @@ endif resources: $(JACK_RESOURCES) $(LV2_RESOURCES) $(VST2_RESOURCES) $(VST3_RESOURCES) $(CLAP_RESOURCES) +mini-resources: $(MINI_RESOURCES) + ../bin/Cardinal.lv2/resources/%: % -@mkdir -p "$(shell dirname $@)" $(SILENT)ln -sf $(abspath $<) $@ @@ -2667,6 +2691,19 @@ $(BUILD_DIR)/rackwindows/%.cpp.o: rackwindows/%.cpp -Wno-implicit-fallthrough \ -Wno-sign-compare +$(BUILD_DIR)/rcm-modules/%.c.o: rcm-modules/%.c + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CC) $< $(BUILD_C_FLAGS) -c -o $@ \ + $(foreach m,$(RCM_CUSTOM),$(call custom_module_names,$(m),RCM)) + +$(BUILD_DIR)/rcm-modules/%.cpp.o: rcm-modules/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(RCM_CUSTOM),$(call custom_module_names,$(m),RCM)) \ + -DpluginInstance=pluginInstance__RCM + $(BUILD_DIR)/RebelTech/%.cpp.o: RebelTech/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/plugins-mini.cpp b/plugins/plugins-mini.cpp index c6f45f8..fadda3c 100644 --- a/plugins/plugins-mini.cpp +++ b/plugins/plugins-mini.cpp @@ -575,6 +575,7 @@ static void initStatic__surgext() spl.removeModule("SurgeXTDigitalRingMod"); spl.removeModule("SurgeXTVCF"); + p->addModel(modelFXNimbus); spl.removeModule("SurgeXTFXBonsai"); spl.removeModule("SurgeXTFXChorus"); spl.removeModule("SurgeXTFXChow"); @@ -586,7 +587,6 @@ static void initStatic__surgext() spl.removeModule("SurgeXTFXFlanger"); spl.removeModule("SurgeXTFXFrequencyShifter"); spl.removeModule("SurgeXTFXNeuron"); - spl.removeModule("SurgeXTFXNimbus"); spl.removeModule("SurgeXTFXPhaser"); spl.removeModule("SurgeXTFXResonator"); spl.removeModule("SurgeXTFXReverb"); diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 5caa03b..8950bf3 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -796,6 +796,9 @@ extern Model* modelBlankPanel; // rackwindows #include "rackwindows/src/plugin.hpp" +// RCM +#include "rcm-modules/src/plugin.hpp" + // RebelTech #define BefacoInputPort BefacoInputPortRebelTech #define BefacoOutputPort BefacoOutputPortRebelTech @@ -961,6 +964,7 @@ Plugin* pluginInstance__PdArray; Plugin* pluginInstance__PinkTrombone; Plugin* pluginInstance__Prism; Plugin* pluginInstance__rackwindows; +Plugin* pluginInstance__RCM; Plugin* pluginInstance__RebelTech; Plugin* pluginInstance__repelzen; Plugin* pluginInstance__sapphire; @@ -2996,6 +3000,28 @@ static void initStatic__rackwindows() } } +static void initStatic__RCM() +{ + Plugin* const p = new Plugin; + pluginInstance__RCM = p; + + const StaticPluginLoader spl(p, "rcm-modules"); + if (spl.ok()) + { + p->addModel(modelGVerbModule); + p->addModel(modelCV0to10Module); + p->addModel(modelCVS0to10Module); + p->addModel(modelCV5to5Module); + p->addModel(modelCVMmtModule); + p->addModel(modelCVTglModule); + p->addModel(modelPianoRollModule); + p->addModel(modelDuckModule); + p->addModel(modelSEQAdapterModule); + p->addModel(modelSyncModule); + p->addModel(modelPolyNosModule); + } +} + static void initStatic__RebelTech() { Plugin* const p = new Plugin; @@ -3458,6 +3484,7 @@ void initStaticPlugins() initStatic__PinkTrombone(); initStatic__Prism(); initStatic__rackwindows(); + initStatic__RCM(); initStatic__RebelTech(); initStatic__repelzen(); initStatic__Sapphire(); diff --git a/plugins/rcm-modules b/plugins/rcm-modules new file mode 160000 index 0000000..c4a243e --- /dev/null +++ b/plugins/rcm-modules @@ -0,0 +1 @@ +Subproject commit c4a243ec7089254aa19225c0666bb4bda2163a6a diff --git a/src/Cardinal/DistrhoPluginInfo.h b/src/Cardinal/DistrhoPluginInfo.h index 18afb2b..200488a 100644 --- a/src/Cardinal/DistrhoPluginInfo.h +++ b/src/Cardinal/DistrhoPluginInfo.h @@ -36,6 +36,7 @@ #define DISTRHO_PLUGIN_AU_TYPE aumf #define DISTRHO_PLUGIN_BRAND_ID Dstr #define DISTRHO_PLUGIN_UNIQUE_ID DcnM +#define DISTRHO_PLUGIN_EXTRA_IO { CARDINAL_NUM_AUDIO_INPUTS, CARDINAL_NUM_AUDIO_OUTPUTS }, { 2, 2 } #ifdef HEADLESS #define DISTRHO_PLUGIN_HAS_UI 0 diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index 5512e5e..3226cc0 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -99,7 +99,7 @@ void destroyStaticPlugins(); } } -const std::string CARDINAL_VERSION = "24.04"; +const std::string CARDINAL_VERSION = "24.05"; // ----------------------------------------------------------------------------------------------------------- @@ -162,19 +162,16 @@ CardinalPluginContext::CardinalPluginContext(Plugin* const p) dataOuts(nullptr), midiEvents(nullptr), midiEventCount(0), - plugin(p) - #ifndef HEADLESS - , tlw(nullptr) - , ui(nullptr) - #endif + plugin(p), + tlw(nullptr), + ui(nullptr) { std::memset(parameters, 0, sizeof(parameters)); } -#ifndef HEADLESS bool CardinalPluginContext::addIdleCallback(IdleCallback* const cb) const { - #ifndef CARDINAL_COMMON_DSP_ONLY + #if !(defined(HEADLESS) || defined(CARDINAL_COMMON_DSP_ONLY)) if (ui != nullptr) { ui->addIdleCallback(cb); @@ -190,7 +187,7 @@ bool CardinalPluginContext::addIdleCallback(IdleCallback* const cb) const void CardinalPluginContext::removeIdleCallback(IdleCallback* const cb) const { - #ifndef CARDINAL_COMMON_DSP_ONLY + #if !(defined(HEADLESS) || defined(CARDINAL_COMMON_DSP_ONLY)) if (ui != nullptr) ui->removeIdleCallback(cb); #else @@ -198,7 +195,6 @@ void CardinalPluginContext::removeIdleCallback(IdleCallback* const cb) const (void)cb; #endif } -#endif void CardinalPluginContext::writeMidiMessage(const rack::midi::Message& message, const uint8_t channel) { diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 3ed2fe9..5139aec 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -196,6 +196,14 @@ class CardinalPlugin : public CardinalBasePlugin float fMiniReportValues[kCardinalParameterCountAtMini - kCardinalParameterStartMini]; #endif + #ifdef DISTRHO_PLUGIN_EXTRA_IO + uint16_t fNumActiveInputs = DISTRHO_PLUGIN_NUM_INPUTS; + uint16_t fNumActiveOutputs = DISTRHO_PLUGIN_NUM_OUTPUTS; + #else + static constexpr const uint16_t fNumActiveInputs = DISTRHO_PLUGIN_NUM_INPUTS; + static constexpr const uint16_t fNumActiveOutputs = DISTRHO_PLUGIN_NUM_OUTPUTS; + #endif + public: CardinalPlugin() : CardinalBasePlugin(kCardinalParameterCount, 0, kCardinalStateCount), @@ -406,7 +414,7 @@ protected: uint32_t getVersion() const override { - return d_version(0, 24, 4); + return d_version(0, 24, 5); } int64_t getUniqueId() const override @@ -1135,7 +1143,10 @@ protected: #if DISTRHO_PLUGIN_NUM_INPUTS != 0 fAudioBufferCopy = new float*[DISTRHO_PLUGIN_NUM_INPUTS]; for (int i=0; ibufferSize]; + std::memset(fAudioBufferCopy[i], 0, sizeof(float) * context->bufferSize); + } #endif fNextExpectedFrame = 0; @@ -1226,7 +1237,7 @@ protected: else { #if DISTRHO_PLUGIN_NUM_INPUTS != 0 - for (int i=0; idataOuts = outputs; } - for (int i=0; iengine->setSampleRate(newSampleRate); } + #ifdef DISTRHO_PLUGIN_EXTRA_IO + void ioChanged(const uint16_t numInputs, const uint16_t numOutputs) override + { + fNumActiveInputs = numInputs; + fNumActiveOutputs = numOutputs; + } + #endif + // ------------------------------------------------------------------------------------------------------- private: diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index b088e59..c1c01fd 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -426,10 +426,6 @@ public: const double height = std::max(538.f, rack::settings::windowSize.y) * scaleFactor; setSize(width, height); } - else if (scaleFactor != 1.0) - { - setSize(DISTRHO_UI_DEFAULT_WIDTH * scaleFactor, DISTRHO_UI_DEFAULT_HEIGHT * scaleFactor); - } #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS const DGL_NAMESPACE::Window::ScopedGraphicsContext sgc(window); @@ -932,7 +928,7 @@ protected: context->patch->loadAutosave(); } catch(const rack::Exception& e) { d_stderr(e.what()); - } DISTRHO_SAFE_EXCEPTION_RETURN("setState loadAutosave",); + } DISTRHO_SAFE_EXCEPTION_RETURN("stateChanged loadAutosave",); return; } @@ -1180,7 +1176,7 @@ protected: const int height = static_cast(ev.size.getHeight() / scaleFactor + 0.5); char sizeString[64] = {}; - std::snprintf(sizeString, sizeof(sizeString), "%d:%d", width, height); + std::snprintf(sizeString, sizeof(sizeString) - 1, "%d:%d", width, height); setState("windowSize", sizeString); if (rack::isStandalone()) diff --git a/src/Makefile b/src/Makefile index 24038a8..48d3bed 100644 --- a/src/Makefile +++ b/src/Makefile @@ -141,6 +141,11 @@ native: $(TARGETS) mini: $(TARGETS) $(MAKE) jack -C CardinalMini + $(MAKE) lv2_sep -C CardinalMiniSep + +au: $(TARGETS) + $(MAKE) au -C CardinalFX $(CARDINAL_SYNTH_ARGS) + $(MAKE) au -C CardinalSynth $(CARDINAL_SYNTH_ARGS) lv2: $(TARGETS) $(MAKE) lv2 -C Cardinal diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index fd4c058..56b3dd9 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -412,7 +412,7 @@ BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' # Enable all possible plugin types and setup resources ifeq ($(CARDINAL_VARIANT),main) -TARGETS = jack lv2 vst3 clap +TARGETS = clap jack lv2 vst3 else ifeq ($(DSP_UI_SPLIT),true) TARGETS = lv2_sep else ifeq ($(CARDINAL_VARIANT),mini) diff --git a/utils/macOS/Info_JACK.plist b/utils/macOS/Info_JACK.plist index 66bb498..d0980b3 100644 --- a/utils/macOS/Info_JACK.plist +++ b/utils/macOS/Info_JACK.plist @@ -11,7 +11,7 @@ CFBundleIdentifier studio.kx.distrho.cardinal.jack CFBundleShortVersionString - 23.04 + 24.05 LSMinimumSystemVersion 10.15 NSHumanReadableCopyright diff --git a/utils/macOS/Info_Native.plist b/utils/macOS/Info_Native.plist index 310766e..1672ad6 100644 --- a/utils/macOS/Info_Native.plist +++ b/utils/macOS/Info_Native.plist @@ -11,7 +11,7 @@ CFBundleIdentifier studio.kx.distrho.cardinal.native CFBundleShortVersionString - 24.04 + 24.05 LSMinimumSystemVersion 10.15 NSHumanReadableCopyright