diff --git a/.gitmodules b/.gitmodules index bd508120..b0a55c02 100644 --- a/.gitmodules +++ b/.gitmodules @@ -266,3 +266,9 @@ [submodule "plugins/Venom"] path = plugins/Venom url = https://github.com/DaveBenham/VenomModules +[submodule "plugins/AmbientModules"] + path = plugins/AmbientModules + url = https://github.com/neilbgr/AmbientModules.git +[submodule "plugins/Astravox"] + path = plugins/Astravox + url = https://github.com/JackArkyDev/Astravox.git diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 1a024a28..492aa15c 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -20,10 +20,12 @@ Below follows a list of all code licenses used in Cardinal and linked submodules | alef's bits | GPL-3.0-or-later | | | AlgoritmArte | GPL-3.0-or-later | | | Amalgamated Harmonics | BSD-3-Clause | | +| AmbientModules | GPL-3.0-or-later | Includes artwork derived from Valley Audio and the VCV Rack Component Library; see artwork licenses below | | Animated Circuits | GPL-3.0-or-later | | | Arable Instruments | GPL-3.0-or-later | | | Aria Salvatrice | GPL-3.0-or-later | | | AS | MIT | | +| Astravox | GPL-3.0-only | Tape Echo hysteresis code is adapted from AnalogTapeModel, also GPL-3.0-only | | Audible Instruments | GPL-3.0-or-later | | | Autinn | GPL-3.0-or-later | | | Axioma | GPL-3.0-or-later | | @@ -123,6 +125,9 @@ Below is a list of artwork licenses from plugins | AmalgamatedHarmonics/* | BSD-3-Clause | No artwork specific license provided | | AmalgamatedHarmonics/DSEG*.ttf | OFL-1.1-RFN | | | AmalgamatedHarmonics/Roboto*.ttf | Apache-2.0 | | +| AmbientModules/* | GPL-3.0-or-later | No separate license stated except where noted below | +| AmbientModules/res/knobs/* | GPL-3.0-or-later | Copied or adapted from ValleyRackFree; see `res/knobs/NOTICE.md` | +| AmbientModules/res/switches/* | CC-BY-NC-4.0 | Adapted from the VCV Rack Component Library; see `res/switches/NOTICE.md` | | AnimatedCircuits/* | CC-BY-NC-SA-4.0 | | | ArableInstruments/* | Custom | Copyright © Alex Brandt, [used and distributed with permission](https://github.com/adbrant/ArableInstruments/issues/21) | | AriaModules/* | CC-BY-SA-4.0 | | @@ -135,6 +140,8 @@ Below is a list of artwork licenses from plugins | AS/* | CC-BY-NC-ND-4.0 | The AS Logo/Monogram is Copyright (c) 2017 Alfredo Santamaria and cannot be used in derivative works; Cardinal has [explicit permission](https://github.com/AScustomWorks/AS/issues/60#issuecomment-1133488586) for its use. | | AS/saxmono.ttf | Custom | You may download this font, circulate it und use it freely. You may not alter, rename, change copyrights or modify this font in any way. | | AS/Segment7Standard.ttf | OFL-1.1-RFN | | +| Astravox/* | GPL-3.0-only | No separate artwork license stated except where noted below | +| Astravox/res/fonts/Inter-Light.otf | OFL-1.1 | See `res/fonts/OFL.txt` | | AudibleInstruments/* | Custom | Copyright © Emilie Gillet, [used and distributed with permission](LICENSE-PERMISSIONS.md#audible-instruments-émilie-gillet--mutable-instruments) | | Autinn/* | GPL-3.0-or-later | No artwork specific license provided | | Axioma/* | GPL-3.0-or-later | No artwork specific license provided | diff --git a/plugins/AmbientModules b/plugins/AmbientModules new file mode 160000 index 00000000..4ca59905 --- /dev/null +++ b/plugins/AmbientModules @@ -0,0 +1 @@ +Subproject commit 4ca599056bdfd6f1502184c6d4cca08608c373d6 diff --git a/plugins/Astravox b/plugins/Astravox new file mode 160000 index 00000000..62b3084e --- /dev/null +++ b/plugins/Astravox @@ -0,0 +1 @@ +Subproject commit 62b3084e16e305754a870bc6e7347235222c6f4e diff --git a/plugins/Makefile b/plugins/Makefile index 2f00fa34..6f27ba14 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -354,6 +354,14 @@ PLUGIN_FILES += $(filter-out AmalgamatedHarmonics/src/AH.cpp,$(wildcard Amalgama AMALGAMATEDHARMONICS_CUSTOM = BasePinkNoiseGenerator EvenVCO LowFrequencyOscillator Pattern PinkNoiseGenerator RedNoiseGenerator AMALGAMATEDHARMONICS_CUSTOM += bogaudio +# -------------------------------------------------------------- +# AmbientModules + +PLUGIN_FILES += $(filter-out AmbientModules/src/plugin.cpp,$(wildcard AmbientModules/src/*.cpp)) + +# modules/types which are present in other plugins +AMBIENTMODULES_CUSTOM = Blank XYPad RoganMedSmallWhite RoganSmallRed + # -------------------------------------------------------------- # AnimatedCircuits @@ -412,6 +420,14 @@ PLUGIN_FILES += AS/freeverb/revmodel.cpp AS_CUSTOM = ADSR BpmDisplayWidget LabelDisplayWidget LedLight LowFrequencyOscillator SigDisplayWidget VCA WaveShaper YellowRedLight allpass comb revmodel AS_CUSTOM_PER_FILE = NumberDisplayWidget +# -------------------------------------------------------------- +# Astravox + +PLUGIN_FILES += $(filter-out Astravox/src/plugin.cpp,$(wildcard Astravox/src/*.cpp)) + +# modules/types which are present in other plugins +ASTRAVOX_CUSTOM = Biquad DecayEnvelope ShelfFilter SpringReverb SVFilter + # -------------------------------------------------------------- # AudibleInstruments @@ -1480,6 +1496,9 @@ RESOURCE_FILES = \ $(wildcard */res/*/*/*.ttf)) RESOURCE_FILES += $(wildcard */presets) +RESOURCE_FILES += $(wildcard Astravox/res/*.json) +RESOURCE_FILES += $(wildcard Astravox/res/*.png) +RESOURCE_FILES += $(wildcard Astravox/res/*.wav) RESOURCE_FILES += $(wildcard Orbits/res/*.json) RESOURCE_FILES += ArableInstruments/res/Joni.png RESOURCE_FILES += BaconPlugs/res/Keypunch029.json @@ -2198,6 +2217,13 @@ $(BUILD_DIR)/AmalgamatedHarmonics/%.cpp.o: AmalgamatedHarmonics/%.cpp $(foreach m,$(AMALGAMATEDHARMONICS_CUSTOM),$(call custom_module_names,$(m),AmalgamatedHarmonics)) \ -DpluginInstance=pluginInstance__AmalgamatedHarmonics +$(BUILD_DIR)/AmbientModules/%.cpp.o: AmbientModules/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(AMBIENTMODULES_CUSTOM),$(call custom_module_names,$(m),AmbientModules)) \ + -DpluginInstance=pluginInstance__AmbientModules + $(BUILD_DIR)/AnimatedCircuits/%.cpp.o: AnimatedCircuits/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" @@ -2233,6 +2259,13 @@ $(BUILD_DIR)/AS/%.cpp.o: AS/%.cpp -DpluginInstance=pluginInstance__AS \ -Wno-unused-private-field +$(BUILD_DIR)/Astravox/%.cpp.o: Astravox/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(ASTRAVOX_CUSTOM),$(call custom_module_names,$(m),Astravox)) \ + -DpluginInstance=pluginInstance__Astravox + $(BUILD_DIR)/AudibleInstruments/%.o: AudibleInstruments/% -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" @@ -2608,7 +2641,16 @@ $(BUILD_DIR)/Meander/src/%.cpp.o: Meander/src/%.cpp -Wno-format-security \ -Wno-format-zero-length -$(BUILD_DIR)/MindMeldModular/src/MindMeldModular.cpp.o: MindMeldModular/src/MindMeldModular.cpp +MINDMELD_XCODE_COMPAT_PATCH = ../utils/patches/MindMeldModular-xcode27.patch + +.PHONY: mindmeld-xcode-compat +mindmeld-xcode-compat: $(MINDMELD_XCODE_COMPAT_PATCH) + @if grep -q 'std::abs' MindMeldModular/src/ShapeMaster/Shape.hpp; then \ + echo "Applying MindMeldModular Xcode compatibility patch"; \ + patch -p1 -d MindMeldModular < $(MINDMELD_XCODE_COMPAT_PATCH); \ + fi + +$(BUILD_DIR)/MindMeldModular/src/MindMeldModular.cpp.o: MindMeldModular/src/MindMeldModular.cpp | mindmeld-xcode-compat -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ @@ -2616,7 +2658,7 @@ $(BUILD_DIR)/MindMeldModular/src/MindMeldModular.cpp.o: MindMeldModular/src/Mind -DpluginInstance=pluginInstance__MindMeld \ -Dinit=init__MindMeld -$(BUILD_DIR)/MindMeldModular/%.cpp.o: MindMeldModular/%.cpp +$(BUILD_DIR)/MindMeldModular/%.cpp.o: MindMeldModular/%.cpp | mindmeld-xcode-compat -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ @@ -2815,7 +2857,16 @@ $(BUILD_DIR)/stocaudio/%.cpp.o: stocaudio/%.cpp $(foreach m,$(STOCAUDIO_CUSTOM),$(call custom_module_names,$(m),stocaudio)) \ -DpluginInstance=pluginInstance__stocaudio -$(BUILD_DIR)/surgext%.cpp.o: surgext%.cpp +SURGEXT_XCODE_COMPAT_PATCH = ../utils/patches/surgext-xcode27.patch + +.PHONY: surgext-xcode-compat +surgext-xcode-compat: $(SURGEXT_XCODE_COMPAT_PATCH) + @if grep -q '\.template emplace_back' surgext/src/VCO.cpp; then \ + echo "Applying surgext Xcode compatibility patch"; \ + patch -p1 -d surgext < $(SURGEXT_XCODE_COMPAT_PATCH); \ + fi + +$(BUILD_DIR)/surgext%.cpp.o: surgext%.cpp | surgext-xcode-compat -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" $(SILENT)$(CXX) $< $(SURGEXT_FLAGS) -c -o $@ \ diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index e88d6d58..b604b715 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -49,6 +49,20 @@ extern Model* modelDivisions; // AmalgamatedHarmonics #include "AmalgamatedHarmonics/src/AH.hpp" +// AmbientModules +void loadAmbientTheme(); +extern Model* modelAmbientModulesBlank; +extern Model* modelLunar50Drone; +extern Model* modelLunarLFO; +extern Model* modelLunarVCO; +extern Model* modelLunarPapaSrapa; +extern Model* modelLunarSequencer; +extern Model* modelLunarJoystick; +extern Model* modelLunarMixer; +extern Model* modelLunarPads; +extern Model* modelLunarDetector; +extern Model* modelLunarFilter; + // AnimatedCircuits #include "AnimatedCircuits/src/plugin.hpp" @@ -97,6 +111,10 @@ extern Model* modelBlank; #undef LedLight #undef YellowRedLight +// Astravox +extern Model* modelVocoder; +extern Model* modelTapeEcho; + // AudibleInstruments #include "AudibleInstruments/src/plugin.hpp" @@ -964,10 +982,12 @@ Plugin* pluginInstance__admiral; Plugin* pluginInstance__alefsbits; Plugin* pluginInstance__Algoritmarte; Plugin* pluginInstance__AmalgamatedHarmonics; +Plugin* pluginInstance__AmbientModules; Plugin* pluginInstance__ArableInstruments; Plugin* pluginInstance__AnimatedCircuits; Plugin* pluginInstance__Aria; Plugin* pluginInstance__AS; +Plugin* pluginInstance__Astravox; Plugin* pluginInstance__AudibleInstruments; extern Plugin* pluginInstance__Autinn; Plugin* pluginInstance__Axioma; @@ -1399,6 +1419,29 @@ static void initStatic__AmalgamatedHarmonics() } } +static void initStatic__AmbientModules() +{ + Plugin* const p = new Plugin; + pluginInstance__AmbientModules = p; + + const StaticPluginLoader spl(p, "AmbientModules"); + if (spl.ok()) + { + loadAmbientTheme(); + p->addModel(modelAmbientModulesBlank); + p->addModel(modelLunar50Drone); + p->addModel(modelLunarLFO); + p->addModel(modelLunarVCO); + p->addModel(modelLunarPapaSrapa); + p->addModel(modelLunarSequencer); + p->addModel(modelLunarJoystick); + p->addModel(modelLunarMixer); + p->addModel(modelLunarPads); + p->addModel(modelLunarDetector); + p->addModel(modelLunarFilter); + } +} + static void initStatic__AnimatedCircuits() { Plugin* const p = new Plugin; @@ -1526,6 +1569,19 @@ static void initStatic__AS() } } +static void initStatic__Astravox() +{ + Plugin* const p = new Plugin; + pluginInstance__Astravox = p; + + const StaticPluginLoader spl(p, "Astravox"); + if (spl.ok()) + { + p->addModel(modelVocoder); + p->addModel(modelTapeEcho); + } +} + static void initStatic__AudibleInstruments() { Plugin* const p = new Plugin; @@ -3738,10 +3794,12 @@ void initStaticPlugins() initStatic__alefsbits(); initStatic__Algoritmarte(); initStatic__AmalgamatedHarmonics(); + initStatic__AmbientModules(); initStatic__AnimatedCircuits(); initStatic__ArableInstruments(); initStatic__Aria(); initStatic__AS(); + initStatic__Astravox(); initStatic__AudibleInstruments(); initStatic__Autinn(); initStatic__Axioma(); diff --git a/utils/patches/MindMeldModular-xcode27.patch b/utils/patches/MindMeldModular-xcode27.patch new file mode 100644 index 00000000..fd8b8b0e --- /dev/null +++ b/utils/patches/MindMeldModular-xcode27.patch @@ -0,0 +1,5 @@ +--- a/src/ShapeMaster/Shape.hpp ++++ b/src/ShapeMaster/Shape.hpp +@@ -160 +160 @@ +- T dx = std::abs((T)points[p + 1].x - (T)points[p].x); ++ T dx = std::abs((T)points[p + 1].x - (T)points[p].x); diff --git a/utils/patches/surgext-xcode27.patch b/utils/patches/surgext-xcode27.patch new file mode 100644 index 00000000..bf4b95e0 --- /dev/null +++ b/utils/patches/surgext-xcode27.patch @@ -0,0 +1,8 @@ +--- a/src/VCO.cpp ++++ b/src/VCO.cpp +@@ -1051 +1051 @@ +- p.template emplace_back(x, y0 + (-tb[s] + 1) * 0.5 * hw); ++ p.emplace_back(x, y0 + (-tb[s] + 1) * 0.5 * hw); +@@ -1068 +1068 @@ +- ribbon.template emplace_back(x, y0 + (-tb[s] + 1) * 0.5 * hw); ++ ribbon.emplace_back(x, y0 + (-tb[s] + 1) * 0.5 * hw);