diff --git a/.gitmodules b/.gitmodules index 0bb90f0..c2ef577 100644 --- a/.gitmodules +++ b/.gitmodules @@ -184,3 +184,6 @@ [submodule "plugins/nonlinearcircuits"] path = plugins/nonlinearcircuits url = https://github.com/mhetrick/nonlinearcircuits.git +[submodule "plugins/voxglitch"] + path = plugins/voxglitch + url = https://github.com/clone45/voxglitch.git diff --git a/README.md b/README.md index 31b8c3d..0c4e9dc 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,7 @@ At the moment the following 3rd-party modules are provided: - stocaudio - Substation Opensource - Valley +- Voxglitch - ZetaCarinae - ZZC diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 224480b..ce6dc83 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -66,6 +66,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | Sonus Modular | GPL-3.0-or-later | | | stocaudio | GPL-3.0-or-later | | | Valley | GPL-3.0-or-later | | +| Voxglitch | GPL-3.0-or-later | [License still to be applied in the repo](https://github.com/clone45/voxglitch/issues/123) | | ZetaCarinae | GPL-3.0-or-later | | | ZZC | GPL-3.0-or-later | | @@ -185,6 +186,8 @@ Below is a list of artwork licenses from plugins | ValleyAudio/din1451alt.ttf | CC-BY-3.0-DE | | | ValleyAudio/DSEG14Classic-*.ttf | OFL-1.1-RFN | | | ValleyAudio/ShareTechMono-*.ttf | OFL-1.1-RFN | | +| voxglitch/* | BSD-3-Clause | No artwork specific license provided | +| voxglitch/ShareTechMono-Regular.ttf | OFL-1.1-RFN | | | ZetaCarinaeModules/* | GPL-3.0-or-later | [Same license as source code](https://github.com/mhampton/ZetaCarinaeModules/issues/8) | | ZZC/* | CC-BY-NC-SA-4.0 | | | ZZC/panels/* | CC-BY-NC-SA-4.0 | NOTE: The ZZC Logo is Copyright (c) 2019 Sergey Ukolov and cannot be used in derivative works; Cardinal's use does not officially constitute derivative work. | diff --git a/plugins/Makefile b/plugins/Makefile index f7085aa..5409da7 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -820,6 +820,14 @@ PLUGIN_BINARIES += ValleyAudio/src/XFADE.bin VALLEYAUDIO_CUSTOM = $(DRWAV) DigitalDisplay VALLEYAUDIO_CUSTOM_PER_FILE = TempoKnob +# -------------------------------------------------------------- +# Voxglitch + +PLUGIN_FILES += $(filter-out voxglitch/src/plugin.cpp,$(wildcard voxglitch/src/*.cpp)) + +# modules/types which are present in other plugins +VOXGLITCH_CUSTOM = $(DRWAV) Readout + # -------------------------------------------------------------- # ZetaCarinaeModules @@ -1679,6 +1687,13 @@ $(BUILD_DIR)/ValleyAudio/%.cpp.o: ValleyAudio/%.cpp -Wno-sign-compare \ -Wno-unused-but-set-variable +$(BUILD_DIR)/voxglitch/%.cpp.o: voxglitch/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(VOXGLITCH_CUSTOM),$(call custom_module_names,$(m),Voxglitch)) \ + -DpluginInstance=pluginInstance__Voxglitch + $(BUILD_DIR)/ZetaCarinaeModules/%.cpp.o: ZetaCarinaeModules/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 20488ab..849d784 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -665,6 +665,9 @@ extern Model* modelFilterPlus; // ValleyAudio #include "ValleyAudio/src/Valley.hpp" +// Voxglitch +#include "voxglitch/src/plugin.hpp" + // ZetaCarinaeModules #include "ZetaCarinaeModules/src/plugin.hpp" @@ -748,6 +751,7 @@ Plugin* pluginInstance__sonusmodular; Plugin* pluginInstance__stocaudio; Plugin* pluginInstance__substation; Plugin* pluginInstance__ValleyAudio; +Plugin* pluginInstance__Voxglitch; Plugin* pluginInstance__ZetaCarinaeModules; Plugin* pluginInstance__ZZC; #endif // NOPLUGINS @@ -2430,6 +2434,37 @@ static void initStatic__ValleyAudio() } } +static void initStatic__Voxglitch() +{ + Plugin* p = new Plugin; + pluginInstance__Voxglitch = p; + + const StaticPluginLoader spl(p, "voxglitch"); + if (spl.ok()) + { + p->addModel(modelAutobreak); + p->addModel(modelByteBeat); + p->addModel(modelDigitalProgrammer); + p->addModel(modelDigitalSequencer); + p->addModel(modelDigitalSequencerXP); + p->addModel(modelGlitchSequencer); + p->addModel(modelGhosts); + p->addModel(modelGoblins); + p->addModel(modelGrainEngine); + p->addModel(modelGrainEngineMK2); + p->addModel(modelGrainEngineMK2Expander); + p->addModel(modelGrainFx); + p->addModel(modelHazumi); + p->addModel(modelLooper); + p->addModel(modelRepeater); + p->addModel(modelSamplerX8); + p->addModel(modelSatanonaut); + p->addModel(modelWavBank); + p->addModel(modelWavBankMC); + p->addModel(modelXY); + } +} + static void initStatic__ZetaCarinaeModules() { Plugin* p = new Plugin; @@ -2532,6 +2567,7 @@ void initStaticPlugins() initStatic__stocaudio(); initStatic__substation(); initStatic__ValleyAudio(); + initStatic__Voxglitch(); initStatic__ZetaCarinaeModules(); initStatic__ZZC(); #endif // NOPLUGINS diff --git a/plugins/voxglitch b/plugins/voxglitch new file mode 160000 index 0000000..c391e1a --- /dev/null +++ b/plugins/voxglitch @@ -0,0 +1 @@ +Subproject commit c391e1a83b73b38125fb007117c40d0f5ee2091c diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index 8154f7e..c0b3c4c 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -283,6 +283,26 @@ static const struct { { "/PathSet/res/AstroVibe.svg", {}, -1 }, { "/PathSet/res/IceTray.svg", {}, -1 }, { "/PathSet/res/ShiftyMod.svg", {}, -1 }, + // BSD-3-Clause + { "/voxglitch/res/autobreak_front_panel.svg", {}, -1 }, + { "/voxglitch/res/bytebeat_front_panel.svg", {}, -1 }, + { "/voxglitch/res/digital_programmer_front_panel.svg", {}, -1 }, + { "/voxglitch/res/digital_sequencer_front_panel.svg", {}, -1 }, + { "/voxglitch/res/digital_sequencer_xp_front_panel.svg", {}, -1 }, + { "/voxglitch/res/ghosts_front_panel.svg", {}, -1 }, + { "/voxglitch/res/glitch_sequencer_front_panel.svg", {}, -1 }, + { "/voxglitch/res/goblins_front_panel.svg", {}, -1 }, + { "/voxglitch/res/grain_engine_mk2_expander_front_panel.svg", {}, -1 }, + { "/voxglitch/res/grain_engine_mk2_front_panel_r3.svg", {}, -1 }, + { "/voxglitch/res/grain_fx_front_panel.svg", {}, -1 }, + { "/voxglitch/res/hazumi_front_panel.svg", {}, -1 }, + { "/voxglitch/res/looper_front_panel.svg", {}, -1 }, + { "/voxglitch/res/repeater_front_panel.svg", {}, -1 }, + { "/voxglitch/res/samplerx8_front_panel.svg", {}, -1 }, + { "/voxglitch/res/satanonaut_front_panel.svg", {}, -1 }, + { "/voxglitch/res/wav_bank_front_panel.svg", {}, -1 }, + { "/voxglitch/res/wav_bank_mc_front_panel_v2.svg", {}, -1 }, + { "/voxglitch/res/xy_front_panel.svg", {}, -1 }, }; static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const char* const svgFileToInvert = nullptr) @@ -458,6 +478,24 @@ static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const c } } + // Special case for voxglitch colors + if (svgFileToInvert != nullptr && std::strncmp(svgFileToInvert, "/voxglitch/", 11) == 0) + { + switch (paint.color) + { + // wavbank blue + case 0xffc5ae8a: + // various black + case 0xff121212: + case 0xff2a2828: + return false; + // satanonaut + case 0xff595959: + paint.color = 0x7f3219ac; + return true; + } + } + switch (paint.color) { // scopes or other special things (do nothing)