From d61b23ad644b2b31b3d2b84ba9a932f0988a581c Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 29 Apr 2022 04:01:14 +0100 Subject: [PATCH 001/283] Fix build Signed-off-by: falkTX --- plugins/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/Makefile b/plugins/Makefile index 5ddce85b..402385c6 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -736,6 +736,9 @@ PLUGIN_FILES += $(filter-out PathSet/src/plugin.cpp,$(wildcard PathSet/src/*.cpp PLUGIN_FILES += $(filter-out PinkTrombone/src/plugin.cpp,$(wildcard PinkTrombone/src/*.cpp)) PLUGIN_FILES += $(wildcard PinkTrombone/src/PinkTrombone/*.cpp) +# modules/types which are present in other plugins +PINKTROMBONE_CUSTOM = WhiteNoise + # -------------------------------------------------------------- # Prism From 73c9f22c5ae8520e05c710b2b2a18a24183cc91e Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 30 Apr 2022 03:26:21 +0100 Subject: [PATCH 002/283] Update fundamental, all but octave now working Signed-off-by: falkTX --- plugins/Cardinal/src/plugin.hpp | 2 +- plugins/Fundamental | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Cardinal/src/plugin.hpp b/plugins/Cardinal/src/plugin.hpp index b7f67671..710d31d6 100644 --- a/plugins/Cardinal/src/plugin.hpp +++ b/plugins/Cardinal/src/plugin.hpp @@ -58,7 +58,7 @@ float d_findMaxNormalizedFloat(const float floats[], const std::size_t count) DISTRHO_SAFE_ASSERT_RETURN(floats != nullptr, 0.0f); DISTRHO_SAFE_ASSERT_RETURN(count > 0, 0.0f); - static const float kEmptyFloats[8192] = {}; + static constexpr const float kEmptyFloats[8192] = {}; if (count <= 8192 && std::memcmp(floats, kEmptyFloats, count) == 0) return 0.0f; diff --git a/plugins/Fundamental b/plugins/Fundamental index 48bf3c84..3845fb1e 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 48bf3c84ebafc9effe7e565d8cdbf8a46b9d503c +Subproject commit 3845fb1efda1053d236630ee26cff1bc62b6550d From 7e2eeb89763166eadfe691f4183fde54461f88ac Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 30 Apr 2022 03:39:33 +0100 Subject: [PATCH 003/283] Update Befaco, adds Channel Strip Signed-off-by: falkTX --- plugins/Befaco | 2 +- plugins/plugins.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/Befaco b/plugins/Befaco index 7e0b0200..dcd9a59e 160000 --- a/plugins/Befaco +++ b/plugins/Befaco @@ -1 +1 @@ -Subproject commit 7e0b020000225e3d2aecba3f09054595339fe540 +Subproject commit dcd9a59ea785d7efebd39ea5564823c72f2fdddf diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index b71f89ce..e8bd9a3e 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -1226,6 +1226,7 @@ static void initStatic__Befaco() p->addModel(modelMuxlicer); p->addModel(modelMex); p->addModel(modelNoisePlethora); + p->addModel(modelChannelStrip); #undef modelADSR #undef modelMixer } From 86f944c1b2ccf6be6e0d47ce9f46c6d525b3bcc3 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 30 Apr 2022 21:13:54 +0100 Subject: [PATCH 004/283] Update fundamental Signed-off-by: falkTX --- plugins/Fundamental | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Fundamental b/plugins/Fundamental index 3845fb1e..4516fbe3 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 3845fb1efda1053d236630ee26cff1bc62b6550d +Subproject commit 4516fbe3adb6c51abeaf1b2271e7029bb9ba6e53 From d457220f802dc0ec17b07f7bfd97c3210c56a169 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 30 Apr 2022 23:19:51 +0100 Subject: [PATCH 005/283] Bump version, update fundamental for finer details Signed-off-by: falkTX --- Makefile | 2 +- jucewrapper/CMakeLists.txt | 2 +- plugins/Fundamental | 2 +- src/CardinalCommon.cpp | 2 +- src/CardinalPlugin.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index be7735c7..73a73837 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ # also set in: # src/CardinalCommon.cpp `CARDINAL_VERSION` # src/CardinalPlugin.cpp `getVersion` -VERSION = 22.04 +VERSION = 22.05 # -------------------------------------------------------------- # Import base definitions diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 8bab15f2..62cffa7b 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.15) -project(Cardinal VERSION 22.03) +project(Cardinal VERSION 22.05) add_subdirectory(JUCE) diff --git a/plugins/Fundamental b/plugins/Fundamental index 4516fbe3..f7b3514f 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 4516fbe3adb6c51abeaf1b2271e7029bb9ba6e53 +Subproject commit f7b3514f99fd07df23b9d123f6c3587302e7f89c diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index c5414baa..185174fc 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -52,7 +52,7 @@ # include #endif -const std::string CARDINAL_VERSION = "22.04"; +const std::string CARDINAL_VERSION = "22.05"; namespace rack { namespace settings { diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 80514052..b53e81dd 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -611,7 +611,7 @@ class CardinalPlugin : public CardinalBasePlugin uint32_t getVersion() const override { - return d_version(0, 22, 4); + return d_version(0, 22, 5); } int64_t getUniqueId() const override From 8cbaaab1009f3f1fa151167b2a38387017517264 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 30 Apr 2022 23:23:24 +0100 Subject: [PATCH 006/283] Fix Core Blank panel tags Signed-off-by: falkTX --- plugins/Cardinal/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Cardinal/plugin.json b/plugins/Cardinal/plugin.json index 9318ad1a..bc72c412 100644 --- a/plugins/Cardinal/plugin.json +++ b/plugins/Cardinal/plugin.json @@ -114,7 +114,7 @@ "description": "Cardinal's own blank panel, featuring Hatsune Miku", "manualUrl": "https://github.com/DISTRHO/Cardinal/blob/main/docs/CARDINAL-MODULES.md#blank", "tags": [ - "Visual" + "Blank" ] }, { From 83de2207b49ab6fc0ee1d06b1e2a4fb373683562 Mon Sep 17 00:00:00 2001 From: dreamer Date: Fri, 29 Apr 2022 23:12:51 +0200 Subject: [PATCH 007/283] [WIP] add Meander --- .gitmodules | 4 ++++ README.md | 1 + docs/LICENSES.md | 3 +++ plugins/Makefile | 11 +++++++++++ plugins/Meander | 1 + plugins/plugins.cpp | 17 +++++++++++++++++ 6 files changed, 37 insertions(+) create mode 160000 plugins/Meander diff --git a/.gitmodules b/.gitmodules index bde711cc..7e8625b9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -193,3 +193,7 @@ [submodule "plugins/PinkTrombone"] path = plugins/PinkTrombone url = https://github.com/VegaDeftwing/PinkTromboneVCV.git +[submodule "plugins/Meander"] + path = plugins/Meander + url = https://github.com/knchaffin/Meander.git + branch = master-V2 diff --git a/README.md b/README.md index 21c9fdac..ed5e2a53 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ At the moment the following 3rd-party modules are provided: - Little Utils - Lomas Modules - Lyrae Modules +- Meander - MindMeld - ML Modules - Mockba Modular diff --git a/docs/LICENSES.md b/docs/LICENSES.md index bcbf7813..251a329c 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -51,6 +51,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | Little Utils | EUPL-1.2 | | | Lomas Modules | GPL-3.0-or-later | | | Lyrae Modules | GPL-3.0-or-later | | +| Meander | GPL-3.0-or-later | | | MindMeld | GPL-3.0-or-later | | | ML Modules | BSD-3-Clause | | | Mockba Modular | MIT | | @@ -161,6 +162,8 @@ Below is a list of artwork licenses from plugins | LomasModules/* | GPL-3.0-or-later | [Same license as source code](https://github.com/LomasModules/LomasModules/issues/26) | | LomasModules/Fonts/FiraMono-Bold.ttf | OFL-1.1-RFN | | | LyraeModules/* | CC-BY-NC-SA-4.0 | | +| Meander/* | GPL-3.0-or-later | No artwork specific license provided | +| Meander/*.ttf | unknown | Contains a number of font files not all of which have resolved licenses | | MindMeld/* | CC-BY-NC-ND-4.0 | | | MindMeld/fonts/RobotoCondensed-*.ttf | Apache-2.0 | | | ML_modules/* | BSD-3-Clause | No artwork specific license provided | diff --git a/plugins/Makefile b/plugins/Makefile index 402385c6..af938190 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -645,6 +645,10 @@ PLUGIN_FILES += $(filter-out LyraeModules/src/plugin.cpp,$(wildcard LyraeModules # modules/types which are present in other plugins LYRAE_CUSTOM = Delta +# -------------------------------------------------------------- +# Meander +PLUGIN_FILES += $(filter-out Meander/src/plugin.cpp,$(wildcard Meander/src/*.cpp)) + # -------------------------------------------------------------- # MindMeld @@ -1583,6 +1587,13 @@ $(BUILD_DIR)/LyraeModules/%.cpp.o: LyraeModules/%.cpp $(foreach m,$(LYRAE_CUSTOM),$(call custom_module_names,$(m),Lyrae)) \ -DpluginInstance=pluginInstance__Lyrae +$(BUILD_DIR)/Meander/src/Meander.cpp.o: Meander/src/Meander.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(MEANDER_CUSTOM),$(call custom_module_names,$(m),Meander)) \ + -DpluginInstance=pluginInstance__Meander + $(BUILD_DIR)/MindMeldModular/src/MindMeldModular.cpp.o: MindMeldModular/src/MindMeldModular.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/Meander b/plugins/Meander new file mode 160000 index 00000000..8a81a4df --- /dev/null +++ b/plugins/Meander @@ -0,0 +1 @@ +Subproject commit 8a81a4df886c4c2cd7de3aaf721fbf848bba6f93 diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index e8bd9a3e..e07980a9 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -467,6 +467,9 @@ extern Model* modelBD383238; extern Model* modelZeta; #undef modelDelta +// Meander +#include "Meander/src/plugin.hpp" + // MindMeldModular /* NOTE too much noise in original include, do this a different way // #include "MindMeldModular/src/MindMeldModular.hpp" @@ -726,6 +729,7 @@ Plugin* pluginInstance__LilacLoop; Plugin* pluginInstance__LittleUtils; Plugin* pluginInstance__Lomas; Plugin* pluginInstance__Lyrae; +Plugin* pluginInstance__Meander; extern Plugin* pluginInstance__MindMeld; Plugin* pluginInstance__ML; Plugin* pluginInstance__MockbaModular; @@ -1976,6 +1980,18 @@ static void initStatic__Lyrae() } } +static void initStatic__Meander() +{ + Plugin* const p = new Plugin; + pluginInstance__Meander = p; + + const StaticPluginLoader spl(p, "Meander"); + if (spl.ok()) + { + p->addModel(modelMeander); + } +} + static void initStatic__MindMeld() { Plugin* const p = new Plugin; @@ -2552,6 +2568,7 @@ void initStaticPlugins() initStatic__LittleUtils(); initStatic__Lomas(); initStatic__Lyrae(); + initStatic__Meander(); initStatic__MindMeld(); initStatic__ML(); initStatic__MockbaModular(); From 8ef6a2dff5825cec7ea74b46716a367f35da1140 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 00:22:45 +0100 Subject: [PATCH 008/283] Fixup for meander module inclusion Signed-off-by: falkTX --- docs/LICENSES.md | 6 +++++- plugins/Makefile | 7 ++++++- plugins/Meander | 2 +- plugins/plugins.cpp | 3 +++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 251a329c..4ad94665 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -163,7 +163,11 @@ Below is a list of artwork licenses from plugins | LomasModules/Fonts/FiraMono-Bold.ttf | OFL-1.1-RFN | | | LyraeModules/* | CC-BY-NC-SA-4.0 | | | Meander/* | GPL-3.0-or-later | No artwork specific license provided | -| Meander/*.ttf | unknown | Contains a number of font files not all of which have resolved licenses | +| Meander/Bravura.otf | OFL-1.1-RFN | | +| Meander/DejaVuSansMono.ttf | Bitstream-Vera | | +| Meander/Michroma-Regular.ttf | OFL-1.1-RFN | | +| Meander/Segment7Standard.ttf | OFL-1.1-RFN | | +| Meander/Ubuntu Condensed 400.ttf | UFL-1.0 | Ubuntu Font License, based on OFL-1.1 | | MindMeld/* | CC-BY-NC-ND-4.0 | | | MindMeld/fonts/RobotoCondensed-*.ttf | Apache-2.0 | | | ML_modules/* | BSD-3-Clause | No artwork specific license provided | diff --git a/plugins/Makefile b/plugins/Makefile index af938190..31741b06 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -647,6 +647,7 @@ LYRAE_CUSTOM = Delta # -------------------------------------------------------------- # Meander + PLUGIN_FILES += $(filter-out Meander/src/plugin.cpp,$(wildcard Meander/src/*.cpp)) # -------------------------------------------------------------- @@ -1012,6 +1013,7 @@ PLUGIN_LIST = $(subst /plugin.json,,$(wildcard */plugin.json)) endif UNWANTED_FILES = HetrickCV/res/illustrator - deprecated/MyModule.svg +UNWANTED_FILES += $(wildcard Meander/res/*) UNWANTED_FILES += $(wildcard Mog/res/*) UNWANTED_FILES += $(wildcard Mog/res/*/*) UNWANTED_FILES += $(wildcard nonlinearcircuits/res/*) @@ -1042,6 +1044,7 @@ RESOURCE_FILES += MindMeldModular/res/ShapeMaster/CommunityPresets RESOURCE_FILES += MindMeldModular/res/ShapeMaster/CommunityShapes RESOURCE_FILES += MindMeldModular/res/ShapeMaster/MindMeldPresets RESOURCE_FILES += MindMeldModular/res/ShapeMaster/MindMeldShapes +RESOURCE_FILES += Meander/res RESOURCE_FILES += Mog/res RESOURCE_FILES += nonlinearcircuits/res RESOURCE_FILES += ParableInstruments/res/Neil.png @@ -1592,7 +1595,9 @@ $(BUILD_DIR)/Meander/src/Meander.cpp.o: Meander/src/Meander.cpp @echo "Compiling $<" $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(foreach m,$(MEANDER_CUSTOM),$(call custom_module_names,$(m),Meander)) \ - -DpluginInstance=pluginInstance__Meander + -DpluginInstance=pluginInstance__Meander \ + -Wno-format-security \ + -Wno-format-zero-length $(BUILD_DIR)/MindMeldModular/src/MindMeldModular.cpp.o: MindMeldModular/src/MindMeldModular.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" diff --git a/plugins/Meander b/plugins/Meander index 8a81a4df..9b2011f2 160000 --- a/plugins/Meander +++ b/plugins/Meander @@ -1 +1 @@ -Subproject commit 8a81a4df886c4c2cd7de3aaf721fbf848bba6f93 +Subproject commit 9b2011f2d1578268656ebca4313ad3aaa16ee4ee diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index e07980a9..130c3645 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -468,6 +468,7 @@ extern Model* modelZeta; #undef modelDelta // Meander +extern int panelTheme; #include "Meander/src/plugin.hpp" // MindMeldModular @@ -1988,6 +1989,8 @@ static void initStatic__Meander() const StaticPluginLoader spl(p, "Meander"); if (spl.ok()) { + // for dark theme + panelTheme = 1; p->addModel(modelMeander); } } From f263212d7e098ee233ce392cfa05941432dfbb98 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 01:29:29 +0100 Subject: [PATCH 009/283] Update fundamental, smore fixes Signed-off-by: falkTX --- plugins/Fundamental | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Fundamental b/plugins/Fundamental index f7b3514f..1c03e618 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit f7b3514f99fd07df23b9d123f6c3587302e7f89c +Subproject commit 1c03e618219e28566cb53382c1de843024cbc1f8 From 62b55920c9c33aade2718db13f44e6e4ec5dfa06 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 01:41:47 +0100 Subject: [PATCH 010/283] Remap mouse clicks on macOS to deal with its silly "one button" UX Signed-off-by: falkTX --- dpf | 2 +- plugins/Fundamental | 2 +- src/CardinalUI.cpp | 18 ++++++++---------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/dpf b/dpf index 68de732e..d3d8f910 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 68de732eecbd1d8febf94e15558c5adaa45dfa9b +Subproject commit d3d8f910e35142b5289c073a36ef1c23becc2e46 diff --git a/plugins/Fundamental b/plugins/Fundamental index 1c03e618..71f4c72d 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 1c03e618219e28566cb53382c1de843024cbc1f8 +Subproject commit 71f4c72ded3560639b4ff1df3bb827e31c7d61a0 diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index c7875559..ae7918e7 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -612,39 +612,37 @@ class CardinalUI : public CardinalBaseUI, bool onMouse(const MouseEvent& ev) override { const int action = ev.press ? GLFW_PRESS : GLFW_RELEASE; - const int mods = glfwMods(ev.mod); + int mods = glfwMods(ev.mod); int button; switch (ev.button) { case 1: button = GLFW_MOUSE_BUTTON_LEFT; break; -#ifdef DISTRHO_OS_MAC + #ifdef DISTRHO_OS_MAC case 2: button = GLFW_MOUSE_BUTTON_RIGHT; break; case 3: button = GLFW_MOUSE_BUTTON_MIDDLE; break; -#else + #else case 2: button = GLFW_MOUSE_BUTTON_MIDDLE; break; case 3: button = GLFW_MOUSE_BUTTON_RIGHT; break; -#endif + #endif default: button = ev.button; break; } - /* - #if defined ARCH_MAC - // Remap Ctrl-left click to right click on Mac + #ifdef DISTRHO_OS_MAC + // Remap Ctrl-left click to right click on macOS if (button == GLFW_MOUSE_BUTTON_LEFT && (mods & RACK_MOD_MASK) == GLFW_MOD_CONTROL) { button = GLFW_MOUSE_BUTTON_RIGHT; mods &= ~GLFW_MOD_CONTROL; } - // Remap Ctrl-shift-left click to middle click on Mac + // Remap Ctrl-shift-left click to middle click on macOS if (button == GLFW_MOUSE_BUTTON_LEFT && (mods & RACK_MOD_MASK) == (GLFW_MOD_CONTROL | GLFW_MOD_SHIFT)) { button = GLFW_MOUSE_BUTTON_MIDDLE; mods &= ~(GLFW_MOD_CONTROL | GLFW_MOD_SHIFT); } - #endif - */ + #endif const ScopedContext sc(this, mods); return context->event->handleButton(lastMousePos, button, action, mods); From 19986c3023da8096cbe534b85e49380a67f5cbd7 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 02:09:12 +0100 Subject: [PATCH 011/283] Add WhatTheRack Signed-off-by: falkTX --- .gitmodules | 3 +++ README.md | 1 + docs/LICENSES.md | 3 +++ plugins/Makefile | 12 ++++++++++++ plugins/WhatTheRack | 1 + plugins/plugins.cpp | 19 +++++++++++++++++++ src/custom/dep.cpp | 4 ++++ 7 files changed, 43 insertions(+) create mode 160000 plugins/WhatTheRack diff --git a/.gitmodules b/.gitmodules index 7e8625b9..88815aa9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -197,3 +197,6 @@ path = plugins/Meander url = https://github.com/knchaffin/Meander.git branch = master-V2 +[submodule "plugins/WhatTheRack"] + path = plugins/WhatTheRack + url = https://github.com/korfuri/WhatTheRack.git diff --git a/README.md b/README.md index ed5e2a53..5e42a1c9 100644 --- a/README.md +++ b/README.md @@ -165,6 +165,7 @@ At the moment the following 3rd-party modules are provided: - unless_modules - Valley - Voxglitch +- WhatTheRack - ZetaCarinae - ZZC diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 4ad94665..5f6fe4cc 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -71,6 +71,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | unless_modules | GPL-3.0-or-later | | | Valley | GPL-3.0-or-later | | | Voxglitch | GPL-3.0-or-later | | +| WhatTheRack | WTFPL | | | ZetaCarinae | GPL-3.0-or-later | | | ZZC | GPL-3.0-or-later | | @@ -204,6 +205,8 @@ Below is a list of artwork licenses from plugins | ValleyAudio/ShareTechMono-*.ttf | OFL-1.1-RFN | | | voxglitch/* | GPL-3.0-or-later | No artwork specific license provided | | voxglitch/ShareTechMono-Regular.ttf | OFL-1.1-RFN | | +| WhatTheRack/* | WTFPL | | +| WhatTheRack/BoomButton/* | CC-BY-3.0 | | | 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 31741b06..9176d696 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -866,6 +866,11 @@ VALLEYAUDIO_CUSTOM_PER_FILE = TempoKnob PLUGIN_FILES += $(filter-out voxglitch/src/plugin.cpp,$(wildcard voxglitch/src/*.cpp)) +# -------------------------------------------------------------- +# WhatTheRack + +PLUGIN_FILES += $(filter-out WhatTheRack/src/plugin.cpp,$(wildcard WhatTheRack/src/*.cpp)) + # modules/types which are present in other plugins VOXGLITCH_CUSTOM = $(DRWAV) AudioFile Looper Readout VOXGLITCH_CUSTOM_PER_FILE = AudioBuffer GateSequencer Grain Sequencer SequencerDisplay VoltageSequencer @@ -1761,6 +1766,13 @@ $(BUILD_DIR)/voxglitch/%.cpp.o: voxglitch/%.cpp -DpluginInstance=pluginInstance__Voxglitch \ -DSKIP_MINGW_FORMAT +$(BUILD_DIR)/WhatTheRack/%.cpp.o: WhatTheRack/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(WHATTHERACK_CUSTOM),$(call custom_module_names,$(m),WhatTheRack)) \ + -DpluginInstance=pluginInstance__WhatTheRack + $(BUILD_DIR)/ZetaCarinaeModules/%.cpp.o: ZetaCarinaeModules/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/WhatTheRack b/plugins/WhatTheRack new file mode 160000 index 00000000..c10856fd --- /dev/null +++ b/plugins/WhatTheRack @@ -0,0 +1 @@ +Subproject commit c10856fd0e02c057a11c3c15b345fcea8b0abce3 diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 130c3645..49016c5e 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -665,6 +665,9 @@ extern Model* modelBlankPanel; #include "voxglitch/src/plugin.hpp" #undef modelLooper +// WhatTheRack +#include "WhatTheRack/src/WhatTheRack.hpp" + // ZetaCarinaeModules #include "ZetaCarinaeModules/src/plugin.hpp" @@ -750,6 +753,7 @@ Plugin* pluginInstance__stocaudio; Plugin* pluginInstance__unless_modules; Plugin* pluginInstance__ValleyAudio; Plugin* pluginInstance__Voxglitch; +Plugin* pluginInstance__WhatTheRack; Plugin* pluginInstance__ZetaCarinaeModules; Plugin* pluginInstance__ZZC; #endif // NOPLUGINS @@ -2487,6 +2491,20 @@ static void initStatic__Voxglitch() } } +static void initStatic__WhatTheRack() +{ + Plugin* p = new Plugin; + pluginInstance__WhatTheRack = p; + + const StaticPluginLoader spl(p, "WhatTheRack"); + if (spl.ok()) + { + p->addModel(modelWhatTheRack); + p->addModel(modelWhatTheMod); + p->addModel(modelWhatTheJack); + } +} + static void initStatic__ZetaCarinaeModules() { Plugin* p = new Plugin; @@ -2591,6 +2609,7 @@ void initStaticPlugins() initStatic__unless_modules(); initStatic__ValleyAudio(); initStatic__Voxglitch(); + initStatic__WhatTheRack(); initStatic__ZetaCarinaeModules(); initStatic__ZZC(); #endif // NOPLUGINS diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index 6e26b1f8..c124d551 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -308,6 +308,10 @@ static const struct { { "/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 }, + // WTFPL + { "/WhatTheRack/res/WhatTheJack.svg", {}, -1 }, + { "/WhatTheRack/res/WhatTheMod.svg", {}, -1 }, + { "/WhatTheRack/res/WhatTheRack.svg", {}, -1 }, }; static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const char* const svgFileToInvert = nullptr) From 0d952f80af49e999b945bf376c73db40f38a8cb7 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 06:33:14 +0100 Subject: [PATCH 012/283] Add Audio to CV Pitch Cardinal module Signed-off-by: falkTX --- Makefile | 15 +- plugins/Cardinal/orig/AudioToCVPitch.svg | 140 +++++++++ plugins/Cardinal/plugin.json | 9 + plugins/Cardinal/res/AudioToCVPitch.svg | 179 +++++++++++ plugins/Cardinal/src/.kdev_include_paths | 1 + plugins/Cardinal/src/AudioToCVPitch.cpp | 362 +++++++++++++++++++++++ plugins/Cardinal/src/HostAudio.cpp | 4 +- plugins/Cardinal/src/HostTime.cpp | 2 +- plugins/Cardinal/src/Widgets.hpp | 38 ++- plugins/Cardinal/src/plugin.hpp | 1 + plugins/Fundamental | 2 +- plugins/Makefile | 6 + plugins/plugins.cpp | 5 + src/Makefile.cardinal.mk | 6 + 14 files changed, 750 insertions(+), 20 deletions(-) create mode 100644 plugins/Cardinal/orig/AudioToCVPitch.svg create mode 100644 plugins/Cardinal/res/AudioToCVPitch.svg create mode 100644 plugins/Cardinal/src/AudioToCVPitch.cpp diff --git a/Makefile b/Makefile index 73a73837..a54098b0 100644 --- a/Makefile +++ b/Makefile @@ -67,7 +67,7 @@ DGL_EXTRA_ARGS = \ WINDOWS_ICON_ID=401 # -------------------------------------------------------------- -# Check for system-wide dependencies +# Check for required system-wide dependencies ifeq ($(SYSDEPS),true) @@ -125,6 +125,15 @@ endif endif endif +# -------------------------------------------------------------- +# Check for optional system-wide dependencies + +ifeq ($(shell pkg-config --exists fftw3f && echo true),true) +HAVE_FFTW3F = true +else +$(warning fftw3f dependency not installed/available) +endif + # -------------------------------------------------------------- # MOD builds @@ -202,6 +211,9 @@ ifeq ($(SYSDEPS),true) else $(MAKE) all -C deps endif +ifeq ($(HAVE_FFTW3F),true) + $(MAKE) all -C deps/aubio +endif dgl: ifneq ($(HEADLESS),true) @@ -250,6 +262,7 @@ deps/unzipfx/unzipfx2cat.exe: clean: $(MAKE) distclean -C carla $(CARLA_EXTRA_ARGS) CAN_GENERATE_LV2_TTL=false STATIC_PLUGIN_TARGET=true $(MAKE) clean -C deps + $(MAKE) clean -C deps/aubio $(MAKE) clean -C dpf/dgl $(MAKE) clean -C dpf/utils/lv2-ttl-generator $(MAKE) clean -C plugins diff --git a/plugins/Cardinal/orig/AudioToCVPitch.svg b/plugins/Cardinal/orig/AudioToCVPitch.svg new file mode 100644 index 00000000..26214ffe --- /dev/null +++ b/plugins/Cardinal/orig/AudioToCVPitch.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + ToCV Pitch + + diff --git a/plugins/Cardinal/plugin.json b/plugins/Cardinal/plugin.json index bc72c412..357f2bdc 100644 --- a/plugins/Cardinal/plugin.json +++ b/plugins/Cardinal/plugin.json @@ -146,6 +146,15 @@ "Utility" ] }, + { + "slug": "AudioToCVPitch", + "name": "Audio 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", + "tags": [ + "Utility" + ] + }, { "slug": "Carla", "name": "Carla Plugin Host", diff --git a/plugins/Cardinal/res/AudioToCVPitch.svg b/plugins/Cardinal/res/AudioToCVPitch.svg new file mode 100644 index 00000000..9612a7b2 --- /dev/null +++ b/plugins/Cardinal/res/AudioToCVPitch.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/Cardinal/src/.kdev_include_paths b/plugins/Cardinal/src/.kdev_include_paths index 41c154ae..268be4e0 100644 --- a/plugins/Cardinal/src/.kdev_include_paths +++ b/plugins/Cardinal/src/.kdev_include_paths @@ -1,3 +1,4 @@ +../../../deps/aubio/src ../../../include ../../../carla/source/backend ../../../carla/source/includes diff --git a/plugins/Cardinal/src/AudioToCVPitch.cpp b/plugins/Cardinal/src/AudioToCVPitch.cpp new file mode 100644 index 00000000..cca3b8ba --- /dev/null +++ b/plugins/Cardinal/src/AudioToCVPitch.cpp @@ -0,0 +1,362 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 Bram Giesen + * Copyright (C) 2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "plugincontext.hpp" +#include "ModuleWidgets.hpp" +#include "Widgets.hpp" + +extern "C" { +#include "aubio.h" +} + +USE_NAMESPACE_DISTRHO; + +// -------------------------------------------------------------------------------------------------------------------- + +// aubio setup values (tested under 48 kHz sample rate) +static constexpr const uint32_t kAubioHopSize = 1; +static constexpr const uint32_t kAubioBufferSize = (1024 + 256 + 128) / kAubioHopSize; + +// default values +static constexpr const float kDefaultSensitivity = 50.f; +static constexpr const float kDefaultTolerance = 6.25f; +static constexpr const float kDefaultThreshold = 12.5f; + +// static checks +static_assert(sizeof(smpl_t) == sizeof(float), "smpl_t is float"); +static_assert(kAubioBufferSize % kAubioHopSize == 0, "kAubioBufferSize / kAubioHopSize has no remainder"); + +// -------------------------------------------------------------------------------------------------------------------- + +struct AudioToCVPitch : Module { + enum ParamIds { + PARAM_SENSITIVITY, + PARAM_CONFIDENCETHRESHOLD, + PARAM_TOLERANCE, + PARAM_OCTAVE, + NUM_PARAMS + }; + enum InputIds { + AUDIO_INPUT, + NUM_INPUTS + }; + enum OutputIds { + CV_PITCH, + CV_GATE, + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + + bool holdOutputPitch = true; + bool smooth = true; + int octave = 0; + + float lastKnownPitchInHz = 0.f; + float lastKnownPitchConfidence = 0.f; + + float lastUsedTolerance = kDefaultTolerance; + float lastUsedOutputPitch = 0.f; + float lastUsedOutputSignal = 0.f; + + fvec_t* const detectedPitch = new_fvec(1); + fvec_t* const inputBuffer = new_fvec(kAubioBufferSize); + uint32_t inputBufferPos = 0; + + aubio_pitch_t* pitchDetector = nullptr; + + dsp::SlewLimiter smoothOutputSignal; + + AudioToCVPitch() + { + config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); + + configInput(AUDIO_INPUT, "Audio"); + configOutput(CV_PITCH, "Pitch"); + configOutput(CV_GATE, "Gate"); + configParam(PARAM_SENSITIVITY, 0.1f, 99.f, kDefaultSensitivity, "Sensitivity", " %"); + configParam(PARAM_CONFIDENCETHRESHOLD, 0.f, 99.f, kDefaultThreshold, "Confidence Threshold", " %"); + configParam(PARAM_TOLERANCE, 0.f, 99.f, kDefaultTolerance, "Tolerance", " %"); + } + + void process(const ProcessArgs& args) override + { + float cvPitch = lastUsedOutputPitch; + float cvSignal = lastUsedOutputSignal; + + inputBuffer->data[inputBufferPos] = inputs[AUDIO_INPUT].getVoltage() * 0.1f + * params[PARAM_SENSITIVITY].getValue(); + + if (++inputBufferPos == kAubioBufferSize) + { + inputBufferPos = 0; + + const float tolerance = params[PARAM_TOLERANCE].getValue(); + if (d_isNotEqual(lastUsedTolerance, tolerance)) + { + lastUsedTolerance = tolerance; + aubio_pitch_set_tolerance(pitchDetector, tolerance * 0.01f); + } + + aubio_pitch_do(pitchDetector, inputBuffer, detectedPitch); + const float detectedPitchInHz = fvec_get_sample(detectedPitch, 0); + const float pitchConfidence = aubio_pitch_get_confidence(pitchDetector); + + if (detectedPitchInHz > 0.f && pitchConfidence >= params[PARAM_CONFIDENCETHRESHOLD].getValue() * 0.01f) + { + const float linearPitch = 12.f * (log2f(detectedPitchInHz / 440.f) + octave - 1) + 69.f; + cvPitch = std::max(-10.f, std::min(10.f, linearPitch * (1.f/12.f))); + lastKnownPitchInHz = detectedPitchInHz; + cvSignal = 10.f; + } + else + { + if (! holdOutputPitch) + lastKnownPitchInHz = cvPitch = 0.0f; + + cvSignal = 0.f; + } + + lastKnownPitchConfidence = pitchConfidence; + lastUsedOutputPitch = cvPitch; + lastUsedOutputSignal = cvSignal; + } + + outputs[CV_PITCH].setVoltage(smooth ? smoothOutputSignal.process(args.sampleTime, cvPitch) : cvPitch); + outputs[CV_GATE].setVoltage(cvSignal); + } + + void onReset() override + { + inputBufferPos = 0; + smooth = true; + holdOutputPitch = true; + octave = 0; + } + + void onSampleRateChange(const SampleRateChangeEvent& e) override + { + float tolerance; + + if (pitchDetector != nullptr) + { + tolerance = aubio_pitch_get_tolerance(pitchDetector); + del_aubio_pitch(pitchDetector); + } + else + { + tolerance = kDefaultTolerance * 0.01f; + } + + pitchDetector = new_aubio_pitch("yinfast", kAubioBufferSize, kAubioHopSize, e.sampleRate); + DISTRHO_SAFE_ASSERT_RETURN(pitchDetector != nullptr,); + + aubio_pitch_set_silence(pitchDetector, -30.0f); + aubio_pitch_set_tolerance(pitchDetector, tolerance); + aubio_pitch_set_unit(pitchDetector, "Hz"); + + const double fall = 1.0 / (double(kAubioBufferSize) / e.sampleRate); + smoothOutputSignal.reset(); + smoothOutputSignal.setRiseFall(fall, fall); + } + + json_t* dataToJson() override + { + json_t* const rootJ = json_object(); + DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr); + + json_object_set_new(rootJ, "holdOutputPitch", json_boolean(holdOutputPitch)); + json_object_set_new(rootJ, "smooth", json_boolean(smooth)); + json_object_set_new(rootJ, "octave", json_integer(octave)); + + return rootJ; + } + + void dataFromJson(json_t* const rootJ) override + { + if (json_t* const holdOutputPitchJ = json_object_get(rootJ, "holdOutputPitch")) + holdOutputPitch = json_boolean_value(holdOutputPitchJ); + + if (json_t* const smoothJ = json_object_get(rootJ, "smooth")) + smooth = json_boolean_value(smoothJ); + + if (json_t* const octaveJ = json_object_get(rootJ, "octave")) + octave = json_integer_value(octaveJ); + } +}; + +struct SmallPercentageNanoKnob : NanoKnob<2, 0> { + SmallPercentageNanoKnob() { + box.size = Vec(32, 32); + displayLabel = ""; + } + + void onChange(const ChangeEvent&) override + { + engine::ParamQuantity* const pq = getParamQuantity(); + DISTRHO_SAFE_ASSERT_RETURN(pq != nullptr,); + + displayString = string::f("%.1f %%", pq->getDisplayValue()); + } +}; + +struct AudioToCVPitchWidget : ModuleWidgetWith9HP { + static constexpr const float startX = 10.0f; + static constexpr const float startY_top = 71.0f; + static constexpr const float startY_cv1 = 115.0f; + static constexpr const float startY_cv2 = 145.0f; + static constexpr const float padding = 32.0f; + + AudioToCVPitch* const module; + std::string monoFontPath; + + AudioToCVPitchWidget(AudioToCVPitch* const m) + : module(m) + { + setModule(m); + setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/AudioToCVPitch.svg"))); + monoFontPath = asset::system("res/fonts/ShareTechMono-Regular.ttf"); + + createAndAddScrews(); + + addInput(createInput(Vec(startX, startY_cv1 + 0 * padding), m, AudioToCVPitch::AUDIO_INPUT)); + addOutput(createOutput(Vec(startX, startY_cv2 + 0 * padding), m, AudioToCVPitch::CV_PITCH)); + addOutput(createOutput(Vec(startX, startY_cv2 + 1 * padding), m, AudioToCVPitch::CV_GATE)); + + SmallPercentageNanoKnob* knobSens = createParamCentered(Vec(box.size.x * 0.5f, startY_cv2 + 85.f), + module, AudioToCVPitch::PARAM_SENSITIVITY); + knobSens->displayString = "50 %"; + addChild(knobSens); + + SmallPercentageNanoKnob* knobTolerance = createParamCentered(Vec(box.size.x * 0.5f, startY_cv2 + 135.f), + module, AudioToCVPitch::PARAM_TOLERANCE); + knobTolerance->displayString = "6.25 %"; + addChild(knobTolerance); + + SmallPercentageNanoKnob* knobThres = createParamCentered(Vec(box.size.x * 0.5f, startY_cv2 + 185.f), + module, AudioToCVPitch::PARAM_CONFIDENCETHRESHOLD); + knobThres->displayString = "12.5 %"; + addChild(knobThres); + } + + void drawInputLine(NVGcontext* const vg, const uint offset, const char* const text) + { + const float y = startY_cv1 + offset * padding; + nvgBeginPath(vg); + nvgFillColor(vg, nvgRGB(0xd0, 0xd0, 0xd0)); + nvgText(vg, startX + 28, y + 16, text, nullptr); + } + + void drawOutputLine(NVGcontext* const vg, const uint offset, const char* const text) + { + const float y = startY_cv2 + offset * padding; + nvgBeginPath(vg); + nvgRoundedRect(vg, startX - 1.f, y - 2.f, box.size.x - startX * 2 + 2.f, 28.f, 4); + nvgFillColor(vg, nvgRGB(0xd0, 0xd0, 0xd0)); + nvgFill(vg); + nvgBeginPath(vg); + nvgFillColor(vg, color::BLACK); + nvgText(vg, startX + 28, y + 16, text, nullptr); + } + + void draw(const DrawArgs& args) override + { + drawBackground(args.vg); + + nvgFontFaceId(args.vg, 0); + nvgFontSize(args.vg, 14); + + drawInputLine(args.vg, 0, "Input"); + drawOutputLine(args.vg, 0, "Pitch"); + drawOutputLine(args.vg, 1, "Gate"); + + nvgFontSize(args.vg, 11); + nvgBeginPath(args.vg); + nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0)); + nvgTextLineHeight(args.vg, 0.8f); + nvgTextAlign(args.vg, NVG_ALIGN_CENTER); + nvgTextBox(args.vg, startX + 6.f, startY_cv2 + 75.f, 11.f, "S\ne\nn\ns", nullptr); + nvgTextBox(args.vg, box.size.x - startX - 16.f, startY_cv2 + 130.f, 11.f, "T\no\nl", nullptr); + nvgTextBox(args.vg, startX + 6.f, startY_cv2 + 175.f, 11.f, "T\nh\nr\ne\ns", nullptr); + + nvgBeginPath(args.vg); + nvgRoundedRect(args.vg, 10.0f, startY_top, box.size.x - 20.f, 38.0f, 4); + nvgFillColor(args.vg, color::BLACK); + nvgFill(args.vg); + + ModuleWidgetWith9HP::draw(args); + } + + void drawLayer(const DrawArgs& args, int layer) override + { + if (layer == 1) + { + nvgFontSize(args.vg, 17); + nvgFillColor(args.vg, nvgRGBf(0.76f, 0.11f, 0.22f)); + + char pitchConfString[24]; + char pitchFreqString[24]; + + std::shared_ptr monoFont = APP->window->loadFont(monoFontPath); + + if (module != nullptr && monoFont != nullptr) + { + nvgFontFaceId(args.vg, monoFont->handle); + + std::snprintf(pitchConfString, sizeof(pitchConfString), "%5.1f %%", module->lastKnownPitchConfidence * 100.f); + std::snprintf(pitchFreqString, sizeof(pitchFreqString), "%5.0f Hz", module->lastKnownPitchInHz); + } + else + { + std::strcpy(pitchConfString, "0.0 %"); + std::strcpy(pitchFreqString, "0 Hz"); + } + + nvgTextAlign(args.vg, NVG_ALIGN_CENTER); + nvgText(args.vg, box.size.x * 0.5f, startY_top + 15.0f, pitchConfString, nullptr); + nvgText(args.vg, box.size.x * 0.5f, startY_top + 33.0f, pitchFreqString, nullptr); + } + + ModuleWidgetWith9HP::drawLayer(args, layer); + } + + void appendContextMenu(Menu* const menu) override + { + menu->addChild(new MenuSeparator); + + menu->addChild(createBoolPtrMenuItem("Hold Output Pitch", "", &module->holdOutputPitch)); + menu->addChild(createBoolPtrMenuItem("Smooth Output Pitch", "", &module->smooth)); + + static const std::vector octaves = {-4, -3, -2, -1, 0, 1, 2, 3, 4}; + menu->addChild(createSubmenuItem("Octave", string::f("%d", module->octave), [=](Menu* menu) { + for (size_t i = 0; i < octaves.size(); i++) { + menu->addChild(createCheckMenuItem(string::f("%d", octaves[i]), "", + [=]() {return module->octave == octaves[i];}, + [=]() {module->octave = octaves[i];} + )); + } + })); + } +}; + +// -------------------------------------------------------------------------------------------------------------------- + +Model* modelAudioToCVPitch = createModel("AudioToCVPitch"); + +// -------------------------------------------------------------------------------------------------------------------- diff --git a/plugins/Cardinal/src/HostAudio.cpp b/plugins/Cardinal/src/HostAudio.cpp index d5f4c647..35559636 100644 --- a/plugins/Cardinal/src/HostAudio.cpp +++ b/plugins/Cardinal/src/HostAudio.cpp @@ -329,12 +329,14 @@ struct HostAudioNanoMeter : NanoMeter { // -------------------------------------------------------------------------------------------------------------------- struct HostAudioWidget2 : HostAudioWidget<2> { + typedef NanoKnob<> Knob; + HostAudioWidget2(HostAudio2* const m) : HostAudioWidget<2>(m) { // FIXME const float middleX = box.size.x * 0.5f; - addParam(createParamCentered(Vec(middleX, 310.0f), m, 0)); + addParam(createParamCentered(Vec(middleX, 310.0f), m, 0)); HostAudioNanoMeter* const meter = new HostAudioNanoMeter(m); meter->box.pos = Vec(middleX - padding + 2.75f, startY + padding * 2); diff --git a/plugins/Cardinal/src/HostTime.cpp b/plugins/Cardinal/src/HostTime.cpp index da3fd5ad..ec9b8b49 100644 --- a/plugins/Cardinal/src/HostTime.cpp +++ b/plugins/Cardinal/src/HostTime.cpp @@ -214,7 +214,7 @@ struct HostTimeWidget : ModuleWidget { { const float y = startY_cv + offset * padding; nvgBeginPath(vg); - nvgRoundedRect(vg, startX - 1.0f, y - 2.0f, box.size.x - (startX + 1) * 2, 28.0f, 4); + nvgRoundedRect(vg, startX - 1.0f, y - 2.f, box.size.x - startX * 2 + 2.f, 28.f, 4); nvgFillColor(vg, nvgRGB(0xd0, 0xd0, 0xd0)); nvgFill(vg); nvgBeginPath(vg); diff --git a/plugins/Cardinal/src/Widgets.hpp b/plugins/Cardinal/src/Widgets.hpp index 730262a0..b5732461 100644 --- a/plugins/Cardinal/src/Widgets.hpp +++ b/plugins/Cardinal/src/Widgets.hpp @@ -61,9 +61,8 @@ struct CardinalLedDisplayChoice : LedDisplayChoice { } }; +template struct NanoKnob : Knob { - static const int ringSize = 4; - std::string displayLabel = "Level"; std::string displayString = "0 dB"; float normalizedValue = 0.5f; @@ -81,14 +80,14 @@ struct NanoKnob : Knob { const float w = box.size.x; const float h = box.size.y; - const int knobSize = std::min(w, h - BND_WIDGET_HEIGHT * 2) - ringSize; + const int knobSize = std::min(w, h - BND_WIDGET_HEIGHT * heightPadding) - ringSize; const int knobStartX = w / 2 - knobSize / 2; const int knobStartY = ringSize; const int knobCenterX = knobStartX + knobSize / 2; const int knobCenterY = knobStartY + knobSize / 2; - const NVGcolor testing = nvgRGBf(0.76f, 0.11f, 0.22f); + const NVGcolor cardinalColor = nvgRGBf(0.76f, 0.11f, 0.22f); nvgLineCap(args.vg, NVG_ROUND); @@ -102,7 +101,7 @@ struct NanoKnob : Knob { nvgDegToRad(135.0f) + nvgDegToRad(270.0f * normalizedValue), NVG_CW); nvgStrokeWidth(args.vg, ringSize); - nvgStrokeColor(args.vg, testing); + nvgStrokeColor(args.vg, cardinalColor); nvgStroke(args.vg); // simulate color bleeding @@ -115,7 +114,7 @@ struct NanoKnob : Knob { nvgDegToRad(135.0f) + nvgDegToRad(270.0f * normalizedValue), NVG_CW); nvgStrokeWidth(args.vg, 5); - nvgStrokeColor(args.vg, nvgRGBAf(testing.r, testing.g, testing.b, 0.1f)); + nvgStrokeColor(args.vg, nvgRGBAf(cardinalColor.r, cardinalColor.g, cardinalColor.b, 0.1f)); nvgStroke(args.vg); // line indicator @@ -136,7 +135,7 @@ struct NanoKnob : Knob { float radius = knobSize * 0.5f; float oradius = radius + std::min(radius * 4.f, 15.f); - NVGcolor icol = color::mult(nvgRGBAf(testing.r, testing.g, testing.b, 0.2f), halo); + NVGcolor icol = color::mult(nvgRGBAf(cardinalColor.r, cardinalColor.g, cardinalColor.b, 0.2f), halo); NVGcolor ocol = nvgRGBA(0, 0, 0, 0); NVGpaint paint = nvgRadialGradient(args.vg, knobCenterX, knobCenterY, radius, oradius, icol, ocol); @@ -146,10 +145,13 @@ struct NanoKnob : Knob { nvgFill(args.vg); } - // bottom label (value) - bndIconLabelValue(args.vg, 0, knobSize + ringSize, w, BND_WIDGET_HEIGHT, -1, - testing, BND_CENTER, - BND_LABEL_FONT_SIZE, displayString.c_str(), nullptr); + if (! displayString.empty()) + { + // bottom label (value) + bndIconLabelValue(args.vg, -w, knobSize + ringSize, w*3, BND_WIDGET_HEIGHT, -1, + cardinalColor, BND_CENTER, + BND_LABEL_FONT_SIZE, displayString.c_str(), nullptr); + } Knob::drawLayer(args, layer); } @@ -162,7 +164,7 @@ struct NanoKnob : Knob { const float w = box.size.x; const float h = box.size.y; - const int knobSize = std::min(w, h - BND_WIDGET_HEIGHT * 2) - ringSize; + const int knobSize = std::min(w, h - BND_WIDGET_HEIGHT * heightPadding) - ringSize; const int knobStartX = w / 2 - knobSize / 2; const int knobStartY = ringSize; @@ -224,10 +226,14 @@ struct NanoKnob : Knob { nvgStrokeColor(args.vg, nvgRGBf(0.5f, 0.5f, 0.5f)); nvgStroke(args.vg); - // bottom label (name) - bndIconLabelValue(args.vg, 0, knobStartY + knobSize + BND_WIDGET_HEIGHT * 0.75f, w, BND_WIDGET_HEIGHT, -1, - SCHEME_WHITE, BND_CENTER, - BND_LABEL_FONT_SIZE, displayLabel.c_str(), nullptr); + if (! displayLabel.empty()) + { + // bottom label (name) + bndIconLabelValue(args.vg, -w, knobStartY + knobSize + BND_WIDGET_HEIGHT * 0.75f, + w*3, BND_WIDGET_HEIGHT, -1, + SCHEME_WHITE, BND_CENTER, + BND_LABEL_FONT_SIZE, displayLabel.c_str(), nullptr); + } Knob::draw(args); } diff --git a/plugins/Cardinal/src/plugin.hpp b/plugins/Cardinal/src/plugin.hpp index 710d31d6..230e9572 100644 --- a/plugins/Cardinal/src/plugin.hpp +++ b/plugins/Cardinal/src/plugin.hpp @@ -29,6 +29,7 @@ using namespace rack; extern Plugin* pluginInstance; extern Model* modelAudioFile; +extern Model* modelAudioToCVPitch; extern Model* modelCarla; extern Model* modelCardinalBlank; extern Model* modelExpanderInputMIDI; diff --git a/plugins/Fundamental b/plugins/Fundamental index 71f4c72d..ec6d477c 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 71f4c72ded3560639b4ff1df3bb827e31c7d61a0 +Subproject commit ec6d477cedc9a00b7dde0f2713d263c4778162d2 diff --git a/plugins/Makefile b/plugins/Makefile index 9176d696..070df55e 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -222,6 +222,11 @@ PLUGIN_FILES += $(wildcard Cardinal/src/DearImGui/*.cpp) PLUGIN_FILES += $(wildcard Cardinal/src/DearImGuiColorTextEditor/*.cpp) endif +ifeq ($(shell pkg-config --exists fftw3f && echo true),true) +PLUGIN_FILES += Cardinal/src/AudioToCVPitch.cpp +BASE_FLAGS += -DHAVE_FFTW3F +endif + # -------------------------------------------------------------- # Fundamental (always enabled) @@ -1215,6 +1220,7 @@ $(BUILD_DIR)/Cardinal/%.cpp.o: Cardinal/%.cpp -DCARLA_BACKEND_NAMESPACE=Cardinal \ -DREAL_BUILD \ -DSTATIC_PLUGIN_TARGET \ + -I../deps/aubio/src \ -I../carla/source/backend \ -I../carla/source/includes \ -I../carla/source/modules \ diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 49016c5e..d6aed249 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -882,6 +882,11 @@ static void initStatic__Cardinal() #else spl.removeModule("MPV"); #endif + #ifdef HAVE_FFTW3F + p->addModel(modelAudioToCVPitch); + #else + spl.removeModule("AudioToCVPitch"); + #endif hostTerminalModels = { modelHostAudio2, diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 45661a2a..5fc11d9f 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -113,6 +113,12 @@ endif EXTRA_DEPENDENCIES = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) EXTRA_LIBS = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) $(STATIC_CARLA_PLUGIN_LIBS) +ifeq ($(shell pkg-config --exists fftw3f && echo true),true) +EXTRA_DEPENDENCIES += ../../deps/aubio/libaubio.a +EXTRA_LIBS += ../../deps/aubio/libaubio.a +EXTRA_LIBS += $(shell $(PKG_CONFIG) --libs fftw3f) +endif + # -------------------------------------------------------------- # Do some magic From 2ae7009b0e7f638a070d2f669b10e924796ec779 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 06:57:49 +0100 Subject: [PATCH 013/283] Add in tree aubio Signed-off-by: falkTX --- deps/aubio/COPYING | 674 +++++++++++++++++++++++ deps/aubio/Makefile | 62 +++ deps/aubio/config.h | 20 + deps/aubio/src/aubio.h | 208 ++++++++ deps/aubio/src/aubio_priv.h | 359 +++++++++++++ deps/aubio/src/cvec.c | 169 ++++++ deps/aubio/src/cvec.h | 247 +++++++++ deps/aubio/src/fvec.c | 149 ++++++ deps/aubio/src/fvec.h | 178 +++++++ deps/aubio/src/lvec.c | 80 +++ deps/aubio/src/lvec.h | 118 ++++ deps/aubio/src/mathutils.c | 681 ++++++++++++++++++++++++ deps/aubio/src/mathutils.h | 338 ++++++++++++ deps/aubio/src/musicutils.h | 270 ++++++++++ deps/aubio/src/pitch/pitch.c | 530 ++++++++++++++++++ deps/aubio/src/pitch/pitch.h | 197 +++++++ deps/aubio/src/pitch/pitchfcomb.c | 144 +++++ deps/aubio/src/pitch/pitchfcomb.h | 76 +++ deps/aubio/src/pitch/pitchmcomb.c | 435 +++++++++++++++ deps/aubio/src/pitch/pitchmcomb.h | 77 +++ deps/aubio/src/pitch/pitchschmitt.c | 119 +++++ deps/aubio/src/pitch/pitchschmitt.h | 75 +++ deps/aubio/src/pitch/pitchspecacf.c | 116 ++++ deps/aubio/src/pitch/pitchspecacf.h | 103 ++++ deps/aubio/src/pitch/pitchyin.c | 189 +++++++ deps/aubio/src/pitch/pitchyin.h | 100 ++++ deps/aubio/src/pitch/pitchyinfast.c | 201 +++++++ deps/aubio/src/pitch/pitchyinfast.h | 102 ++++ deps/aubio/src/pitch/pitchyinfft.c | 208 ++++++++ deps/aubio/src/pitch/pitchyinfft.h | 99 ++++ deps/aubio/src/spectral/fft.c | 582 ++++++++++++++++++++ deps/aubio/src/spectral/fft.h | 144 +++++ deps/aubio/src/spectral/phasevoc.c | 224 ++++++++ deps/aubio/src/spectral/phasevoc.h | 113 ++++ deps/aubio/src/temporal/a_weighting.c | 262 +++++++++ deps/aubio/src/temporal/a_weighting.h | 88 +++ deps/aubio/src/temporal/biquad.c | 54 ++ deps/aubio/src/temporal/biquad.h | 75 +++ deps/aubio/src/temporal/c_weighting.c | 217 ++++++++ deps/aubio/src/temporal/c_weighting.h | 88 +++ deps/aubio/src/temporal/filter.c | 163 ++++++ deps/aubio/src/temporal/filter.h | 176 ++++++ deps/aubio/src/temporal/resampler.c | 100 ++++ deps/aubio/src/temporal/resampler.h | 65 +++ deps/aubio/src/types.h | 70 +++ deps/aubio/src/utils/log.c | 92 ++++ deps/aubio/src/utils/log.h | 99 ++++ plugins/Cardinal/src/AudioToCVPitch.cpp | 2 +- 48 files changed, 8937 insertions(+), 1 deletion(-) create mode 100644 deps/aubio/COPYING create mode 100644 deps/aubio/Makefile create mode 100644 deps/aubio/config.h create mode 100644 deps/aubio/src/aubio.h create mode 100644 deps/aubio/src/aubio_priv.h create mode 100644 deps/aubio/src/cvec.c create mode 100644 deps/aubio/src/cvec.h create mode 100644 deps/aubio/src/fvec.c create mode 100644 deps/aubio/src/fvec.h create mode 100644 deps/aubio/src/lvec.c create mode 100644 deps/aubio/src/lvec.h create mode 100644 deps/aubio/src/mathutils.c create mode 100644 deps/aubio/src/mathutils.h create mode 100644 deps/aubio/src/musicutils.h create mode 100644 deps/aubio/src/pitch/pitch.c create mode 100644 deps/aubio/src/pitch/pitch.h create mode 100644 deps/aubio/src/pitch/pitchfcomb.c create mode 100644 deps/aubio/src/pitch/pitchfcomb.h create mode 100644 deps/aubio/src/pitch/pitchmcomb.c create mode 100644 deps/aubio/src/pitch/pitchmcomb.h create mode 100644 deps/aubio/src/pitch/pitchschmitt.c create mode 100644 deps/aubio/src/pitch/pitchschmitt.h create mode 100644 deps/aubio/src/pitch/pitchspecacf.c create mode 100644 deps/aubio/src/pitch/pitchspecacf.h create mode 100644 deps/aubio/src/pitch/pitchyin.c create mode 100644 deps/aubio/src/pitch/pitchyin.h create mode 100644 deps/aubio/src/pitch/pitchyinfast.c create mode 100644 deps/aubio/src/pitch/pitchyinfast.h create mode 100644 deps/aubio/src/pitch/pitchyinfft.c create mode 100644 deps/aubio/src/pitch/pitchyinfft.h create mode 100644 deps/aubio/src/spectral/fft.c create mode 100644 deps/aubio/src/spectral/fft.h create mode 100644 deps/aubio/src/spectral/phasevoc.c create mode 100644 deps/aubio/src/spectral/phasevoc.h create mode 100644 deps/aubio/src/temporal/a_weighting.c create mode 100644 deps/aubio/src/temporal/a_weighting.h create mode 100644 deps/aubio/src/temporal/biquad.c create mode 100644 deps/aubio/src/temporal/biquad.h create mode 100644 deps/aubio/src/temporal/c_weighting.c create mode 100644 deps/aubio/src/temporal/c_weighting.h create mode 100644 deps/aubio/src/temporal/filter.c create mode 100644 deps/aubio/src/temporal/filter.h create mode 100644 deps/aubio/src/temporal/resampler.c create mode 100644 deps/aubio/src/temporal/resampler.h create mode 100644 deps/aubio/src/types.h create mode 100644 deps/aubio/src/utils/log.c create mode 100644 deps/aubio/src/utils/log.h diff --git a/deps/aubio/COPYING b/deps/aubio/COPYING new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/deps/aubio/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/deps/aubio/Makefile b/deps/aubio/Makefile new file mode 100644 index 00000000..8d6e45a7 --- /dev/null +++ b/deps/aubio/Makefile @@ -0,0 +1,62 @@ +#!/usr/bin/make -f +# Makefile for static aubio # +# ------------------------- # +# Created by falkTX +# + +# -------------------------------------------------------------- +# Import base definitions + +USE_NANOVG_FBO = true +include ../../dpf/Makefile.base.mk + +# -------------------------------------------------------------- + +BUILD_C_FLAGS += -DHAVE_CONFIG_H +BUILD_C_FLAGS += -I. +BUILD_C_FLAGS += -Isrc +BUILD_C_FLAGS += $(shell pkg-config --cflags fftw3f) + +OBJS = \ + src/cvec.c.o \ + src/fvec.c.o \ + src/lvec.c.o \ + src/mathutils.c.o \ + src/pitch/pitch.c.o \ + src/pitch/pitchfcomb.c.o \ + src/pitch/pitchmcomb.c.o \ + src/pitch/pitchschmitt.c.o \ + src/pitch/pitchspecacf.c.o \ + src/pitch/pitchyin.c.o \ + src/pitch/pitchyinfast.c.o \ + src/pitch/pitchyinfft.c.o \ + src/spectral/fft.c.o \ + src/spectral/phasevoc.c.o \ + src/temporal/a_weighting.c.o \ + src/temporal/biquad.c.o \ + src/temporal/c_weighting.c.o \ + src/temporal/filter.c.o \ + src/temporal/resampler.c.o \ + src/utils/log.c.o \ + +# -------------------------------------------------------------- + +all: libaubio.a + +clean: + rm -f *.a src/*.d src/*.o src/*/*.d src/*/*.o + +libaubio.a: $(OBJS) + rm -f $@ + $(AR) crs $@ $^ + +# -------------------------------------------------------------- + +%.c.o: %.c + $(CC) $< $(BUILD_C_FLAGS) -c -o $@ + +# -------------------------------------------------------------- + +-include $(OBJS:%.o=%.d) + +# -------------------------------------------------------------- diff --git a/deps/aubio/config.h b/deps/aubio/config.h new file mode 100644 index 00000000..7985662f --- /dev/null +++ b/deps/aubio/config.h @@ -0,0 +1,20 @@ +#ifndef AUBIO_CONFIG_H +#define AUBIO_CONFIG_H + +#define HAVE_STDLIB_H 1 +#define HAVE_STDIO_H 1 +#define HAVE_MATH_H 1 +#define HAVE_STRING_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_GETOPT_H 1 +#define HAVE_UNISTD_H 1 + +#define HAVE_C99_VARARGS_MACROS 1 +#define HAVE_MEMCPY_HACKS 1 + +#define HAVE_FFTW3 +#define HAVE_FFTW3F +#define HAVE_COMPLEX_H + +#endif /* AUBIO_CONFIG_H */ diff --git a/deps/aubio/src/aubio.h b/deps/aubio/src/aubio.h new file mode 100644 index 00000000..4d26ea86 --- /dev/null +++ b/deps/aubio/src/aubio.h @@ -0,0 +1,208 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \mainpage + + \section introduction Introduction + + aubio is a library to extract annotations from audio signals: it provides a + set of functions that take an input audio signal, and output pitch estimates, + attack times (onset), beat location estimates, and other annotation tasks. + + \section basics Basics + + All object structures in aubio share the same function prefixes and suffixes: + + - \p new_aubio_foo creates the object \p foo + - \p aubio_foo_do executes the object \p foo + - \p del_aubio_foo destroys the object \p foo + + All memory allocation and deallocation take place in the \p new_ and \p del_ + functions. Optionally, more than one \p _do methods are available. + Additional parameters can be adjusted and observed using: + + - \p aubio_foo_get_param, getter function, gets the value of a parameter + - \p aubio_foo_set_param, setter function, changes the value of a parameter + + Unless specified in its documentation, no memory operations take place in the + getter functions. However, memory resizing can take place in setter + functions. + + \subsection vectors Vectors + + Two basic structures are being used in aubio: ::fvec_t and ::cvec_t. The + ::fvec_t structures are used to store vectors of floating pointer number. + ::cvec_t are used to store complex number, as two vectors of norm and phase + elements. + + Additionally, the ::lvec_t structure can be used to store floating point + numbers in double precision. They are mostly used to store filter + coefficients, to avoid instability. + + \subsection objects Available objects + + Here is a list of some of the most common objects for aubio: + + \code + + // fast Fourier transform (FFT) + aubio_fft_t *fft = new_aubio_fft (winsize); + // phase vocoder + aubio_pvoc_t *pv = new_aubio_pvoc (winsize, stepsize); + // onset detection + aubio_onset_t *onset = new_aubio_onset (method, winsize, stepsize, samplerate); + // pitch detection + aubio_pitch_t *pitch = new_aubio_pitch (method, winsize, stepsize, samplerate); + // beat tracking + aubio_tempo_t *tempo = new_aubio_tempo (method, winsize, stepsize, samplerate); + + \endcode + + See the list of typedefs for a complete list. + + \subsection example Example + + Here is a simple example that creates an A-Weighting filter and applies it to a + vector. + + \code + + // set window size, and sampling rate + uint_t winsize = 1024, sr = 44100; + // create a vector + fvec_t *this_buffer = new_fvec (winsize); + // create the a-weighting filter + aubio_filter_t *this_filter = new_aubio_filter_a_weighting (sr); + + while (running) { + // here some code to put some data in this_buffer + // ... + + // apply the filter, in place + aubio_filter_do (this_filter, this_buffer); + + // here some code to get some data from this_buffer + // ... + } + + // and free the structures + del_aubio_filter (this_filter); + del_fvec (this_buffer); + + \endcode + + Several examples of C programs are available in the \p examples/ and \p tests/src + directories of the source tree. + + Some examples: + - @ref spectral/test-fft.c + - @ref spectral/test-phasevoc.c + - @ref onset/test-onset.c + - @ref pitch/test-pitch.c + - @ref tempo/test-tempo.c + - @ref test-fvec.c + - @ref test-cvec.c + + \subsection unstable_api Unstable API + + Several more functions are available and used within aubio, but not + documented here, either because they are not considered useful to the user, + or because they may need to be changed in the future. However, they can still + be used by defining AUBIO_UNSTABLE to 1 before including the aubio header: + + \code + #define AUBIO_UNSTABLE 1 + #include + \endcode + + Future versions of aubio could break API compatibility with these functions + without warning. If you choose to use functions in AUBIO_UNSTABLE, you are on + your own. + + \section download Download + + Latest versions, further documentation, examples, wiki, and mailing lists can + be found at https://aubio.org . + + */ + +#ifndef AUBIO_H +#define AUBIO_H + +/** @file aubio.h Global aubio include file. + + You will want to include this file as: + + @code + #include + @endcode + + To access headers with unstable prototypes, use: + + @code + #define AUBIO_UNSTABLE 1 + #include + @endcode + + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* in this order */ +#include "types.h" +#include "fvec.h" +// #include "cvec.h" +// #include "lvec.h" +// // #include "fmat.h" +// #include "musicutils.h" +// // #include "vecutils.h" +// #include "temporal/resampler.h" +// #include "temporal/filter.h" +// #include "temporal/biquad.h" +// #include "temporal/a_weighting.h" +// #include "temporal/c_weighting.h" +// #include "spectral/fft.h" +// // #include "spectral/dct.h" +// #include "spectral/phasevoc.h" +// // #include "spectral/filterbank.h" +// // #include "spectral/filterbank_mel.h" +// // #include "spectral/mfcc.h" +// // #include "spectral/specdesc.h" +// // #include "spectral/awhitening.h" +// // #include "spectral/tss.h" +#include "pitch/pitch.h" +// // #include "onset/onset.h" +// // #include "tempo/tempo.h" +// // #include "notes/notes.h" +// // #include "io/source.h" +// // #include "io/sink.h" +// // #include "synth/sampler.h" +// // #include "synth/wavetable.h" +// // #include "utils/parameter.h" +// #include "utils/log.h" + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/deps/aubio/src/aubio_priv.h b/deps/aubio/src/aubio_priv.h new file mode 100644 index 00000000..8cd3225c --- /dev/null +++ b/deps/aubio/src/aubio_priv.h @@ -0,0 +1,359 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** @file + * Private include file + * + * This file is for inclusion from _within_ the library only. + */ + +#ifndef AUBIO_PRIV_H +#define AUBIO_PRIV_H + +/********************* + * + * External includes + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_STDIO_H +#include +#endif + +/* must be included before fftw3.h */ +#ifdef HAVE_COMPLEX_H +#include +#endif + +#if defined(HAVE_FFTW3) || defined(HAVE_FFTW3F) +#include +#endif + +#ifdef HAVE_MATH_H +#include +#endif + +#ifdef HAVE_STRING_H +#include +#endif + +#ifdef HAVE_LIMITS_H +#include // for CHAR_BIT, in C99 standard +#endif + +#ifdef HAVE_STDARG_H +#include +#endif + +#ifdef HAVE_ACCELERATE +#define HAVE_ATLAS 1 +#include +#elif defined(HAVE_ATLAS_CBLAS_H) +#define HAVE_ATLAS 1 +#include +#else +#undef HAVE_ATLAS +#endif + +#ifdef HAVE_ACCELERATE +#include +#ifndef HAVE_AUBIO_DOUBLE +#define aubio_vDSP_mmov vDSP_mmov +#define aubio_vDSP_vmul vDSP_vmul +#define aubio_vDSP_vfill vDSP_vfill +#define aubio_vDSP_meanv vDSP_meanv +#define aubio_vDSP_sve vDSP_sve +#define aubio_vDSP_maxv vDSP_maxv +#define aubio_vDSP_maxvi vDSP_maxvi +#define aubio_vDSP_minv vDSP_minv +#define aubio_vDSP_minvi vDSP_minvi +#define aubio_vDSP_dotpr vDSP_dotpr +#define aubio_vDSP_vclr vDSP_vclr +#else /* HAVE_AUBIO_DOUBLE */ +#define aubio_vDSP_mmov vDSP_mmovD +#define aubio_vDSP_vmul vDSP_vmulD +#define aubio_vDSP_vfill vDSP_vfillD +#define aubio_vDSP_meanv vDSP_meanvD +#define aubio_vDSP_sve vDSP_sveD +#define aubio_vDSP_maxv vDSP_maxvD +#define aubio_vDSP_maxvi vDSP_maxviD +#define aubio_vDSP_minv vDSP_minvD +#define aubio_vDSP_minvi vDSP_minviD +#define aubio_vDSP_dotpr vDSP_dotprD +#define aubio_vDSP_vclr vDSP_vclrD +#endif /* HAVE_AUBIO_DOUBLE */ +#endif /* HAVE_ACCELERATE */ + +#ifdef HAVE_ATLAS +#ifndef HAVE_AUBIO_DOUBLE +#define aubio_catlas_set catlas_sset +#define aubio_cblas_copy cblas_scopy +#define aubio_cblas_swap cblas_sswap +#define aubio_cblas_dot cblas_sdot +#else /* HAVE_AUBIO_DOUBLE */ +#define aubio_catlas_set catlas_dset +#define aubio_cblas_copy cblas_dcopy +#define aubio_cblas_swap cblas_dswap +#define aubio_cblas_dot cblas_ddot +#endif /* HAVE_AUBIO_DOUBLE */ +#endif /* HAVE_ATLAS */ + +#if defined HAVE_INTEL_IPP +#include +#include +#include +#ifndef HAVE_AUBIO_DOUBLE +#define aubio_ippsSet ippsSet_32f +#define aubio_ippsZero ippsZero_32f +#define aubio_ippsCopy ippsCopy_32f +#define aubio_ippsMul ippsMul_32f +#define aubio_ippsMulC ippsMulC_32f +#define aubio_ippsAddC ippsAddC_32f +#define aubio_ippsLn ippsLn_32f_A21 +#define aubio_ippsMean(a,b,c) ippsMean_32f(a, b, c, ippAlgHintFast) +#define aubio_ippsSum(a,b,c) ippsSum_32f(a, b, c, ippAlgHintFast) +#define aubio_ippsMax ippsMax_32f +#define aubio_ippsMin ippsMin_32f +#else /* HAVE_AUBIO_DOUBLE */ +#define aubio_ippsSet ippsSet_64f +#define aubio_ippsZero ippsZero_64f +#define aubio_ippsCopy ippsCopy_64f +#define aubio_ippsMul ippsMul_64f +#define aubio_ippsMulC ippsMulC_64f +#define aubio_ippsAddC ippsAddC_64f +#define aubio_ippsLn ippsLn_64f_A26 +#define aubio_ippsMean ippsMean_64f +#define aubio_ippsSum ippsSum_64f +#define aubio_ippsMax ippsMax_64f +#define aubio_ippsMin ippsMin_64f +#endif /* HAVE_AUBIO_DOUBLE */ +#endif + +#if !defined(HAVE_MEMCPY_HACKS) && !defined(HAVE_ACCELERATE) && !defined(HAVE_ATLAS) && !defined(HAVE_INTEL_IPP) +#define HAVE_NOOPT 1 +#else +#undef HAVE_NOOPT +#endif + +#include "types.h" + +#define AUBIO_UNSTABLE 1 + +#include "mathutils.h" + +/**** + * + * SYSTEM INTERFACE + * + */ + +/* Memory management */ +#define AUBIO_MALLOC(_n) malloc(_n) +#define AUBIO_REALLOC(_p,_n) realloc(_p,_n) +#define AUBIO_NEW(_t) (_t*)calloc(sizeof(_t), 1) +#define AUBIO_ARRAY(_t,_n) (_t*)calloc((_n)*sizeof(_t), 1) +#define AUBIO_MEMCPY(_dst,_src,_n) memcpy(_dst,_src,_n) +#define AUBIO_MEMSET(_dst,_src,_t) memset(_dst,_src,_t) +#define AUBIO_FREE(_p) free(_p) + + +/* file interface */ +#define AUBIO_FOPEN(_f,_m) fopen(_f,_m) +#define AUBIO_FCLOSE(_f) fclose(_f) +#define AUBIO_FREAD(_p,_s,_n,_f) fread(_p,_s,_n,_f) +#define AUBIO_FSEEK(_f,_n,_set) fseek(_f,_n,_set) + +/* strings */ +#define AUBIO_STRLEN(_s) strlen(_s) +#define AUBIO_STRCMP(_s,_t) strcmp(_s,_t) +#define AUBIO_STRNCMP(_s,_t,_n) strncmp(_s,_t,_n) +#define AUBIO_STRCPY(_dst,_src) strcpy(_dst,_src) +#define AUBIO_STRCHR(_s,_c) strchr(_s,_c) +#ifdef strdup +#define AUBIO_STRDUP(s) strdup(s) +#else +#define AUBIO_STRDUP(s) AUBIO_STRCPY(AUBIO_MALLOC(AUBIO_STRLEN(s) + 1), s) +#endif + + +/* Error reporting */ +typedef enum { + AUBIO_OK = 0, + AUBIO_FAIL = 1 +} aubio_status; + +/* Logging */ + +#include "utils/log.h" + +/** internal logging function, defined in utils/log.c */ +uint_t aubio_log(sint_t level, const char_t *fmt, ...); + +#ifdef HAVE_C99_VARARGS_MACROS +#define AUBIO_ERR(...) aubio_log(AUBIO_LOG_ERR, "AUBIO ERROR: " __VA_ARGS__) +#define AUBIO_INF(...) aubio_log(AUBIO_LOG_INF, "AUBIO INFO: " __VA_ARGS__) +#define AUBIO_MSG(...) aubio_log(AUBIO_LOG_MSG, __VA_ARGS__) +#define AUBIO_DBG(...) aubio_log(AUBIO_LOG_DBG, __VA_ARGS__) +#define AUBIO_WRN(...) aubio_log(AUBIO_LOG_WRN, "AUBIO WARNING: " __VA_ARGS__) +#else +#define AUBIO_ERR(format, args...) aubio_log(AUBIO_LOG_ERR, "AUBIO ERROR: " format , ##args) +#define AUBIO_INF(format, args...) aubio_log(AUBIO_LOG_INF, "AUBIO INFO: " format , ##args) +#define AUBIO_MSG(format, args...) aubio_log(AUBIO_LOG_MSG, format , ##args) +#define AUBIO_DBG(format, args...) aubio_log(AUBIO_LOG_DBG, format , ##args) +#define AUBIO_WRN(format, args...) aubio_log(AUBIO_LOG_WRN, "AUBIO WARNING: " format, ##args) +#endif + +#define AUBIO_ERROR AUBIO_ERR + +#define AUBIO_QUIT(_s) exit(_s) +#define AUBIO_SPRINTF sprintf + +#define AUBIO_MAX_SAMPLERATE (192000*8) +#define AUBIO_MAX_CHANNELS 1024 + +/* pi and 2*pi */ +#ifndef M_PI +#define PI (3.14159265358979323846) +#else +#define PI (M_PI) +#endif +#define TWO_PI (PI*2.) + +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + +/* aliases to math.h functions */ +#if !HAVE_AUBIO_DOUBLE +#define EXP expf +#define COS cosf +#define SIN sinf +#define ABS fabsf +#define POW powf +#define SQRT sqrtf +#define LOG10 log10f +#define LOG logf +#define FLOOR floorf +#define CEIL ceilf +#define ATAN atanf +#define ATAN2 atan2f +#else +#error using double +#define EXP exp +#define COS cos +#define SIN sin +#define ABS fabs +#define POW pow +#define SQRT sqrt +#define LOG10 log10 +#define LOG log +#define FLOOR floor +#define CEIL ceil +#define ATAN atan +#define ATAN2 atan2 +#endif +#define ROUND(x) FLOOR(x+.5) + +/* aliases to complex.h functions */ +#if HAVE_AUBIO_DOUBLE || !defined(HAVE_COMPLEX_H) || defined(WIN32) +/* mingw32 does not know about c*f functions */ +#define EXPC cexp +/** complex = CEXPC(complex) */ +#define CEXPC cexp +/** sample = ARGC(complex) */ +#define ARGC carg +/** sample = ABSC(complex) norm */ +#define ABSC cabs +/** sample = REAL(complex) */ +#define REAL creal +/** sample = IMAG(complex) */ +#define IMAG cimag +#else +/** sample = EXPC(complex) */ +#define EXPC cexpf +/** complex = CEXPC(complex) */ +#define CEXPC cexp +/** sample = ARGC(complex) */ +#define ARGC cargf +/** sample = ABSC(complex) norm */ +#define ABSC cabsf +/** sample = REAL(complex) */ +#define REAL crealf +/** sample = IMAG(complex) */ +#define IMAG cimagf +#endif + +/* avoid unresolved symbol with msvc 9 */ +#if defined(_MSC_VER) && (_MSC_VER < 1900) +#define isnan _isnan +#endif + +/* handy shortcuts */ +#define DB2LIN(g) (POW(10.0,(g)*0.05f)) +#define LIN2DB(v) (20.0*LOG10(v)) +#define SQR(_a) ((_a)*(_a)) + +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif /* MAX */ +#ifndef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#endif /* MIN */ + +#define ELEM_SWAP(a,b) { register smpl_t t=(a);(a)=(b);(b)=t; } + +#define VERY_SMALL_NUMBER 2.e-42 //1.e-37 + +/** if ABS(f) < VERY_SMALL_NUMBER, returns 1, else 0 */ +#define IS_DENORMAL(f) ABS(f) < VERY_SMALL_NUMBER + +/** if ABS(f) < VERY_SMALL_NUMBER, returns 0., else f */ +#define KILL_DENORMAL(f) IS_DENORMAL(f) ? 0. : f + +/** if f > VERY_SMALL_NUMBER, returns f, else returns VERY_SMALL_NUMBER */ +#define CEIL_DENORMAL(f) f < VERY_SMALL_NUMBER ? VERY_SMALL_NUMBER : f + +#define SAFE_LOG10(f) LOG10(CEIL_DENORMAL(f)) +#define SAFE_LOG(f) LOG(CEIL_DENORMAL(f)) + +/** silence unused parameter warning by adding an attribute */ +#if defined(__GNUC__) +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +/* are we using gcc -std=c99 ? */ +#if defined(__STRICT_ANSI__) +#define strnlen(a,b) MIN(strlen(a),b) +#if !HAVE_AUBIO_DOUBLE +#define floorf floor +#endif +#endif /* __STRICT_ANSI__ */ + +#endif /* AUBIO_PRIV_H */ diff --git a/deps/aubio/src/cvec.c b/deps/aubio/src/cvec.c new file mode 100644 index 00000000..00c43bee --- /dev/null +++ b/deps/aubio/src/cvec.c @@ -0,0 +1,169 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "cvec.h" + +cvec_t * new_cvec(uint_t length) { + cvec_t * s; + if ((sint_t)length <= 0) { + return NULL; + } + s = AUBIO_NEW(cvec_t); + s->length = length/2 + 1; + s->norm = AUBIO_ARRAY(smpl_t,s->length); + s->phas = AUBIO_ARRAY(smpl_t,s->length); + return s; +} + +void del_cvec(cvec_t *s) { + AUBIO_FREE(s->norm); + AUBIO_FREE(s->phas); + AUBIO_FREE(s); +} + +void cvec_norm_set_sample (cvec_t *s, smpl_t data, uint_t position) { + s->norm[position] = data; +} + +void cvec_phas_set_sample (cvec_t *s, smpl_t data, uint_t position) { + s->phas[position] = data; +} + +smpl_t cvec_norm_get_sample (cvec_t *s, uint_t position) { + return s->norm[position]; +} + +smpl_t cvec_phas_get_sample (cvec_t *s, uint_t position) { + return s->phas[position]; +} + +smpl_t * cvec_norm_get_data (const cvec_t *s) { + return s->norm; +} + +smpl_t * cvec_phas_get_data (const cvec_t *s) { + return s->phas; +} + +/* helper functions */ + +void cvec_print(const cvec_t *s) { + uint_t j; + AUBIO_MSG("norm: "); + for (j=0; j< s->length; j++) { + AUBIO_MSG(AUBIO_SMPL_FMT " ", s->norm[j]); + } + AUBIO_MSG("\n"); + AUBIO_MSG("phas: "); + for (j=0; j< s->length; j++) { + AUBIO_MSG(AUBIO_SMPL_FMT " ", s->phas[j]); + } + AUBIO_MSG("\n"); +} + +void cvec_copy(const cvec_t *s, cvec_t *t) { + if (s->length != t->length) { + AUBIO_ERR("trying to copy %d elements to %d elements \n", + s->length, t->length); + return; + } +#if defined(HAVE_INTEL_IPP) + aubio_ippsCopy(s->phas, t->phas, (int)s->length); + aubio_ippsCopy(s->norm, t->norm, (int)s->length); +#elif defined(HAVE_MEMCPY_HACKS) + memcpy(t->norm, s->norm, t->length * sizeof(smpl_t)); + memcpy(t->phas, s->phas, t->length * sizeof(smpl_t)); +#else + uint_t j; + for (j=0; j< t->length; j++) { + t->norm[j] = s->norm[j]; + t->phas[j] = s->phas[j]; + } +#endif +} + +void cvec_norm_set_all(cvec_t *s, smpl_t val) { +#if defined(HAVE_INTEL_IPP) + aubio_ippsSet(val, s->norm, (int)s->length); +#else + uint_t j; + for (j=0; j< s->length; j++) { + s->norm[j] = val; + } +#endif +} + +void cvec_norm_zeros(cvec_t *s) { +#if defined(HAVE_INTEL_IPP) + aubio_ippsZero(s->norm, (int)s->length); +#elif defined(HAVE_MEMCPY_HACKS) + memset(s->norm, 0, s->length * sizeof(smpl_t)); +#else + cvec_norm_set_all (s, 0.); +#endif +} + +void cvec_norm_ones(cvec_t *s) { + cvec_norm_set_all (s, 1.); +} + +void cvec_phas_set_all (cvec_t *s, smpl_t val) { +#if defined(HAVE_INTEL_IPP) + aubio_ippsSet(val, s->phas, (int)s->length); +#else + uint_t j; + for (j=0; j< s->length; j++) { + s->phas[j] = val; + } +#endif +} + +void cvec_phas_zeros(cvec_t *s) { +#if defined(HAVE_INTEL_IPP) + aubio_ippsZero(s->phas, (int)s->length); +#elif defined(HAVE_MEMCPY_HACKS) + memset(s->phas, 0, s->length * sizeof(smpl_t)); +#else + cvec_phas_set_all (s, 0.); +#endif +} + +void cvec_phas_ones(cvec_t *s) { + cvec_phas_set_all (s, 1.); +} + +void cvec_zeros(cvec_t *s) { + cvec_norm_zeros(s); + cvec_phas_zeros(s); +} + +void cvec_logmag(cvec_t *s, smpl_t lambda) { +#if defined(HAVE_INTEL_IPP) + aubio_ippsMulC(s->norm, lambda, s->norm, (int)s->length); + aubio_ippsAddC(s->norm, 1.0, s->norm, (int)s->length); + aubio_ippsLn(s->norm, s->norm, (int)s->length); +#else + uint_t j; + for (j=0; j< s->length; j++) { + s->norm[j] = LOG(lambda * s->norm[j] + 1); + } +#endif +} diff --git a/deps/aubio/src/cvec.h b/deps/aubio/src/cvec.h new file mode 100644 index 00000000..7c826b68 --- /dev/null +++ b/deps/aubio/src/cvec.h @@ -0,0 +1,247 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_CVEC_H +#define AUBIO_CVEC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file + + Vector of complex-valued data, stored in polar coordinates + + This file specifies the ::cvec_t buffer type, which is used throughout aubio + to store complex data. Complex values are stored in terms of ::cvec_t.phas + and norm, within 2 vectors of ::smpl_t of size (size/2+1) each. + + \example test-cvec.c + +*/ + +/** Vector of real-valued phase and spectrum data + + \code + + uint_t buffer_size = 1024; + + // create a complex vector of 512 values + cvec_t * input = new_cvec (buffer_size); + + // set some values of the vector + input->norm[23] = 2.; + input->phas[23] = M_PI; + // .. + + // compute the mean of the vector + mean = cvec_mean(input); + + // destroy the vector + del_cvec (input); + + \endcode + + */ +typedef struct { + uint_t length; /**< length of buffer = (requested length)/2 + 1 */ + smpl_t *norm; /**< norm array of size ::cvec_t.length */ + smpl_t *phas; /**< phase array of size ::cvec_t.length */ +} cvec_t; + +/** cvec_t buffer creation function + + This function creates a cvec_t structure holding two arrays of size + [length/2+1], corresponding to the norm and phase values of the + spectral frame. The length stored in the structure is the actual size of both + arrays, not the length of the complex and symmetrical vector, specified as + creation argument. + + \param length the length of the buffer to create + +*/ +cvec_t * new_cvec(uint_t length); + +/** cvec_t buffer deletion function + + \param s buffer to delete as returned by new_cvec() + +*/ +void del_cvec(cvec_t *s); + +/** write norm value in a complex buffer + + This is equivalent to: + \code + s->norm[position] = val; + \endcode + + \param s vector to write to + \param val norm value to write in s->norm[position] + \param position sample position to write to + +*/ +void cvec_norm_set_sample (cvec_t *s, smpl_t val, uint_t position); + +/** write phase value in a complex buffer + + This is equivalent to: + \code + s->phas[position] = val; + \endcode + + \param s vector to write to + \param val phase value to write in s->phas[position] + \param position sample position to write to + +*/ +void cvec_phas_set_sample (cvec_t *s, smpl_t val, uint_t position); + +/** read norm value from a complex buffer + + This is equivalent to: + \code + smpl_t foo = s->norm[position]; + \endcode + + \param s vector to read from + \param position sample position to read from + +*/ +smpl_t cvec_norm_get_sample (cvec_t *s, uint_t position); + +/** read phase value from a complex buffer + + This is equivalent to: + \code + smpl_t foo = s->phas[position]; + \endcode + + \param s vector to read from + \param position sample position to read from + \returns the value of the sample at position + +*/ +smpl_t cvec_phas_get_sample (cvec_t *s, uint_t position); + +/** read norm data from a complex buffer + + \code + smpl_t *data = s->norm; + \endcode + + \param s vector to read from + +*/ +smpl_t * cvec_norm_get_data (const cvec_t *s); + +/** read phase data from a complex buffer + + This is equivalent to: + \code + smpl_t *data = s->phas; + \endcode + + \param s vector to read from + +*/ +smpl_t * cvec_phas_get_data (const cvec_t *s); + +/** print out cvec data + + \param s vector to print out + +*/ +void cvec_print(const cvec_t *s); + +/** make a copy of a vector + + \param s source vector + \param t vector to copy to + +*/ +void cvec_copy(const cvec_t *s, cvec_t *t); + +/** set all norm elements to a given value + + \param s vector to modify + \param val value to set elements to + +*/ +void cvec_norm_set_all (cvec_t *s, smpl_t val); + +/** set all norm elements to zero + + \param s vector to modify + +*/ +void cvec_norm_zeros(cvec_t *s); + +/** set all norm elements to one + + \param s vector to modify + +*/ +void cvec_norm_ones(cvec_t *s); + +/** set all phase elements to a given value + + \param s vector to modify + \param val value to set elements to + +*/ +void cvec_phas_set_all (cvec_t *s, smpl_t val); + +/** set all phase elements to zero + + \param s vector to modify + +*/ +void cvec_phas_zeros(cvec_t *s); + +/** set all phase elements to one + + \param s vector to modify + +*/ +void cvec_phas_ones(cvec_t *s); + +/** set all norm and phas elements to zero + + \param s vector to modify + +*/ +void cvec_zeros(cvec_t *s); + +/** take logarithmic magnitude + + \param s input cvec to compress + \param lambda value to use for normalisation + + \f$ S_k = log( \lambda * S_k + 1 ) \f$ + +*/ +void cvec_logmag(cvec_t *s, smpl_t lambda); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_CVEC_H */ diff --git a/deps/aubio/src/fvec.c b/deps/aubio/src/fvec.c new file mode 100644 index 00000000..3bb0b173 --- /dev/null +++ b/deps/aubio/src/fvec.c @@ -0,0 +1,149 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" + +fvec_t * new_fvec(uint_t length) { + fvec_t * s; + if ((sint_t)length <= 0) { + return NULL; + } + s = AUBIO_NEW(fvec_t); + s->length = length; + s->data = AUBIO_ARRAY(smpl_t, s->length); + return s; +} + +void del_fvec(fvec_t *s) { + AUBIO_FREE(s->data); + AUBIO_FREE(s); +} + +void fvec_set_sample(fvec_t *s, smpl_t data, uint_t position) { + s->data[position] = data; +} + +smpl_t fvec_get_sample(const fvec_t *s, uint_t position) { + return s->data[position]; +} + +smpl_t * fvec_get_data(const fvec_t *s) { + return s->data; +} + +/* helper functions */ + +void fvec_print(const fvec_t *s) { + uint_t j; + for (j=0; j< s->length; j++) { + AUBIO_MSG(AUBIO_SMPL_FMT " ", s->data[j]); + } + AUBIO_MSG("\n"); +} + +void fvec_set_all (fvec_t *s, smpl_t val) { +#if defined(HAVE_INTEL_IPP) + aubio_ippsSet(val, s->data, (int)s->length); +#elif defined(HAVE_ATLAS) + aubio_catlas_set(s->length, val, s->data, 1); +#elif defined(HAVE_ACCELERATE) + aubio_vDSP_vfill(&val, s->data, 1, s->length); +#else + uint_t j; + for ( j = 0; j< s->length; j++ ) + { + s->data[j] = val; + } +#endif +} + +void fvec_zeros(fvec_t *s) { +#if defined(HAVE_INTEL_IPP) + aubio_ippsZero(s->data, (int)s->length); +#elif defined(HAVE_ACCELERATE) + aubio_vDSP_vclr(s->data, 1, s->length); +#elif defined(HAVE_MEMCPY_HACKS) + memset(s->data, 0, s->length * sizeof(smpl_t)); +#else + fvec_set_all(s, 0.); +#endif +} + +void fvec_ones(fvec_t *s) { + fvec_set_all (s, 1.); +} + +void fvec_rev(fvec_t *s) { + uint_t j; + for (j=0; j< FLOOR((smpl_t)s->length/2); j++) { + ELEM_SWAP(s->data[j], s->data[s->length-1-j]); + } +} + +void fvec_weight(fvec_t *s, const fvec_t *weight) { + uint_t length = MIN(s->length, weight->length); +#if defined(HAVE_INTEL_IPP) + aubio_ippsMul(s->data, weight->data, s->data, (int)length); +#elif defined(HAVE_ACCELERATE) + aubio_vDSP_vmul( s->data, 1, weight->data, 1, s->data, 1, length ); +#else + uint_t j; + for (j = 0; j < length; j++) { + s->data[j] *= weight->data[j]; + } +#endif /* HAVE_ACCELERATE */ +} + +void fvec_weighted_copy(const fvec_t *in, const fvec_t *weight, fvec_t *out) { + uint_t length = MIN(in->length, MIN(out->length, weight->length)); +#if defined(HAVE_INTEL_IPP) + aubio_ippsMul(in->data, weight->data, out->data, (int)length); +#elif defined(HAVE_ACCELERATE) + aubio_vDSP_vmul(in->data, 1, weight->data, 1, out->data, 1, length); +#else + uint_t j; + for (j = 0; j < length; j++) { + out->data[j] = in->data[j] * weight->data[j]; + } +#endif +} + +void fvec_copy(const fvec_t *s, fvec_t *t) { + if (s->length != t->length) { + AUBIO_ERR("trying to copy %d elements to %d elements \n", + s->length, t->length); + return; + } +#if defined(HAVE_INTEL_IPP) + aubio_ippsCopy(s->data, t->data, (int)s->length); +#elif defined(HAVE_BLAS) + aubio_cblas_copy(s->length, s->data, 1, t->data, 1); +#elif defined(HAVE_ACCELERATE) + aubio_vDSP_mmov(s->data, t->data, 1, s->length, 1, 1); +#elif defined(HAVE_MEMCPY_HACKS) + memcpy(t->data, s->data, t->length * sizeof(smpl_t)); +#else + uint_t j; + for (j = 0; j < t->length; j++) { + t->data[j] = s->data[j]; + } +#endif +} diff --git a/deps/aubio/src/fvec.h b/deps/aubio/src/fvec.h new file mode 100644 index 00000000..bd8c5a60 --- /dev/null +++ b/deps/aubio/src/fvec.h @@ -0,0 +1,178 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_FVEC_H +#define AUBIO_FVEC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file + + Vector of real-valued data + + This file specifies the ::fvec_t buffer type, which is used throughout aubio + to store vector of real-valued ::smpl_t. + + \example test-fvec.c + +*/ + +/** Buffer for real data + + Vector of real-valued data + + ::fvec_t is is the structure used to store vector of real-valued data, ::smpl_t . + + \code + + uint_t buffer_size = 1024; + + // create a vector of 512 values + fvec_t * input = new_fvec (buffer_size); + + // set some values of the vector + input->data[23] = 2.; + // .. + + // compute the mean of the vector + mean = fvec_mean(a_vector); + + // destroy the vector + del_fvec(a_vector); + + \endcode + + See `examples/` and `tests/src` directories for more examples. + + */ +typedef struct { + uint_t length; /**< length of buffer */ + smpl_t *data; /**< data vector of length ::fvec_t.length */ +} fvec_t; + +/** fvec_t buffer creation function + + \param length the length of the buffer to create + +*/ +fvec_t * new_fvec(uint_t length); + +/** fvec_t buffer deletion function + + \param s buffer to delete as returned by new_fvec() + +*/ +void del_fvec(fvec_t *s); + +/** read sample value in a buffer + + \param s vector to read from + \param position sample position to read from + +*/ +smpl_t fvec_get_sample(const fvec_t *s, uint_t position); + +/** write sample value in a buffer + + \param s vector to write to + \param data value to write in s->data[position] + \param position sample position to write to + +*/ +void fvec_set_sample(fvec_t *s, smpl_t data, uint_t position); + +/** read data from a buffer + + \param s vector to read from + +*/ +smpl_t * fvec_get_data(const fvec_t *s); + +/** print out fvec data + + \param s vector to print out + +*/ +void fvec_print(const fvec_t *s); + +/** set all elements to a given value + + \param s vector to modify + \param val value to set elements to + +*/ +void fvec_set_all (fvec_t *s, smpl_t val); + +/** set all elements to zero + + \param s vector to modify + +*/ +void fvec_zeros(fvec_t *s); + +/** set all elements to ones + + \param s vector to modify + +*/ +void fvec_ones(fvec_t *s); + +/** revert order of vector elements + + \param s vector to revert + +*/ +void fvec_rev(fvec_t *s); + +/** apply weight to vector + + If the weight vector is longer than s, only the first elements are used. If + the weight vector is shorter than s, the last elements of s are not weighted. + + \param s vector to weight + \param weight weighting coefficients + +*/ +void fvec_weight(fvec_t *s, const fvec_t *weight); + +/** make a copy of a vector + + \param s source vector + \param t vector to copy to + +*/ +void fvec_copy(const fvec_t *s, fvec_t *t); + +/** make a copy of a vector, applying weights to each element + + \param in input vector + \param weight weights vector + \param out output vector + +*/ +void fvec_weighted_copy(const fvec_t *in, const fvec_t *weight, fvec_t *out); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_FVEC_H */ diff --git a/deps/aubio/src/lvec.c b/deps/aubio/src/lvec.c new file mode 100644 index 00000000..dd63bf42 --- /dev/null +++ b/deps/aubio/src/lvec.c @@ -0,0 +1,80 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "lvec.h" + +lvec_t * new_lvec(uint_t length) { + lvec_t * s; + if ((sint_t)length <= 0) { + return NULL; + } + s = AUBIO_NEW(lvec_t); + s->length = length; + s->data = AUBIO_ARRAY(lsmp_t, s->length); + return s; +} + +void del_lvec(lvec_t *s) { + AUBIO_FREE(s->data); + AUBIO_FREE(s); +} + +void lvec_set_sample(lvec_t *s, lsmp_t data, uint_t position) { + s->data[position] = data; +} + +lsmp_t lvec_get_sample(lvec_t *s, uint_t position) { + return s->data[position]; +} + +lsmp_t * lvec_get_data(const lvec_t *s) { + return s->data; +} + +/* helper functions */ + +void lvec_print(const lvec_t *s) { + uint_t j; + for (j=0; j< s->length; j++) { + AUBIO_MSG(AUBIO_LSMP_FMT " ", s->data[j]); + } + AUBIO_MSG("\n"); +} + +void lvec_set_all (lvec_t *s, smpl_t val) { + uint_t j; + for (j=0; j< s->length; j++) { + s->data[j] = val; + } +} + +void lvec_zeros(lvec_t *s) { +#if HAVE_MEMCPY_HACKS + memset(s->data, 0, s->length * sizeof(lsmp_t)); +#else + lvec_set_all (s, 0.); +#endif +} + +void lvec_ones(lvec_t *s) { + lvec_set_all (s, 1.); +} + diff --git a/deps/aubio/src/lvec.h b/deps/aubio/src/lvec.h new file mode 100644 index 00000000..402ba0ff --- /dev/null +++ b/deps/aubio/src/lvec.h @@ -0,0 +1,118 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_LVEC_H +#define AUBIO_LVEC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file + + Vector of real-valued data in double precision + + This file specifies the ::lvec_t buffer type, which is used in some places in + aubio to store a vector of ::lsmp_t. + + Note: the lvec_t data type is required in some algorithms such as IIR filters + (see temporal/filter.h). + + \example test-lvec.c + +*/ + +/** Buffer for real data in double precision */ +typedef struct { + uint_t length; /**< length of buffer */ + lsmp_t *data; /**< data array of size [length] */ +} lvec_t; + +/** lvec_t buffer creation function + + \param length the length of the buffer to create + +*/ +lvec_t * new_lvec(uint_t length); +/** lvec_t buffer deletion function + + \param s buffer to delete as returned by new_lvec() + +*/ +void del_lvec(lvec_t *s); + +/** read sample value in a buffer + + \param s vector to read from + \param position sample position to read from + +*/ +lsmp_t lvec_get_sample(lvec_t *s, uint_t position); + +/** write sample value in a buffer + + \param s vector to write to + \param data value to write in s->data[position] + \param position sample position to write to + +*/ +void lvec_set_sample(lvec_t *s, lsmp_t data, uint_t position); + +/** read data from a buffer + + \param s vector to read from + +*/ +lsmp_t * lvec_get_data(const lvec_t *s); + +/** print out lvec data + + \param s vector to print out + +*/ +void lvec_print(const lvec_t *s); + +/** set all elements to a given value + + \param s vector to modify + \param val value to set elements to + +*/ +void lvec_set_all(lvec_t *s, smpl_t val); + +/** set all elements to zero + + \param s vector to modify + +*/ +void lvec_zeros(lvec_t *s); + +/** set all elements to ones + + \param s vector to modify + +*/ +void lvec_ones(lvec_t *s); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_LVEC_H */ diff --git a/deps/aubio/src/mathutils.c b/deps/aubio/src/mathutils.c new file mode 100644 index 00000000..35755fe4 --- /dev/null +++ b/deps/aubio/src/mathutils.c @@ -0,0 +1,681 @@ +/* + Copyright (C) 2003-2014 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/* see in mathutils.h for doc */ + +#include "aubio_priv.h" +#include "fvec.h" +#include "mathutils.h" +#include "musicutils.h" + +/** Window types */ +typedef enum +{ + aubio_win_ones, + aubio_win_rectangle, + aubio_win_hamming, + aubio_win_hanning, + aubio_win_hanningz, + aubio_win_blackman, + aubio_win_blackman_harris, + aubio_win_gaussian, + aubio_win_welch, + aubio_win_parzen, + aubio_win_default = aubio_win_hanningz, +} aubio_window_type; + +fvec_t * +new_aubio_window (char_t * window_type, uint_t length) +{ + fvec_t * win = new_fvec (length); + uint_t err; + if (win == NULL) { + return NULL; + } + err = fvec_set_window (win, window_type); + if (err != 0) { + del_fvec(win); + return NULL; + } + return win; +} + +uint_t fvec_set_window (fvec_t *win, char_t *window_type) { + smpl_t * w = win->data; + uint_t i, size = win->length; + aubio_window_type wintype; + if (window_type == NULL) { + AUBIO_ERR ("window type can not be null.\n"); + return 1; + } else if (strcmp (window_type, "ones") == 0) + wintype = aubio_win_ones; + else if (strcmp (window_type, "rectangle") == 0) + wintype = aubio_win_rectangle; + else if (strcmp (window_type, "hamming") == 0) + wintype = aubio_win_hamming; + else if (strcmp (window_type, "hanning") == 0) + wintype = aubio_win_hanning; + else if (strcmp (window_type, "hanningz") == 0) + wintype = aubio_win_hanningz; + else if (strcmp (window_type, "blackman") == 0) + wintype = aubio_win_blackman; + else if (strcmp (window_type, "blackman_harris") == 0) + wintype = aubio_win_blackman_harris; + else if (strcmp (window_type, "gaussian") == 0) + wintype = aubio_win_gaussian; + else if (strcmp (window_type, "welch") == 0) + wintype = aubio_win_welch; + else if (strcmp (window_type, "parzen") == 0) + wintype = aubio_win_parzen; + else if (strcmp (window_type, "default") == 0) + wintype = aubio_win_default; + else { + AUBIO_ERR ("unknown window type `%s`.\n", window_type); + return 1; + } + switch(wintype) { + case aubio_win_ones: + fvec_ones(win); + break; + case aubio_win_rectangle: + fvec_set_all(win, .5); + break; + case aubio_win_hamming: + for (i=0;idata, (int)s->length, &tmp); + return tmp; +#elif defined(HAVE_ACCELERATE) + aubio_vDSP_meanv(s->data, 1, &tmp, s->length); + return tmp; +#else + uint_t j; + for (j = 0; j < s->length; j++) { + tmp += s->data[j]; + } + return tmp / (smpl_t)(s->length); +#endif +} + +smpl_t +fvec_sum (fvec_t * s) +{ + smpl_t tmp = 0.0; +#if defined(HAVE_INTEL_IPP) + aubio_ippsSum(s->data, (int)s->length, &tmp); +#elif defined(HAVE_ACCELERATE) + aubio_vDSP_sve(s->data, 1, &tmp, s->length); +#else + uint_t j; + for (j = 0; j < s->length; j++) { + tmp += s->data[j]; + } +#endif + return tmp; +} + +smpl_t +fvec_max (fvec_t * s) +{ +#if defined(HAVE_INTEL_IPP) + smpl_t tmp = 0.; + aubio_ippsMax( s->data, (int)s->length, &tmp); +#elif defined(HAVE_ACCELERATE) + smpl_t tmp = 0.; + aubio_vDSP_maxv( s->data, 1, &tmp, s->length ); +#else + uint_t j; + smpl_t tmp = s->data[0]; + for (j = 1; j < s->length; j++) { + tmp = (tmp > s->data[j]) ? tmp : s->data[j]; + } +#endif + return tmp; +} + +smpl_t +fvec_min (fvec_t * s) +{ +#if defined(HAVE_INTEL_IPP) + smpl_t tmp = 0.; + aubio_ippsMin(s->data, (int)s->length, &tmp); +#elif defined(HAVE_ACCELERATE) + smpl_t tmp = 0.; + aubio_vDSP_minv(s->data, 1, &tmp, s->length); +#else + uint_t j; + smpl_t tmp = s->data[0]; + for (j = 1; j < s->length; j++) { + tmp = (tmp < s->data[j]) ? tmp : s->data[j]; + } +#endif + return tmp; +} + +uint_t +fvec_min_elem (fvec_t * s) +{ +#ifndef HAVE_ACCELERATE + uint_t j, pos = 0.; + smpl_t tmp = s->data[0]; + for (j = 0; j < s->length; j++) { + pos = (tmp < s->data[j]) ? pos : j; + tmp = (tmp < s->data[j]) ? tmp : s->data[j]; + } +#else + smpl_t tmp = 0.; + vDSP_Length pos = 0; + aubio_vDSP_minvi(s->data, 1, &tmp, &pos, s->length); +#endif + return (uint_t)pos; +} + +uint_t +fvec_max_elem (fvec_t * s) +{ +#ifndef HAVE_ACCELERATE + uint_t j, pos = 0; + smpl_t tmp = 0.0; + for (j = 0; j < s->length; j++) { + pos = (tmp > s->data[j]) ? pos : j; + tmp = (tmp > s->data[j]) ? tmp : s->data[j]; + } +#else + smpl_t tmp = 0.; + vDSP_Length pos = 0; + aubio_vDSP_maxvi(s->data, 1, &tmp, &pos, s->length); +#endif + return (uint_t)pos; +} + +void +fvec_shift (fvec_t * s) +{ + uint_t half = s->length / 2, start = half, j; + // if length is odd, middle element is moved to the end + if (2 * half < s->length) start ++; +#ifndef HAVE_BLAS + for (j = 0; j < half; j++) { + ELEM_SWAP (s->data[j], s->data[j + start]); + } +#else + aubio_cblas_swap(half, s->data, 1, s->data + start, 1); +#endif + if (start != half) { + for (j = 0; j < half; j++) { + ELEM_SWAP (s->data[j + start - 1], s->data[j + start]); + } + } +} + +void +fvec_ishift (fvec_t * s) +{ + uint_t half = s->length / 2, start = half, j; + // if length is odd, middle element is moved to the beginning + if (2 * half < s->length) start ++; +#ifndef HAVE_BLAS + for (j = 0; j < half; j++) { + ELEM_SWAP (s->data[j], s->data[j + start]); + } +#else + aubio_cblas_swap(half, s->data, 1, s->data + start, 1); +#endif + if (start != half) { + for (j = 0; j < half; j++) { + ELEM_SWAP (s->data[half], s->data[j]); + } + } +} + +void fvec_push(fvec_t *in, smpl_t new_elem) { + uint_t i; + for (i = 0; i < in->length - 1; i++) { + in->data[i] = in->data[i + 1]; + } + in->data[in->length - 1] = new_elem; +} + +void fvec_clamp(fvec_t *in, smpl_t absmax) { + uint_t i; + for (i = 0; i < in->length; i++) { + if (in->data[i] > 0 && in->data[i] > ABS(absmax)) { + in->data[i] = absmax; + } else if (in->data[i] < 0 && in->data[i] < -ABS(absmax)) { + in->data[i] = -absmax; + } + } +} + +smpl_t +aubio_level_lin (const fvec_t * f) +{ + smpl_t energy = 0.; +#ifndef HAVE_BLAS + uint_t j; + for (j = 0; j < f->length; j++) { + energy += SQR (f->data[j]); + } +#else + energy = aubio_cblas_dot(f->length, f->data, 1, f->data, 1); +#endif + return energy / f->length; +} + +smpl_t +fvec_local_hfc (fvec_t * v) +{ + smpl_t hfc = 0.; + uint_t j; + for (j = 0; j < v->length; j++) { + hfc += (j + 1) * v->data[j]; + } + return hfc; +} + +void +fvec_min_removal (fvec_t * v) +{ + smpl_t v_min = fvec_min (v); + fvec_add (v, - v_min ); +} + +smpl_t +fvec_alpha_norm (fvec_t * o, smpl_t alpha) +{ + uint_t j; + smpl_t tmp = 0.; + for (j = 0; j < o->length; j++) { + tmp += POW (ABS (o->data[j]), alpha); + } + return POW (tmp / o->length, 1. / alpha); +} + +void +fvec_alpha_normalise (fvec_t * o, smpl_t alpha) +{ + uint_t j; + smpl_t norm = fvec_alpha_norm (o, alpha); + for (j = 0; j < o->length; j++) { + o->data[j] /= norm; + } +} + +void +fvec_add (fvec_t * o, smpl_t val) +{ + uint_t j; + for (j = 0; j < o->length; j++) { + o->data[j] += val; + } +} + +void +fvec_mul (fvec_t *o, smpl_t val) +{ + uint_t j; + for (j = 0; j < o->length; j++) { + o->data[j] *= val; + } +} + +void fvec_adapt_thres(fvec_t * vec, fvec_t * tmp, + uint_t post, uint_t pre) { + uint_t length = vec->length, j; + for (j=0;jdata[j] -= fvec_moving_thres(vec, tmp, post, pre, j); + } +} + +smpl_t +fvec_moving_thres (fvec_t * vec, fvec_t * tmpvec, + uint_t post, uint_t pre, uint_t pos) +{ + uint_t k; + smpl_t *medar = (smpl_t *) tmpvec->data; + uint_t win_length = post + pre + 1; + uint_t length = vec->length; + /* post part of the buffer does not exist */ + if (pos < post + 1) { + for (k = 0; k < post + 1 - pos; k++) + medar[k] = 0.; /* 0-padding at the beginning */ + for (k = post + 1 - pos; k < win_length; k++) + medar[k] = vec->data[k + pos - post]; + /* the buffer is fully defined */ + } else if (pos + pre < length) { + for (k = 0; k < win_length; k++) + medar[k] = vec->data[k + pos - post]; + /* pre part of the buffer does not exist */ + } else { + for (k = 0; k < length - pos + post; k++) + medar[k] = vec->data[k + pos - post]; + for (k = length - pos + post; k < win_length; k++) + medar[k] = 0.; /* 0-padding at the end */ + } + return fvec_median (tmpvec); +} + +smpl_t fvec_median (fvec_t * input) { + uint_t n = input->length; + smpl_t * arr = (smpl_t *) input->data; + uint_t low, high ; + uint_t median; + uint_t middle, ll, hh; + + low = 0 ; high = n-1 ; median = (low + high) / 2; + for (;;) { + if (high <= low) /* One element only */ + return arr[median] ; + + if (high == low + 1) { /* Two elements only */ + if (arr[low] > arr[high]) + ELEM_SWAP(arr[low], arr[high]) ; + return arr[median] ; + } + + /* Find median of low, middle and high items; swap into position low */ + middle = (low + high) / 2; + if (arr[middle] > arr[high]) ELEM_SWAP(arr[middle], arr[high]); + if (arr[low] > arr[high]) ELEM_SWAP(arr[low], arr[high]); + if (arr[middle] > arr[low]) ELEM_SWAP(arr[middle], arr[low]) ; + + /* Swap low item (now in position middle) into position (low+1) */ + ELEM_SWAP(arr[middle], arr[low+1]) ; + + /* Nibble from each end towards middle, swapping items when stuck */ + ll = low + 1; + hh = high; + for (;;) { + do ll++; while (arr[low] > arr[ll]) ; + do hh--; while (arr[hh] > arr[low]) ; + + if (hh < ll) + break; + + ELEM_SWAP(arr[ll], arr[hh]) ; + } + + /* Swap middle item (in position low) back into correct position */ + ELEM_SWAP(arr[low], arr[hh]) ; + + /* Re-set active partition */ + if (hh <= median) + low = ll; + if (hh >= median) + high = hh - 1; + } +} + +smpl_t fvec_quadratic_peak_pos (const fvec_t * x, uint_t pos) { + smpl_t s0, s1, s2; uint_t x0, x2; + smpl_t half = .5, two = 2.; + if (pos == 0 || pos == x->length - 1) return pos; + x0 = (pos < 1) ? pos : pos - 1; + x2 = (pos + 1 < x->length) ? pos + 1 : pos; + if (x0 == pos) return (x->data[pos] <= x->data[x2]) ? pos : x2; + if (x2 == pos) return (x->data[pos] <= x->data[x0]) ? pos : x0; + s0 = x->data[x0]; + s1 = x->data[pos]; + s2 = x->data[x2]; + return pos + half * (s0 - s2 ) / (s0 - two * s1 + s2); +} + +smpl_t fvec_quadratic_peak_mag (fvec_t *x, smpl_t pos) { + smpl_t x0, x1, x2; + uint_t index = (uint_t)(pos - .5) + 1; + if (pos >= x->length || pos < 0.) return 0.; + if ((smpl_t)index == pos) return x->data[index]; + x0 = x->data[index - 1]; + x1 = x->data[index]; + x2 = x->data[index + 1]; + return x1 - .25 * (x0 - x2) * (pos - index); +} + +uint_t fvec_peakpick(const fvec_t * onset, uint_t pos) { + uint_t tmp=0; + tmp = (onset->data[pos] > onset->data[pos-1] + && onset->data[pos] > onset->data[pos+1] + && onset->data[pos] > 0.); + return tmp; +} + +smpl_t +aubio_quadfrac (smpl_t s0, smpl_t s1, smpl_t s2, smpl_t pf) +{ + smpl_t tmp = + s0 + (pf / 2.) * (pf * (s0 - 2. * s1 + s2) - 3. * s0 + 4. * s1 - s2); + return tmp; +} + +smpl_t +aubio_freqtomidi (smpl_t freq) +{ + smpl_t midi; + if (freq < 2. || freq > 100000.) return 0.; // avoid nans and infs + /* log(freq/A-2)/log(2) */ + midi = freq / 6.875; + midi = LOG (midi) / 0.6931471805599453; + midi *= 12; + midi -= 3; + return midi; +} + +smpl_t +aubio_miditofreq (smpl_t midi) +{ + smpl_t freq; + if (midi > 140.) return 0.; // avoid infs + freq = (midi + 3.) / 12.; + freq = EXP (freq * 0.6931471805599453); + freq *= 6.875; + return freq; +} + +smpl_t +aubio_bintofreq (smpl_t bin, smpl_t samplerate, smpl_t fftsize) +{ + smpl_t freq = samplerate / fftsize; + return freq * MAX(bin, 0); +} + +smpl_t +aubio_bintomidi (smpl_t bin, smpl_t samplerate, smpl_t fftsize) +{ + smpl_t midi = aubio_bintofreq (bin, samplerate, fftsize); + return aubio_freqtomidi (midi); +} + +smpl_t +aubio_freqtobin (smpl_t freq, smpl_t samplerate, smpl_t fftsize) +{ + smpl_t bin = fftsize / samplerate; + return MAX(freq, 0) * bin; +} + +smpl_t +aubio_miditobin (smpl_t midi, smpl_t samplerate, smpl_t fftsize) +{ + smpl_t freq = aubio_miditofreq (midi); + return aubio_freqtobin (freq, samplerate, fftsize); +} + +uint_t +aubio_is_power_of_two (uint_t a) +{ + if ((a & (a - 1)) == 0) { + return 1; + } else { + return 0; + } +} + +uint_t +aubio_next_power_of_two (uint_t a) +{ + uint_t i = 1; + while (i < a) i <<= 1; + return i; +} + +uint_t +aubio_power_of_two_order (uint_t a) +{ + int order = 0; + int temp = aubio_next_power_of_two(a); + while (temp >>= 1) { + ++order; + } + return order; +} + +smpl_t +aubio_db_spl (const fvec_t * o) +{ + return 10. * LOG10 (aubio_level_lin (o)); +} + +uint_t +aubio_silence_detection (const fvec_t * o, smpl_t threshold) +{ + return (aubio_db_spl (o) < threshold); +} + +smpl_t +aubio_level_detection (const fvec_t * o, smpl_t threshold) +{ + smpl_t db_spl = aubio_db_spl (o); + if (db_spl < threshold) { + return 1.; + } else { + return db_spl; + } +} + +smpl_t +aubio_zero_crossing_rate (fvec_t * input) +{ + uint_t j; + uint_t zcr = 0; + for (j = 1; j < input->length; j++) { + // previous was strictly negative + if (input->data[j - 1] < 0.) { + // current is positive or null + if (input->data[j] >= 0.) { + zcr += 1; + } + // previous was positive or null + } else { + // current is strictly negative + if (input->data[j] < 0.) { + zcr += 1; + } + } + } + return zcr / (smpl_t) input->length; +} + +void +aubio_autocorr (const fvec_t * input, fvec_t * output) +{ + uint_t i, j, length = input->length; + smpl_t *data, *acf; + smpl_t tmp = 0; + data = input->data; + acf = output->data; + for (i = 0; i < length; i++) { + tmp = 0.; + for (j = i; j < length; j++) { + tmp += data[j - i] * data[j]; + } + acf[i] = tmp / (smpl_t) (length - i); + } +} + +void +aubio_cleanup (void) +{ +#ifdef HAVE_FFTW3F + fftwf_cleanup (); +#else +#ifdef HAVE_FFTW3 + fftw_cleanup (); +#endif +#endif +} diff --git a/deps/aubio/src/mathutils.h b/deps/aubio/src/mathutils.h new file mode 100644 index 00000000..4336d7ec --- /dev/null +++ b/deps/aubio/src/mathutils.h @@ -0,0 +1,338 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Various math functions + + \example test-mathutils.c + \example test-mathutils-window.c + + */ + +#ifndef AUBIO_MATHUTILS_H +#define AUBIO_MATHUTILS_H + +#include "fvec.h" +#include "musicutils.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** compute the mean of a vector + + \param s vector to compute mean from + \return the mean of `v` + +*/ +smpl_t fvec_mean (fvec_t * s); + +/** find the max of a vector + + \param s vector to get the max from + + \return the value of the minimum of v + +*/ +smpl_t fvec_max (fvec_t * s); + +/** find the min of a vector + + \param s vector to get the min from + + \return the value of the maximum of v + +*/ +smpl_t fvec_min (fvec_t * s); + +/** find the index of the min of a vector + + \param s vector to get the index from + + \return the index of the minimum element of v + +*/ +uint_t fvec_min_elem (fvec_t * s); + +/** find the index of the max of a vector + + \param s vector to get the index from + + \return the index of the maximum element of v + +*/ +uint_t fvec_max_elem (fvec_t * s); + +/** swap the left and right halves of a vector + + This function swaps the left part of the signal with the right part of the +signal. Therefore + + \f$ a[0], a[1], ..., a[\frac{N}{2}], a[\frac{N}{2}+1], ..., a[N-1], a[N] \f$ + + becomes + + \f$ a[\frac{N}{2}+1], ..., a[N-1], a[N], a[0], a[1], ..., a[\frac{N}{2}] \f$ + + This operation, known as 'fftshift' in the Matlab Signal Processing Toolbox, +can be used before computing the FFT to simplify the phase relationship of the +resulting spectrum. See Amalia de Götzen's paper referred to above. + +*/ +void fvec_shift (fvec_t * v); + +/** swap the left and right halves of a vector + + This function swaps the left part of the signal with the right part of the +signal. Therefore + + \f$ a[0], a[1], ..., a[\frac{N}{2}], a[\frac{N}{2}+1], ..., a[N-1], a[N] \f$ + + becomes + + \f$ a[\frac{N}{2}+1], ..., a[N-1], a[N], a[0], a[1], ..., a[\frac{N}{2}] \f$ + + This operation, known as 'ifftshift' in the Matlab Signal Processing Toolbox, +can be used after computing the inverse FFT to simplify the phase relationship +of the resulting spectrum. See Amalia de Götzen's paper referred to above. + +*/ +void fvec_ishift (fvec_t * v); + +/** push a new element to the end of a vector, erasing the first element and + * sliding all others + + \param in vector to push to + \param new_elem new_element to add at the end of the vector + + In numpy words, this is equivalent to: in = np.concatenate([in, [new_elem]])[1:] + +*/ +void fvec_push(fvec_t *in, smpl_t new_elem); + +/** compute the sum of all elements of a vector + + \param v vector to compute the sum of + + \return the sum of v + +*/ +smpl_t fvec_sum (fvec_t * v); + +/** compute the High Frequency Content of a vector + + The High Frequency Content is defined as \f$ \sum_0^{N-1} (k+1) v[k] \f$. + + \param v vector to get the energy from + + \return the HFC of v + +*/ +smpl_t fvec_local_hfc (fvec_t * v); + +/** computes the p-norm of a vector + + Computes the p-norm of a vector for \f$ p = \alpha \f$ + + \f$ L^p = ||x||_p = (|x_1|^p + |x_2|^p + ... + |x_n|^p ) ^ \frac{1}{p} \f$ + + If p = 1, the result is the Manhattan distance. + + If p = 2, the result is the Euclidean distance. + + As p tends towards large values, \f$ L^p \f$ tends towards the maximum of the +input vector. + + References: + + - \f$L^p\f$ space on + Wikipedia + + \param v vector to compute norm from + \param p order of the computed norm + + \return the p-norm of v + +*/ +smpl_t fvec_alpha_norm (fvec_t * v, smpl_t p); + +/** alpha normalisation + + This function divides all elements of a vector by the p-norm as computed by +fvec_alpha_norm(). + + \param v vector to compute norm from + \param p order of the computed norm + +*/ +void fvec_alpha_normalise (fvec_t * v, smpl_t p); + +/** add a constant to each elements of a vector + + \param v vector to add constant to + \param c constant to add to v + +*/ +void fvec_add (fvec_t * v, smpl_t c); + +/** multiply each elements of a vector by a scalar + + \param v vector to add constant to + \param s constant to scale v with + +*/ +void fvec_mul (fvec_t * v, smpl_t s); + +/** remove the minimum value of the vector to each elements + + \param v vector to remove minimum from + +*/ +void fvec_min_removal (fvec_t * v); + +/** compute moving median threshold of a vector + + This function computes the moving median threshold value of at the given +position of a vector, taking the median among post elements before and up to +pre elements after pos. + + \param v input vector + \param tmp temporary vector of length post+1+pre + \param post length of causal part to take before pos + \param pre length of anti-causal part to take after pos + \param pos index to compute threshold for + + \return moving median threshold value + +*/ +smpl_t fvec_moving_thres (fvec_t * v, fvec_t * tmp, uint_t post, uint_t pre, + uint_t pos); + +/** apply adaptive threshold to a vector + + For each points at position p of an input vector, this function remove the +moving median threshold computed at p. + + \param v input vector + \param tmp temporary vector of length post+1+pre + \param post length of causal part to take before pos + \param pre length of anti-causal part to take after pos + +*/ +void fvec_adapt_thres (fvec_t * v, fvec_t * tmp, uint_t post, uint_t pre); + +/** returns the median of a vector + + The QuickSelect routine is based on the algorithm described in "Numerical +recipes in C", Second Edition, Cambridge University Press, 1992, Section 8.5, +ISBN 0-521-43108-5 + + This implementation of the QuickSelect routine is based on Nicolas +Devillard's implementation, available at http://ndevilla.free.fr/median/median/ +and in the Public Domain. + + \param v vector to get median from + + \return the median of v + +*/ +smpl_t fvec_median (fvec_t * v); + +/** finds exact peak index by quadratic interpolation + + See [Quadratic Interpolation of Spectral + Peaks](https://ccrma.stanford.edu/~jos/sasp/Quadratic_Peak_Interpolation.html), + by Julius O. Smith III + + \f$ p_{frac} = \frac{1}{2} \frac {x[p-1] - x[p+1]} {x[p-1] - 2 x[p] + x[p+1]} \in [ -.5, .5] \f$ + + \param x vector to get the interpolated peak position from + \param p index of the peak in vector `x` + \return \f$ p + p_{frac} \f$ exact peak position of interpolated maximum or minimum + +*/ +smpl_t fvec_quadratic_peak_pos (const fvec_t * x, uint_t p); + +/** finds magnitude of peak by quadratic interpolation + + See [Quadratic Interpolation of Spectral + Peaks](https://ccrma.stanford.edu/~jos/sasp/Quadratic_Peak_Interpolation.html), + by Julius O. Smith III + + \param x vector to get the magnitude of the interpolated peak position from + \param p index of the peak in vector `x` + \return magnitude of interpolated peak + +*/ +smpl_t fvec_quadratic_peak_mag (fvec_t * x, smpl_t p); + +/** Quadratic interpolation using Lagrange polynomial. + + Inspired from ``Comparison of interpolation algorithms in real-time sound +processing'', Vladimir Arnost, + + \param s0,s1,s2 are 3 consecutive samples of a curve + \param pf is the floating point index [0;2] + + \return \f$ s0 + (pf/2.)*((pf-3.)*s0-2.*(pf-2.)*s1+(pf-1.)*s2); \f$ + +*/ +smpl_t aubio_quadfrac (smpl_t s0, smpl_t s1, smpl_t s2, smpl_t pf); + +/** return 1 if v[p] is a peak and positive, 0 otherwise + + This function returns 1 if a peak is found at index p in the vector v. The +peak is defined as follows: + + - v[p] is positive + - v[p-1] < v[p] + - v[p] > v[p+1] + + \param v input vector + \param p position of supposed for peak + + \return 1 if a peak is found, 0 otherwise + +*/ +uint_t fvec_peakpick (const fvec_t * v, uint_t p); + +/** return 1 if a is a power of 2, 0 otherwise */ +uint_t aubio_is_power_of_two(uint_t a); + +/** return the next power of power of 2 greater than a */ +uint_t aubio_next_power_of_two(uint_t a); + +/** return the log2 factor of the given power of 2 value a */ +uint_t aubio_power_of_two_order(uint_t a); + +/** compute normalised autocorrelation function + + \param input vector to compute autocorrelation from + \param output vector to store autocorrelation function to + +*/ +void aubio_autocorr (const fvec_t * input, fvec_t * output); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_MATHUTILS_H */ diff --git a/deps/aubio/src/musicutils.h b/deps/aubio/src/musicutils.h new file mode 100644 index 00000000..af222e5b --- /dev/null +++ b/deps/aubio/src/musicutils.h @@ -0,0 +1,270 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** @file + * various functions useful in audio signal processing + */ + +#ifndef AUBIO_MUSICUTILS_H +#define AUBIO_MUSICUTILS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** create window + + \param window_type type of the window to create + \param size length of the window to create (see fvec_set_window()) + +*/ +fvec_t *new_aubio_window (char_t * window_type, uint_t size); + +/** set elements of a vector to window coefficients + + \param window exsting ::fvec_t to use + \param window_type type of the window to create + + List of available window types: "rectangle", "hamming", "hanning", + "hanningz", "blackman", "blackman_harris", "gaussian", "welch", "parzen", + "default". + + "default" is equivalent to "hanningz". + + References: + + - Window +function on Wikipedia + - Amalia de Götzen, Nicolas Bernardini, and Daniel Arfib. Traditional (?) +implementations of a phase vocoder: the tricks of the trade. In Proceedings of +the International Conference on Digital Audio Effects (DAFx-00), pages 37–44, +Uni- versity of Verona, Italy, 2000. + ( + pdf) + + */ +uint_t fvec_set_window (fvec_t * window, char_t * window_type); + +/** compute the principal argument + + This function maps the input phase to its corresponding value wrapped in the +range \f$ [-\pi, \pi] \f$. + + \param phase unwrapped phase to map to the unit circle + + \return equivalent phase wrapped to the unit circle + +*/ +smpl_t aubio_unwrap2pi (smpl_t phase); + +/** convert frequency bin to midi value */ +smpl_t aubio_bintomidi (smpl_t bin, smpl_t samplerate, smpl_t fftsize); + +/** convert midi value to frequency bin */ +smpl_t aubio_miditobin (smpl_t midi, smpl_t samplerate, smpl_t fftsize); + +/** convert frequency bin to frequency (Hz) */ +smpl_t aubio_bintofreq (smpl_t bin, smpl_t samplerate, smpl_t fftsize); + +/** convert frequency (Hz) to frequency bin */ +smpl_t aubio_freqtobin (smpl_t freq, smpl_t samplerate, smpl_t fftsize); + +/** convert frequency (Hz) to mel + + \param freq input frequency, in Hz + + \return output mel + + Converts a scalar from the frequency domain to the mel scale using Slaney + Auditory Toolbox's implementation: + + If \f$ f < 1000 \f$, \f$ m = 3 f / 200 \f$. + + If \f$ f >= 1000 \f$, \f$ m = 1000 + 27 \frac{{ln}(f) - ln(1000))} + {{ln}(6400) - ln(1000)} + \f$ + + See also + -------- + + aubio_meltohz(), aubio_hztomel_htk(). + +*/ +smpl_t aubio_hztomel (smpl_t freq); + +/** convert mel to frequency (Hz) + + \param mel input mel + + \return output frequency, in Hz + + Converts a scalar from the mel scale to the frequency domain using Slaney + Auditory Toolbox's implementation: + + If \f$ f < 1000 \f$, \f$ f = 200 m/3 \f$. + + If \f$ f \geq 1000 \f$, \f$ f = 1000 + \left(\frac{6400}{1000}\right) + ^{\frac{m - 1000}{27}} \f$ + + See also + -------- + + aubio_hztomel(), aubio_meltohz_htk(). + + References + ---------- + + Malcolm Slaney, *Auditory Toolbox Version 2, Technical Report #1998-010* + https://engineering.purdue.edu/~malcolm/interval/1998-010/ + +*/ +smpl_t aubio_meltohz (smpl_t mel); + +/** convert frequency (Hz) to mel + + \param freq input frequency, in Hz + + \return output mel + + Converts a scalar from the frequency domain to the mel scale, using the + equation defined by O'Shaughnessy, as implemented in the HTK speech + recognition toolkit: + + \f$ m = 1127 + ln(1 + \frac{f}{700}) \f$ + + See also + -------- + + aubio_meltohz_htk(), aubio_hztomel(). + + References + ---------- + + Douglas O'Shaughnessy (1987). *Speech communication: human and machine*. + Addison-Wesley. p. 150. ISBN 978-0-201-16520-3. + + HTK Speech Recognition Toolkit: http://htk.eng.cam.ac.uk/ + + */ +smpl_t aubio_hztomel_htk (smpl_t freq); + +/** convert mel to frequency (Hz) + + \param mel input mel + + \return output frequency, in Hz + + Converts a scalar from the mel scale to the frequency domain, using the + equation defined by O'Shaughnessy, as implemented in the HTK speech + recognition toolkit: + + \f$ f = 700 * {e}^\left(\frac{f}{1127} - 1\right) \f$ + + See also + -------- + + aubio_hztomel_htk(), aubio_meltohz(). + +*/ +smpl_t aubio_meltohz_htk (smpl_t mel); + +/** convert frequency (Hz) to midi value (0-128) */ +smpl_t aubio_freqtomidi (smpl_t freq); + +/** convert midi value (0-128) to frequency (Hz) */ +smpl_t aubio_miditofreq (smpl_t midi); + +/** clean up cached memory at the end of program + + This function should be used at the end of programs to purge all cached + memory. So far it is only useful to clean FFTW's cache. + +*/ +void aubio_cleanup (void); + +/** zero-crossing rate (ZCR) + + The zero-crossing rate is the number of times a signal changes sign, + divided by the length of this signal. + + \param v vector to compute ZCR from + + \return zero-crossing rate of v + +*/ +smpl_t aubio_zero_crossing_rate (fvec_t * v); + +/** compute sound level on a linear scale + + This gives the average of the square amplitudes. + + \param v vector to compute level from + + \return level of v + +*/ +smpl_t aubio_level_lin (const fvec_t * v); + +/** compute sound pressure level (SPL) in dB + + This quantity is often wrongly called 'loudness'. + + This gives ten times the log10 of the average of the square amplitudes. + + \param v vector to compute dB SPL from + + \return level of v in dB SPL + +*/ +smpl_t aubio_db_spl (const fvec_t * v); + +/** check if buffer level in dB SPL is under a given threshold + + \param v vector to get level from + \param threshold threshold in dB SPL + + \return 1 if level is under the given threshold, 0 otherwise + +*/ +uint_t aubio_silence_detection (const fvec_t * v, smpl_t threshold); + +/** get buffer level if level >= threshold, 1. otherwise + + \param v vector to get level from + \param threshold threshold in dB SPL + + \return level in dB SPL if level >= threshold, 1. otherwise + +*/ +smpl_t aubio_level_detection (const fvec_t * v, smpl_t threshold); + +/** clamp the values of a vector within the range [-abs(max), abs(max)] + + \param in vector to clamp + \param absmax maximum value over which input vector elements should be clamped + +*/ +void fvec_clamp(fvec_t *in, smpl_t absmax); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_MUSICUTILS_H */ diff --git a/deps/aubio/src/pitch/pitch.c b/deps/aubio/src/pitch/pitch.c new file mode 100644 index 00000000..40cd7fc8 --- /dev/null +++ b/deps/aubio/src/pitch/pitch.c @@ -0,0 +1,530 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "cvec.h" +#include "lvec.h" +#include "mathutils.h" +#include "musicutils.h" +#include "spectral/phasevoc.h" +#include "temporal/filter.h" +#include "temporal/c_weighting.h" +#include "pitch/pitchmcomb.h" +#include "pitch/pitchyin.h" +#include "pitch/pitchfcomb.h" +#include "pitch/pitchschmitt.h" +#include "pitch/pitchyinfft.h" +#include "pitch/pitchyinfast.h" +#include "pitch/pitchspecacf.h" +#include "pitch/pitch.h" + +#define DEFAULT_PITCH_SILENCE -50. + +/** pitch detection algorithms */ +typedef enum +{ + aubio_pitcht_yin, /**< `yin`, YIN algorithm */ + aubio_pitcht_mcomb, /**< `mcomb`, Multi-comb filter */ + aubio_pitcht_schmitt, /**< `schmitt`, Schmitt trigger */ + aubio_pitcht_fcomb, /**< `fcomb`, Fast comb filter */ + aubio_pitcht_yinfft, /**< `yinfft`, Spectral YIN */ + aubio_pitcht_yinfast, /**< `yinfast`, YIN fast */ + aubio_pitcht_specacf, /**< `specacf`, Spectral autocorrelation */ + aubio_pitcht_default + = aubio_pitcht_yinfft, /**< `default` */ +} aubio_pitch_type; + +/** pitch detection output modes */ +typedef enum +{ + aubio_pitchm_freq, /**< Frequency (Hz) */ + aubio_pitchm_midi, /**< MIDI note (0.,127) */ + aubio_pitchm_cent, /**< Cent */ + aubio_pitchm_bin, /**< Frequency bin (0,bufsize) */ + aubio_pitchm_default = aubio_pitchm_freq, /**< the one used when "default" is asked */ +} aubio_pitch_mode; + +/** callback to get pitch candidate, defined below */ +typedef void (*aubio_pitch_detect_t) (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); + +/** callback to convert pitch from one unit to another, defined below */ +typedef smpl_t(*aubio_pitch_convert_t) (smpl_t value, uint_t samplerate, uint_t bufsize); + +/** callback to fetch the confidence of the algorithm */ +typedef smpl_t (*aubio_pitch_get_conf_t) (void * p); + +/** generic pitch detection structure */ +struct _aubio_pitch_t +{ + aubio_pitch_type type; /**< pitch detection mode */ + aubio_pitch_mode mode; /**< pitch detection output mode */ + uint_t samplerate; /**< samplerate */ + uint_t bufsize; /**< buffer size */ + void *p_object; /**< pointer to pitch object */ + aubio_filter_t *filter; /**< filter */ + fvec_t *filtered; /**< filtered input */ + aubio_pvoc_t *pv; /**< phase vocoder for mcomb */ + cvec_t *fftgrain; /**< spectral frame for mcomb */ + fvec_t *buf; /**< temporary buffer for yin */ + aubio_pitch_detect_t detect_cb; /**< callback to get the pitch candidates */ + aubio_pitch_convert_t conv_cb; /**< callback to convert it to the desired unit */ + aubio_pitch_get_conf_t conf_cb; /**< pointer to the current confidence callback */ + smpl_t silence; /**< silence threshold */ +}; + +/* callback functions for pitch detection */ +static void aubio_pitch_do_mcomb (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); +static void aubio_pitch_do_yin (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); +static void aubio_pitch_do_schmitt (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); +static void aubio_pitch_do_fcomb (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); +static void aubio_pitch_do_yinfft (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); +static void aubio_pitch_do_yinfast (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); +static void aubio_pitch_do_specacf (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); + +/* internal functions for frequency conversion */ +static smpl_t freqconvbin (smpl_t f, uint_t samplerate, uint_t bufsize); +static smpl_t freqconvmidi (smpl_t f, uint_t samplerate, uint_t bufsize); +static smpl_t freqconvpass (smpl_t f, uint_t samplerate, uint_t bufsize); + +/* adapter to stack ibuf new samples at the end of buf, and trim `buf` to `bufsize` */ +void aubio_pitch_slideblock (aubio_pitch_t * p, const fvec_t * ibuf); + + +aubio_pitch_t * +new_aubio_pitch (const char_t * pitch_mode, + uint_t bufsize, uint_t hopsize, uint_t samplerate) +{ + aubio_pitch_t *p = AUBIO_NEW (aubio_pitch_t); + aubio_pitch_type pitch_type; + if (pitch_mode == NULL) { + AUBIO_ERR ("pitch: can not use ‘NULL‘ for pitch detection method\n"); + goto beach; + } + if (strcmp (pitch_mode, "mcomb") == 0) + pitch_type = aubio_pitcht_mcomb; + else if (strcmp (pitch_mode, "yinfast") == 0) + pitch_type = aubio_pitcht_yinfast; + else if (strcmp (pitch_mode, "yinfft") == 0) + pitch_type = aubio_pitcht_yinfft; + else if (strcmp (pitch_mode, "yin") == 0) + pitch_type = aubio_pitcht_yin; + else if (strcmp (pitch_mode, "schmitt") == 0) + pitch_type = aubio_pitcht_schmitt; + else if (strcmp (pitch_mode, "fcomb") == 0) + pitch_type = aubio_pitcht_fcomb; + else if (strcmp (pitch_mode, "specacf") == 0) + pitch_type = aubio_pitcht_specacf; + else if (strcmp (pitch_mode, "default") == 0) + pitch_type = aubio_pitcht_default; + else { + AUBIO_ERR ("pitch: unknown pitch detection method ‘%s’\n", pitch_mode); + goto beach; + } + + // check parameters are valid + if ((sint_t)hopsize < 1) { + AUBIO_ERR("pitch: got hopsize %d, but can not be < 1\n", hopsize); + goto beach; + } else if ((sint_t)bufsize < 1) { + AUBIO_ERR("pitch: got buffer_size %d, but can not be < 1\n", bufsize); + goto beach; + } else if (bufsize < hopsize) { + AUBIO_ERR("pitch: hop size (%d) is larger than win size (%d)\n", hopsize, bufsize); + goto beach; + } else if ((sint_t)samplerate < 1) { + AUBIO_ERR("pitch: samplerate (%d) can not be < 1\n", samplerate); + goto beach; + } + + p->samplerate = samplerate; + p->type = pitch_type; + aubio_pitch_set_unit (p, "default"); + p->bufsize = bufsize; + p->silence = DEFAULT_PITCH_SILENCE; + p->conf_cb = NULL; + switch (p->type) { + case aubio_pitcht_yin: + p->buf = new_fvec (bufsize); + p->p_object = new_aubio_pitchyin (bufsize); + if (!p->p_object) goto beach; + p->detect_cb = aubio_pitch_do_yin; + p->conf_cb = (aubio_pitch_get_conf_t)aubio_pitchyin_get_confidence; + aubio_pitchyin_set_tolerance (p->p_object, 0.15); + break; + case aubio_pitcht_mcomb: + p->filtered = new_fvec (hopsize); + p->pv = new_aubio_pvoc (bufsize, hopsize); + if (!p->pv) goto beach; + p->fftgrain = new_cvec (bufsize); + p->p_object = new_aubio_pitchmcomb (bufsize, hopsize); + p->filter = new_aubio_filter_c_weighting (samplerate); + p->detect_cb = aubio_pitch_do_mcomb; + break; + case aubio_pitcht_fcomb: + p->buf = new_fvec (bufsize); + p->p_object = new_aubio_pitchfcomb (bufsize, hopsize); + if (!p->p_object) goto beach; + p->detect_cb = aubio_pitch_do_fcomb; + break; + case aubio_pitcht_schmitt: + p->buf = new_fvec (bufsize); + p->p_object = new_aubio_pitchschmitt (bufsize); + p->detect_cb = aubio_pitch_do_schmitt; + break; + case aubio_pitcht_yinfft: + p->buf = new_fvec (bufsize); + p->p_object = new_aubio_pitchyinfft (samplerate, bufsize); + if (!p->p_object) goto beach; + p->detect_cb = aubio_pitch_do_yinfft; + p->conf_cb = (aubio_pitch_get_conf_t)aubio_pitchyinfft_get_confidence; + aubio_pitchyinfft_set_tolerance (p->p_object, 0.85); + break; + case aubio_pitcht_yinfast: + p->buf = new_fvec (bufsize); + p->p_object = new_aubio_pitchyinfast (bufsize); + if (!p->p_object) goto beach; + p->detect_cb = aubio_pitch_do_yinfast; + p->conf_cb = (aubio_pitch_get_conf_t)aubio_pitchyinfast_get_confidence; + aubio_pitchyinfast_set_tolerance (p->p_object, 0.15); + break; + case aubio_pitcht_specacf: + p->buf = new_fvec (bufsize); + p->p_object = new_aubio_pitchspecacf (bufsize); + if (!p->p_object) goto beach; + p->detect_cb = aubio_pitch_do_specacf; + p->conf_cb = (aubio_pitch_get_conf_t)aubio_pitchspecacf_get_tolerance; + aubio_pitchspecacf_set_tolerance (p->p_object, 0.85); + break; + default: + break; + } + return p; + +beach: + if (p->filtered) del_fvec(p->filtered); + if (p->buf) del_fvec(p->buf); + AUBIO_FREE(p); + return NULL; +} + +void +del_aubio_pitch (aubio_pitch_t * p) +{ + switch (p->type) { + case aubio_pitcht_yin: + del_fvec (p->buf); + del_aubio_pitchyin (p->p_object); + break; + case aubio_pitcht_mcomb: + del_fvec (p->filtered); + del_aubio_pvoc (p->pv); + del_cvec (p->fftgrain); + del_aubio_filter (p->filter); + del_aubio_pitchmcomb (p->p_object); + break; + case aubio_pitcht_schmitt: + del_fvec (p->buf); + del_aubio_pitchschmitt (p->p_object); + break; + case aubio_pitcht_fcomb: + del_fvec (p->buf); + del_aubio_pitchfcomb (p->p_object); + break; + case aubio_pitcht_yinfft: + del_fvec (p->buf); + del_aubio_pitchyinfft (p->p_object); + break; + case aubio_pitcht_yinfast: + del_fvec (p->buf); + del_aubio_pitchyinfast (p->p_object); + break; + case aubio_pitcht_specacf: + del_fvec (p->buf); + del_aubio_pitchspecacf (p->p_object); + break; + default: + break; + } + AUBIO_FREE (p); +} + +void +aubio_pitch_slideblock (aubio_pitch_t * p, const fvec_t * ibuf) +{ + uint_t overlap_size = p->buf->length - ibuf->length; +#if 1 //!HAVE_MEMCPY_HACKS + uint_t j; + for (j = 0; j < overlap_size; j++) { + p->buf->data[j] = p->buf->data[j + ibuf->length]; + } + for (j = 0; j < ibuf->length; j++) { + p->buf->data[j + overlap_size] = ibuf->data[j]; + } +#else + smpl_t *data = p->buf->data; + smpl_t *newdata = ibuf->data; + memmove(data, data + ibuf->length, overlap_size); + memcpy(data + overlap_size, newdata, ibuf->length); +#endif +} + +uint_t +aubio_pitch_set_unit (aubio_pitch_t * p, const char_t * pitch_unit) +{ + uint_t err = AUBIO_OK; + aubio_pitch_mode pitch_mode; + if (strcmp (pitch_unit, "freq") == 0) + pitch_mode = aubio_pitchm_freq; + else if (strcmp (pitch_unit, "hertz") == 0) + pitch_mode = aubio_pitchm_freq; + else if (strcmp (pitch_unit, "Hertz") == 0) + pitch_mode = aubio_pitchm_freq; + else if (strcmp (pitch_unit, "Hz") == 0) + pitch_mode = aubio_pitchm_freq; + else if (strcmp (pitch_unit, "f0") == 0) + pitch_mode = aubio_pitchm_freq; + else if (strcmp (pitch_unit, "midi") == 0) + pitch_mode = aubio_pitchm_midi; + else if (strcmp (pitch_unit, "cent") == 0) + pitch_mode = aubio_pitchm_cent; + else if (strcmp (pitch_unit, "bin") == 0) + pitch_mode = aubio_pitchm_bin; + else if (strcmp (pitch_unit, "default") == 0) + pitch_mode = aubio_pitchm_default; + else { + AUBIO_WRN("pitch: unknown pitch detection unit ‘%s’, using default\n", + pitch_unit); + pitch_mode = aubio_pitchm_default; + err = AUBIO_FAIL; + } + p->mode = pitch_mode; + switch (p->mode) { + case aubio_pitchm_freq: + p->conv_cb = freqconvpass; + break; + case aubio_pitchm_midi: + p->conv_cb = freqconvmidi; + break; + case aubio_pitchm_cent: + /* bug: not implemented */ + p->conv_cb = freqconvmidi; + break; + case aubio_pitchm_bin: + p->conv_cb = freqconvbin; + break; + default: + break; + } + return err; +} + +uint_t +aubio_pitch_set_tolerance (aubio_pitch_t * p, smpl_t tol) +{ + switch (p->type) { + case aubio_pitcht_yin: + aubio_pitchyin_set_tolerance (p->p_object, tol); + break; + case aubio_pitcht_yinfft: + aubio_pitchyinfft_set_tolerance (p->p_object, tol); + break; + case aubio_pitcht_yinfast: + aubio_pitchyinfast_set_tolerance (p->p_object, tol); + break; + default: + break; + } + return AUBIO_OK; +} + +smpl_t +aubio_pitch_get_tolerance (aubio_pitch_t * p) +{ + smpl_t tolerance = 1.; + switch (p->type) { + case aubio_pitcht_yin: + tolerance = aubio_pitchyin_get_tolerance (p->p_object); + break; + case aubio_pitcht_yinfft: + tolerance = aubio_pitchyinfft_get_tolerance (p->p_object); + break; + case aubio_pitcht_yinfast: + tolerance = aubio_pitchyinfast_get_tolerance (p->p_object); + break; + default: + break; + } + return tolerance; +} + +uint_t +aubio_pitch_set_silence (aubio_pitch_t * p, smpl_t silence) +{ + if (silence <= 0 && silence >= -200) { + p->silence = silence; + return AUBIO_OK; + } else { + AUBIO_WRN("pitch: could not set silence to %.2f\n", silence); + return AUBIO_FAIL; + } +} + +smpl_t +aubio_pitch_get_silence (aubio_pitch_t * p) +{ + return p->silence; +} + + +/* do method, calling the detection callback, then the conversion callback */ +void +aubio_pitch_do (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf) +{ + p->detect_cb (p, ibuf, obuf); + if (aubio_silence_detection(ibuf, p->silence) == 1) { + obuf->data[0] = 0.; + } + obuf->data[0] = p->conv_cb (obuf->data[0], p->samplerate, p->bufsize); +} + +/* do method for each algorithm */ +void +aubio_pitch_do_mcomb (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf) +{ + aubio_filter_do_outplace (p->filter, ibuf, p->filtered); + aubio_pvoc_do (p->pv, ibuf, p->fftgrain); + aubio_pitchmcomb_do (p->p_object, p->fftgrain, obuf); + obuf->data[0] = aubio_bintofreq (obuf->data[0], p->samplerate, p->bufsize); +} + +void +aubio_pitch_do_yin (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf) +{ + smpl_t pitch = 0.; + aubio_pitch_slideblock (p, ibuf); + aubio_pitchyin_do (p->p_object, p->buf, obuf); + pitch = obuf->data[0]; + if (pitch > 0) { + pitch = p->samplerate / (pitch + 0.); + } else { + pitch = 0.; + } + obuf->data[0] = pitch; +} + + +void +aubio_pitch_do_yinfft (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf) +{ + smpl_t pitch = 0.; + aubio_pitch_slideblock (p, ibuf); + aubio_pitchyinfft_do (p->p_object, p->buf, obuf); + pitch = obuf->data[0]; + if (pitch > 0) { + pitch = p->samplerate / (pitch + 0.); + } else { + pitch = 0.; + } + obuf->data[0] = pitch; +} + +void +aubio_pitch_do_yinfast (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf) +{ + smpl_t pitch = 0.; + aubio_pitch_slideblock (p, ibuf); + aubio_pitchyinfast_do (p->p_object, p->buf, obuf); + pitch = obuf->data[0]; + if (pitch > 0) { + pitch = p->samplerate / (pitch + 0.); + } else { + pitch = 0.; + } + obuf->data[0] = pitch; +} + +void +aubio_pitch_do_specacf (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * out) +{ + smpl_t pitch = 0., period; + aubio_pitch_slideblock (p, ibuf); + aubio_pitchspecacf_do (p->p_object, p->buf, out); + //out->data[0] = aubio_bintofreq (out->data[0], p->samplerate, p->bufsize); + period = out->data[0]; + if (period > 0) { + pitch = p->samplerate / period; + } else { + pitch = 0.; + } + out->data[0] = pitch; +} + +void +aubio_pitch_do_fcomb (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * out) +{ + aubio_pitch_slideblock (p, ibuf); + aubio_pitchfcomb_do (p->p_object, p->buf, out); + out->data[0] = aubio_bintofreq (out->data[0], p->samplerate, p->bufsize); +} + +void +aubio_pitch_do_schmitt (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * out) +{ + smpl_t period, pitch = 0.; + aubio_pitch_slideblock (p, ibuf); + aubio_pitchschmitt_do (p->p_object, p->buf, out); + period = out->data[0]; + if (period > 0) { + pitch = p->samplerate / period; + } else { + pitch = 0.; + } + out->data[0] = pitch; +} + +/* conversion callbacks */ +smpl_t +freqconvbin(smpl_t f, uint_t samplerate, uint_t bufsize) +{ + return aubio_freqtobin(f, samplerate, bufsize); +} + +smpl_t +freqconvmidi (smpl_t f, uint_t samplerate UNUSED, uint_t bufsize UNUSED) +{ + return aubio_freqtomidi (f); +} + +smpl_t +freqconvpass (smpl_t f, uint_t samplerate UNUSED, uint_t bufsize UNUSED) +{ + return f; +} + +/* confidence callbacks */ +smpl_t +aubio_pitch_get_confidence (aubio_pitch_t * p) +{ + if (p->conf_cb) { + return p->conf_cb(p->p_object); + } + return 0.; +} diff --git a/deps/aubio/src/pitch/pitch.h b/deps/aubio/src/pitch/pitch.h new file mode 100644 index 00000000..b807a6a1 --- /dev/null +++ b/deps/aubio/src/pitch/pitch.h @@ -0,0 +1,197 @@ +/* + Copyright (C) 2003-2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_PITCH_H +#define AUBIO_PITCH_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file + + Pitch detection object + + This file creates the objects required for the computation of the selected + pitch detection algorithm and output the results, in midi note or Hz. + + \section pitch Pitch detection methods + + A list of the pitch detection methods currently available follows. + + \b \p default : use the default method + + Currently, the default method is set to \p yinfft . + + \b \p schmitt : Schmitt trigger + + This pitch extraction method implements a Schmitt trigger to estimate the + period of a signal. + + This file was derived from the tuneit project, written by Mario Lang to + detect the fundamental frequency of a sound. + + See http://delysid.org/tuneit.html + + \b \p fcomb : a fast harmonic comb filter + + This pitch extraction method implements a fast harmonic comb filter to + determine the fundamental frequency of a harmonic sound. + + This file was derived from the tuneit project, written by Mario Lang to + detect the fundamental frequency of a sound. + + See http://delysid.org/tuneit.html + + \b \p mcomb : multiple-comb filter + + This fundamental frequency estimation algorithm implements spectral + flattening, multi-comb filtering and peak histogramming. + + This method was designed by Juan P. Bello and described in: + + Juan-Pablo Bello. ``Towards the Automated Analysis of Simple Polyphonic + Music''. PhD thesis, Centre for Digital Music, Queen Mary University of + London, London, UK, 2003. + + \b \p yin : YIN algorithm + + This algorithm was developed by A. de Cheveigne and H. Kawahara and + published in: + + De Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency + estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930. + + see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html + + \b \p yinfast : Yinfast algorithm + + This algorithm is equivalent to the YIN algorithm, but computed in the + spectral domain for efficiency. See also `python/demos/demo_yin_compare.py`. + + \b \p yinfft : Yinfft algorithm + + This algorithm was derived from the YIN algorithm. In this implementation, a + Fourier transform is used to compute a tapered square difference function, + which allows spectral weighting. Because the difference function is tapered, + the selection of the period is simplified. + + Paul Brossier, [Automatic annotation of musical audio for interactive + systems](http://aubio.org/phd/), Chapter 3, Pitch Analysis, PhD thesis, + Centre for Digital music, Queen Mary University of London, London, UK, 2006. + + \example pitch/test-pitch.c + \example examples/aubiopitch.c + +*/ + +/** pitch detection object */ +typedef struct _aubio_pitch_t aubio_pitch_t; + +/** execute pitch detection on an input signal frame + + \param o pitch detection object as returned by new_aubio_pitch() + \param in input signal of size [hop_size] + \param out output pitch candidates of size [1] + +*/ +void aubio_pitch_do (aubio_pitch_t * o, const fvec_t * in, fvec_t * out); + +/** change yin or yinfft tolerance threshold + + \param o pitch detection object as returned by new_aubio_pitch() + \param tol tolerance default is 0.15 for yin and 0.85 for yinfft + +*/ +uint_t aubio_pitch_set_tolerance (aubio_pitch_t * o, smpl_t tol); + +/** get yin or yinfft tolerance threshold + + \param o pitch detection object as returned by new_aubio_pitch() + \return tolerance (default is 0.15 for yin and 0.85 for yinfft) + +*/ +smpl_t aubio_pitch_get_tolerance (aubio_pitch_t * o); + +/** deletion of the pitch detection object + + \param o pitch detection object as returned by new_aubio_pitch() + +*/ +void del_aubio_pitch (aubio_pitch_t * o); + +/** creation of the pitch detection object + + \param method set pitch detection algorithm + \param buf_size size of the input buffer to analyse + \param hop_size step size between two consecutive analysis instant + \param samplerate sampling rate of the signal + + \return newly created ::aubio_pitch_t + +*/ +aubio_pitch_t *new_aubio_pitch (const char_t * method, + uint_t buf_size, uint_t hop_size, uint_t samplerate); + +/** set the output unit of the pitch detection object + + \param o pitch detection object as returned by new_aubio_pitch() + \param mode set pitch units for output + + mode can be one of "Hz", "midi", "cent", or "bin". Defaults to "Hz". + + \return 0 if successfull, non-zero otherwise + +*/ +uint_t aubio_pitch_set_unit (aubio_pitch_t * o, const char_t * mode); + +/** set the silence threshold of the pitch detection object + + \param o pitch detection object as returned by new_aubio_pitch() + \param silence level threshold under which pitch should be ignored, in dB + + \return 0 if successfull, non-zero otherwise + +*/ +uint_t aubio_pitch_set_silence (aubio_pitch_t * o, smpl_t silence); + +/** set the silence threshold of the pitch detection object + + \param o pitch detection object as returned by ::new_aubio_pitch() + + \return level threshold under which pitch should be ignored, in dB + +*/ +smpl_t aubio_pitch_get_silence (aubio_pitch_t * o); + +/** get the current confidence + + \param o pitch detection object as returned by new_aubio_pitch() + + \return the current confidence of the pitch algorithm + +*/ +smpl_t aubio_pitch_get_confidence (aubio_pitch_t * o); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PITCH_H */ diff --git a/deps/aubio/src/pitch/pitchfcomb.c b/deps/aubio/src/pitch/pitchfcomb.c new file mode 100644 index 00000000..5cc49b9b --- /dev/null +++ b/deps/aubio/src/pitch/pitchfcomb.c @@ -0,0 +1,144 @@ +/* + Copyright (C) 2004, 2005 Mario Lang + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "cvec.h" +#include "mathutils.h" +#include "musicutils.h" +#include "spectral/fft.h" +#include "pitch/pitchfcomb.h" + +#define MAX_PEAKS 8 + +typedef struct +{ + smpl_t bin; + smpl_t db; +} aubio_fpeak_t; + +struct _aubio_pitchfcomb_t +{ + uint_t fftSize; + uint_t stepSize; + uint_t rate; + fvec_t *winput; + fvec_t *win; + cvec_t *fftOut; + fvec_t *fftLastPhase; + aubio_fft_t *fft; +}; + +aubio_pitchfcomb_t * +new_aubio_pitchfcomb (uint_t bufsize, uint_t hopsize) +{ + aubio_pitchfcomb_t *p = AUBIO_NEW (aubio_pitchfcomb_t); + p->fftSize = bufsize; + p->stepSize = hopsize; + p->fft = new_aubio_fft (bufsize); + if (!p->fft) goto beach; + p->winput = new_fvec (bufsize); + p->fftOut = new_cvec (bufsize); + p->fftLastPhase = new_fvec (bufsize); + p->win = new_aubio_window ("hanning", bufsize); + return p; + +beach: + AUBIO_FREE(p); + return NULL; +} + +/* input must be stepsize long */ +void +aubio_pitchfcomb_do (aubio_pitchfcomb_t * p, const fvec_t * input, fvec_t * output) +{ + uint_t k, l, maxharm = 0; + smpl_t phaseDifference = TWO_PI * (smpl_t) p->stepSize / (smpl_t) p->fftSize; + aubio_fpeak_t peaks[MAX_PEAKS]; + + for (k = 0; k < MAX_PEAKS; k++) { + peaks[k].db = -200.; + peaks[k].bin = 0.; + } + + for (k = 0; k < input->length; k++) { + p->winput->data[k] = p->win->data[k] * input->data[k]; + } + aubio_fft_do (p->fft, p->winput, p->fftOut); + + for (k = 0; k <= p->fftSize / 2; k++) { + smpl_t + magnitude = + 20. * LOG10 (2. * p->fftOut->norm[k] / (smpl_t) p->fftSize), + phase = p->fftOut->phas[k], tmp, bin; + + /* compute phase difference */ + tmp = phase - p->fftLastPhase->data[k]; + p->fftLastPhase->data[k] = phase; + + /* subtract expected phase difference */ + tmp -= (smpl_t) k *phaseDifference; + + /* map delta phase into +/- Pi interval */ + tmp = aubio_unwrap2pi (tmp); + + /* get deviation from bin frequency from the +/- Pi interval */ + tmp = p->fftSize / (smpl_t) p->stepSize * tmp / (TWO_PI); + + /* compute the k-th partials' true bin */ + bin = (smpl_t) k + tmp; + + if (bin > 0.0 && magnitude > peaks[0].db) { // && magnitude < 0) { + memmove (peaks + 1, peaks, sizeof (aubio_fpeak_t) * (MAX_PEAKS - 1)); + peaks[0].bin = bin; + peaks[0].db = magnitude; + } + } + + k = 0; + for (l = 1; l < MAX_PEAKS && peaks[l].bin > 0.0; l++) { + sint_t harmonic; + for (harmonic = 5; harmonic > 1; harmonic--) { + if (peaks[0].bin / peaks[l].bin < harmonic + .02 && + peaks[0].bin / peaks[l].bin > harmonic - .02) { + if (harmonic > (sint_t) maxharm && peaks[0].db < peaks[l].db / 2) { + maxharm = harmonic; + k = l; + } + } + } + } + output->data[0] = peaks[k].bin; + /* quick hack to clean output a bit */ + if (peaks[k].bin > 5000.) + output->data[0] = 0.; +} + +void +del_aubio_pitchfcomb (aubio_pitchfcomb_t * p) +{ + del_cvec (p->fftOut); + del_fvec (p->fftLastPhase); + del_fvec (p->win); + del_fvec (p->winput); + del_aubio_fft (p->fft); + AUBIO_FREE (p); +} diff --git a/deps/aubio/src/pitch/pitchfcomb.h b/deps/aubio/src/pitch/pitchfcomb.h new file mode 100644 index 00000000..50167088 --- /dev/null +++ b/deps/aubio/src/pitch/pitchfcomb.h @@ -0,0 +1,76 @@ +/* + Copyright (C) 2003-2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Pitch detection using a fast harmonic comb filter + + This pitch extraction method implements a fast harmonic comb filter to + determine the fundamental frequency of a harmonic sound. + + This file was derived from the tuneit project, written by Mario Lang to + detect the fundamental frequency of a sound. + + See http://delysid.org/tuneit.html + + \example pitch/test-pitchfcomb.c + +*/ + +#ifndef AUBIO_PITCHFCOMB_H +#define AUBIO_PITCHFCOMB_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** pitch detection object */ +typedef struct _aubio_pitchfcomb_t aubio_pitchfcomb_t; + +/** execute pitch detection on an input buffer + + \param p pitch detection object as returned by new_aubio_pitchfcomb + \param input input signal window (length as specified at creation time) + \param output pitch candidates in bins + +*/ +void aubio_pitchfcomb_do (aubio_pitchfcomb_t * p, const fvec_t * input, + fvec_t * output); + +/** creation of the pitch detection object + + \param buf_size size of the input buffer to analyse + \param hop_size step size between two consecutive analysis instant + +*/ +aubio_pitchfcomb_t *new_aubio_pitchfcomb (uint_t buf_size, uint_t hop_size); + +/** deletion of the pitch detection object + + \param p pitch detection object as returned by new_aubio_pitchfcomb + +*/ +void del_aubio_pitchfcomb (aubio_pitchfcomb_t * p); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PITCHFCOMB_H */ diff --git a/deps/aubio/src/pitch/pitchmcomb.c b/deps/aubio/src/pitch/pitchmcomb.c new file mode 100644 index 00000000..9ce160ed --- /dev/null +++ b/deps/aubio/src/pitch/pitchmcomb.c @@ -0,0 +1,435 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "cvec.h" +#include "mathutils.h" +#include "pitch/pitchmcomb.h" + +#define CAND_SWAP(a,b) { register aubio_spectralcandidate_t *t=(a);(a)=(b);(b)=t; } + +typedef struct _aubio_spectralpeak_t aubio_spectralpeak_t; +typedef struct _aubio_spectralcandidate_t aubio_spectralcandidate_t; +uint_t aubio_pitchmcomb_get_root_peak (aubio_spectralpeak_t * peaks, + uint_t length); +uint_t aubio_pitchmcomb_quadpick (aubio_spectralpeak_t * spectral_peaks, + const fvec_t * X); +void aubio_pitchmcomb_spectral_pp (aubio_pitchmcomb_t * p, const fvec_t * oldmag); +void aubio_pitchmcomb_combdet (aubio_pitchmcomb_t * p, const fvec_t * newmag); +/* not used but useful : sort by amplitudes (or anything else) + * sort_pitchpeak(peaks, length); + */ +#if 0 +/** spectral_peak comparison function (must return signed int) */ +static sint_t aubio_pitchmcomb_sort_peak_comp (const void *x, const void *y); +/** sort spectral_peak against their mag */ +void aubio_pitchmcomb_sort_peak (aubio_spectralpeak_t * peaks, uint_t nbins); +/** select the best candidates */ +uint_t aubio_pitch_cands (aubio_pitchmcomb_t * p, const cvec_t * fftgrain, + smpl_t * cands); +#endif + +/** sort spectral_candidate against their comb ene */ +void aubio_pitchmcomb_sort_cand_ene (aubio_spectralcandidate_t ** candidates, + uint_t nbins); +#if 0 +/** sort spectral_candidate against their frequency */ +void aubio_pitchmcomb_sort_cand_freq (aubio_spectralcandidate_t ** candidates, + uint_t nbins); +#endif + +struct _aubio_pitchmcomb_t +{ + smpl_t threshold; /**< offset threshold [0.033 or 0.01] */ + smpl_t alpha; /**< normalisation exponent [9] */ + smpl_t cutoff; /**< low-pass filter cutoff [0.34, 1] */ + smpl_t tol; /**< tolerance [0.05] */ + // smpl_t tau; /**< frequency precision [44100/4096] */ + uint_t win_post; /**< median filter window length */ + uint_t win_pre; /**< median filter window */ + uint_t ncand; /**< maximum number of candidates (combs) */ + uint_t npartials; /**< maximum number of partials per combs */ + uint_t count; /**< picked picks */ + uint_t goodcandidate; /**< best candidate */ + uint_t spec_partition; /**< spectrum partition to consider */ + aubio_spectralpeak_t *peaks; /**< up to length win/spec_partition */ + aubio_spectralcandidate_t **candidates; /** up to five candidates */ + /* some scratch pads */ + /** \bug (unnecessary copied from fftgrain?) */ + fvec_t *newmag; /**< vec to store mag */ + fvec_t *scratch; /**< vec to store modified mag */ + fvec_t *scratch2; /**< vec to compute moving median */ + fvec_t *theta; /**< vec to store phase */ + smpl_t phasediff; + smpl_t phasefreq; + /** threshfn: name or handle of fn for computing adaptive threshold [median] */ + /** aubio_thresholdfn_t thresholdfn; */ + /** picker: name or handle of fn for picking event times [quadpick] */ + /** aubio_pickerfn_t pickerfn; */ +}; + +/** spectral peak object */ +struct _aubio_spectralpeak_t +{ + uint_t bin; /**< bin [0-(length-1)] */ + smpl_t ebin; /**< estimated bin */ + smpl_t mag; /**< peak magnitude */ +}; + +/** spectral candidates array object */ +struct _aubio_spectralcandidate_t +{ + smpl_t ebin; /**< interpolated bin */ + smpl_t *ecomb; /**< comb */ + smpl_t ene; /**< candidate energy */ + smpl_t len; /**< length */ +}; + + +void +aubio_pitchmcomb_do (aubio_pitchmcomb_t * p, const cvec_t * fftgrain, fvec_t * output) +{ + uint_t j; + smpl_t instfreq; + fvec_t *newmag = (fvec_t *) p->newmag; + //smpl_t hfc; //fe=instfreq(theta1,theta,ops); //theta1=theta; + /* copy incoming grain to newmag */ + for (j = 0; j < newmag->length; j++) + newmag->data[j] = fftgrain->norm[j]; + /* detect only if local energy > 10. */ + //if (aubio_level_lin (newmag) * newmag->length > 10.) { + //hfc = fvec_local_hfc(newmag); //not used + aubio_pitchmcomb_spectral_pp (p, newmag); + aubio_pitchmcomb_combdet (p, newmag); + //aubio_pitchmcomb_sort_cand_freq(p->candidates,p->ncand); + //return p->candidates[p->goodcandidate]->ebin; + j = (uint_t) FLOOR (p->candidates[p->goodcandidate]->ebin + .5); + instfreq = aubio_unwrap2pi (fftgrain->phas[j] + - p->theta->data[j] - j * p->phasediff); + instfreq *= p->phasefreq; + /* store phase for next run */ + for (j = 0; j < p->theta->length; j++) { + p->theta->data[j] = fftgrain->phas[j]; + } + //return p->candidates[p->goodcandidate]->ebin; + output->data[0] = + FLOOR (p->candidates[p->goodcandidate]->ebin + .5) + instfreq; + /*} else { + return -1.; + } */ +} + +#if 0 +uint_t +aubio_pitch_cands (aubio_pitchmcomb_t * p, const cvec_t * fftgrain, smpl_t * cands) +{ + uint_t j; + uint_t k; + fvec_t *newmag = (fvec_t *) p->newmag; + aubio_spectralcandidate_t **scands = + (aubio_spectralcandidate_t **) (p->candidates); + //smpl_t hfc; //fe=instfreq(theta1,theta,ops); //theta1=theta; + /* copy incoming grain to newmag */ + for (j = 0; j < newmag->length; j++) + newmag->data[j] = fftgrain->norm[j]; + /* detect only if local energy > 10. */ + if (aubio_level_lin (newmag) * newmag->length > 10.) { + /* hfc = fvec_local_hfc(newmag); do not use */ + aubio_pitchmcomb_spectral_pp (p, newmag); + aubio_pitchmcomb_combdet (p, newmag); + aubio_pitchmcomb_sort_cand_freq (scands, p->ncand); + /* store ncand comb energies in cands[1:ncand] */ + for (k = 0; k < p->ncand; k++) + cands[k] = p->candidates[k]->ene; + /* store ncand[end] freq in cands[end] */ + cands[p->ncand] = p->candidates[p->ncand - 1]->ebin; + return 1; + } else { + for (k = 0; k < p->ncand; k++) + cands[k] = 0; + return 0; + } +} +#endif + +void +aubio_pitchmcomb_spectral_pp (aubio_pitchmcomb_t * p, const fvec_t * newmag) +{ + fvec_t *mag = (fvec_t *) p->scratch; + fvec_t *tmp = (fvec_t *) p->scratch2; + uint_t j; + uint_t length = mag->length; + /* copy newmag to mag (scracth) */ + for (j = 0; j < length; j++) { + mag->data[j] = newmag->data[j]; + } + fvec_min_removal (mag); /* min removal */ + fvec_alpha_normalise (mag, p->alpha); /* alpha normalisation */ + /* skipped *//* low pass filtering */ + /** \bug fvec_moving_thres may write out of bounds */ + fvec_adapt_thres (mag, tmp, p->win_post, p->win_pre); /* adaptative threshold */ + fvec_add (mag, -p->threshold); /* fixed threshold */ + { + aubio_spectralpeak_t *peaks = (aubio_spectralpeak_t *) p->peaks; + uint_t count; + /* return bin and ebin */ + count = aubio_pitchmcomb_quadpick (peaks, mag); + for (j = 0; j < count; j++) + peaks[j].mag = newmag->data[peaks[j].bin]; + /* reset non peaks */ + for (j = count; j < length; j++) + peaks[j].mag = 0.; + p->peaks = peaks; + p->count = count; + } +} + +void +aubio_pitchmcomb_combdet (aubio_pitchmcomb_t * p, const fvec_t * newmag) +{ + aubio_spectralpeak_t *peaks = (aubio_spectralpeak_t *) p->peaks; + aubio_spectralcandidate_t **candidate = + (aubio_spectralcandidate_t **) p->candidates; + + /* parms */ + uint_t N = p->npartials; /* maximum number of partials to be considered 10 */ + uint_t M = p->ncand; /* maximum number of combs to be considered 5 */ + uint_t length = newmag->length; + uint_t count = p->count; + uint_t k; + uint_t l; + uint_t d; + uint_t curlen = 0; + + smpl_t delta2; + smpl_t xx; + uint_t position = 0; + + uint_t root_peak = 0; + uint_t tmpl = 0; + smpl_t tmpene = 0.; + + /* get the biggest peak in the spectrum */ + root_peak = aubio_pitchmcomb_get_root_peak (peaks, count); + /* not enough partials in highest notes, could be forced */ + //if (peaks[root_peak].ebin >= aubio_miditofreq(85.)/p->tau) N=2; + //if (peaks[root_peak].ebin >= aubio_miditofreq(90.)/p->tau) N=1; + /* now calculate the energy of each of the 5 combs */ + for (l = 0; l < M; l++) { + smpl_t scaler = (1. / (l + 1.)); + candidate[l]->ene = 0.; /* reset ene and len sums */ + candidate[l]->len = 0.; + candidate[l]->ebin = scaler * peaks[root_peak].ebin; + /* if less than N peaks available, curlen < N */ + if (candidate[l]->ebin != 0.) + curlen = (uint_t) FLOOR (length / (candidate[l]->ebin)); + curlen = (N < curlen) ? N : curlen; + /* fill candidate[l]->ecomb[k] with (k+1)*candidate[l]->ebin */ + for (k = 0; k < curlen; k++) + candidate[l]->ecomb[k] = (candidate[l]->ebin) * (k + 1.); + for (k = curlen; k < length; k++) + candidate[l]->ecomb[k] = 0.; + /* for each in candidate[l]->ecomb[k] */ + for (k = 0; k < curlen; k++) { + xx = 100000.; + /** get the candidate->ecomb the closer to peaks.ebin + * (to cope with the inharmonicity)*/ + for (d = 0; d < count; d++) { + delta2 = ABS (candidate[l]->ecomb[k] - peaks[d].ebin); + if (delta2 <= xx) { + position = d; + xx = delta2; + } + } + /* for a Q factor of 17, maintaining "constant Q filtering", + * and sum energy and length over non null combs */ + if (17. * xx < candidate[l]->ecomb[k]) { + candidate[l]->ecomb[k] = peaks[position].ebin; + candidate[l]->ene += /* ecomb rounded to nearest int */ + POW (newmag->data[(uint_t) FLOOR (candidate[l]->ecomb[k] + .5)], + 0.25); + candidate[l]->len += 1. / curlen; + } else + candidate[l]->ecomb[k] = 0.; + } + /* punishment */ + /*if (candidate[l]->len<0.6) + candidate[l]->ene=0.; */ + /* remember best candidate energy (in polyphonic, could check for + * tmpene*1.1 < candidate->ene to reduce jumps towards low frequencies) */ + if (tmpene < candidate[l]->ene) { + tmpl = l; + tmpene = candidate[l]->ene; + } + } + //p->candidates=candidate; + //p->peaks=peaks; + p->goodcandidate = tmpl; +} + +/** T=quadpick(X): return indices of elements of X which are peaks and positive + * exact peak positions are retrieved by quadratic interpolation + * + * \bug peak-picking too picky, sometimes counts too many peaks ? + */ +uint_t +aubio_pitchmcomb_quadpick (aubio_spectralpeak_t * spectral_peaks, const fvec_t * X) +{ + uint_t j, ispeak, count = 0; + for (j = 1; j < X->length - 1; j++) { + ispeak = fvec_peakpick (X, j); + if (ispeak) { + count += ispeak; + spectral_peaks[count - 1].bin = j; + spectral_peaks[count - 1].ebin = fvec_quadratic_peak_pos (X, j); + } + } + return count; +} + +/* get predominant partial */ +uint_t +aubio_pitchmcomb_get_root_peak (aubio_spectralpeak_t * peaks, uint_t length) +{ + uint_t i, pos = 0; + smpl_t tmp = 0.; + for (i = 0; i < length; i++) + if (tmp <= peaks[i].mag) { + pos = i; + tmp = peaks[i].mag; + } + return pos; +} + +#if 0 +void +aubio_pitchmcomb_sort_peak (aubio_spectralpeak_t * peaks, uint_t nbins) +{ + qsort (peaks, nbins, sizeof (aubio_spectralpeak_t), + aubio_pitchmcomb_sort_peak_comp); +} + +static sint_t +aubio_pitchmcomb_sort_peak_comp (const void *x, const void *y) +{ + return (((aubio_spectralpeak_t *) y)->mag - + ((aubio_spectralpeak_t *) x)->mag); +} + + +void +aubio_pitchmcomb_sort_cand_ene (aubio_spectralcandidate_t ** candidates, + uint_t nbins) +{ + uint_t cur = 0; + uint_t run = 0; + for (cur = 0; cur < nbins; cur++) { + for (run = cur + 1; run < nbins; run++) { + if (candidates[run]->ene > candidates[cur]->ene) + CAND_SWAP (candidates[run], candidates[cur]); + } + } +} + +void +aubio_pitchmcomb_sort_cand_freq (aubio_spectralcandidate_t ** candidates, + uint_t nbins) +{ + uint_t cur = 0; + uint_t run = 0; + for (cur = 0; cur < nbins; cur++) { + for (run = cur + 1; run < nbins; run++) { + if (candidates[run]->ebin < candidates[cur]->ebin) + CAND_SWAP (candidates[run], candidates[cur]); + } + } +} +#endif + +aubio_pitchmcomb_t * +new_aubio_pitchmcomb (uint_t bufsize, uint_t hopsize) +{ + aubio_pitchmcomb_t *p = AUBIO_NEW (aubio_pitchmcomb_t); + /* bug: should check if size / 8 > post+pre+1 */ + uint_t i, j; + uint_t spec_size; + p->spec_partition = 2; + p->ncand = 5; + p->npartials = 5; + p->cutoff = 1.; + p->threshold = 0.01; + p->win_post = 8; + p->win_pre = 7; + // p->tau = samplerate/bufsize; + p->alpha = 9.; + p->goodcandidate = 0; + p->phasefreq = bufsize / hopsize / TWO_PI; + p->phasediff = TWO_PI * hopsize / bufsize; + spec_size = bufsize / p->spec_partition + 1; + //p->pickerfn = quadpick; + //p->biquad = new_biquad(0.1600,0.3200,0.1600, -0.5949, 0.2348); + /* allocate temp memory */ + p->newmag = new_fvec (spec_size); + /* array for median */ + p->scratch = new_fvec (spec_size); + /* array for phase */ + p->theta = new_fvec (spec_size); + /* array for adaptative threshold */ + p->scratch2 = new_fvec (p->win_post + p->win_pre + 1); + /* array of spectral peaks */ + p->peaks = AUBIO_ARRAY (aubio_spectralpeak_t, spec_size); + for (i = 0; i < spec_size; i++) { + p->peaks[i].bin = 0.; + p->peaks[i].ebin = 0.; + p->peaks[i].mag = 0.; + } + /* array of pointers to spectral candidates */ + p->candidates = AUBIO_ARRAY (aubio_spectralcandidate_t *, p->ncand); + for (i = 0; i < p->ncand; i++) { + p->candidates[i] = AUBIO_NEW (aubio_spectralcandidate_t); + p->candidates[i]->ecomb = AUBIO_ARRAY (smpl_t, spec_size); + for (j = 0; j < spec_size; j++) { + p->candidates[i]->ecomb[j] = 0.; + } + p->candidates[i]->ene = 0.; + p->candidates[i]->ebin = 0.; + p->candidates[i]->len = 0.; + } + return p; +} + + +void +del_aubio_pitchmcomb (aubio_pitchmcomb_t * p) +{ + uint_t i; + del_fvec (p->newmag); + del_fvec (p->scratch); + del_fvec (p->theta); + del_fvec (p->scratch2); + AUBIO_FREE (p->peaks); + for (i = 0; i < p->ncand; i++) { + AUBIO_FREE (p->candidates[i]->ecomb); + AUBIO_FREE (p->candidates[i]); + } + AUBIO_FREE (p->candidates); + AUBIO_FREE (p); +} diff --git a/deps/aubio/src/pitch/pitchmcomb.h b/deps/aubio/src/pitch/pitchmcomb.h new file mode 100644 index 00000000..88f117f2 --- /dev/null +++ b/deps/aubio/src/pitch/pitchmcomb.h @@ -0,0 +1,77 @@ +/* + Copyright (C) 2003-2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Pitch detection using multiple-comb filter + + This fundamental frequency estimation algorithm implements spectral + flattening, multi-comb filtering and peak histogramming. + + This method was designed by Juan P. Bello and described in: + + Juan-Pablo Bello. ``Towards the Automated Analysis of Simple Polyphonic + Music''. PhD thesis, Centre for Digital Music, Queen Mary University of + London, London, UK, 2003. + + \example pitch/test-pitchmcomb.c + +*/ + +#ifndef AUBIO_PITCHMCOMB_H +#define AUBIO_PITCHMCOMB_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** pitch detection object */ +typedef struct _aubio_pitchmcomb_t aubio_pitchmcomb_t; + +/** execute pitch detection on an input spectral frame + + \param p pitch detection object as returned by new_aubio_pitchmcomb + \param in_fftgrain input signal spectrum as computed by aubio_pvoc_do + \param out_cands pitch candidate frequenciess, in bins + +*/ +void aubio_pitchmcomb_do (aubio_pitchmcomb_t * p, const cvec_t * in_fftgrain, + fvec_t * out_cands); + +/** creation of the pitch detection object + + \param buf_size size of the input buffer to analyse + \param hop_size step size between two consecutive analysis instant + +*/ +aubio_pitchmcomb_t *new_aubio_pitchmcomb (uint_t buf_size, uint_t hop_size); + +/** deletion of the pitch detection object + + \param p pitch detection object as returned by new_aubio_pitchfcomb + +*/ +void del_aubio_pitchmcomb (aubio_pitchmcomb_t * p); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PITCHMCOMB_H */ diff --git a/deps/aubio/src/pitch/pitchschmitt.c b/deps/aubio/src/pitch/pitchschmitt.c new file mode 100644 index 00000000..06a34e8e --- /dev/null +++ b/deps/aubio/src/pitch/pitchschmitt.c @@ -0,0 +1,119 @@ +/* + Copyright (C) 2004, 2005 Mario Lang + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "pitch/pitchschmitt.h" + +smpl_t aubio_schmittS16LE (aubio_pitchschmitt_t * p, uint_t nframes, + signed short int *indata); + +struct _aubio_pitchschmitt_t +{ + uint_t blockSize; + uint_t rate; + signed short int *schmittBuffer; + signed short int *schmittPointer; + signed short int *buf; +}; + +aubio_pitchschmitt_t * +new_aubio_pitchschmitt (uint_t size) +{ + aubio_pitchschmitt_t *p = AUBIO_NEW (aubio_pitchschmitt_t); + p->blockSize = size; + p->schmittBuffer = AUBIO_ARRAY (signed short int, p->blockSize); + p->buf = AUBIO_ARRAY (signed short int, p->blockSize); + p->schmittPointer = p->schmittBuffer; + return p; +} + +void +aubio_pitchschmitt_do (aubio_pitchschmitt_t * p, const fvec_t * input, + fvec_t * output) +{ + uint_t j; + for (j = 0; j < input->length; j++) { + p->buf[j] = input->data[j] * 32768.; + } + output->data[0] = aubio_schmittS16LE (p, input->length, p->buf); +} + +smpl_t +aubio_schmittS16LE (aubio_pitchschmitt_t * p, uint_t nframes, + signed short int *indata) +{ + uint_t i, j; + uint_t blockSize = p->blockSize; + signed short int *schmittBuffer = p->schmittBuffer; + signed short int *schmittPointer = p->schmittPointer; + + smpl_t period = 0., trigfact = 0.6; + + for (i = 0; i < nframes; i++) { + *schmittPointer++ = indata[i]; + if (schmittPointer - schmittBuffer >= (sint_t) blockSize) { + sint_t endpoint, startpoint, t1, t2, A1, A2, tc, schmittTriggered; + + schmittPointer = schmittBuffer; + + for (j = 0, A1 = 0, A2 = 0; j < blockSize; j++) { + if (schmittBuffer[j] > 0 && A1 < schmittBuffer[j]) + A1 = schmittBuffer[j]; + if (schmittBuffer[j] < 0 && A2 < -schmittBuffer[j]) + A2 = -schmittBuffer[j]; + } + t1 = (sint_t) (A1 * trigfact + 0.5); + t2 = -(sint_t) (A2 * trigfact + 0.5); + startpoint = 0; + for (j = 1; j < blockSize && schmittBuffer[j] <= t1; j++); + for ( ; j < blockSize - 1 && !(schmittBuffer[j] >= t2 && + schmittBuffer[j + 1] < t2); j++); + startpoint = j; + schmittTriggered = 0; + endpoint = startpoint + 1; + for (j = startpoint, tc = 0; j < blockSize; j++) { + if (!schmittTriggered) { + schmittTriggered = (schmittBuffer[j] >= t1); + } else if (schmittBuffer[j] >= t2 && schmittBuffer[j + 1] < t2) { + endpoint = j; + tc++; + schmittTriggered = 0; + } + } + if ((endpoint > startpoint) && (tc > 0)) { + period = (smpl_t) (endpoint - startpoint) / tc; + } + } + } + + p->schmittBuffer = schmittBuffer; + p->schmittPointer = schmittPointer; + return period; +} + +void +del_aubio_pitchschmitt (aubio_pitchschmitt_t * p) +{ + AUBIO_FREE (p->schmittBuffer); + AUBIO_FREE (p->buf); + AUBIO_FREE (p); +} diff --git a/deps/aubio/src/pitch/pitchschmitt.h b/deps/aubio/src/pitch/pitchschmitt.h new file mode 100644 index 00000000..db952c34 --- /dev/null +++ b/deps/aubio/src/pitch/pitchschmitt.h @@ -0,0 +1,75 @@ +/* + Copyright (C) 2003-2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Pitch detection using a Schmitt trigger + + This pitch extraction method implements a Schmitt trigger to estimate the + period of a signal. + + This file was derived from the tuneit project, written by Mario Lang to + detect the fundamental frequency of a sound. + + See http://delysid.org/tuneit.html + + \example pitch/test-pitchschmitt.c + +*/ + +#ifndef AUBIO_PITCHSCHMITT_H +#define AUBIO_PITCHSCHMITT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** pitch detection object */ +typedef struct _aubio_pitchschmitt_t aubio_pitchschmitt_t; + +/** execute pitch detection on an input buffer + + \param p pitch detection object as returned by new_aubio_pitchschmitt + \param samples_in input signal vector (length as specified at creation time) + \param cands_out pitch period estimates, in samples + +*/ +void aubio_pitchschmitt_do (aubio_pitchschmitt_t * p, const fvec_t * samples_in, + fvec_t * cands_out); + +/** creation of the pitch detection object + + \param buf_size size of the input buffer to analyse + +*/ +aubio_pitchschmitt_t *new_aubio_pitchschmitt (uint_t buf_size); + +/** deletion of the pitch detection object + + \param p pitch detection object as returned by new_aubio_pitchschmitt + +*/ +void del_aubio_pitchschmitt (aubio_pitchschmitt_t * p); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PITCHSCHMITT_H */ diff --git a/deps/aubio/src/pitch/pitchspecacf.c b/deps/aubio/src/pitch/pitchspecacf.c new file mode 100644 index 00000000..170cfa32 --- /dev/null +++ b/deps/aubio/src/pitch/pitchspecacf.c @@ -0,0 +1,116 @@ +/* + Copyright (C) 2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "cvec.h" +#include "mathutils.h" +#include "spectral/fft.h" +#include "pitch/pitchspecacf.h" + +/** pitch specacf structure */ +struct _aubio_pitchspecacf_t +{ + fvec_t *win; /**< temporal weighting window */ + fvec_t *winput; /**< windowed spectrum */ + aubio_fft_t *fft; /**< fft object to compute*/ + fvec_t *fftout; /**< Fourier transform output */ + fvec_t *sqrmag; /**< square magnitudes */ + fvec_t *acf; /**< auto correlation function */ + smpl_t tol; /**< tolerance */ + smpl_t confidence; /**< confidence */ +}; + +aubio_pitchspecacf_t * +new_aubio_pitchspecacf (uint_t bufsize) +{ + aubio_pitchspecacf_t *p = AUBIO_NEW (aubio_pitchspecacf_t); + p->fft = new_aubio_fft (bufsize); + if (!p->fft) goto beach; + p->win = new_aubio_window ("hanningz", bufsize); + p->winput = new_fvec (bufsize); + p->fftout = new_fvec (bufsize); + p->sqrmag = new_fvec (bufsize); + p->acf = new_fvec (bufsize / 2 + 1); + p->tol = 1.; + p->confidence = 0.; + return p; + +beach: + AUBIO_FREE(p); + return NULL; +} + +void +aubio_pitchspecacf_do (aubio_pitchspecacf_t * p, const fvec_t * input, fvec_t * output) +{ + uint_t l, tau; + fvec_t *fftout = p->fftout; + // window the input + for (l = 0; l < input->length; l++) { + p->winput->data[l] = p->win->data[l] * input->data[l]; + } + // get the real / imag parts of its fft + aubio_fft_do_complex (p->fft, p->winput, fftout); + for (l = 0; l < input->length / 2 + 1; l++) { + p->sqrmag->data[l] = SQR(fftout->data[l]); + } + // get the real / imag parts of the fft of the squared magnitude + aubio_fft_do_complex (p->fft, p->sqrmag, fftout); + // copy real part to acf + for (l = 0; l < fftout->length / 2 + 1; l++) { + p->acf->data[l] = fftout->data[l]; + } + // get the minimum + tau = fvec_min_elem (p->acf); + // get the interpolated minimum + output->data[0] = fvec_quadratic_peak_pos (p->acf, tau) * 2.; +} + +void +del_aubio_pitchspecacf (aubio_pitchspecacf_t * p) +{ + del_fvec (p->win); + del_fvec (p->winput); + del_aubio_fft (p->fft); + del_fvec (p->sqrmag); + del_fvec (p->fftout); + del_fvec (p->acf); + AUBIO_FREE (p); +} + +smpl_t +aubio_pitchspecacf_get_confidence (const aubio_pitchspecacf_t * o) { + // no confidence for now + return o->confidence; +} + +uint_t +aubio_pitchspecacf_set_tolerance (aubio_pitchspecacf_t * p, smpl_t tol) +{ + p->tol = tol; + return 0; +} + +smpl_t +aubio_pitchspecacf_get_tolerance (const aubio_pitchspecacf_t * p) +{ + return p->tol; +} diff --git a/deps/aubio/src/pitch/pitchspecacf.h b/deps/aubio/src/pitch/pitchspecacf.h new file mode 100644 index 00000000..e3c9c4c1 --- /dev/null +++ b/deps/aubio/src/pitch/pitchspecacf.h @@ -0,0 +1,103 @@ +/* + Copyright (C) 2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Pitch detection using spectral auto correlation + + This algorithm implements pitch detection by computing the autocorrelation + function as the cosine transform of the square spectral magnitudes. + + Anssi Klapuri. Qualitative and quantitative aspects in the design of + periodicity esti- mation algorithms. In Proceedings of the European Signal + Processing Conference (EUSIPCO), 2000. + + Paul Brossier, [Automatic annotation of musical audio for interactive + systems](http://aubio.org/phd/), Chapter 3, Pitch Analysis, Autocorrelation, + pp. 75-77, PhD thesis, Centre for Digital music, Queen Mary University of + London, London, UK, 2006. + + \example pitch/test-pitchspecacf.c + +*/ + +#ifndef AUBIO_PITCHSPECACF_H +#define AUBIO_PITCHSPECACF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** pitch detection object */ +typedef struct _aubio_pitchspecacf_t aubio_pitchspecacf_t; + +/** execute pitch detection on an input buffer + + \param o pitch detection object as returned by new_aubio_pitchspecacf + \param samples_in input signal vector (length as specified at creation time) + \param cands_out pitch period candidates, in samples + +*/ +void aubio_pitchspecacf_do (aubio_pitchspecacf_t * o, const fvec_t * samples_in, fvec_t * cands_out); +/** creation of the pitch detection object + + \param buf_size size of the input buffer to analyse + +*/ +aubio_pitchspecacf_t *new_aubio_pitchspecacf (uint_t buf_size); +/** deletion of the pitch detection object + + \param o pitch detection object as returned by new_aubio_pitchspecacf() + +*/ +void del_aubio_pitchspecacf (aubio_pitchspecacf_t * o); + +/** get tolerance parameter for `specacf` pitch detection object + + \param o pitch detection object + + \return tolerance parameter for minima selection [default 1.] + +*/ +smpl_t aubio_pitchspecacf_get_tolerance (const aubio_pitchspecacf_t * o); + +/** set tolerance parameter for `specacf` pitch detection object + + \param o pitch detection object + \param tol tolerance parameter for minima selection [default 1.] + + \return `1` on error, `0` on success + +*/ +uint_t aubio_pitchspecacf_set_tolerance (aubio_pitchspecacf_t * o, smpl_t tol); + +/** get currenct confidence for `specacf` pitch detection object + + \param o pitch detection object + \return confidence parameter + +*/ +smpl_t aubio_pitchspecacf_get_confidence (const aubio_pitchspecacf_t * o); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PITCHSPECACF_H */ diff --git a/deps/aubio/src/pitch/pitchyin.c b/deps/aubio/src/pitch/pitchyin.c new file mode 100644 index 00000000..85b4566b --- /dev/null +++ b/deps/aubio/src/pitch/pitchyin.c @@ -0,0 +1,189 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/* This algorithm was developed by A. de Cheveigné and H. Kawahara and + * published in: + * + * de Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency + * estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930. + * + * see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html + */ + +#include "aubio_priv.h" +#include "fvec.h" +#include "mathutils.h" +#include "pitch/pitchyin.h" + +struct _aubio_pitchyin_t +{ + fvec_t *yin; + smpl_t tol; + uint_t peak_pos; +}; + +#if 0 +/** compute difference function + + \param input input signal + \param yinbuf output buffer to store difference function (half shorter than input) + +*/ +void aubio_pitchyin_diff (fvec_t * input, fvec_t * yinbuf); + +/** in place computation of the YIN cumulative normalised function + + \param yinbuf input signal (a square difference function), also used to store function + +*/ +void aubio_pitchyin_getcum (fvec_t * yinbuf); + +/** detect pitch in a YIN function + + \param yinbuf input buffer as computed by aubio_pitchyin_getcum + +*/ +uint_t aubio_pitchyin_getpitch (const fvec_t * yinbuf); +#endif + +aubio_pitchyin_t * +new_aubio_pitchyin (uint_t bufsize) +{ + aubio_pitchyin_t *o = AUBIO_NEW (aubio_pitchyin_t); + o->yin = new_fvec (bufsize / 2); + o->tol = 0.15; + o->peak_pos = 0; + return o; +} + +void +del_aubio_pitchyin (aubio_pitchyin_t * o) +{ + del_fvec (o->yin); + AUBIO_FREE (o); +} + +#if 0 +/* outputs the difference function */ +void +aubio_pitchyin_diff (fvec_t * input, fvec_t * yin) +{ + uint_t j, tau; + smpl_t tmp; + for (tau = 0; tau < yin->length; tau++) { + yin->data[tau] = 0.; + } + for (tau = 1; tau < yin->length; tau++) { + for (j = 0; j < yin->length; j++) { + tmp = input->data[j] - input->data[j + tau]; + yin->data[tau] += SQR (tmp); + } + } +} + +/* cumulative mean normalized difference function */ +void +aubio_pitchyin_getcum (fvec_t * yin) +{ + uint_t tau; + smpl_t tmp = 0.; + yin->data[0] = 1.; + //AUBIO_DBG("%f\t",yin->data[0]); + for (tau = 1; tau < yin->length; tau++) { + tmp += yin->data[tau]; + yin->data[tau] *= tau / tmp; + //AUBIO_DBG("%f\t",yin->data[tau]); + } + //AUBIO_DBG("\n"); +} + +uint_t +aubio_pitchyin_getpitch (const fvec_t * yin) +{ + uint_t tau = 1; + do { + if (yin->data[tau] < 0.1) { + while (yin->data[tau + 1] < yin->data[tau]) { + tau++; + } + return tau; + } + tau++; + } while (tau < yin->length); + //AUBIO_DBG("No pitch found"); + return 0; +} +#endif + +/* all the above in one */ +void +aubio_pitchyin_do (aubio_pitchyin_t * o, const fvec_t * input, fvec_t * out) +{ + const smpl_t tol = o->tol; + fvec_t* yin = o->yin; + const smpl_t *input_data = input->data; + const uint_t length = yin->length; + smpl_t *yin_data = yin->data; + uint_t j, tau; + sint_t period; + smpl_t tmp, tmp2 = 0.; + + yin_data[0] = 1.; + for (tau = 1; tau < length; tau++) { + yin_data[tau] = 0.; + for (j = 0; j < length; j++) { + tmp = input_data[j] - input_data[j + tau]; + yin_data[tau] += SQR (tmp); + } + tmp2 += yin_data[tau]; + if (tmp2 != 0) { + yin->data[tau] *= tau / tmp2; + } else { + yin->data[tau] = 1.; + } + period = tau - 3; + if (tau > 4 && (yin_data[period] < tol) && + (yin_data[period] < yin_data[period + 1])) { + o->peak_pos = (uint_t)period; + out->data[0] = fvec_quadratic_peak_pos (yin, o->peak_pos); + return; + } + } + o->peak_pos = (uint_t)fvec_min_elem (yin); + out->data[0] = fvec_quadratic_peak_pos (yin, o->peak_pos); +} + +smpl_t +aubio_pitchyin_get_confidence (aubio_pitchyin_t * o) { + return 1. - o->yin->data[o->peak_pos]; +} + +uint_t +aubio_pitchyin_set_tolerance (aubio_pitchyin_t * o, smpl_t tol) +{ + o->tol = tol; + return 0; +} + +smpl_t +aubio_pitchyin_get_tolerance (aubio_pitchyin_t * o) +{ + return o->tol; +} diff --git a/deps/aubio/src/pitch/pitchyin.h b/deps/aubio/src/pitch/pitchyin.h new file mode 100644 index 00000000..fa32b8da --- /dev/null +++ b/deps/aubio/src/pitch/pitchyin.h @@ -0,0 +1,100 @@ +/* + Copyright (C) 2003-2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Pitch detection using the YIN algorithm + + This algorithm was developed by A. de Cheveigne and H. Kawahara and + published in: + + De Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency + estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930. + + see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html + http://recherche.ircam.fr/equipes/pcm/cheveign/ps/2002_JASA_YIN_proof.pdf + + \example pitch/test-pitchyin.c + +*/ + +#ifndef AUBIO_PITCHYIN_H +#define AUBIO_PITCHYIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** pitch detection object */ +typedef struct _aubio_pitchyin_t aubio_pitchyin_t; + +/** creation of the pitch detection object + + \param buf_size size of the input buffer to analyse + +*/ +aubio_pitchyin_t *new_aubio_pitchyin (uint_t buf_size); + +/** deletion of the pitch detection object + + \param o pitch detection object as returned by new_aubio_pitchyin() + +*/ +void del_aubio_pitchyin (aubio_pitchyin_t * o); + +/** execute pitch detection an input buffer + + \param o pitch detection object as returned by new_aubio_pitchyin() + \param samples_in input signal vector (length as specified at creation time) + \param cands_out pitch period candidates, in samples + +*/ +void aubio_pitchyin_do (aubio_pitchyin_t * o, const fvec_t * samples_in, fvec_t * cands_out); + + +/** set tolerance parameter for YIN algorithm + + \param o YIN pitch detection object + \param tol tolerance parameter for minima selection [default 0.15] + +*/ +uint_t aubio_pitchyin_set_tolerance (aubio_pitchyin_t * o, smpl_t tol); + +/** get tolerance parameter for YIN algorithm + + \param o YIN pitch detection object + \return tolerance parameter for minima selection [default 0.15] + +*/ +smpl_t aubio_pitchyin_get_tolerance (aubio_pitchyin_t * o); + +/** get current confidence of YIN algorithm + + \param o YIN pitch detection object + \return confidence parameter + +*/ +smpl_t aubio_pitchyin_get_confidence (aubio_pitchyin_t * o); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PITCHYIN_H */ diff --git a/deps/aubio/src/pitch/pitchyinfast.c b/deps/aubio/src/pitch/pitchyinfast.c new file mode 100644 index 00000000..b2dcadcd --- /dev/null +++ b/deps/aubio/src/pitch/pitchyinfast.c @@ -0,0 +1,201 @@ +/* + Copyright (C) 2003-2017 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/* This algorithm was developed by A. de Cheveigné and H. Kawahara and + * published in: + * + * de Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency + * estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930. + * + * see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html + */ + +#include "aubio_priv.h" +#include "fvec.h" +#include "mathutils.h" +#include "cvec.h" +#include "spectral/fft.h" +#include "pitch/pitchyinfast.h" + +struct _aubio_pitchyinfast_t +{ + fvec_t *yin; + smpl_t tol; + uint_t peak_pos; + fvec_t *tmpdata; + fvec_t *sqdiff; + fvec_t *kernel; + fvec_t *samples_fft; + fvec_t *kernel_fft; + aubio_fft_t *fft; +}; + +aubio_pitchyinfast_t * +new_aubio_pitchyinfast (uint_t bufsize) +{ + aubio_pitchyinfast_t *o = AUBIO_NEW (aubio_pitchyinfast_t); + o->yin = new_fvec (bufsize / 2); + o->tmpdata = new_fvec (bufsize); + o->sqdiff = new_fvec (bufsize / 2); + o->kernel = new_fvec (bufsize); + o->samples_fft = new_fvec (bufsize); + o->kernel_fft = new_fvec (bufsize); + o->fft = new_aubio_fft (bufsize); + if (!o->yin || !o->tmpdata || !o->tmpdata || !o->sqdiff + || !o->kernel || !o->samples_fft || !o->kernel || !o->fft) + { + del_aubio_pitchyinfast(o); + return NULL; + } + o->tol = 0.15; + o->peak_pos = 0; + return o; +} + +void +del_aubio_pitchyinfast (aubio_pitchyinfast_t * o) +{ + if (o->yin) + del_fvec (o->yin); + if (o->tmpdata) + del_fvec (o->tmpdata); + if (o->sqdiff) + del_fvec (o->sqdiff); + if (o->kernel) + del_fvec (o->kernel); + if (o->samples_fft) + del_fvec (o->samples_fft); + if (o->kernel_fft) + del_fvec (o->kernel_fft); + if (o->fft) + del_aubio_fft (o->fft); + AUBIO_FREE (o); +} + +/* all the above in one */ +void +aubio_pitchyinfast_do (aubio_pitchyinfast_t * o, const fvec_t * input, fvec_t * out) +{ + const smpl_t tol = o->tol; + fvec_t* yin = o->yin; + const uint_t length = yin->length; + uint_t B = o->tmpdata->length; + uint_t W = o->yin->length; // B / 2 + fvec_t tmp_slice, kernel_ptr; + uint_t tau; + sint_t period; + smpl_t tmp2 = 0.; + + // compute r_t(0) + r_t+tau(0) + { + fvec_t *squares = o->tmpdata; + fvec_weighted_copy(input, input, squares); +#if 0 + for (tau = 0; tau < W; tau++) { + tmp_slice.data = squares->data + tau; + tmp_slice.length = W; + o->sqdiff->data[tau] = fvec_sum(&tmp_slice); + } +#else + tmp_slice.data = squares->data; + tmp_slice.length = W; + o->sqdiff->data[0] = fvec_sum(&tmp_slice); + for (tau = 1; tau < W; tau++) { + o->sqdiff->data[tau] = o->sqdiff->data[tau-1]; + o->sqdiff->data[tau] -= squares->data[tau-1]; + o->sqdiff->data[tau] += squares->data[W+tau-1]; + } +#endif + fvec_add(o->sqdiff, o->sqdiff->data[0]); + } + // compute r_t(tau) = -2.*ifft(fft(samples)*fft(samples[W-1::-1])) + { + fvec_t *compmul = o->tmpdata; + fvec_t *rt_of_tau = o->samples_fft; + aubio_fft_do_complex(o->fft, input, o->samples_fft); + // build kernel, take a copy of first half of samples + tmp_slice.data = input->data; + tmp_slice.length = W; + kernel_ptr.data = o->kernel->data + 1; + kernel_ptr.length = W; + fvec_copy(&tmp_slice, &kernel_ptr); + // reverse them + fvec_rev(&kernel_ptr); + // compute fft(kernel) + aubio_fft_do_complex(o->fft, o->kernel, o->kernel_fft); + // compute complex product + compmul->data[0] = o->kernel_fft->data[0] * o->samples_fft->data[0]; + for (tau = 1; tau < W; tau++) { + compmul->data[tau] = o->kernel_fft->data[tau] * o->samples_fft->data[tau]; + compmul->data[tau] -= o->kernel_fft->data[B-tau] * o->samples_fft->data[B-tau]; + } + compmul->data[W] = o->kernel_fft->data[W] * o->samples_fft->data[W]; + for (tau = 1; tau < W; tau++) { + compmul->data[B-tau] = o->kernel_fft->data[B-tau] * o->samples_fft->data[tau]; + compmul->data[B-tau] += o->kernel_fft->data[tau] * o->samples_fft->data[B-tau]; + } + // compute inverse fft + aubio_fft_rdo_complex(o->fft, compmul, rt_of_tau); + // compute square difference r_t(tau) = sqdiff - 2 * r_t_tau[W-1:-1] + for (tau = 0; tau < W; tau++) { + yin->data[tau] = o->sqdiff->data[tau] - 2. * rt_of_tau->data[tau+W]; + } + } + + // now build yin and look for first minimum + fvec_zeros(out); + yin->data[0] = 1.; + for (tau = 1; tau < length; tau++) { + tmp2 += yin->data[tau]; + if (tmp2 != 0) { + yin->data[tau] *= tau / tmp2; + } else { + yin->data[tau] = 1.; + } + period = tau - 3; + if (tau > 4 && (yin->data[period] < tol) && + (yin->data[period] < yin->data[period + 1])) { + o->peak_pos = (uint_t)period; + out->data[0] = fvec_quadratic_peak_pos (yin, o->peak_pos); + return; + } + } + // use global minimum + o->peak_pos = (uint_t)fvec_min_elem (yin); + out->data[0] = fvec_quadratic_peak_pos (yin, o->peak_pos); +} + +smpl_t +aubio_pitchyinfast_get_confidence (aubio_pitchyinfast_t * o) { + return 1. - o->yin->data[o->peak_pos]; +} + +uint_t +aubio_pitchyinfast_set_tolerance (aubio_pitchyinfast_t * o, smpl_t tol) +{ + o->tol = tol; + return 0; +} + +smpl_t +aubio_pitchyinfast_get_tolerance (aubio_pitchyinfast_t * o) +{ + return o->tol; +} diff --git a/deps/aubio/src/pitch/pitchyinfast.h b/deps/aubio/src/pitch/pitchyinfast.h new file mode 100644 index 00000000..abb81393 --- /dev/null +++ b/deps/aubio/src/pitch/pitchyinfast.h @@ -0,0 +1,102 @@ +/* + Copyright (C) 2003-2017 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Pitch detection using YIN algorithm (fast implementation) + + This algorithm was developed by A. de Cheveigne and H. Kawahara and + published in: + + De Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency + estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930. + + This implementation compute the autocorrelation function using time domain + convolution computed in the spectral domain. + + see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html + http://recherche.ircam.fr/equipes/pcm/cheveign/ps/2002_JASA_YIN_proof.pdf + +*/ + +#ifndef AUBIO_PITCHYINFAST_H +#define AUBIO_PITCHYINFAST_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** pitch detection object */ +typedef struct _aubio_pitchyinfast_t aubio_pitchyinfast_t; + +/** creation of the pitch detection object + + \param buf_size size of the input buffer to analyse + +*/ +aubio_pitchyinfast_t *new_aubio_pitchyinfast (uint_t buf_size); + +/** deletion of the pitch detection object + + \param o pitch detection object as returned by new_aubio_pitchyin() + +*/ +void del_aubio_pitchyinfast (aubio_pitchyinfast_t * o); + +/** execute pitch detection an input buffer + + \param o pitch detection object as returned by new_aubio_pitchyin() + \param samples_in input signal vector (length as specified at creation time) + \param cands_out pitch period candidates, in samples + +*/ +void aubio_pitchyinfast_do (aubio_pitchyinfast_t * o, const fvec_t * samples_in, fvec_t * cands_out); + + +/** set tolerance parameter for YIN algorithm + + \param o YIN pitch detection object + \param tol tolerance parameter for minima selection [default 0.15] + +*/ +uint_t aubio_pitchyinfast_set_tolerance (aubio_pitchyinfast_t * o, smpl_t tol); + +/** get tolerance parameter for YIN algorithm + + \param o YIN pitch detection object + \return tolerance parameter for minima selection [default 0.15] + +*/ +smpl_t aubio_pitchyinfast_get_tolerance (aubio_pitchyinfast_t * o); + +/** get current confidence of YIN algorithm + + \param o YIN pitch detection object + \return confidence parameter + +*/ +smpl_t aubio_pitchyinfast_get_confidence (aubio_pitchyinfast_t * o); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PITCHYINFAST_H */ + diff --git a/deps/aubio/src/pitch/pitchyinfft.c b/deps/aubio/src/pitch/pitchyinfft.c new file mode 100644 index 00000000..b613f60e --- /dev/null +++ b/deps/aubio/src/pitch/pitchyinfft.c @@ -0,0 +1,208 @@ +/* + Copyright (C) 2003-2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "cvec.h" +#include "mathutils.h" +#include "spectral/fft.h" +#include "pitch/pitchyinfft.h" + +/** pitch yinfft structure */ +struct _aubio_pitchyinfft_t +{ + fvec_t *win; /**< temporal weighting window */ + fvec_t *winput; /**< windowed spectrum */ + fvec_t *sqrmag; /**< square difference function */ + fvec_t *weight; /**< spectral weighting window (psychoacoustic model) */ + fvec_t *fftout; /**< Fourier transform output */ + aubio_fft_t *fft; /**< fft object to compute square difference function */ + fvec_t *yinfft; /**< Yin function */ + smpl_t tol; /**< Yin tolerance */ + uint_t peak_pos; /**< currently selected peak pos*/ + uint_t short_period; /** shortest period under which to check for octave error */ +}; + +static const smpl_t freqs[] = { + 0., 20., 25., 31.5, 40., 50., 63., 80., 100., 125., + 160., 200., 250., 315., 400., 500., 630., 800., 1000., 1250., + 1600., 2000., 2500., 3150., 4000., 5000., 6300., 8000., 9000., 10000., + 12500., 15000., 20000., 25100., -1. +}; + +static const smpl_t weight[] = { + -75.8, -70.1, -60.8, -52.1, -44.2, -37.5, -31.3, -25.6, -20.9, -16.5, + -12.6, -9.60, -7.00, -4.70, -3.00, -1.80, -0.80, -0.20, -0.00, 0.50, + 1.60, 3.20, 5.40, 7.80, 8.10, 5.30, -2.40, -11.1, -12.8, -12.2, + -7.40, -17.8, -17.8, -17.8 +}; + +aubio_pitchyinfft_t * +new_aubio_pitchyinfft (uint_t samplerate, uint_t bufsize) +{ + uint_t i = 0, j = 1; + smpl_t freq = 0, a0 = 0, a1 = 0, f0 = 0, f1 = 0; + aubio_pitchyinfft_t *p = AUBIO_NEW (aubio_pitchyinfft_t); + p->winput = new_fvec (bufsize); + p->fft = new_aubio_fft (bufsize); + if (!p->fft) goto beach; + p->fftout = new_fvec (bufsize); + p->sqrmag = new_fvec (bufsize); + p->yinfft = new_fvec (bufsize / 2 + 1); + p->tol = 0.85; + p->peak_pos = 0; + p->win = new_aubio_window ("hanningz", bufsize); + p->weight = new_fvec (bufsize / 2 + 1); + for (i = 0; i < p->weight->length; i++) { + freq = (smpl_t) i / (smpl_t) bufsize *(smpl_t) samplerate; + while (freq > freqs[j] && freqs[j] > 0) { + //AUBIO_DBG("freq %3.5f > %3.5f \tsamplerate %d (Hz) \t" + // "(weight length %d, bufsize %d) %d %d\n", freq, freqs[j], + // samplerate, p->weight->length, bufsize, i, j); + j += 1; + } + a0 = weight[j - 1]; + f0 = freqs[j - 1]; + a1 = weight[j]; + f1 = freqs[j]; + if (f0 == f1) { // just in case + p->weight->data[i] = a0; + } else if (f0 == 0) { // y = ax+b + p->weight->data[i] = (a1 - a0) / f1 * freq + a0; + } else { + p->weight->data[i] = (a1 - a0) / (f1 - f0) * freq + + (a0 - (a1 - a0) / (f1 / f0 - 1.)); + } + while (freq > freqs[j]) { + j += 1; + } + //AUBIO_DBG("%f\n",p->weight->data[i]); + p->weight->data[i] = DB2LIN (p->weight->data[i]); + //p->weight->data[i] = SQRT(DB2LIN(p->weight->data[i])); + } + // check for octave errors above 1300 Hz + p->short_period = (uint_t)ROUND(samplerate / 1300.); + return p; + +beach: + if (p->winput) del_fvec(p->winput); + AUBIO_FREE(p); + return NULL; +} + +void +aubio_pitchyinfft_do (aubio_pitchyinfft_t * p, const fvec_t * input, fvec_t * output) +{ + uint_t tau, l; + uint_t length = p->fftout->length; + uint_t halfperiod; + fvec_t *fftout = p->fftout; + fvec_t *yin = p->yinfft; + smpl_t tmp = 0., sum = 0.; + // window the input + fvec_weighted_copy(input, p->win, p->winput); + // get the real / imag parts of its fft + aubio_fft_do_complex (p->fft, p->winput, fftout); + // get the squared magnitude spectrum, applying some weight + p->sqrmag->data[0] = SQR(fftout->data[0]); + p->sqrmag->data[0] *= p->weight->data[0]; + for (l = 1; l < length / 2; l++) { + p->sqrmag->data[l] = SQR(fftout->data[l]) + SQR(fftout->data[length - l]); + p->sqrmag->data[l] *= p->weight->data[l]; + p->sqrmag->data[length - l] = p->sqrmag->data[l]; + } + p->sqrmag->data[length / 2] = SQR(fftout->data[length / 2]); + p->sqrmag->data[length / 2] *= p->weight->data[length / 2]; + // get sum of weighted squared mags + for (l = 0; l < length / 2 + 1; l++) { + sum += p->sqrmag->data[l]; + } + sum *= 2.; + // get the real / imag parts of the fft of the squared magnitude + aubio_fft_do_complex (p->fft, p->sqrmag, fftout); + yin->data[0] = 1.; + for (tau = 1; tau < yin->length; tau++) { + // compute the square differences + yin->data[tau] = sum - fftout->data[tau]; + // and the cumulative mean normalized difference function + tmp += yin->data[tau]; + if (tmp != 0) { + yin->data[tau] *= tau / tmp; + } else { + yin->data[tau] = 1.; + } + } + // find best candidates + tau = fvec_min_elem (yin); + if (yin->data[tau] < p->tol) { + // no interpolation, directly return the period as an integer + //output->data[0] = tau; + //return; + + // 3 point quadratic interpolation + //return fvec_quadratic_peak_pos (yin,tau,1); + /* additional check for (unlikely) octave doubling in higher frequencies */ + if (tau > p->short_period) { + output->data[0] = fvec_quadratic_peak_pos (yin, tau); + } else { + /* should compare the minimum value of each interpolated peaks */ + halfperiod = FLOOR (tau / 2 + .5); + if (yin->data[halfperiod] < p->tol) + p->peak_pos = halfperiod; + else + p->peak_pos = tau; + output->data[0] = fvec_quadratic_peak_pos (yin, p->peak_pos); + } + } else { + p->peak_pos = 0; + output->data[0] = 0.; + } +} + +void +del_aubio_pitchyinfft (aubio_pitchyinfft_t * p) +{ + del_fvec (p->win); + del_aubio_fft (p->fft); + del_fvec (p->yinfft); + del_fvec (p->sqrmag); + del_fvec (p->fftout); + del_fvec (p->winput); + del_fvec (p->weight); + AUBIO_FREE (p); +} + +smpl_t +aubio_pitchyinfft_get_confidence (aubio_pitchyinfft_t * o) { + return 1. - o->yinfft->data[o->peak_pos]; +} + +uint_t +aubio_pitchyinfft_set_tolerance (aubio_pitchyinfft_t * p, smpl_t tol) +{ + p->tol = tol; + return 0; +} + +smpl_t +aubio_pitchyinfft_get_tolerance (aubio_pitchyinfft_t * p) +{ + return p->tol; +} diff --git a/deps/aubio/src/pitch/pitchyinfft.h b/deps/aubio/src/pitch/pitchyinfft.h new file mode 100644 index 00000000..ccd4e518 --- /dev/null +++ b/deps/aubio/src/pitch/pitchyinfft.h @@ -0,0 +1,99 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Pitch detection using a spectral implementation of the YIN algorithm + + This algorithm was derived from the YIN algorithm. In this implementation, a + Fourier transform is used to compute a tapered square difference function, + which allows spectral weighting. Because the difference function is tapered, + the selection of the period is simplified. + + Paul Brossier, [Automatic annotation of musical audio for interactive + systems](http://aubio.org/phd/), Chapter 3, Pitch Analysis, PhD thesis, + Centre for Digital music, Queen Mary University of London, London, UK, 2006. + + \example pitch/test-pitchyinfft.c + +*/ + +#ifndef AUBIO_PITCHYINFFT_H +#define AUBIO_PITCHYINFFT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** pitch detection object */ +typedef struct _aubio_pitchyinfft_t aubio_pitchyinfft_t; + +/** execute pitch detection on an input buffer + + \param o pitch detection object as returned by new_aubio_pitchyinfft + \param samples_in input signal vector (length as specified at creation time) + \param cands_out pitch period candidates, in samples + +*/ +void aubio_pitchyinfft_do (aubio_pitchyinfft_t * o, const fvec_t * samples_in, fvec_t * cands_out); +/** creation of the pitch detection object + + \param samplerate samplerate of the input signal + \param buf_size size of the input buffer to analyse + +*/ +aubio_pitchyinfft_t *new_aubio_pitchyinfft (uint_t samplerate, uint_t buf_size); +/** deletion of the pitch detection object + + \param o pitch detection object as returned by new_aubio_pitchyinfft() + +*/ +void del_aubio_pitchyinfft (aubio_pitchyinfft_t * o); + +/** get tolerance parameter for YIN algorithm + + \param o YIN pitch detection object + + \return tolerance parameter for minima selection [default 0.15] + +*/ +smpl_t aubio_pitchyinfft_get_tolerance (aubio_pitchyinfft_t * o); + +/** set tolerance parameter for YIN algorithm + + \param o YIN pitch detection object + \param tol tolerance parameter for minima selection [default 0.15] + +*/ +uint_t aubio_pitchyinfft_set_tolerance (aubio_pitchyinfft_t * o, smpl_t tol); + +/** get current confidence of YIN algorithm + + \param o YIN pitch detection object + \return confidence parameter + +*/ +smpl_t aubio_pitchyinfft_get_confidence (aubio_pitchyinfft_t * o); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PITCHYINFFT_H */ diff --git a/deps/aubio/src/spectral/fft.c b/deps/aubio/src/spectral/fft.c new file mode 100644 index 00000000..679231aa --- /dev/null +++ b/deps/aubio/src/spectral/fft.c @@ -0,0 +1,582 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "cvec.h" +#include "mathutils.h" +#include "spectral/fft.h" + +#ifdef HAVE_FFTW3 // using FFTW3 +/* note that is not included here but only in aubio_priv.h, so that + * c++ projects can still use their own complex definition. */ +#include +#include + +#ifdef HAVE_COMPLEX_H +#ifdef HAVE_FFTW3F +/** fft data type with complex.h and fftw3f */ +#define FFTW_TYPE fftwf_complex +#else +/** fft data type with complex.h and fftw3 */ +#define FFTW_TYPE fftw_complex +#endif +#else +#ifdef HAVE_FFTW3F +/** fft data type without complex.h and with fftw3f */ +#define FFTW_TYPE float +#else +/** fft data type without complex.h and with fftw */ +#define FFTW_TYPE double +#endif +#endif + +/** fft data type */ +typedef FFTW_TYPE fft_data_t; + +#ifdef HAVE_FFTW3F +#define fftw_malloc fftwf_malloc +#define fftw_free fftwf_free +#define fftw_execute fftwf_execute +#define fftw_plan_dft_r2c_1d fftwf_plan_dft_r2c_1d +#define fftw_plan_dft_c2r_1d fftwf_plan_dft_c2r_1d +#define fftw_plan_r2r_1d fftwf_plan_r2r_1d +#define fftw_plan fftwf_plan +#define fftw_destroy_plan fftwf_destroy_plan +#endif + +#ifdef HAVE_FFTW3F +#if HAVE_AUBIO_DOUBLE +#error "Using aubio in double precision with fftw3 in single precision" +#endif /* HAVE_AUBIO_DOUBLE */ +#define real_t float +#elif defined (HAVE_FFTW3) /* HAVE_FFTW3F */ +#if !HAVE_AUBIO_DOUBLE +#error "Using aubio in single precision with fftw3 in double precision" +#endif /* HAVE_AUBIO_DOUBLE */ +#define real_t double +#endif /* HAVE_FFTW3F */ + +#ifndef __MOD_DEVICES__ +// a global mutex for FFTW thread safety +pthread_mutex_t aubio_fftw_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif + +#elif defined HAVE_ACCELERATE // using ACCELERATE +// https://developer.apple.com/library/mac/#documentation/Accelerate/Reference/vDSPRef/Reference/reference.html +#include + +#if !HAVE_AUBIO_DOUBLE +#define aubio_vDSP_ctoz vDSP_ctoz +#define aubio_vDSP_fft_zrip vDSP_fft_zrip +#define aubio_vDSP_ztoc vDSP_ztoc +#define aubio_vDSP_zvmags vDSP_zvmags +#define aubio_vDSP_zvphas vDSP_zvphas +#define aubio_vDSP_vsadd vDSP_vsadd +#define aubio_vDSP_vsmul vDSP_vsmul +#define aubio_DSPComplex DSPComplex +#define aubio_DSPSplitComplex DSPSplitComplex +#define aubio_vDSP_DFT_Setup vDSP_DFT_Setup +#define aubio_vDSP_DFT_zrop_CreateSetup vDSP_DFT_zrop_CreateSetup +#define aubio_vDSP_DFT_Execute vDSP_DFT_Execute +#define aubio_vDSP_DFT_DestroySetup vDSP_DFT_DestroySetup +#define aubio_vvsqrt vvsqrtf +#else +#define aubio_vDSP_ctoz vDSP_ctozD +#define aubio_vDSP_fft_zrip vDSP_fft_zripD +#define aubio_vDSP_ztoc vDSP_ztocD +#define aubio_vDSP_zvmags vDSP_zvmagsD +#define aubio_vDSP_zvphas vDSP_zvphasD +#define aubio_vDSP_vsadd vDSP_vsaddD +#define aubio_vDSP_vsmul vDSP_vsmulD +#define aubio_DSPComplex DSPDoubleComplex +#define aubio_DSPSplitComplex DSPDoubleSplitComplex +#define aubio_vDSP_DFT_Setup vDSP_DFT_SetupD +#define aubio_vDSP_DFT_zrop_CreateSetup vDSP_DFT_zrop_CreateSetupD +#define aubio_vDSP_DFT_Execute vDSP_DFT_ExecuteD +#define aubio_vDSP_DFT_DestroySetup vDSP_DFT_DestroySetupD +#define aubio_vvsqrt vvsqrt +#endif /* HAVE_AUBIO_DOUBLE */ + +#elif defined HAVE_INTEL_IPP // using INTEL IPP + +#if !HAVE_AUBIO_DOUBLE +#define aubio_IppFloat Ipp32f +#define aubio_IppComplex Ipp32fc +#define aubio_FFTSpec FFTSpec_R_32f +#define aubio_ippsMalloc_complex ippsMalloc_32fc +#define aubio_ippsFFTInit_R ippsFFTInit_R_32f +#define aubio_ippsFFTGetSize_R ippsFFTGetSize_R_32f +#define aubio_ippsFFTInv_CCSToR ippsFFTInv_CCSToR_32f +#define aubio_ippsFFTFwd_RToCCS ippsFFTFwd_RToCCS_32f +#define aubio_ippsAtan2 ippsAtan2_32f_A21 +#else /* HAVE_AUBIO_DOUBLE */ +#define aubio_IppFloat Ipp64f +#define aubio_IppComplex Ipp64fc +#define aubio_FFTSpec FFTSpec_R_64f +#define aubio_ippsMalloc_complex ippsMalloc_64fc +#define aubio_ippsFFTInit_R ippsFFTInit_R_64f +#define aubio_ippsFFTGetSize_R ippsFFTGetSize_R_64f +#define aubio_ippsFFTInv_CCSToR ippsFFTInv_CCSToR_64f +#define aubio_ippsFFTFwd_RToCCS ippsFFTFwd_RToCCS_64f +#define aubio_ippsAtan2 ippsAtan2_64f_A50 +#endif + + +#else // using OOURA +// let's use ooura instead +extern void aubio_ooura_rdft(int, int, smpl_t *, int *, smpl_t *); + +#endif + +struct _aubio_fft_t { + uint_t winsize; + uint_t fft_size; + +#ifdef HAVE_FFTW3 // using FFTW3 + real_t *in, *out; + fftw_plan pfw, pbw; + fft_data_t * specdata; /* complex spectral data */ + +#elif defined HAVE_ACCELERATE // using ACCELERATE + aubio_vDSP_DFT_Setup fftSetupFwd; + aubio_vDSP_DFT_Setup fftSetupBwd; + aubio_DSPSplitComplex spec; + smpl_t *in, *out; + +#elif defined HAVE_INTEL_IPP // using Intel IPP + smpl_t *in, *out; + Ipp8u* memSpec; + Ipp8u* memInit; + Ipp8u* memBuffer; + struct aubio_FFTSpec* fftSpec; + aubio_IppComplex* complexOut; +#else // using OOURA + smpl_t *in, *out; + smpl_t *w; + int *ip; +#endif /* using OOURA */ + + fvec_t * compspec; +}; + +aubio_fft_t * new_aubio_fft (uint_t winsize) { + aubio_fft_t * s = AUBIO_NEW(aubio_fft_t); + if ((sint_t)winsize < 2) { + AUBIO_ERR("fft: got winsize %d, but can not be < 2\n", winsize); + goto beach; + } + +#ifdef HAVE_FFTW3 + uint_t i; + s->winsize = winsize; + /* allocate memory */ + s->in = AUBIO_ARRAY(real_t,winsize); + s->out = AUBIO_ARRAY(real_t,winsize); + s->compspec = new_fvec(winsize); + /* create plans */ +#ifndef __MOD_DEVICES__ + pthread_mutex_lock(&aubio_fftw_mutex); +#endif +#ifdef HAVE_COMPLEX_H + s->fft_size = winsize/2 + 1; + s->specdata = (fft_data_t*)fftw_malloc(sizeof(fft_data_t)*s->fft_size); + s->pfw = fftw_plan_dft_r2c_1d(winsize, s->in, s->specdata, FFTW_ESTIMATE); + s->pbw = fftw_plan_dft_c2r_1d(winsize, s->specdata, s->out, FFTW_ESTIMATE); +#else + s->fft_size = winsize; + s->specdata = (fft_data_t*)fftw_malloc(sizeof(fft_data_t)*s->fft_size); + s->pfw = fftw_plan_r2r_1d(winsize, s->in, s->specdata, FFTW_R2HC, FFTW_ESTIMATE); + s->pbw = fftw_plan_r2r_1d(winsize, s->specdata, s->out, FFTW_HC2R, FFTW_ESTIMATE); +#endif +#ifndef __MOD_DEVICES__ + pthread_mutex_unlock(&aubio_fftw_mutex); +#endif + for (i = 0; i < s->winsize; i++) { + s->in[i] = 0.; + s->out[i] = 0.; + } + for (i = 0; i < s->fft_size; i++) { + s->specdata[i] = 0.; + } + +#elif defined HAVE_ACCELERATE // using ACCELERATE + { + uint_t radix = winsize; + uint_t order = 0; + while ((radix / 2) * 2 == radix) { + radix /= 2; + order++; + } + if (order < 4 || (radix != 1 && radix != 3 && radix != 5 && radix != 15)) { + AUBIO_ERR("fft: vDSP/Accelerate supports FFT with sizes = " + "f * 2 ** n, where n > 4 and f in [1, 3, 5, 15], but requested %d. " + "Use the closest power of two, or try recompiling aubio with " + "--enable-fftw3.\n", winsize); + goto beach; + } + } + s->winsize = winsize; + s->fft_size = winsize; + s->compspec = new_fvec(winsize); + s->in = AUBIO_ARRAY(smpl_t, s->fft_size); + s->out = AUBIO_ARRAY(smpl_t, s->fft_size); + s->spec.realp = AUBIO_ARRAY(smpl_t, s->fft_size/2); + s->spec.imagp = AUBIO_ARRAY(smpl_t, s->fft_size/2); + s->fftSetupFwd = aubio_vDSP_DFT_zrop_CreateSetup(NULL, + s->fft_size, vDSP_DFT_FORWARD); + s->fftSetupBwd = aubio_vDSP_DFT_zrop_CreateSetup(s->fftSetupFwd, + s->fft_size, vDSP_DFT_INVERSE); + +#elif defined HAVE_INTEL_IPP // using Intel IPP + const IppHintAlgorithm qualityHint = ippAlgHintAccurate; // OR ippAlgHintFast; + const int flags = IPP_FFT_NODIV_BY_ANY; // we're scaling manually afterwards + int order = aubio_power_of_two_order(winsize); + int sizeSpec, sizeInit, sizeBuffer; + IppStatus status; + + if (winsize <= 4 || aubio_is_power_of_two(winsize) != 1) + { + AUBIO_ERR("intel IPP fft: can only create with sizes > 4 and power of two, requested %d," + " try recompiling aubio with --enable-fftw3\n", winsize); + goto beach; + } + + status = aubio_ippsFFTGetSize_R(order, flags, qualityHint, + &sizeSpec, &sizeInit, &sizeBuffer); + if (status != ippStsNoErr) { + AUBIO_ERR("fft: failed to initialize fft. IPP error: %d\n", status); + goto beach; + } + s->fft_size = s->winsize = winsize; + s->compspec = new_fvec(winsize); + s->in = AUBIO_ARRAY(smpl_t, s->winsize); + s->out = AUBIO_ARRAY(smpl_t, s->winsize); + s->memSpec = ippsMalloc_8u(sizeSpec); + s->memBuffer = ippsMalloc_8u(sizeBuffer); + if (sizeInit > 0 ) { + s->memInit = ippsMalloc_8u(sizeInit); + } + s->complexOut = aubio_ippsMalloc_complex(s->fft_size / 2 + 1); + status = aubio_ippsFFTInit_R( + &s->fftSpec, order, flags, qualityHint, s->memSpec, s->memInit); + if (status != ippStsNoErr) { + AUBIO_ERR("fft: failed to initialize. IPP error: %d\n", status); + goto beach; + } + +#else // using OOURA + if (aubio_is_power_of_two(winsize) != 1) { + AUBIO_ERR("fft: can only create with sizes power of two, requested %d," + " try recompiling aubio with --enable-fftw3\n", winsize); + goto beach; + } + s->winsize = winsize; + s->fft_size = winsize / 2 + 1; + s->compspec = new_fvec(winsize); + s->in = AUBIO_ARRAY(smpl_t, s->winsize); + s->out = AUBIO_ARRAY(smpl_t, s->winsize); + s->ip = AUBIO_ARRAY(int , s->fft_size); + s->w = AUBIO_ARRAY(smpl_t, s->fft_size); + s->ip[0] = 0; +#endif /* using OOURA */ + + return s; + +beach: + AUBIO_FREE(s); + return NULL; +} + +void del_aubio_fft(aubio_fft_t * s) { + /* destroy data */ +#ifdef HAVE_FFTW3 // using FFTW3 +#ifndef __MOD_DEVICES__ + pthread_mutex_lock(&aubio_fftw_mutex); +#endif + fftw_destroy_plan(s->pfw); + fftw_destroy_plan(s->pbw); + fftw_free(s->specdata); +#ifndef __MOD_DEVICES__ + pthread_mutex_unlock(&aubio_fftw_mutex); +#endif + +#elif defined HAVE_ACCELERATE // using ACCELERATE + AUBIO_FREE(s->spec.realp); + AUBIO_FREE(s->spec.imagp); + aubio_vDSP_DFT_DestroySetup(s->fftSetupBwd); + aubio_vDSP_DFT_DestroySetup(s->fftSetupFwd); + +#elif defined HAVE_INTEL_IPP // using Intel IPP + ippFree(s->memSpec); + ippFree(s->memInit); + ippFree(s->memBuffer); + ippFree(s->complexOut); + +#else // using OOURA + AUBIO_FREE(s->w); + AUBIO_FREE(s->ip); +#endif + + del_fvec(s->compspec); + AUBIO_FREE(s->in); + AUBIO_FREE(s->out); + AUBIO_FREE(s); +} + +void aubio_fft_do(aubio_fft_t * s, const fvec_t * input, cvec_t * spectrum) { + aubio_fft_do_complex(s, input, s->compspec); + aubio_fft_get_spectrum(s->compspec, spectrum); +} + +void aubio_fft_rdo(aubio_fft_t * s, const cvec_t * spectrum, fvec_t * output) { + aubio_fft_get_realimag(spectrum, s->compspec); + aubio_fft_rdo_complex(s, s->compspec, output); +} + +void aubio_fft_do_complex(aubio_fft_t * s, const fvec_t * input, fvec_t * compspec) { + uint_t i; +#ifndef HAVE_MEMCPY_HACKS + for (i=0; i < s->winsize; i++) { + s->in[i] = input->data[i]; + } +#else + memcpy(s->in, input->data, s->winsize * sizeof(smpl_t)); +#endif /* HAVE_MEMCPY_HACKS */ + +#ifdef HAVE_FFTW3 // using FFTW3 + fftw_execute(s->pfw); +#ifdef HAVE_COMPLEX_H + compspec->data[0] = REAL(s->specdata[0]); + for (i = 1; i < s->fft_size -1 ; i++) { + compspec->data[i] = REAL(s->specdata[i]); + compspec->data[compspec->length - i] = IMAG(s->specdata[i]); + } + compspec->data[s->fft_size-1] = REAL(s->specdata[s->fft_size-1]); +#else /* HAVE_COMPLEX_H */ + for (i = 0; i < s->fft_size; i++) { + compspec->data[i] = s->specdata[i]; + } +#endif /* HAVE_COMPLEX_H */ + +#elif defined HAVE_ACCELERATE // using ACCELERATE + // convert real data to even/odd format used in vDSP + aubio_vDSP_ctoz((aubio_DSPComplex*)s->in, 2, &s->spec, 1, s->fft_size/2); + // compute the FFT + aubio_vDSP_DFT_Execute(s->fftSetupFwd, s->spec.realp, s->spec.imagp, + s->spec.realp, s->spec.imagp); + // convert from vDSP complex split to [ r0, r1, ..., rN, iN-1, .., i2, i1] + compspec->data[0] = s->spec.realp[0]; + compspec->data[s->fft_size / 2] = s->spec.imagp[0]; + for (i = 1; i < s->fft_size / 2; i++) { + compspec->data[i] = s->spec.realp[i]; + compspec->data[s->fft_size - i] = s->spec.imagp[i]; + } + // apply scaling + smpl_t scale = 1./2.; + aubio_vDSP_vsmul(compspec->data, 1, &scale, compspec->data, 1, s->fft_size); + +#elif defined HAVE_INTEL_IPP // using Intel IPP + + // apply fft + aubio_ippsFFTFwd_RToCCS(s->in, (aubio_IppFloat*)s->complexOut, s->fftSpec, s->memBuffer); + // convert complex buffer to [ r0, r1, ..., rN, iN-1, .., i2, i1] + compspec->data[0] = s->complexOut[0].re; + compspec->data[s->fft_size / 2] = s->complexOut[s->fft_size / 2].re; + for (i = 1; i < s->fft_size / 2; i++) { + compspec->data[i] = s->complexOut[i].re; + compspec->data[s->fft_size - i] = s->complexOut[i].im; + } + +#else // using OOURA + aubio_ooura_rdft(s->winsize, 1, s->in, s->ip, s->w); + compspec->data[0] = s->in[0]; + compspec->data[s->winsize / 2] = s->in[1]; + for (i = 1; i < s->fft_size - 1; i++) { + compspec->data[i] = s->in[2 * i]; + compspec->data[s->winsize - i] = - s->in[2 * i + 1]; + } +#endif /* using OOURA */ +} + +void aubio_fft_rdo_complex(aubio_fft_t * s, const fvec_t * compspec, fvec_t * output) { + uint_t i; +#ifdef HAVE_FFTW3 + const smpl_t renorm = 1./(smpl_t)s->winsize; +#ifdef HAVE_COMPLEX_H + s->specdata[0] = compspec->data[0]; + for (i=1; i < s->fft_size - 1; i++) { + s->specdata[i] = compspec->data[i] + + I * compspec->data[compspec->length - i]; + } + s->specdata[s->fft_size - 1] = compspec->data[s->fft_size - 1]; +#else + for (i=0; i < s->fft_size; i++) { + s->specdata[i] = compspec->data[i]; + } +#endif + fftw_execute(s->pbw); + for (i = 0; i < output->length; i++) { + output->data[i] = s->out[i]*renorm; + } + +#elif defined HAVE_ACCELERATE // using ACCELERATE + // convert from real imag [ r0, r1, ..., rN, iN-1, .., i2, i1] + // to vDSP packed format [ r0, rN, r1, i1, ..., rN-1, iN-1 ] + s->out[0] = compspec->data[0]; + s->out[1] = compspec->data[s->winsize / 2]; + for (i = 1; i < s->fft_size / 2; i++) { + s->out[2 * i] = compspec->data[i]; + s->out[2 * i + 1] = compspec->data[s->winsize - i]; + } + // convert to split complex format used in vDSP + aubio_vDSP_ctoz((aubio_DSPComplex*)s->out, 2, &s->spec, 1, s->fft_size/2); + // compute the FFT + aubio_vDSP_DFT_Execute(s->fftSetupBwd, s->spec.realp, s->spec.imagp, + s->spec.realp, s->spec.imagp); + // convert result to real output + aubio_vDSP_ztoc(&s->spec, 1, (aubio_DSPComplex*)output->data, 2, s->fft_size/2); + // apply scaling + smpl_t scale = 1.0 / s->winsize; + aubio_vDSP_vsmul(output->data, 1, &scale, output->data, 1, s->fft_size); + +#elif defined HAVE_INTEL_IPP // using Intel IPP + + // convert from real imag [ r0, 0, ..., rN, iN-1, .., i2, i1, iN-1] to complex format + s->complexOut[0].re = compspec->data[0]; + s->complexOut[0].im = 0; + s->complexOut[s->fft_size / 2].re = compspec->data[s->fft_size / 2]; + s->complexOut[s->fft_size / 2].im = 0.0; + for (i = 1; i < s->fft_size / 2; i++) { + s->complexOut[i].re = compspec->data[i]; + s->complexOut[i].im = compspec->data[s->fft_size - i]; + } + // apply fft + aubio_ippsFFTInv_CCSToR((const aubio_IppFloat *)s->complexOut, output->data, s->fftSpec, s->memBuffer); + // apply scaling + aubio_ippsMulC(output->data, 1.0 / s->winsize, output->data, s->fft_size); + +#else // using OOURA + smpl_t scale = 2.0 / s->winsize; + s->out[0] = compspec->data[0]; + s->out[1] = compspec->data[s->winsize / 2]; + for (i = 1; i < s->fft_size - 1; i++) { + s->out[2 * i] = compspec->data[i]; + s->out[2 * i + 1] = - compspec->data[s->winsize - i]; + } + aubio_ooura_rdft(s->winsize, -1, s->out, s->ip, s->w); + for (i=0; i < s->winsize; i++) { + output->data[i] = s->out[i] * scale; + } +#endif +} + +void aubio_fft_get_spectrum(const fvec_t * compspec, cvec_t * spectrum) { + aubio_fft_get_phas(compspec, spectrum); + aubio_fft_get_norm(compspec, spectrum); +} + +void aubio_fft_get_realimag(const cvec_t * spectrum, fvec_t * compspec) { + aubio_fft_get_imag(spectrum, compspec); + aubio_fft_get_real(spectrum, compspec); +} + +void aubio_fft_get_phas(const fvec_t * compspec, cvec_t * spectrum) { + uint_t i; + if (compspec->data[0] < 0) { + spectrum->phas[0] = PI; + } else { + spectrum->phas[0] = 0.; + } +#if defined(HAVE_INTEL_IPP) + // convert from real imag [ r0, r1, ..., rN, iN-1, ..., i2, i1, i0] + // to [ r0, r1, ..., rN, i0, i1, i2, ..., iN-1] + for (i = 1; i < spectrum->length / 2; i++) { + ELEM_SWAP(compspec->data[compspec->length - i], + compspec->data[spectrum->length + i - 1]); + } + aubio_ippsAtan2(compspec->data + spectrum->length, + compspec->data + 1, spectrum->phas + 1, spectrum->length - 1); + // revert the imaginary part back again + for (i = 1; i < spectrum->length / 2; i++) { + ELEM_SWAP(compspec->data[spectrum->length + i - 1], + compspec->data[compspec->length - i]); + } +#else + for (i=1; i < spectrum->length - 1; i++) { + spectrum->phas[i] = ATAN2(compspec->data[compspec->length-i], + compspec->data[i]); + } +#endif +#ifdef HAVE_FFTW3 + // for even length only, make sure last element is 0 or PI + if (2 * (compspec->length / 2) == compspec->length) { +#endif + if (compspec->data[compspec->length/2] < 0) { + spectrum->phas[spectrum->length - 1] = PI; + } else { + spectrum->phas[spectrum->length - 1] = 0.; + } +#ifdef HAVE_FFTW3 + } else { + i = spectrum->length - 1; + spectrum->phas[i] = ATAN2(compspec->data[compspec->length-i], + compspec->data[i]); + } +#endif +} + +void aubio_fft_get_norm(const fvec_t * compspec, cvec_t * spectrum) { + uint_t i = 0; + spectrum->norm[0] = ABS(compspec->data[0]); + for (i=1; i < spectrum->length - 1; i++) { + spectrum->norm[i] = SQRT(SQR(compspec->data[i]) + + SQR(compspec->data[compspec->length - i]) ); + } +#ifdef HAVE_FFTW3 + // for even length, make sure last element is > 0 + if (2 * (compspec->length / 2) == compspec->length) { +#endif + spectrum->norm[spectrum->length-1] = + ABS(compspec->data[compspec->length/2]); +#ifdef HAVE_FFTW3 + } else { + i = spectrum->length - 1; + spectrum->norm[i] = SQRT(SQR(compspec->data[i]) + + SQR(compspec->data[compspec->length - i]) ); + } +#endif +} + +void aubio_fft_get_imag(const cvec_t * spectrum, fvec_t * compspec) { + uint_t i; + for (i = 1; i < ( compspec->length + 1 ) / 2 /*- 1 + 1*/; i++) { + compspec->data[compspec->length - i] = + spectrum->norm[i]*SIN(spectrum->phas[i]); + } +} + +void aubio_fft_get_real(const cvec_t * spectrum, fvec_t * compspec) { + uint_t i; + for (i = 0; i < compspec->length / 2 + 1; i++) { + compspec->data[i] = + spectrum->norm[i]*COS(spectrum->phas[i]); + } +} diff --git a/deps/aubio/src/spectral/fft.h b/deps/aubio/src/spectral/fft.h new file mode 100644 index 00000000..21072c8b --- /dev/null +++ b/deps/aubio/src/spectral/fft.h @@ -0,0 +1,144 @@ +/* + Copyright (C) 2003-2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Fast Fourier Transform + + Depending on how aubio was compiled, FFT are computed using one of: + - [Ooura](http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html) + - [FFTW3](http://www.fftw.org) + - [vDSP](https://developer.apple.com/library/mac/#documentation/Accelerate/Reference/vDSPRef/Reference/reference.html) + + \example spectral/test-fft.c + +*/ + +#ifndef AUBIO_FFT_H +#define AUBIO_FFT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** FFT object + + This object computes forward and backward FFTs. + +*/ +typedef struct _aubio_fft_t aubio_fft_t; + +/** create new FFT computation object + + \param size length of the FFT + +*/ +aubio_fft_t * new_aubio_fft (uint_t size); +/** delete FFT object + + \param s fft object as returned by new_aubio_fft + +*/ +void del_aubio_fft(aubio_fft_t * s); + +/** compute forward FFT + + \param s fft object as returned by new_aubio_fft + \param input input signal + \param spectrum output spectrum + +*/ +void aubio_fft_do (aubio_fft_t *s, const fvec_t * input, cvec_t * spectrum); +/** compute backward (inverse) FFT + + \param s fft object as returned by new_aubio_fft + \param spectrum input spectrum + \param output output signal + +*/ +void aubio_fft_rdo (aubio_fft_t *s, const cvec_t * spectrum, fvec_t * output); + +/** compute forward FFT + + \param s fft object as returned by new_aubio_fft + \param input real input signal + \param compspec complex output fft real/imag + +*/ +void aubio_fft_do_complex (aubio_fft_t *s, const fvec_t * input, fvec_t * compspec); +/** compute backward (inverse) FFT from real/imag + + \param s fft object as returned by new_aubio_fft + \param compspec real/imag input fft array + \param output real output array + +*/ +void aubio_fft_rdo_complex (aubio_fft_t *s, const fvec_t * compspec, fvec_t * output); + +/** convert real/imag spectrum to norm/phas spectrum + + \param compspec real/imag input fft array + \param spectrum cvec norm/phas output array + +*/ +void aubio_fft_get_spectrum(const fvec_t * compspec, cvec_t * spectrum); +/** convert real/imag spectrum to norm/phas spectrum + + \param compspec real/imag input fft array + \param spectrum cvec norm/phas output array + +*/ +void aubio_fft_get_realimag(const cvec_t * spectrum, fvec_t * compspec); + +/** compute phas spectrum from real/imag parts + + \param compspec real/imag input fft array + \param spectrum cvec norm/phas output array + +*/ +void aubio_fft_get_phas(const fvec_t * compspec, cvec_t * spectrum); +/** compute imaginary part from the norm/phas cvec + + \param spectrum norm/phas input array + \param compspec real/imag output fft array + +*/ +void aubio_fft_get_imag(const cvec_t * spectrum, fvec_t * compspec); + +/** compute norm component from real/imag parts + + \param compspec real/imag input fft array + \param spectrum cvec norm/phas output array + +*/ +void aubio_fft_get_norm(const fvec_t * compspec, cvec_t * spectrum); +/** compute real part from norm/phas components + + \param spectrum norm/phas input array + \param compspec real/imag output fft array + +*/ +void aubio_fft_get_real(const cvec_t * spectrum, fvec_t * compspec); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_FFT_H */ diff --git a/deps/aubio/src/spectral/phasevoc.c b/deps/aubio/src/spectral/phasevoc.c new file mode 100644 index 00000000..05ebdb06 --- /dev/null +++ b/deps/aubio/src/spectral/phasevoc.c @@ -0,0 +1,224 @@ +/* + Copyright (C) 2003-2014 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "cvec.h" +#include "mathutils.h" +#include "spectral/fft.h" +#include "spectral/phasevoc.h" + +/** phasevocoder internal object */ +struct _aubio_pvoc_t { + uint_t win_s; /** grain length */ + uint_t hop_s; /** overlap step */ + aubio_fft_t * fft; /** fft object */ + fvec_t * data; /** current input grain, [win_s] frames */ + fvec_t * dataold; /** memory of past grain, [win_s-hop_s] frames */ + fvec_t * synth; /** current output grain, [win_s] frames */ + fvec_t * synthold; /** memory of past grain, [win_s-hop_s] frames */ + fvec_t * w; /** grain window [win_s] */ + uint_t start; /** where to start additive synthesis */ + uint_t end; /** where to end it */ + smpl_t scale; /** scaling factor for synthesis */ + uint_t end_datasize; /** size of memory to end */ + uint_t hop_datasize; /** size of memory to hop_s */ +}; + + +/** returns data and dataold slided by hop_s */ +static void aubio_pvoc_swapbuffers(aubio_pvoc_t *pv, const fvec_t *new); + +/** do additive synthesis from 'old' and 'cur' */ +static void aubio_pvoc_addsynth(aubio_pvoc_t *pv, fvec_t * synthnew); + +void aubio_pvoc_do(aubio_pvoc_t *pv, const fvec_t * datanew, cvec_t *fftgrain) { + /* slide */ + aubio_pvoc_swapbuffers(pv, datanew); + /* windowing */ + fvec_weight(pv->data, pv->w); + /* shift */ + fvec_shift(pv->data); + /* calculate fft */ + aubio_fft_do (pv->fft,pv->data,fftgrain); +} + +void aubio_pvoc_rdo(aubio_pvoc_t *pv,cvec_t * fftgrain, fvec_t * synthnew) { + /* calculate rfft */ + aubio_fft_rdo(pv->fft,fftgrain,pv->synth); + /* unshift */ + fvec_ishift(pv->synth); + /* windowing */ + // if overlap = 50%, do not apply window (identity) + if (pv->hop_s * 2 < pv->win_s) { + fvec_weight(pv->synth, pv->w); + } + /* additive synthesis */ + aubio_pvoc_addsynth(pv, synthnew); +} + +aubio_pvoc_t * new_aubio_pvoc (uint_t win_s, uint_t hop_s) { + aubio_pvoc_t * pv = AUBIO_NEW(aubio_pvoc_t); + + /* if (win_s < 2*hop_s) { + AUBIO_WRN("Hop size bigger than half the window size!\n"); + } */ + + if ((sint_t)hop_s < 1) { + AUBIO_ERR("pvoc: got hop_size %d, but can not be < 1\n", hop_s); + goto beach; + } else if ((sint_t)win_s < 2) { + AUBIO_ERR("pvoc: got buffer_size %d, but can not be < 2\n", win_s); + goto beach; + } else if (win_s < hop_s) { + AUBIO_ERR("pvoc: hop size (%d) is larger than win size (%d)\n", hop_s, win_s); + goto beach; + } + + pv->fft = new_aubio_fft (win_s); + if (pv->fft == NULL) { + goto beach; + } + + /* remember old */ + pv->data = new_fvec (win_s); + pv->synth = new_fvec (win_s); + + /* new input output */ + if (win_s > hop_s) { + pv->dataold = new_fvec (win_s-hop_s); + pv->synthold = new_fvec (win_s-hop_s); + } else { + pv->dataold = new_fvec (1); + pv->synthold = new_fvec (1); + } + pv->w = new_aubio_window ("hanningz", win_s); + + pv->hop_s = hop_s; + pv->win_s = win_s; + + /* more than 50% overlap, overlap anyway */ + if (win_s < 2 * hop_s) pv->start = 0; + /* less than 50% overlap, reset latest grain trail */ + else pv->start = win_s - hop_s - hop_s; + + if (win_s > hop_s) pv->end = win_s - hop_s; + else pv->end = 0; + + pv->end_datasize = pv->end * sizeof(smpl_t); + pv->hop_datasize = pv->hop_s * sizeof(smpl_t); + + // for reconstruction with 75% overlap + if (win_s == hop_s * 4) { + pv->scale = 2./3.; + } else if (win_s == hop_s * 8) { + pv->scale = 1./3.; + } else if (win_s == hop_s * 2) { + pv->scale = 1.; + } else { + pv->scale = .5; + } + + return pv; + +beach: + AUBIO_FREE (pv); + return NULL; +} + +uint_t aubio_pvoc_set_window(aubio_pvoc_t *pv, const char_t *window) { + return fvec_set_window(pv->w, (char_t*)window); +} + +void del_aubio_pvoc(aubio_pvoc_t *pv) { + del_fvec(pv->data); + del_fvec(pv->synth); + del_fvec(pv->dataold); + del_fvec(pv->synthold); + del_fvec(pv->w); + del_aubio_fft(pv->fft); + AUBIO_FREE(pv); +} + +static void aubio_pvoc_swapbuffers(aubio_pvoc_t *pv, const fvec_t *new) +{ + /* some convenience pointers */ + smpl_t * data = pv->data->data; + smpl_t * dataold = pv->dataold->data; + smpl_t * datanew = new->data; +#ifndef HAVE_MEMCPY_HACKS + uint_t i; + for (i = 0; i < pv->end; i++) + data[i] = dataold[i]; + for (i = 0; i < pv->hop_s; i++) + data[pv->end + i] = datanew[i]; + for (i = 0; i < pv->end; i++) + dataold[i] = data[i + pv->hop_s]; +#else + memcpy(data, dataold, pv->end_datasize); + data += pv->end; + memcpy(data, datanew, pv->hop_datasize); + data -= pv->end; + data += pv->hop_s; + memcpy(dataold, data, pv->end_datasize); +#endif +} + +static void aubio_pvoc_addsynth(aubio_pvoc_t *pv, fvec_t *synth_new) +{ + uint_t i; + /* some convenience pointers */ + smpl_t * synth = pv->synth->data; + smpl_t * synthold = pv->synthold->data; + smpl_t * synthnew = synth_new->data; + + /* put new result in synthnew */ + for (i = 0; i < pv->hop_s; i++) + synthnew[i] = synth[i] * pv->scale; + + /* no overlap, nothing else to do */ + if (pv->end == 0) return; + + /* add new synth to old one */ + for (i = 0; i < pv->hop_s; i++) + synthnew[i] += synthold[i]; + + /* shift synthold */ + for (i = 0; i < pv->start; i++) + synthold[i] = synthold[i + pv->hop_s]; + + /* erase last frame in synthold */ + for (i = pv->start; i < pv->end; i++) + synthold[i] = 0.; + + /* additive synth */ + for (i = 0; i < pv->end; i++) + synthold[i] += synth[i + pv->hop_s] * pv->scale; +} + +uint_t aubio_pvoc_get_win(aubio_pvoc_t* pv) +{ + return pv->win_s; +} + +uint_t aubio_pvoc_get_hop(aubio_pvoc_t* pv) +{ + return pv->hop_s; +} diff --git a/deps/aubio/src/spectral/phasevoc.h b/deps/aubio/src/spectral/phasevoc.h new file mode 100644 index 00000000..e3caf2de --- /dev/null +++ b/deps/aubio/src/spectral/phasevoc.h @@ -0,0 +1,113 @@ +/* + Copyright (C) 2003-2013 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +/** \file + + Phase vocoder object + + This object implements a phase vocoder. The spectral frames are computed + using a HanningZ window and a swapped version of the signal to simplify the + phase relationships across frames. The window sizes and overlap are specified + at creation time. + + \example spectral/test-phasevoc.c + +*/ + +#ifndef AUBIO_PHASEVOC_H +#define AUBIO_PHASEVOC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** phasevocoder object */ +typedef struct _aubio_pvoc_t aubio_pvoc_t; + +/** create phase vocoder object + + \param win_s size of analysis buffer (and length the FFT transform) + \param hop_s step size between two consecutive analysis + +*/ +aubio_pvoc_t * new_aubio_pvoc (uint_t win_s, uint_t hop_s); +/** delete phase vocoder object + + \param pv phase vocoder object as returned by new_aubio_pvoc + +*/ +void del_aubio_pvoc(aubio_pvoc_t *pv); + +/** compute spectral frame + + This function accepts an input vector of size [hop_s]. The + analysis buffer is rotated and filled with the new data. After windowing of + this signal window, the Fourier transform is computed and returned in + fftgrain as two vectors, magnitude and phase. + + \param pv phase vocoder object as returned by new_aubio_pvoc + \param in new input signal (hop_s long) + \param fftgrain output spectral frame + +*/ +void aubio_pvoc_do(aubio_pvoc_t *pv, const fvec_t *in, cvec_t * fftgrain); +/** compute signal from spectral frame + + This function takes an input spectral frame fftgrain of size + [buf_s] and computes its inverse Fourier transform. Overlap-add + synthesis is then computed using the previously synthetised frames, and the + output stored in out. + + \param pv phase vocoder object as returned by new_aubio_pvoc + \param fftgrain input spectral frame + \param out output signal (hop_s long) + +*/ +void aubio_pvoc_rdo(aubio_pvoc_t *pv, cvec_t * fftgrain, fvec_t *out); + +/** get window size + + \param pv phase vocoder to get the window size from + +*/ +uint_t aubio_pvoc_get_win(aubio_pvoc_t* pv); + +/** get hop size + + \param pv phase vocoder to get the hop size from + +*/ +uint_t aubio_pvoc_get_hop(aubio_pvoc_t* pv); + +/** set window type + + \param pv phase vocoder to set the window type + \param window_type a string representing a window + + \return 0 if successful, non-zero otherwise + + */ +uint_t aubio_pvoc_set_window(aubio_pvoc_t *pv, const char_t *window_type); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_PHASEVOC_H */ diff --git a/deps/aubio/src/temporal/a_weighting.c b/deps/aubio/src/temporal/a_weighting.c new file mode 100644 index 00000000..f19f566f --- /dev/null +++ b/deps/aubio/src/temporal/a_weighting.c @@ -0,0 +1,262 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "types.h" +#include "fvec.h" +#include "lvec.h" +#include "temporal/filter.h" +#include "temporal/a_weighting.h" + +uint_t +aubio_filter_set_a_weighting (aubio_filter_t * f, uint_t samplerate) +{ + uint_t order; lsmp_t *a, *b; lvec_t *as, *bs; + + if ((sint_t)samplerate <= 0) { + AUBIO_ERROR("aubio_filter: failed setting A-weighting with samplerate %d\n", samplerate); + return AUBIO_FAIL; + } + if (f == NULL) { + AUBIO_ERROR("aubio_filter: failed setting A-weighting with filter NULL\n"); + return AUBIO_FAIL; + } + + order = aubio_filter_get_order (f); + if (order != 7) { + AUBIO_ERROR ("aubio_filter: order of A-weighting filter must be 7, not %d\n", order); + return 1; + } + + aubio_filter_set_samplerate (f, samplerate); + bs = aubio_filter_get_feedforward (f); + as = aubio_filter_get_feedback (f); + b = bs->data, a = as->data; + + /* select coefficients according to sampling frequency */ + switch (samplerate) { + + case 8000: + b[0] = 6.306209468238731519207362907764036208391189575195312500e-01; + b[1] = -1.261241893647746525886077506584115326404571533203125000e+00; + b[2] = -6.306209468238730408984338282607495784759521484375000000e-01; + b[3] = 2.522483787295493051772155013168230652809143066406250000e+00; + b[4] = -6.306209468238730408984338282607495784759521484375000000e-01; + b[5] = -1.261241893647746525886077506584115326404571533203125000e+00; + b[6] = 6.306209468238731519207362907764036208391189575195312500e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -2.128467193009123015201566886389628052711486816406250000e+00; + a[2] = 2.948668980101234460278192273108288645744323730468750000e-01; + a[3] = 1.824183830735050637628091863007284700870513916015625000e+00; + a[4] = -8.056628943119792385374466903158463537693023681640625000e-01; + a[5] = -3.947497982842933517133587884018197655677795410156250000e-01; + a[6] = 2.098548546080332977137317129745497368276119232177734375e-01; + break; + + case 11025: + b[0] = 6.014684165832374640459079273568931967020034790039062500e-01; + b[1] = -1.202936833166475150136420779745094478130340576171875000e+00; + b[2] = -6.014684165832373530236054648412391543388366699218750000e-01; + b[3] = 2.405873666332950300272841559490188956260681152343750000e+00; + b[4] = -6.014684165832373530236054648412391543388366699218750000e-01; + b[5] = -1.202936833166475150136420779745094478130340576171875000e+00; + b[6] = 6.014684165832374640459079273568931967020034790039062500e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -2.463578747722854345170162559952586889266967773437500000e+00; + a[2] = 1.096799662705210121060872552334330976009368896484375000e+00; + a[3] = 1.381222210556041218865175324026495218276977539062500000e+00; + a[4] = -1.013875696476876031582037285261321812868118286132812500e+00; + a[5] = -1.839132734476921215982514468123554252088069915771484375e-01; + a[6] = 1.833526393172056623281918064094497822225093841552734375e-01; + break; + + case 16000: + b[0] = 5.314898298235570806014038680586963891983032226562500000e-01; + b[1] = -1.062979659647114161202807736117392778396606445312500000e+00; + b[2] = -5.314898298235570806014038680586963891983032226562500000e-01; + b[3] = 2.125959319294228322405615472234785556793212890625000000e+00; + b[4] = -5.314898298235570806014038680586963891983032226562500000e-01; + b[5] = -1.062979659647114161202807736117392778396606445312500000e+00; + b[6] = 5.314898298235570806014038680586963891983032226562500000e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -2.867832572992162987191022693878039717674255371093750000e+00; + a[2] = 2.221144410202312347024644623161293566226959228515625000e+00; + a[3] = 4.552683347886614662058946123579517006874084472656250000e-01; + a[4] = -9.833868636162828025248927588108927011489868164062500000e-01; + a[5] = 5.592994142413361402521587706360151059925556182861328125e-02; + a[6] = 1.188781038285612462468421313133148942142724990844726562e-01; + break; + + case 22050: + b[0] = 4.492998504299193784916610638902056962251663208007812500e-01; + b[1] = -8.985997008598388680056245902960654348134994506835937500e-01; + b[2] = -4.492998504299192674693586013745516538619995117187500000e-01; + b[3] = 1.797199401719677958055854105623438954353332519531250000e+00; + b[4] = -4.492998504299192674693586013745516538619995117187500000e-01; + b[5] = -8.985997008598388680056245902960654348134994506835937500e-01; + b[6] = 4.492998504299193784916610638902056962251663208007812500e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -3.229078805225074955131958631682209670543670654296875000e+00; + a[2] = 3.354494881236033787530459449044428765773773193359375000e+00; + a[3] = -7.317843680657351024265722116979304701089859008789062500e-01; + a[4] = -6.271627581807257545420952737913466989994049072265625000e-01; + a[5] = 1.772142005020879151899748649157118052244186401367187500e-01; + a[6] = 5.631716697383508385410522123493137769401073455810546875e-02; + break; + + case 24000: + b[0] = 4.256263892891054001488271296693710610270500183105468750e-01; + b[1] = -8.512527785782106892753517968230880796909332275390625000e-01; + b[2] = -4.256263892891054556599783609271980822086334228515625000e-01; + b[3] = 1.702505557156421378550703593646176159381866455078125000e+00; + b[4] = -4.256263892891054556599783609271980822086334228515625000e-01; + b[5] = -8.512527785782106892753517968230880796909332275390625000e-01; + b[6] = 4.256263892891054001488271296693710610270500183105468750e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -3.325996004241962733516402295208536088466644287109375000e+00; + a[2] = 3.677161079286316969216841243905946612358093261718750000e+00; + a[3] = -1.106476076828482035807610373012721538543701171875000000e+00; + a[4] = -4.726706734908718843257702246773988008499145507812500000e-01; + a[5] = 1.861941760230954034938122276798821985721588134765625000e-01; + a[6] = 4.178771337829546850262119050967157818377017974853515625e-02; + break; + + case 32000: + b[0] = 3.434583386824304196416335344110848382115364074707031250e-01; + b[1] = -6.869166773648609503055695313378237187862396240234375000e-01; + b[2] = -3.434583386824303641304823031532578170299530029296875000e-01; + b[3] = 1.373833354729721900611139062675647437572479248046875000e+00; + b[4] = -3.434583386824303641304823031532578170299530029296875000e-01; + b[5] = -6.869166773648609503055695313378237187862396240234375000e-01; + b[6] = 3.434583386824304196416335344110848382115364074707031250e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -3.656446043233668063976438133977353572845458984375000000e+00; + a[2] = 4.831468450652579349480220116674900054931640625000000000e+00; + a[3] = -2.557597496581567764195597192156128585338592529296875000e+00; + a[4] = 2.533680394205302666144064005493419244885444641113281250e-01; + a[5] = 1.224430322452567110325105659285327419638633728027343750e-01; + a[6] = 6.764072168342137418572956875095769646577537059783935547e-03; + break; + + case 44100: + b[0] = 2.557411252042575133813784304948057979345321655273437500e-01; + b[1] = -5.114822504085150267627568609896115958690643310546875000e-01; + b[2] = -2.557411252042575133813784304948057979345321655273437500e-01; + b[3] = 1.022964500817030053525513721979223191738128662109375000e+00; + b[4] = -2.557411252042575133813784304948057979345321655273437500e-01; + b[5] = -5.114822504085150267627568609896115958690643310546875000e-01; + b[6] = 2.557411252042575133813784304948057979345321655273437500e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -4.019576181115832369528106937650591135025024414062500000e+00; + a[2] = 6.189406442920693862674852425698190927505493164062500000e+00; + a[3] = -4.453198903544116404873420833609998226165771484375000000e+00; + a[4] = 1.420842949621876627475103305187076330184936523437500000e+00; + a[5] = -1.418254738303044160119270600262098014354705810546875000e-01; + a[6] = 4.351177233495117681327801761881346465088427066802978516e-03; + break; + + case 48000: + b[0] = 2.343017922995132285013397677175817079842090606689453125e-01; + b[1] = -4.686035845990265125138307666929904371500015258789062500e-01; + b[2] = -2.343017922995132007457641520886681973934173583984375000e-01; + b[3] = 9.372071691980530250276615333859808743000030517578125000e-01; + b[4] = -2.343017922995132007457641520886681973934173583984375000e-01; + b[5] = -4.686035845990265125138307666929904371500015258789062500e-01; + b[6] = 2.343017922995132285013397677175817079842090606689453125e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -4.113043408775872045168853219365701079368591308593750000e+00; + a[2] = 6.553121752655050258340452273841947317123413085937500000e+00; + a[3] = -4.990849294163385074796224216697737574577331542968750000e+00; + a[4] = 1.785737302937575599059982778271660208702087402343750000e+00; + a[5] = -2.461905953194876706113802811159985139966011047363281250e-01; + a[6] = 1.122425003323123879339640041052916785702109336853027344e-02; + break; + + case 88200: + b[0] = 1.118876366882113199130444058937428053468465805053710938e-01; + b[1] = -2.237752733764226120705131961585721001029014587402343750e-01; + b[2] = -1.118876366882113337908322137081995606422424316406250000e-01; + b[3] = 4.475505467528452241410263923171442002058029174804687500e-01; + b[4] = -1.118876366882113337908322137081995606422424316406250000e-01; + b[5] = -2.237752733764226120705131961585721001029014587402343750e-01; + b[6] = 1.118876366882113199130444058937428053468465805053710938e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -4.726938565651158441482948546763509511947631835937500000e+00; + a[2] = 9.076897983832765248735086061060428619384765625000000000e+00; + a[3] = -9.014855113464800950850985827855765819549560546875000000e+00; + a[4] = 4.852772261031594425162438710685819387435913085937500000e+00; + a[5] = -1.333877820398965186043938047077972441911697387695312500e+00; + a[6] = 1.460012549591642450064199465487035922706127166748046875e-01; + break; + + case 96000: + b[0] = 9.951898975972744976203898659150581806898117065429687500e-02; + b[1] = -1.990379795194548995240779731830116361379623413085937500e-01; + b[2] = -9.951898975972744976203898659150581806898117065429687500e-02; + b[3] = 3.980759590389097990481559463660232722759246826171875000e-01; + b[4] = -9.951898975972744976203898659150581806898117065429687500e-02; + b[5] = -1.990379795194548995240779731830116361379623413085937500e-01; + b[6] = 9.951898975972744976203898659150581806898117065429687500e-02; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -4.802203044225376693532325589330866932868957519531250000e+00; + a[2] = 9.401807218627226347962277941405773162841796875000000000e+00; + a[3] = -9.566143943569164420637207513209432363510131835937500000e+00; + a[4] = 5.309775930392619081032989925006404519081115722656250000e+00; + a[5] = -1.517333360452622237346531619550660252571105957031250000e+00; + a[6] = 1.740971994228911745583587844521389342844486236572265625e-01; + break; + + case 192000: + b[0] = 3.433213424548713782469278044118254911154508590698242188e-02; + b[1] = -6.866426849097426177159775306790834292769432067871093750e-02; + b[2] = -3.433213424548714476358668434841092675924301147460937500e-02; + b[3] = 1.373285369819485235431955061358166858553886413574218750e-01; + b[4] = -3.433213424548714476358668434841092675924301147460937500e-02; + b[5] = -6.866426849097426177159775306790834292769432067871093750e-02; + b[6] = 3.433213424548713782469278044118254911154508590698242188e-02; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -5.305923689674640009172890131594613194465637207031250000e+00; + a[2] = 1.165952437466175695135461864992976188659667968750000000e+01; + a[3] = -1.357560092700591525272102444432675838470458984375000000e+01; + a[4] = 8.828906932824192921316353022120893001556396484375000000e+00; + a[5] = -3.039490120988216581565666274400427937507629394531250000e+00; + a[6] = 4.325834301870381537469256727490574121475219726562500000e-01; + break; + + default: + AUBIO_ERROR ("sampling rate of A-weighting filter is %d, should be one of\ + 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, 88200, 96000, 192000.\n", samplerate); + return 1; + + } + + return 0; +} + +aubio_filter_t * +new_aubio_filter_a_weighting (uint_t samplerate) +{ + aubio_filter_t *f = new_aubio_filter (7); + if (aubio_filter_set_a_weighting(f,samplerate) != AUBIO_OK) { + del_aubio_filter(f); + return NULL; + } + return f; +} diff --git a/deps/aubio/src/temporal/a_weighting.h b/deps/aubio/src/temporal/a_weighting.h new file mode 100644 index 00000000..49dd4d5c --- /dev/null +++ b/deps/aubio/src/temporal/a_weighting.h @@ -0,0 +1,88 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_FILTER_A_DESIGN_H +#define AUBIO_FILTER_A_DESIGN_H + +/** \file + + A-weighting filter coefficients + + This file creates an A-weighting digital filter, which reduces low and high + frequencies and enhance the middle ones to reflect the ability of the human + hearing. + + The implementation is based on the following standard: + + - IEC/CD 1672: Electroacoustics-Sound Level Meters, IEC, Geneva, Nov. 1996, + for A- and C-weighting filters. + + See also: + + - A-Weighting on + Wikipedia + - Weighting filter on + Wikipedia + - Christophe + Couvreur's 'octave' toolbox + + The coefficients in this file have been computed using Christophe Couvreur's + scripts in octave 3.0 (debian package 1:3.0.5-6+b2 with octave-signal + 1.0.9-1+b1 on i386), with
 [b, a] = adsign(1/Fs) 
for various + sampling frequencies (8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, + 88200, 96000, and 192000 Hz). + + The sampling frequency should normally be higher than 20kHz, but most common + file sampling rates have been included for completeness. + + \example temporal/test-a_weighting.c + +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** create new A-design filter + + \param samplerate sampling frequency of the signal to filter. Should be one of + 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, 88200, 96000, and + 192000 Hz + + \return a new filter object + +*/ +aubio_filter_t *new_aubio_filter_a_weighting (uint_t samplerate); + +/** set feedback and feedforward coefficients of a A-weighting filter + + \param f filter object to get coefficients from + \param samplerate sampling frequency of the signal to filter. Should be one of + 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, 88200, 96000, and + 192000 Hz + +*/ +uint_t aubio_filter_set_a_weighting (aubio_filter_t * f, uint_t samplerate); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_FILTER_A_DESIGN_H */ diff --git a/deps/aubio/src/temporal/biquad.c b/deps/aubio/src/temporal/biquad.c new file mode 100644 index 00000000..426b64fb --- /dev/null +++ b/deps/aubio/src/temporal/biquad.c @@ -0,0 +1,54 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "lvec.h" +#include "temporal/filter.h" +#include "temporal/biquad.h" + +uint_t +aubio_filter_set_biquad (aubio_filter_t * f, lsmp_t b0, lsmp_t b1, lsmp_t b2, + lsmp_t a1, lsmp_t a2) +{ + uint_t order = aubio_filter_get_order (f); + lvec_t *bs = aubio_filter_get_feedforward (f); + lvec_t *as = aubio_filter_get_feedback (f); + + if (order != 3) { + AUBIO_ERROR ("order of biquad filter must be 3, not %d\n", order); + return AUBIO_FAIL; + } + bs->data[0] = b0; + bs->data[1] = b1; + bs->data[2] = b2; + as->data[0] = 1.; + as->data[1] = a1; + as->data[2] = a2; + return AUBIO_OK; +} + +aubio_filter_t * +new_aubio_filter_biquad (lsmp_t b0, lsmp_t b1, lsmp_t b2, lsmp_t a1, lsmp_t a2) +{ + aubio_filter_t *f = new_aubio_filter (3); + aubio_filter_set_biquad (f, b0, b1, b2, a1, a2); + return f; +} diff --git a/deps/aubio/src/temporal/biquad.h b/deps/aubio/src/temporal/biquad.h new file mode 100644 index 00000000..1d19d942 --- /dev/null +++ b/deps/aubio/src/temporal/biquad.h @@ -0,0 +1,75 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_FILTER_BIQUAD_H +#define AUBIO_FILTER_BIQUAD_H + +/** \file + + Second order Infinite Impulse Response filter + + This file implements a normalised biquad filter (second order IIR): + + \f$ y[n] = b_0 x[n] + b_1 x[n-1] + b_2 x[n-2] - a_1 y[n-1] - a_2 y[n-2] \f$ + + The filtfilt version runs the filter twice, forward and backward, to + compensate the phase shifting of the forward operation. + + See also Digital + biquad filter on wikipedia. + + \example temporal/test-biquad.c + +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** set coefficients of a biquad filter + + \param f filter object as returned by new_aubio_filter() + \param b0 forward filter coefficient + \param b1 forward filter coefficient + \param b2 forward filter coefficient + \param a1 feedback filter coefficient + \param a2 feedback filter coefficient + +*/ +uint_t aubio_filter_set_biquad (aubio_filter_t * f, lsmp_t b0, lsmp_t b1, + lsmp_t b2, lsmp_t a1, lsmp_t a2); + +/** create biquad filter with `b0`, `b1`, `b2`, `a1`, `a2` coeffs + + \param b0 forward filter coefficient + \param b1 forward filter coefficient + \param b2 forward filter coefficient + \param a1 feedback filter coefficient + \param a2 feedback filter coefficient + +*/ +aubio_filter_t *new_aubio_filter_biquad (lsmp_t b0, lsmp_t b1, lsmp_t b2, + lsmp_t a1, lsmp_t a2); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_FILTER_BIQUAD_H */ diff --git a/deps/aubio/src/temporal/c_weighting.c b/deps/aubio/src/temporal/c_weighting.c new file mode 100644 index 00000000..91ada717 --- /dev/null +++ b/deps/aubio/src/temporal/c_weighting.c @@ -0,0 +1,217 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "types.h" +#include "fvec.h" +#include "lvec.h" +#include "temporal/filter.h" +#include "temporal/c_weighting.h" + +uint_t +aubio_filter_set_c_weighting (aubio_filter_t * f, uint_t samplerate) +{ + uint_t order; lsmp_t *a, *b; lvec_t *as, *bs; + + if ((sint_t)samplerate <= 0) { + AUBIO_ERROR("aubio_filter: failed setting C-weighting with samplerate %d\n", samplerate); + return AUBIO_FAIL; + } + if (f == NULL) { + AUBIO_ERROR("aubio_filter: failed setting C-weighting with filter NULL\n"); + return AUBIO_FAIL; + } + + order = aubio_filter_get_order (f); + if ( order != 5 ) { + AUBIO_ERROR ("aubio_filter: order of C-weighting filter must be 5, not %d\n", order); + return 1; + } + + aubio_filter_set_samplerate (f, samplerate); + bs = aubio_filter_get_feedforward (f); + as = aubio_filter_get_feedback (f); + b = bs->data, a = as->data; + + /* select coefficients according to sampling frequency */ + switch (samplerate) { + + case 8000: + b[0] = 6.782173932405135552414776611840352416038513183593750000e-01; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -1.356434786481027110482955322368070483207702636718750000e+00; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 6.782173932405135552414776611840352416038513183593750000e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -6.589092811505605773447769024642184376716613769531250000e-01; + a[2] = -1.179445664897062595599663836765103042125701904296875000e+00; + a[3] = 4.243329729632123736848825501510873436927795410156250000e-01; + a[4] = 4.147270002091348328754349950031610205769538879394531250e-01; + break; + + case 11025: + b[0] = 6.002357155402652244546857218665536493062973022460937500e-01; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -1.200471431080530448909371443733107298612594604492187500e+00; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 6.002357155402652244546857218665536493062973022460937500e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -8.705602141280316397242700077185872942209243774414062500e-01; + a[2] = -9.037199507150940336330791069485712796449661254882812500e-01; + a[3] = 4.758433040929530011275971901341108605265617370605468750e-01; + a[4] = 2.987653956523212417373258631414500996470451354980468750e-01; + break; + + case 16000: + b[0] = 4.971057193673903418229542694461997598409652709960937500e-01; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -9.942114387347806836459085388923995196819305419921875000e-01; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 4.971057193673903418229542694461997598409652709960937500e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -1.162322939286873690889478893950581550598144531250000000e+00; + a[2] = -4.771961355734982701548574368644040077924728393554687500e-01; + a[3] = 4.736145114694704227886745684372726827859878540039062500e-01; + a[4] = 1.660337524309875301131711466950946487486362457275390625e-01; + break; + + case 22050: + b[0] = 4.033381299002754549754001800465630367398262023925781250e-01; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -8.066762598005509099508003600931260734796524047851562500e-01; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 4.033381299002754549754001800465630367398262023925781250e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -1.449545371157945350404361306573264300823211669921875000e+00; + a[2] = -1.030104190885922088583015465701464563608169555664062500e-02; + a[3] = 3.881857047554073680828423675848171114921569824218750000e-01; + a[4] = 7.171589940116777917022972133054281584918498992919921875e-02; + break; + + case 24000: + b[0] = 3.786678621924967069745093795063439756631851196289062500e-01; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -7.573357243849934139490187590126879513263702392578125000e-01; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 3.786678621924967069745093795063439756631851196289062500e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -1.529945307555420797029910318087786436080932617187500000e+00; + a[2] = 1.283553182116208835061854642844991758465766906738281250e-01; + a[3] = 3.494608072385725350272878131363540887832641601562500000e-01; + a[4] = 5.217291949300089520802359288609295617789030075073242188e-02; + break; + + case 32000: + b[0] = 2.977986488230693340462096330156782642006874084472656250e-01; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -5.955972976461386680924192660313565284013748168945312500e-01; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 2.977986488230693340462096330156782642006874084472656250e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -1.812455387128179218336754274787381291389465332031250000e+00; + a[2] = 6.425013281155662614452239722595550119876861572265625000e-01; + a[3] = 1.619857574578579817448087396769551560282707214355468750e-01; + a[4] = 7.987649713547682189807019881300220731645822525024414062e-03; + break; + + case 44100: + b[0] = 2.170085619492190254220531642204150557518005371093750000e-01; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -4.340171238984380508441063284408301115036010742187500000e-01; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 2.170085619492190254220531642204150557518005371093750000e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -2.134674963687040794013682898366823792457580566406250000e+00; + a[2] = 1.279333533236062692139967111870646476745605468750000000e+00; + a[3] = -1.495598460893957093453821016737492755055427551269531250e-01; + a[4] = 4.908700174624683852664386307651511742733418941497802734e-03; + break; + + case 48000: + b[0] = 1.978871200263932761398422144338837824761867523193359375e-01; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -3.957742400527865522796844288677675649523735046386718750e-01; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 1.978871200263932761398422144338837824761867523193359375e-01; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -2.219172914052801814932536217384040355682373046875000000e+00; + a[2] = 1.455135878947171557129536267893854528665542602539062500e+00; + a[3] = -2.484960738877830532800317087094299495220184326171875000e-01; + a[4] = 1.253882314727246607977129144728678511455655097961425781e-02; + break; + + case 88200: + b[0] = 9.221909851156021020734954163344809785485267639160156250e-02; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -1.844381970231204204146990832668961957097053527832031250e-01; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 9.221909851156021020734954163344809785485267639160156250e-02; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -2.785795902923448696952846148633398115634918212890625000e+00; + a[2] = 2.727736758747444145711824603495188057422637939453125000e+00; + a[3] = -1.097007502819661528548067508381791412830352783203125000e+00; + a[4] = 1.550674356752141103132913713125162757933139801025390625e-01; + break; + + case 96000: + b[0] = 8.182864044979756834585771230194950476288795471191406250e-02; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -1.636572808995951366917154246038990095257759094238281250e-01; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 8.182864044979756834585771230194950476288795471191406250e-02; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -2.856378516857566829401093855267390608787536621093750000e+00; + a[2] = 2.897640237559524045707348705036565661430358886718750000e+00; + a[3] = -1.225265958339703198376469117647502571344375610351562500e+00; + a[4] = 1.840048283551226071530493300087982788681983947753906250e-01; + break; + + case 192000: + b[0] = 2.784755468532278815940728122768632601946592330932617188e-02; + b[1] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[2] = -5.569510937064557631881456245537265203893184661865234375e-02; + b[3] = 0.000000000000000000000000000000000000000000000000000000e+00; + b[4] = 2.784755468532278815940728122768632601946592330932617188e-02; + a[0] = 1.000000000000000000000000000000000000000000000000000000e+00; + a[1] = -3.333298856144166322224009491037577390670776367187500000e+00; + a[2] = 4.111467536240339448738723149290308356285095214843750000e+00; + a[3] = -2.222889041651291641699117462849244475364685058593750000e+00; + a[4] = 4.447204118126878991112960193277103826403617858886718750e-01; + break; + + default: + AUBIO_ERROR ( "sampling rate of C-weighting filter is %d, should be one of\ + 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, 88200, 96000, 192000.\n", + samplerate ); + return 1; + + } + + return 0; +} + +aubio_filter_t * new_aubio_filter_c_weighting (uint_t samplerate) { + aubio_filter_t * f = new_aubio_filter(5); + if (aubio_filter_set_c_weighting(f,samplerate) != AUBIO_OK) { + del_aubio_filter(f); + return NULL; + } + return f; +} diff --git a/deps/aubio/src/temporal/c_weighting.h b/deps/aubio/src/temporal/c_weighting.h new file mode 100644 index 00000000..d87f61fa --- /dev/null +++ b/deps/aubio/src/temporal/c_weighting.h @@ -0,0 +1,88 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_FILTER_C_DESIGN_H +#define AUBIO_FILTER_C_DESIGN_H + +/** \file + + C-weighting filter coefficients + + This file creates a C-weighting digital filter, which reduces low and high + frequencies and enhance the middle ones to reflect the ability of the human + hearing. + + The implementation is based on the following standard: + + - IEC/CD 1672: Electroacoustics-Sound Level Meters, IEC, Geneva, Nov. 1996, + for A- and C-weighting filters. + + See also: + + - A-Weighting on + Wikipedia + - Weighting filter on + Wikipedia + - Christophe + Couvreur's 'octave' toolbox + + The coefficients in this file have been computed using Christophe Couvreur's + scripts in octave 3.0 (debian package 1:3.0.5-6+b2 with octave-signal + 1.0.9-1+b1 on i386), with
 [b, a] = cdsign(1/Fs) 
for various + sampling frequencies (8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, + 88200, 96000, and 192000 Hz). + + The sampling frequency should normally be higher than 20kHz, but most common + file sampling rates have been included for completeness. + + \example temporal/test-c_weighting.c + +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** create new C-design filter + + \param samplerate sampling frequency of the signal to filter. Should be one of + 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, 88200, 96000, and + 192000 Hz + + \return a new filter object + +*/ +aubio_filter_t *new_aubio_filter_c_weighting (uint_t samplerate); + +/** set feedback and feedforward coefficients of a C-weighting filter + + \param f filter object to get coefficients from + \param samplerate sampling frequency of the signal to filter. Should be one of + 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, 88200, 96000, and + 192000 Hz + +*/ +uint_t aubio_filter_set_c_weighting (aubio_filter_t * f, uint_t samplerate); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_FILTER_C_DESIGN_H */ diff --git a/deps/aubio/src/temporal/filter.c b/deps/aubio/src/temporal/filter.c new file mode 100644 index 00000000..776d2e6f --- /dev/null +++ b/deps/aubio/src/temporal/filter.c @@ -0,0 +1,163 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + + +/* Requires lsmp_t to be long or double. float will NOT give reliable + * results */ + +#include "aubio_priv.h" +#include "fvec.h" +#include "lvec.h" +#include "mathutils.h" +#include "temporal/filter.h" + +struct _aubio_filter_t +{ + uint_t order; + uint_t samplerate; + lvec_t *a; + lvec_t *b; + lvec_t *y; + lvec_t *x; +}; + +void +aubio_filter_do_outplace (aubio_filter_t * f, const fvec_t * in, fvec_t * out) +{ + fvec_copy (in, out); + aubio_filter_do (f, out); +} + +void +aubio_filter_do (aubio_filter_t * f, fvec_t * in) +{ + uint_t j, l, order = f->order; + lsmp_t *x = f->x->data; + lsmp_t *y = f->y->data; + lsmp_t *a = f->a->data; + lsmp_t *b = f->b->data; + + for (j = 0; j < in->length; j++) { + /* new input */ + x[0] = KILL_DENORMAL (in->data[j]); + y[0] = b[0] * x[0]; + for (l = 1; l < order; l++) { + y[0] += b[l] * x[l]; + y[0] -= a[l] * y[l]; + } + /* new output */ + in->data[j] = y[0]; + /* store for next sample */ + for (l = order - 1; l > 0; l--) { + x[l] = x[l - 1]; + y[l] = y[l - 1]; + } + } +} + +/* The rough way: reset memory of filter between each run to avoid end effects. */ +void +aubio_filter_do_filtfilt (aubio_filter_t * f, fvec_t * in, fvec_t * tmp) +{ + uint_t j; + uint_t length = in->length; + /* apply filtering */ + aubio_filter_do (f, in); + aubio_filter_do_reset (f); + /* mirror */ + for (j = 0; j < length; j++) + tmp->data[length - j - 1] = in->data[j]; + /* apply filtering on mirrored */ + aubio_filter_do (f, tmp); + aubio_filter_do_reset (f); + /* invert back */ + for (j = 0; j < length; j++) + in->data[j] = tmp->data[length - j - 1]; +} + +lvec_t * +aubio_filter_get_feedback (const aubio_filter_t * f) +{ + return f->a; +} + +lvec_t * +aubio_filter_get_feedforward (const aubio_filter_t * f) +{ + return f->b; +} + +uint_t +aubio_filter_get_order (const aubio_filter_t * f) +{ + return f->order; +} + +uint_t +aubio_filter_get_samplerate (const aubio_filter_t * f) +{ + return f->samplerate; +} + +uint_t +aubio_filter_set_samplerate (aubio_filter_t * f, uint_t samplerate) +{ + f->samplerate = samplerate; + return AUBIO_OK; +} + +void +aubio_filter_do_reset (aubio_filter_t * f) +{ + lvec_zeros (f->x); + lvec_zeros (f->y); +} + +aubio_filter_t * +new_aubio_filter (uint_t order) +{ + aubio_filter_t *f = AUBIO_NEW (aubio_filter_t); + if ((sint_t)order < 1) { + AUBIO_FREE(f); + return NULL; + } + f->x = new_lvec (order); + f->y = new_lvec (order); + f->a = new_lvec (order); + f->b = new_lvec (order); + /* by default, samplerate is not set */ + f->samplerate = 0; + f->order = order; + /* set default to identity */ + f->a->data[0] = 1.; + f->b->data[0] = 1.; + return f; +} + +void +del_aubio_filter (aubio_filter_t * f) +{ + del_lvec (f->a); + del_lvec (f->b); + del_lvec (f->x); + del_lvec (f->y); + AUBIO_FREE (f); + return; +} diff --git a/deps/aubio/src/temporal/filter.h b/deps/aubio/src/temporal/filter.h new file mode 100644 index 00000000..b8b678e8 --- /dev/null +++ b/deps/aubio/src/temporal/filter.h @@ -0,0 +1,176 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_FILTER_H +#define AUBIO_FILTER_H + +/** \file + + Digital filter + + This object stores a digital filter of order \f$n\f$. + It contains the following data: + - \f$ n*1 b_i \f$ feedforward coefficients + - \f$ n*1 a_i \f$ feedback coefficients + - \f$ n*c x_i \f$ input signal + - \f$ n*c y_i \f$ output signal + + For convenience, the samplerate of the input signal is also stored in the + object. + + Feedforward and feedback parameters can be modified using + aubio_filter_get_feedback() and aubio_filter_get_feedforward(). + + The function aubio_filter_do_outplace() computes the following output signal + \f$ y[n] \f$ from the input signal \f$ x[n] \f$: + + \f{eqnarray*}{ + y[n] = b_0 x[n] & + & b_1 x[n-1] + b_2 x[n-2] + ... + b_P x[n-P] \\ + & - & a_1 y[n-1] - a_2 y[n-2] - ... - a_P y[n-P] \\ + \f} + + The function aubio_filter_do() executes the same computation but modifies + directly the input signal (in-place). + + The function aubio_filter_do_filtfilt() version runs the filter twice, first + forward then backward, to compensate with the phase shifting of the forward + operation. + + Some convenience functions are provided: + - new_aubio_filter_a_weighting() and aubio_filter_set_a_weighting(), + - new_aubio_filter_c_weighting() and aubio_filter_set_c_weighting(). + - new_aubio_filter_biquad() and aubio_filter_set_biquad(). + + \example temporal/test-filter.c + +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** Digital filter + +*/ +typedef struct _aubio_filter_t aubio_filter_t; + +/** filter input vector (in-place) + + \param f filter object as returned by new_aubio_filter() + \param in input vector to filter + +*/ +void aubio_filter_do (aubio_filter_t * f, fvec_t * in); + +/** filter input vector (out-of-place) + + \param f filter object as returned by new_aubio_filter() + \param in input vector to filter + \param out output vector to store filtered input + +*/ +void aubio_filter_do_outplace (aubio_filter_t * f, const fvec_t * in, fvec_t * out); + +/** filter input vector forward and backward + + \param f ::aubio_filter_t object as returned by new_aubio_filter() + \param in ::fvec_t input vector to filter + \param tmp memory space to use for computation + +*/ +void aubio_filter_do_filtfilt (aubio_filter_t * f, fvec_t * in, fvec_t * tmp); + +/** returns a pointer to feedback coefficients \f$ a_i \f$ + + \param f filter object to get parameters from + + \return a pointer to the \f$ a_0 ... a_i ... a_P \f$ coefficients + +*/ +lvec_t *aubio_filter_get_feedback (const aubio_filter_t * f); + +/** returns a pointer to feedforward coefficients \f$ b_i \f$ + + \param f filter object to get coefficients from + + \return a pointer to the \f$ b_0 ... b_i ... b_P \f$ coefficients + +*/ +lvec_t *aubio_filter_get_feedforward (const aubio_filter_t * f); + +/** get order of the filter + + \param f filter to get order from + + \return the order of the filter + +*/ +uint_t aubio_filter_get_order (const aubio_filter_t * f); + +/** get sampling rate of the filter + + \param f filter to get sampling rate from + + \return the sampling rate of the filter, in Hz + +*/ +uint_t aubio_filter_get_samplerate (const aubio_filter_t * f); + +/** get sampling rate of the filter + + \param f filter to get sampling rate from + \param samplerate sample rate to set the filter to + + \return the sampling rate of the filter, in Hz + +*/ +uint_t aubio_filter_set_samplerate (aubio_filter_t * f, uint_t samplerate); + +/** reset filter memory + + \param f filter object as returned by new_aubio_filter() + +*/ +void aubio_filter_do_reset (aubio_filter_t * f); + +/** create new filter object + + This function creates a new ::aubio_filter_t object, given the order of the + filter. + + \param order order of the filter (number of coefficients) + + \return the newly created filter object + +*/ +aubio_filter_t *new_aubio_filter (uint_t order); + +/** delete a filter object + + \param f filter object to delete + +*/ +void del_aubio_filter (aubio_filter_t * f); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_FILTER_H */ diff --git a/deps/aubio/src/temporal/resampler.c b/deps/aubio/src/temporal/resampler.c new file mode 100644 index 00000000..adfb08fd --- /dev/null +++ b/deps/aubio/src/temporal/resampler.c @@ -0,0 +1,100 @@ +/* + Copyright (C) 2003-2009 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "fvec.h" +#include "temporal/resampler.h" + +#ifdef HAVE_SAMPLERATE + +#if HAVE_AUBIO_DOUBLE +#error "Should not use libsamplerate with aubio in double precision" +#endif + +#include /* from libsamplerate */ + +struct _aubio_resampler_t +{ + SRC_DATA *proc; + SRC_STATE *stat; + smpl_t ratio; + uint_t type; +}; + +aubio_resampler_t * +new_aubio_resampler (smpl_t ratio, uint_t type) +{ + aubio_resampler_t *s = AUBIO_NEW (aubio_resampler_t); + int error = 0; + s->stat = src_new (type, 1, &error); /* only one channel */ + if (error) { + AUBIO_ERR ("Failed creating resampler: %s\n", src_strerror (error)); + del_aubio_resampler(s); + return NULL; + } + s->proc = AUBIO_NEW (SRC_DATA); + s->ratio = ratio; + return s; +} + +void +del_aubio_resampler (aubio_resampler_t * s) +{ + if (s->stat) src_delete (s->stat); + AUBIO_FREE (s->proc); + AUBIO_FREE (s); +} + +void +aubio_resampler_do (aubio_resampler_t * s, const fvec_t * input, fvec_t * output) +{ + s->proc->input_frames = input->length; + s->proc->output_frames = output->length; + s->proc->src_ratio = (double) s->ratio; + /* make SRC_PROC data point to input outputs */ + s->proc->data_in = (float *) input->data; + s->proc->data_out = (float *) output->data; + /* do resampling */ + src_process (s->stat, s->proc); +} + +#else +struct _aubio_resampler_t +{ + void *dummy; +}; + +aubio_resampler_t * +new_aubio_resampler (smpl_t ratio UNUSED, uint_t type UNUSED) +{ + AUBIO_ERR ("aubio was not compiled with libsamplerate\n"); + return NULL; +} + +void +del_aubio_resampler (aubio_resampler_t * s UNUSED) +{ +} + +void +aubio_resampler_do (aubio_resampler_t * s UNUSED, const fvec_t * input UNUSED, fvec_t * output UNUSED) +{ +} +#endif /* HAVE_SAMPLERATE */ diff --git a/deps/aubio/src/temporal/resampler.h b/deps/aubio/src/temporal/resampler.h new file mode 100644 index 00000000..7528e8ac --- /dev/null +++ b/deps/aubio/src/temporal/resampler.h @@ -0,0 +1,65 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_RESAMPLER_H +#define AUBIO_RESAMPLER_H + +/** \file + + Resampling object + + This object resamples an input vector into an output vector using + libsamplerate. See http://www.mega-nerd.com/SRC/ + +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** resampler object */ +typedef struct _aubio_resampler_t aubio_resampler_t; + +/** create resampler object + + \param ratio output_sample_rate / input_sample_rate + \param type libsamplerate resampling type, see http://www.mega-nerd.com/SRC/api_misc.html#Converters + +*/ +aubio_resampler_t *new_aubio_resampler (smpl_t ratio, uint_t type); + +/** delete resampler object */ +void del_aubio_resampler (aubio_resampler_t * s); + +/** resample input in output + + \param s resampler object + \param input input buffer of size N + \param output output buffer of size N*ratio + +*/ +void aubio_resampler_do (aubio_resampler_t * s, const fvec_t * input, + fvec_t * output); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_RESAMPLER_H */ diff --git a/deps/aubio/src/types.h b/deps/aubio/src/types.h new file mode 100644 index 00000000..57df2e0d --- /dev/null +++ b/deps/aubio/src/types.h @@ -0,0 +1,70 @@ +/* + Copyright (C) 2003-2015 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_TYPES_H +#define AUBIO_TYPES_H + +/** \file + + Definition of data types used in aubio + +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef HAVE_AUBIO_DOUBLE +/** defined to 1 if aubio is compiled in double precision */ +#define HAVE_AUBIO_DOUBLE 0 +#endif + +/** short sample format (32 or 64 bits) */ +#if !HAVE_AUBIO_DOUBLE +typedef float smpl_t; +/** print format for sample in single precision */ +#define AUBIO_SMPL_FMT "%f" +#else +typedef double smpl_t; +/** print format for double in single precision */ +#define AUBIO_SMPL_FMT "%lf" +#endif +/** long sample format (64 bits or more) */ +#if !HAVE_AUBIO_DOUBLE +typedef double lsmp_t; +/** print format for sample in double precision */ +#define AUBIO_LSMP_FMT "%lf" +#else +typedef long double lsmp_t; +/** print format for double in double precision */ +#define AUBIO_LSMP_FMT "%Lf" +#endif +/** unsigned integer */ +typedef unsigned int uint_t; +/** signed integer */ +typedef int sint_t; +/** character */ +typedef char char_t; + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_TYPES_H */ diff --git a/deps/aubio/src/utils/log.c b/deps/aubio/src/utils/log.c new file mode 100644 index 00000000..967c2d6c --- /dev/null +++ b/deps/aubio/src/utils/log.c @@ -0,0 +1,92 @@ +/* + Copyright (C) 2016 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#include "aubio_priv.h" +#include "log.h" + +/** array of pointers to logging functions, one per level */ +static aubio_log_function_t aubio_log_function[AUBIO_LOG_LAST_LEVEL]; +/** array of pointers to closure passed to logging functions, one per level */ +static void* aubio_log_user_data[AUBIO_LOG_LAST_LEVEL]; +/** buffer for logging messages */ +static char aubio_log_buffer[512]; + +/** private function used by default by logging functions */ +void +aubio_default_log(sint_t level, const char_t *message, void * data UNUSED) +{ + FILE *out; + out = stdout; + if (level == AUBIO_LOG_ERR || level == AUBIO_LOG_DBG || level == AUBIO_LOG_WRN) { + out = stderr; + } + fprintf(out, "%s", message); + //fflush(out); +} + +uint_t +aubio_log(sint_t level, const char_t *fmt, ...) +{ + aubio_log_function_t fun = NULL; + + va_list args; + va_start(args, fmt); + vsnprintf(aubio_log_buffer, sizeof(aubio_log_buffer), fmt, args); + va_end(args); + + if ((level >= 0) && (level < AUBIO_LOG_LAST_LEVEL)) { + fun = aubio_log_function[level]; + if (fun != NULL) { + (*fun)(level, aubio_log_buffer, aubio_log_user_data[level]); + } else { + aubio_default_log(level, aubio_log_buffer, NULL); + } + } + return AUBIO_FAIL; +} + +void +aubio_log_reset(void) +{ + uint_t i = 0; + for (i = 0; i < AUBIO_LOG_LAST_LEVEL; i++) { + aubio_log_set_level_function(i, aubio_default_log, NULL); + } +} + +aubio_log_function_t +aubio_log_set_level_function(sint_t level, aubio_log_function_t fun, void * data) +{ + aubio_log_function_t old = NULL; + if ((level >= 0) && (level < AUBIO_LOG_LAST_LEVEL)) { + old = aubio_log_function[level]; + aubio_log_function[level] = fun; + aubio_log_user_data[level] = data; + } + return old; +} + +void +aubio_log_set_function(aubio_log_function_t fun, void * data) { + uint_t i = 0; + for (i = 0; i < AUBIO_LOG_LAST_LEVEL; i++) { + aubio_log_set_level_function(i, fun, data); + } +} diff --git a/deps/aubio/src/utils/log.h b/deps/aubio/src/utils/log.h new file mode 100644 index 00000000..091e91d4 --- /dev/null +++ b/deps/aubio/src/utils/log.h @@ -0,0 +1,99 @@ +/* + Copyright (C) 2016 Paul Brossier + + This file is part of aubio. + + aubio 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 + (at your option) any later version. + + aubio is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with aubio. If not, see . + +*/ + +#ifndef AUBIO_LOG_H +#define AUBIO_LOG_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file + + Logging features + + This file specifies ::aubio_log_set_function and + ::aubio_log_set_level_function, which let you define one or several custom + logging functions to redirect warnings and errors from aubio to your + application. The custom function should have the prototype defined in + ::aubio_log_function_t. + + After a call to ::aubio_log_set_level_function, ::aubio_log_reset can be used + to reset each logging functions to the default ones. + + \example utils/test-log.c + +*/ + +/** list of logging levels */ +enum aubio_log_level { + AUBIO_LOG_ERR, /**< critical errors */ + AUBIO_LOG_INF, /**< infos */ + AUBIO_LOG_MSG, /**< general messages */ + AUBIO_LOG_DBG, /**< debug messages */ + AUBIO_LOG_WRN, /**< warnings */ + AUBIO_LOG_LAST_LEVEL, /**< number of valid levels */ +}; + +/** Logging function prototype, to be passed to ::aubio_log_set_function + + \param level log level + \param message text to log + \param data optional closure used by the callback + + See @ref utils/test-log.c for an example of logging function. + + */ +typedef void (*aubio_log_function_t)(sint_t level, const char_t *message, void + *data); + +/** Set logging function for all levels + + \param fun the function to be used to log, of type ::aubio_log_function_t + \param data optional closure to be passed to the function (can be NULL if + nothing to pass) + + */ +void aubio_log_set_function(aubio_log_function_t fun, void* data); + +/** Set logging function for a given level + + \param level the level for which to set the logging function + \param fun the function to be used to log, of type ::aubio_log_function_t + \param data optional closure to be passed to the function (can be NULL if + nothing to pass) + +*/ +aubio_log_function_t aubio_log_set_level_function(sint_t level, + aubio_log_function_t fun, void* data); + +/** Reset all logging functions to the default one + + After calling this function, the default logging function will be used to + print error, warning, normal, and debug messages to `stdout` or `stderr`. + + */ +void aubio_log_reset(void); + +#ifdef __cplusplus +} +#endif + +#endif /* AUBIO_LOG_H */ diff --git a/plugins/Cardinal/src/AudioToCVPitch.cpp b/plugins/Cardinal/src/AudioToCVPitch.cpp index cca3b8ba..16bf061a 100644 --- a/plugins/Cardinal/src/AudioToCVPitch.cpp +++ b/plugins/Cardinal/src/AudioToCVPitch.cpp @@ -120,7 +120,7 @@ struct AudioToCVPitch : Module { if (detectedPitchInHz > 0.f && pitchConfidence >= params[PARAM_CONFIDENCETHRESHOLD].getValue() * 0.01f) { - const float linearPitch = 12.f * (log2f(detectedPitchInHz / 440.f) + octave - 1) + 69.f; + const float linearPitch = 12.f * (log2f(detectedPitchInHz / 440.f) + octave - 5) + 69.f; cvPitch = std::max(-10.f, std::min(10.f, linearPitch * (1.f/12.f))); lastKnownPitchInHz = detectedPitchInHz; cvSignal = 10.f; From bab148c69a43b69f1104875803c90c4a3635d57b Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 07:00:08 +0100 Subject: [PATCH 014/283] Correct default octave Signed-off-by: falkTX --- plugins/Cardinal/src/AudioToCVPitch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Cardinal/src/AudioToCVPitch.cpp b/plugins/Cardinal/src/AudioToCVPitch.cpp index 16bf061a..ddec7bd4 100644 --- a/plugins/Cardinal/src/AudioToCVPitch.cpp +++ b/plugins/Cardinal/src/AudioToCVPitch.cpp @@ -120,7 +120,7 @@ struct AudioToCVPitch : Module { if (detectedPitchInHz > 0.f && pitchConfidence >= params[PARAM_CONFIDENCETHRESHOLD].getValue() * 0.01f) { - const float linearPitch = 12.f * (log2f(detectedPitchInHz / 440.f) + octave - 5) + 69.f; + const float linearPitch = 12.f * (log2f(detectedPitchInHz / 440.f) + octave - 6) + 69.f; cvPitch = std::max(-10.f, std::min(10.f, linearPitch * (1.f/12.f))); lastKnownPitchInHz = detectedPitchInHz; cvSignal = 10.f; From 1edead12487aa440845895c82f48a6c0afdb382a Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 07:16:02 +0100 Subject: [PATCH 015/283] Really correct octave Signed-off-by: falkTX --- plugins/Cardinal/src/AudioToCVPitch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Cardinal/src/AudioToCVPitch.cpp b/plugins/Cardinal/src/AudioToCVPitch.cpp index ddec7bd4..16bf061a 100644 --- a/plugins/Cardinal/src/AudioToCVPitch.cpp +++ b/plugins/Cardinal/src/AudioToCVPitch.cpp @@ -120,7 +120,7 @@ struct AudioToCVPitch : Module { if (detectedPitchInHz > 0.f && pitchConfidence >= params[PARAM_CONFIDENCETHRESHOLD].getValue() * 0.01f) { - const float linearPitch = 12.f * (log2f(detectedPitchInHz / 440.f) + octave - 6) + 69.f; + const float linearPitch = 12.f * (log2f(detectedPitchInHz / 440.f) + octave - 5) + 69.f; cvPitch = std::max(-10.f, std::min(10.f, linearPitch * (1.f/12.f))); lastKnownPitchInHz = detectedPitchInHz; cvSignal = 10.f; From 81ad41ad5afb54f86a6c7b3d42b66f91d1446509 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 1 May 2022 18:07:13 +0100 Subject: [PATCH 016/283] Update Meander Signed-off-by: falkTX --- docs/LICENSES.md | 1 - plugins/Meander | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 5f6fe4cc..97e587cf 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -166,7 +166,6 @@ Below is a list of artwork licenses from plugins | Meander/* | GPL-3.0-or-later | No artwork specific license provided | | Meander/Bravura.otf | OFL-1.1-RFN | | | Meander/DejaVuSansMono.ttf | Bitstream-Vera | | -| Meander/Michroma-Regular.ttf | OFL-1.1-RFN | | | Meander/Segment7Standard.ttf | OFL-1.1-RFN | | | Meander/Ubuntu Condensed 400.ttf | UFL-1.0 | Ubuntu Font License, based on OFL-1.1 | | MindMeld/* | CC-BY-NC-ND-4.0 | | diff --git a/plugins/Meander b/plugins/Meander index 9b2011f2..48e654b5 160000 --- a/plugins/Meander +++ b/plugins/Meander @@ -1 +1 @@ -Subproject commit 9b2011f2d1578268656ebca4313ad3aaa16ee4ee +Subproject commit 48e654b53a70a4e36f851fe10d12d9570081cdb6 From 02a482c7c1eed3f426a4dc9c5007c263394d8922 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 4 May 2022 15:45:23 +0100 Subject: [PATCH 017/283] Rebuild CI cache, to catch -Wobjc-method-access as errors Signed-off-by: falkTX --- .github/workflows/build.yml | 2 +- carla | 2 +- deps/PawPaw | 2 +- dpf | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a05f5aee..1d5f4d46 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: env: - CACHE_VERSION: 19 + CACHE_VERSION: 20 DEBIAN_FRONTEND: noninteractive HOMEBREW_NO_AUTO_UPDATE: 1 LIBGL_ALWAYS_SOFTWARE: 'true' diff --git a/carla b/carla index 04558b63..54effcd9 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 04558b63101de55556733edfa4a369b51f36e9b3 +Subproject commit 54effcd901f4540aff9ff933880941d9153bd50a diff --git a/deps/PawPaw b/deps/PawPaw index 01d07086..769385b5 160000 --- a/deps/PawPaw +++ b/deps/PawPaw @@ -1 +1 @@ -Subproject commit 01d07086586818e427b2898d2d446d30b68f3139 +Subproject commit 769385b541cdb3c6c6493644ec901f1f2d320da5 diff --git a/dpf b/dpf index d3d8f910..7d4e299e 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit d3d8f910e35142b5289c073a36ef1c23becc2e46 +Subproject commit 7d4e299e4397fcdf7cf307c97897678550e60c00 From 3413e17fec744841f920f2afdf99d2e9814d2da1 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 4 May 2022 18:25:50 +0100 Subject: [PATCH 018/283] Add main Cardinal variant for MOD builds Signed-off-by: falkTX --- plugins/Makefile | 4 +- src/MOD/Cardinal.lv2/modgui.ttl | 21 ++ src/MOD/Cardinal.lv2/modgui/distrho.svg | 99 ++++++++ src/MOD/Cardinal.lv2/modgui/icon.html | 247 +++++++++++++++++++ src/MOD/Cardinal.lv2/modgui/javascript.js | 49 ++++ src/MOD/Cardinal.lv2/modgui/orange-knob.png | Bin 0 -> 221783 bytes src/MOD/Cardinal.lv2/modgui/screenshot.png | Bin 0 -> 62060 bytes src/MOD/Cardinal.lv2/modgui/stylesheet.css | 205 +++++++++++++++ src/MOD/Cardinal.lv2/modgui/switch.png | Bin 0 -> 8584 bytes src/MOD/Cardinal.lv2/modgui/thumbnail.png | Bin 0 -> 5704 bytes src/MOD/CardinalFX.lv2/modgui/stylesheet.css | 2 +- src/Makefile | 6 +- 12 files changed, 626 insertions(+), 7 deletions(-) create mode 100644 src/MOD/Cardinal.lv2/modgui.ttl create mode 100644 src/MOD/Cardinal.lv2/modgui/distrho.svg create mode 100644 src/MOD/Cardinal.lv2/modgui/icon.html create mode 100644 src/MOD/Cardinal.lv2/modgui/javascript.js create mode 100644 src/MOD/Cardinal.lv2/modgui/orange-knob.png create mode 100644 src/MOD/Cardinal.lv2/modgui/screenshot.png create mode 100644 src/MOD/Cardinal.lv2/modgui/stylesheet.css create mode 100644 src/MOD/Cardinal.lv2/modgui/switch.png create mode 100644 src/MOD/Cardinal.lv2/modgui/thumbnail.png diff --git a/plugins/Makefile b/plugins/Makefile index 070df55e..0d4cc8ec 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -1065,7 +1065,9 @@ RESOURCE_FILES += $(wildcard unless_modules/font/*.ttf) # MOD builds only have LV2 FX variant for now ifeq ($(MOD_BUILD),true) -LV2_RESOURCES = $(PLUGIN_LIST:%=../bin/CardinalFX.lv2/resources/PluginManifests/%.json) +LV2_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) +LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalFX.lv2/resources/PluginManifests/%.json) +LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/Cardinal.lv2/resources/%) LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalFX.lv2/resources/%) else LV2_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) diff --git a/src/MOD/Cardinal.lv2/modgui.ttl b/src/MOD/Cardinal.lv2/modgui.ttl new file mode 100644 index 00000000..2b27f12c --- /dev/null +++ b/src/MOD/Cardinal.lv2/modgui.ttl @@ -0,0 +1,21 @@ +@prefix lv2: . +@prefix mod: . +@prefix modgui: . +@prefix state: . + + + lv2:requiredFeature state:loadDefaultState ; + modgui:gui [ + modgui:resourcesDirectory ; + modgui:documentation ; + modgui:iconTemplate ; + modgui:javascript ; + modgui:stylesheet ; + modgui:screenshot ; + modgui:thumbnail ; + ] ; + state:state [ + "" ; + """Welcome to Cardinal. +If this is your first time, make sure to check out the documentation link on the plugin info, have fun!""" ; + ] . diff --git a/src/MOD/Cardinal.lv2/modgui/distrho.svg b/src/MOD/Cardinal.lv2/modgui/distrho.svg new file mode 100644 index 00000000..30b9d9bc --- /dev/null +++ b/src/MOD/Cardinal.lv2/modgui/distrho.svg @@ -0,0 +1,99 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/MOD/Cardinal.lv2/modgui/icon.html b/src/MOD/Cardinal.lv2/modgui/icon.html new file mode 100644 index 00000000..271838ed --- /dev/null +++ b/src/MOD/Cardinal.lv2/modgui/icon.html @@ -0,0 +1,247 @@ +
+
+
+
+
+
+ +
DISTRHO
Cardinal
+
+
+
+
+ Show Audio + Show CV +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ PARAM 1 +
+
+
+ PARAM 2 +
+
+
+ PARAM 3 +
+
+
+ PARAM 4 +
+
+
+ PARAM 5 +
+
+
+ PARAM 6 +
+
+
+ PARAM 7 +
+
+
+ PARAM 8 +
+
+
+ PARAM 9 +
+
+
+ PARAM 10 +
+
+
+ PARAM 11 +
+
+
+ PARAM 12 +
+
+
+ PARAM 13 +
+
+
+ PARAM 14 +
+
+
+ PARAM 15 +
+
+
+ PARAM 16 +
+
+
+ PARAM 17 +
+
+
+ PARAM 18 +
+
+
+ PARAM 19 +
+
+
+ PARAM 20 +
+
+
+ PARAM 21 +
+
+
+ PARAM 22 +
+
+
+ PARAM 23 +
+
+
+ PARAM 24 +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/MOD/Cardinal.lv2/modgui/javascript.js b/src/MOD/Cardinal.lv2/modgui/javascript.js new file mode 100644 index 00000000..d1d64dbd --- /dev/null +++ b/src/MOD/Cardinal.lv2/modgui/javascript.js @@ -0,0 +1,49 @@ +function (event) { + + if (event.type == 'start') { + event.data['visibility-audio'] = true; + event.data['visibility-cv'] = true; + event.icon.find('.visibility-audio').click(function() { + var visible = event.data['visibility-audio']; + if (visible) { + event.icon.find('.mod-pedal-input .mod-audio-input').addClass('cardinal-expanded'); + event.icon.find('.mod-pedal-output .mod-audio-output').addClass('cardinal-expanded'); + $(this).text('Hide Audio'); + } else { + event.icon.find('.mod-pedal-input .mod-audio-input').removeClass('cardinal-expanded'); + event.icon.find('.mod-pedal-output .mod-audio-output').removeClass('cardinal-expanded'); + $(this).text('Show Audio'); + } + event.data['visibility-audio'] = !visible; + }); + event.icon.find('.visibility-cv').click(function() { + var visible = event.data['visibility-cv']; + if (visible) { + event.icon.find('.mod-pedal-input .mod-cv-input').addClass('cardinal-expanded'); + event.icon.find('.mod-pedal-output .mod-cv-output').addClass('cardinal-expanded'); + $(this).text('Hide CV'); + } else { + event.icon.find('.mod-pedal-input .mod-cv-input').removeClass('cardinal-expanded'); + event.icon.find('.mod-pedal-output .mod-cv-output').removeClass('cardinal-expanded'); + $(this).text('Show CV'); + } + event.data['visibility-cv'] = !visible; + }); + return; + } + + if (event.type == 'change') { + console.log("change", event) + if (event.uri === "https://distrho.kx.studio/plugins/cardinal#screenshot") { + if (event.value) { + event.icon.find('.screenshot').css({'background-image':'url(data:image/png;base64,'+event.value+')'}); + event.icon.find('.cardinal-main.mod-pedal .cardinal-patch-comment').hide(); + event.icon.find('.cardinal-main.mod-pedal .cardinal-patch-screeenshot').show(); + } else { + event.icon.find('.cardinal-main.mod-pedal .cardinal-patch-screeenshot').hide(); + event.icon.find('.cardinal-main.mod-pedal .cardinal-patch-comment').show(); + } + } + return; + } +} diff --git a/src/MOD/Cardinal.lv2/modgui/orange-knob.png b/src/MOD/Cardinal.lv2/modgui/orange-knob.png new file mode 100644 index 0000000000000000000000000000000000000000..2f08b7d940cc8a63f691fe19de1735baaac2568e GIT binary patch literal 221783 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�KvbWMj^JLbR!%WOLts* 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 literal 0 HcmV?d00001 diff --git a/src/MOD/Cardinal.lv2/modgui/screenshot.png b/src/MOD/Cardinal.lv2/modgui/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..8b81b668e8e09ad215b744ff36f444835ef6733f GIT binary patch literal 62060 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

s@#OSNf^T&n{vQsH*U!HbaSJ^WJdVI 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 OFLhOaSQIn9fG?RFYf-G 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 literal 0 HcmV?d00001 diff --git a/src/MOD/Cardinal.lv2/modgui/thumbnail.png b/src/MOD/Cardinal.lv2/modgui/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..25b329aae5561b300a6b141ed746d810b6b34036 GIT binary patch literal 5704 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 ufBvu%FH^_1mrZ+}NEieSY6 Date: Thu, 5 May 2022 23:32:55 +0100 Subject: [PATCH 019/283] Tweaks to modgui main variant Signed-off-by: falkTX --- src/MOD/Cardinal.lv2/modgui/javascript.js | 19 ++++++++++++++++++- src/MOD/Cardinal.lv2/modgui/stylesheet.css | 7 +++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/MOD/Cardinal.lv2/modgui/javascript.js b/src/MOD/Cardinal.lv2/modgui/javascript.js index d1d64dbd..cffff383 100644 --- a/src/MOD/Cardinal.lv2/modgui/javascript.js +++ b/src/MOD/Cardinal.lv2/modgui/javascript.js @@ -1,8 +1,20 @@ function (event) { + function hideAllIfConnectionsPresent() { + if (event.icon.find('.input-connected').length === 0 && event.icon.find('.output-connected').length === 0) + return; + event.icon.find('.mod-pedal-input .mod-audio-input').removeClass('cardinal-expanded'); + event.icon.find('.mod-pedal-output .mod-audio-output').removeClass('cardinal-expanded'); + event.icon.find('.mod-pedal-input .mod-cv-input').removeClass('cardinal-expanded'); + event.icon.find('.mod-pedal-output .mod-cv-output').removeClass('cardinal-expanded'); + event.icon.find('.visibility-audio').text('Show Audio'); + event.icon.find('.visibility-cv').text('Show CV'); + } + if (event.type == 'start') { event.data['visibility-audio'] = true; event.data['visibility-cv'] = true; + event.data['visibility-triggered'] = false; event.icon.find('.visibility-audio').click(function() { var visible = event.data['visibility-audio']; if (visible) { @@ -15,6 +27,7 @@ function (event) { $(this).text('Show Audio'); } event.data['visibility-audio'] = !visible; + event.data['visibility-triggered'] = true; }); event.icon.find('.visibility-cv').click(function() { var visible = event.data['visibility-cv']; @@ -33,7 +46,6 @@ function (event) { } if (event.type == 'change') { - console.log("change", event) if (event.uri === "https://distrho.kx.studio/plugins/cardinal#screenshot") { if (event.value) { event.icon.find('.screenshot').css({'background-image':'url(data:image/png;base64,'+event.value+')'}); @@ -43,6 +55,11 @@ function (event) { event.icon.find('.cardinal-main.mod-pedal .cardinal-patch-screeenshot').hide(); event.icon.find('.cardinal-main.mod-pedal .cardinal-patch-comment').show(); } + // if we got a screenshot without the user ever triggering a visibility change, it is like from PB load + if (!event.data['visibility-triggered']) { + event.data['visibility-triggered'] = true; + setTimeout(hideAllIfConnectionsPresent, 500); + } } return; } diff --git a/src/MOD/Cardinal.lv2/modgui/stylesheet.css b/src/MOD/Cardinal.lv2/modgui/stylesheet.css index 1ae6cee5..6f194320 100644 --- a/src/MOD/Cardinal.lv2/modgui/stylesheet.css +++ b/src/MOD/Cardinal.lv2/modgui/stylesheet.css @@ -198,6 +198,13 @@ display: none; } +.dummy > .cardinal-main.mod-pedal .mod-pedal-input > .mod-audio-input:not(.cardinal-expanded), +.dummy > .cardinal-main.mod-pedal .mod-pedal-input > .mod-cv-input:not(.cardinal-expanded), +.dummy > .cardinal-main.mod-pedal .mod-pedal-output > .mod-audio-output:not(.cardinal-expanded), +.dummy > .cardinal-main.mod-pedal .mod-pedal-output > .mod-cv-output:not(.cardinal-expanded) { + display: none; +} + /* initial state */ /*.cardinal-main.mod-pedal .cardinal-patch-comment,*/ .cardinal-main.mod-pedal .cardinal-patch-screeenshot { From 52b38c85c922d885a18f438d559445dcf5c0e5da Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 5 May 2022 23:40:51 +0100 Subject: [PATCH 020/283] Fix modgui color propagating to cv-manage ports Signed-off-by: falkTX --- src/MOD/Cardinal.lv2/modgui/stylesheet.css | 3 ++- src/MOD/CardinalFX.lv2/modgui/stylesheet.css | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/MOD/Cardinal.lv2/modgui/stylesheet.css b/src/MOD/Cardinal.lv2/modgui/stylesheet.css index 6f194320..c6dbc997 100644 --- a/src/MOD/Cardinal.lv2/modgui/stylesheet.css +++ b/src/MOD/Cardinal.lv2/modgui/stylesheet.css @@ -2,7 +2,6 @@ .cardinal-main.mod-pedal { background: #333333; background: linear-gradient(to bottom, #181919, #333333); - color: white; width: 540px; height: 590px; font-size: 20px; @@ -27,6 +26,7 @@ height: 240px; position: absolute; top: 0px; + color: white; } .cardinal-main.mod-pedal .cardinal-main-bottom { @@ -34,6 +34,7 @@ height: 180px; position: absolute; top: 240px; + color: white; } /* top area split */ diff --git a/src/MOD/CardinalFX.lv2/modgui/stylesheet.css b/src/MOD/CardinalFX.lv2/modgui/stylesheet.css index 308ca392..7d5a1835 100644 --- a/src/MOD/CardinalFX.lv2/modgui/stylesheet.css +++ b/src/MOD/CardinalFX.lv2/modgui/stylesheet.css @@ -2,7 +2,6 @@ .cardinal-fx.mod-pedal { background: #333333; background: linear-gradient(to bottom, #181919, #333333); - color: white; width: 480px; height: 420px; font-size: 20px; @@ -27,6 +26,7 @@ height: 240px; position: absolute; top: 0px; + color: white; } .cardinal-fx.mod-pedal .cardinal-fx-bottom { @@ -34,6 +34,7 @@ height: 180px; position: absolute; top: 240px; + color: white; } /* top area split */ From 1567dd7a09546ad46c3c2939aad537e5b42de9dc Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 6 May 2022 00:36:56 +0100 Subject: [PATCH 021/283] Update modgui screenshots Signed-off-by: falkTX --- src/MOD/Cardinal.lv2/modgui/screenshot.png | Bin 62060 -> 71459 bytes src/MOD/Cardinal.lv2/modgui/thumbnail.png | Bin 5704 -> 17624 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/MOD/Cardinal.lv2/modgui/screenshot.png b/src/MOD/Cardinal.lv2/modgui/screenshot.png index 8b81b668e8e09ad215b744ff36f444835ef6733f..312996d219f1fb1c30df587f11a82900120a7eaa 100644 GIT binary patch literal 71459 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 XKE16_G48Twfx|#V5CHeogom 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 a9jd1;?e< literal 62060 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

s@#OSNf^T&n{vQsH*U!HbaSJ^WJdVI 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 OFLhO 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 ufBvu%FH^_1mrZ+}NEieSY6 Date: Fri, 6 May 2022 14:53:32 +0100 Subject: [PATCH 022/283] Finalize modgui details, add example preset Signed-off-by: falkTX --- plugins/Cardinal/src/AudioToCVPitch.cpp | 12 +++ src/MOD/Cardinal.lv2/Plateau_Reverb.ttl | 95 +++++++++++++++++++ src/MOD/Cardinal.lv2/modgui.ttl | 8 ++ src/MOD/Cardinal.lv2/modgui/icon.html | 7 +- src/MOD/Cardinal.lv2/modgui/screenshot.png | Bin 71459 -> 152287 bytes src/MOD/Cardinal.lv2/modgui/stylesheet.css | 43 ++++++--- src/MOD/Cardinal.lv2/modgui/thumbnail.png | Bin 17624 -> 25094 bytes src/MOD/CardinalFX.lv2/Plateau_Reverb.ttl | 95 +++++++++++++++++++ src/MOD/CardinalFX.lv2/modgui.ttl | 8 ++ src/MOD/CardinalFX.lv2/modgui/screenshot.png | Bin 62060 -> 114345 bytes src/MOD/CardinalFX.lv2/modgui/stylesheet.css | 29 +++--- src/MOD/CardinalFX.lv2/modgui/thumbnail.png | Bin 5704 -> 20929 bytes src/Makefile.cardinal.mk | 5 + 13 files changed, 273 insertions(+), 29 deletions(-) create mode 100644 src/MOD/Cardinal.lv2/Plateau_Reverb.ttl create mode 100644 src/MOD/CardinalFX.lv2/Plateau_Reverb.ttl diff --git a/plugins/Cardinal/src/AudioToCVPitch.cpp b/plugins/Cardinal/src/AudioToCVPitch.cpp index 16bf061a..89d9e69b 100644 --- a/plugins/Cardinal/src/AudioToCVPitch.cpp +++ b/plugins/Cardinal/src/AudioToCVPitch.cpp @@ -201,6 +201,7 @@ struct AudioToCVPitch : Module { } }; +#ifndef HEADLESS struct SmallPercentageNanoKnob : NanoKnob<2, 0> { SmallPercentageNanoKnob() { box.size = Vec(32, 32); @@ -354,6 +355,17 @@ struct AudioToCVPitchWidget : ModuleWidgetWith9HP { })); } }; +#else +struct AudioToCVPitchWidget : ModuleWidget { + AudioToCVPitchWidget(AudioToCVPitch* const module) { + setModule(module); + addInput(createInput({}, module, AudioToCVPitch::AUDIO_INPUT)); + addOutput(createOutput({}, module, AudioToCVPitch::CV_PITCH)); + addOutput(createOutput({}, module, AudioToCVPitch::CV_GATE)); + + } +}; +#endif // -------------------------------------------------------------------------------------------------------------------- diff --git a/src/MOD/Cardinal.lv2/Plateau_Reverb.ttl b/src/MOD/Cardinal.lv2/Plateau_Reverb.ttl new file mode 100644 index 00000000..561b2d88 --- /dev/null +++ b/src/MOD/Cardinal.lv2/Plateau_Reverb.ttl @@ -0,0 +1,95 @@ +@prefix atom: . +@prefix lv2: . +@prefix pset: . +@prefix rdf: . +@prefix rdfs: . +@prefix state: . +@prefix xsd: . + +<> + a pset:Preset ; + lv2:appliesTo ; + lv2:port [ + lv2:symbol "lv2_enabled" ; + pset:value 1.0 + ] , [ + lv2:symbol "param_1" ; + pset:value 3.0 + ] , [ + lv2:symbol "param_10" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_11" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_12" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_13" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_14" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_15" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_16" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_17" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_18" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_19" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_2" ; + pset:value 5.0 + ] , [ + lv2:symbol "param_20" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_21" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_22" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_23" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_24" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_3" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_4" ; + pset:value 5.0 + ] , [ + lv2:symbol "param_5" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_6" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_7" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_8" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_9" ; + pset:value 0.0 + ] ; + state:state [ + "KLUv/QBIXR0AZrOOIiAR9Ly6CNQEzyzK+CwIw5H3QvHuEkY2KVmv3eQESAkA+gOGAIAAjQDTgneRB8Qu8lJbrrWmliuWWrVOOmB3F3ms5RZbrLlXSim3Ere7izyswlRGy6IQGWiCd5FHJ2kVtpgzg3eRh6wQXYWjvICRU3kXebAniVdhZzIRJC94F9HodSSl3H+5+1qsux3OjCoSCgkKH4GkHd0OCNKoOn4dTKnWvarX8t527H/rbodAEquwIzMmtLDCkMLIEIu08uca+9XqU3sn9wDH2n3/at9JO/ulGkmP+PtzLTlz77fc2f9y5U99a+u5d6qdveQl39jtVTgynPQqLGsDL3h31wJC8OGuUFLYLPAq3Mg4LRhDNg104FXYYSZq8zzaJfeWcvfum7e2CkeGd3d3EY1INjUGnyJIUmkBIbjAXLHHVLdvzdl7c0jShjGQiIt4mkysAzSaBw10mAhBAqWe60+JvX+7ZqtwZBiBUPNh5u1Vr1+FZZwJTxSdyVAIVQoZaH1onRiUuWAoEzmSgdbHYSJHMjgQYMBGFkjo4VWY1sdBkFFdFiZG6VTKq7BsMChDIx34yGZiYjbIDCmhhXdl1MAlGwjELhLbsqR/qts3tp6/V73gp3fPseav2h9bzZfFSeWvMfZrdVtvpfdqxdTf7dkzX92Sa5fcHVvtUmIt+evn1Gu2mnn7a/evuf/29Bxbyr//13u9OH36ZQHgVRiazZRwh3EYRqD1oXUiyKbGmUDrQ+t85p0cU6tfat1SBJQIgKeoEVFmAEZGIJowRhA0AOACAJAhIgMSYGAIQCBIYgADQQwBQzIMROgoATAAGCAwQgjB4LBBADT1bxCWZ3XXFUabMDuaLONUf0bQ7TgesmQFW2K0AIC4DIQl6tqRPtTyQ0noFFHLQLAATUPeplJl0koHLuVhRjg4NPbs9Wj4AfakXtrVG9Ad+CrbZ0A7Je11icVN+xCwTDBY4Kno85VOIgGk9RzZ1xnpmiObAcD2we4MScUkfADxZIwmSY1vfFxeBnO2iMzNnVOizhd5nU4xNop8kqWVGCB1KmgvNEkW+hzkks3EyByFzDwFDlF2lniRVMGMMof+Y3EQBeSTGEBSh4gEX4611XB1fbturqxt69SVkxPISckW8aolo/yTNVoJCBspCeshPp+jqj7FYS6yDMBKLRy7IHXc+R+MwTYm+KQQqLmmbcdm0+47HTL1RQKZwQ4vBxDovJ+HmZDDJMrAgYowZEBNGMD3FABjnGbw" ; + """Activated by parameters. +1 - Dry Level +2 - Wet Level +3 - Low-Cut +4 - Decay""" ; + ] . diff --git a/src/MOD/Cardinal.lv2/modgui.ttl b/src/MOD/Cardinal.lv2/modgui.ttl index 2b27f12c..d3a05e11 100644 --- a/src/MOD/Cardinal.lv2/modgui.ttl +++ b/src/MOD/Cardinal.lv2/modgui.ttl @@ -1,6 +1,8 @@ @prefix lv2: . @prefix mod: . @prefix modgui: . +@prefix pset: . +@prefix rdfs: . @prefix state: . @@ -19,3 +21,9 @@ """Welcome to Cardinal. If this is your first time, make sure to check out the documentation link on the plugin info, have fun!""" ; ] . + + + a pset:Preset ; + lv2:appliesTo ; + rdfs:label "Plateau Reverb" ; + rdfs:seeAlso . diff --git a/src/MOD/Cardinal.lv2/modgui/icon.html b/src/MOD/Cardinal.lv2/modgui/icon.html index 271838ed..08259594 100644 --- a/src/MOD/Cardinal.lv2/modgui/icon.html +++ b/src/MOD/Cardinal.lv2/modgui/icon.html @@ -6,13 +6,14 @@
DISTRHO
Cardinal
-
-
-
Show Audio Show CV
+
+
+
+
diff --git a/src/MOD/Cardinal.lv2/modgui/screenshot.png b/src/MOD/Cardinal.lv2/modgui/screenshot.png index 312996d219f1fb1c30df587f11a82900120a7eaa..ea78bb375c15393f220d6633e5a078c7a0d4f767 100644 GIT binary patch literal 152287 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

s@#OSNf^T&n{vQsH*U!HbaSJ^WJdVI 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 OFLhO span { diff --git a/src/MOD/CardinalFX.lv2/modgui/thumbnail.png b/src/MOD/CardinalFX.lv2/modgui/thumbnail.png index 25b329aae5561b300a6b141ed746d810b6b34036..8bd7f497042da309a1422262ace7b4dd0cd25697 100644 GIT binary patch literal 20929 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 ufBvu%FH^_1mrZ+}NEieSY6 Date: Fri, 6 May 2022 17:15:32 +0100 Subject: [PATCH 023/283] Fix plateau preset for MOD builds Signed-off-by: falkTX --- src/MOD/Cardinal.lv2/Plateau_Reverb.ttl | 1 + src/MOD/CardinalFX.lv2/Plateau_Reverb.ttl | 1 + 2 files changed, 2 insertions(+) diff --git a/src/MOD/Cardinal.lv2/Plateau_Reverb.ttl b/src/MOD/Cardinal.lv2/Plateau_Reverb.ttl index 561b2d88..dbb93bbd 100644 --- a/src/MOD/Cardinal.lv2/Plateau_Reverb.ttl +++ b/src/MOD/Cardinal.lv2/Plateau_Reverb.ttl @@ -87,6 +87,7 @@ ] ; state:state [ "KLUv/QBIXR0AZrOOIiAR9Ly6CNQEzyzK+CwIw5H3QvHuEkY2KVmv3eQESAkA+gOGAIAAjQDTgneRB8Qu8lJbrrWmliuWWrVOOmB3F3ms5RZbrLlXSim3Ere7izyswlRGy6IQGWiCd5FHJ2kVtpgzg3eRh6wQXYWjvICRU3kXebAniVdhZzIRJC94F9HodSSl3H+5+1qsux3OjCoSCgkKH4GkHd0OCNKoOn4dTKnWvarX8t527H/rbodAEquwIzMmtLDCkMLIEIu08uca+9XqU3sn9wDH2n3/at9JO/ulGkmP+PtzLTlz77fc2f9y5U99a+u5d6qdveQl39jtVTgynPQqLGsDL3h31wJC8OGuUFLYLPAq3Mg4LRhDNg104FXYYSZq8zzaJfeWcvfum7e2CkeGd3d3EY1INjUGnyJIUmkBIbjAXLHHVLdvzdl7c0jShjGQiIt4mkysAzSaBw10mAhBAqWe60+JvX+7ZqtwZBiBUPNh5u1Vr1+FZZwJTxSdyVAIVQoZaH1onRiUuWAoEzmSgdbHYSJHMjgQYMBGFkjo4VWY1sdBkFFdFiZG6VTKq7BsMChDIx34yGZiYjbIDCmhhXdl1MAlGwjELhLbsqR/qts3tp6/V73gp3fPseav2h9bzZfFSeWvMfZrdVtvpfdqxdTf7dkzX92Sa5fcHVvtUmIt+evn1Gu2mnn7a/evuf/29Bxbyr//13u9OH36ZQHgVRiazZRwh3EYRqD1oXUiyKbGmUDrQ+t85p0cU6tfat1SBJQIgKeoEVFmAEZGIJowRhA0AOACAJAhIgMSYGAIQCBIYgADQQwBQzIMROgoATAAGCAwQgjB4LBBADT1bxCWZ3XXFUabMDuaLONUf0bQ7TgesmQFW2K0AIC4DIQl6tqRPtTyQ0noFFHLQLAATUPeplJl0koHLuVhRjg4NPbs9Wj4AfakXtrVG9Ad+CrbZ0A7Je11icVN+xCwTDBY4Kno85VOIgGk9RzZ1xnpmiObAcD2we4MScUkfADxZIwmSY1vfFxeBnO2iMzNnVOizhd5nU4xNop8kqWVGCB1KmgvNEkW+hzkks3EyByFzDwFDlF2lniRVMGMMof+Y3EQBeSTGEBSh4gEX4611XB1fbturqxt69SVkxPISckW8aolo/yTNVoJCBspCeshPp+jqj7FYS6yDMBKLRy7IHXc+R+MwTYm+KQQqLmmbcdm0+47HTL1RQKZwQ4vBxDovJ+HmZDDJMrAgYowZEBNGMD3FABjnGbw" ; + "" ; """Activated by parameters. 1 - Dry Level 2 - Wet Level diff --git a/src/MOD/CardinalFX.lv2/Plateau_Reverb.ttl b/src/MOD/CardinalFX.lv2/Plateau_Reverb.ttl index 88846353..cc0d795b 100644 --- a/src/MOD/CardinalFX.lv2/Plateau_Reverb.ttl +++ b/src/MOD/CardinalFX.lv2/Plateau_Reverb.ttl @@ -87,6 +87,7 @@ ] ; state:state [ "KLUv/QBIXR0AZrOOIiAR9Ly6CNQEzyzK+CwIw5H3QvHuEkY2KVmv3eQESAkA+gOGAIAAjQDTgneRB8Qu8lJbrrWmliuWWrVOOmB3F3ms5RZbrLlXSim3Ere7izyswlRGy6IQGWiCd5FHJ2kVtpgzg3eRh6wQXYWjvICRU3kXebAniVdhZzIRJC94F9HodSSl3H+5+1qsux3OjCoSCgkKH4GkHd0OCNKoOn4dTKnWvUml5b3t2P/W3Q6BJKuwIzMmtLDCkMLIEIu08uca+9XqU3sn9wDH2n3/at9JO/ulGkmP+PtzLTlz77fc2f9y5U99a+u5d6qdveQl39jtVTgynPQqLGsDL3h31wJC8OGuUFLYLPAq3Mg4LRhDNg104FXYYSZq8zzaJfeWcvfum7e2CkeGd3d3EY1INjUGnyJIUmkBIbjAXLHHVLdvzdl7c0jShjGQiIt4mkysAzSaBw10mAhBAqWe60+JvX+7ZqtwZBiBUPNh5u1Vr1+FZZwJTxSdyVAIVQoZaH1onRiUuWAoEzmSgdbHYSJHMjgQYMBGFkjo4VWY1sdBkFFdFiZG6VTKq7BsMChDIx34yGZiYjbIDCmhhXdl1MAlGwjELhLbsqR/qts3tp6/V73gp3fPseav2h9bzZfFSeWvMfZrdVtvpfdqxdTf7dkzX92Sa5fcHVvtUmIt+evn1Gu2mnn7a/evuf/29Bxbyr//13u9OH36ZQHgVRiazZRwh3EYRqD1oXUiyKbGmUDrQ+t85p0cU6tfat1SBJQIgKeoEVFmAEZGIJowRhA0AOACAJAhIgMSYGAIQCBIYgADQQwBQzIMROgoATAAGCAwQgjB4LBBADT1bxCWZ3XXFUabMDuaLONUf0bQ7TgesmQFW2K0AIC4DIQl6tqRPtTyQ0noFFHLQLAATUPeplJl0koHLuVhRjg4NPbs9Wj4AfakXtrVG9Ad+CrbZ0A7Je11icVN+xCwTDBY4Kno85VOIgGk9RzZ1xnpmiObAcD2we4MScUkfADxZIwmSY1vfFxeBnO2iMzNnVOizhd5nU4xNop8kqWVGCB1KmgvNEkW+hzkks3EyByFzDwFDlF2lniRVMGMMof+Y3EQBeSTGEBSh4gEX4611XB1fbturqxt69SVkxPISckW8aolo/yTNVoJCBspCeshPp+jqj7FYS6yDMBKLRy7IHXc+R+MwTYm+KQQqLmmbcdm0+47HTL1RQKZwQ4vBxDovJ+HmZDDJMrAgYowZEBNGMD3FABjnGbw" ; + "" ; """Activated by parameters. 1 - Dry Level 2 - Wet Level From c8772d46545a66b9ab4039e7e04e4b1d59e2d00a Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 5 May 2022 12:03:23 +0100 Subject: [PATCH 024/283] Only print errors of HostMIDI-Map once Signed-off-by: falkTX --- plugins/Cardinal/src/HostMIDI-Map.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Cardinal/src/HostMIDI-Map.cpp b/plugins/Cardinal/src/HostMIDI-Map.cpp index 40b43747..46272e38 100644 --- a/plugins/Cardinal/src/HostMIDI-Map.cpp +++ b/plugins/Cardinal/src/HostMIDI-Map.cpp @@ -602,10 +602,10 @@ struct CardinalMIDIMapChoice : CardinalLedDisplayChoice { ParamHandle* const paramHandle = &module->paramHandles[id]; Module* const paramModule = paramHandle->module; - DISTRHO_SAFE_ASSERT_RETURN(paramModule != nullptr, "error"); + DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN(paramModule != nullptr, "error"); const int paramId = paramHandle->paramId; - DISTRHO_SAFE_ASSERT_RETURN(paramId < (int) paramModule->params.size(), "error"); + DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN(paramId < (int) paramModule->params.size(), "error"); ParamQuantity* const paramQuantity = paramModule->paramQuantities[paramId]; std::string s = paramQuantity->name; From 76828eea6be5088f2b00fc1eede30cd6c190b75c Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 8 May 2022 14:57:53 +0100 Subject: [PATCH 025/283] Fix build Signed-off-by: falkTX --- dpf | 2 +- plugins/Cardinal/src/HostMIDI-Map.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dpf b/dpf index 7d4e299e..cd1861ae 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 7d4e299e4397fcdf7cf307c97897678550e60c00 +Subproject commit cd1861ae893c21045e9f47245bf41cabca7d5f2f diff --git a/plugins/Cardinal/src/HostMIDI-Map.cpp b/plugins/Cardinal/src/HostMIDI-Map.cpp index 46272e38..ee6faed9 100644 --- a/plugins/Cardinal/src/HostMIDI-Map.cpp +++ b/plugins/Cardinal/src/HostMIDI-Map.cpp @@ -602,10 +602,10 @@ struct CardinalMIDIMapChoice : CardinalLedDisplayChoice { ParamHandle* const paramHandle = &module->paramHandles[id]; Module* const paramModule = paramHandle->module; - DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN(paramModule != nullptr, "error"); + DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN("paramModule is null", paramModule != nullptr, "error"); const int paramId = paramHandle->paramId; - DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN(paramId < (int) paramModule->params.size(), "error"); + DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN("paramId is out of bounds", paramId < (int) paramModule->params.size(), "error"); ParamQuantity* const paramQuantity = paramModule->paramQuantities[paramId]; std::string s = paramQuantity->name; From a5ea17fbcff34343aac4de0a24dad668a15d7a86 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 12 May 2022 08:59:08 +0100 Subject: [PATCH 026/283] Fix a compiler warning --- plugins/Cardinal/src/AudioFile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Cardinal/src/AudioFile.cpp b/plugins/Cardinal/src/AudioFile.cpp index a76d4126..528c04a0 100644 --- a/plugins/Cardinal/src/AudioFile.cpp +++ b/plugins/Cardinal/src/AudioFile.cpp @@ -475,7 +475,7 @@ struct AudioFileListWidget : ImGuiWidget { static constexpr const char* const supportedExtensions[] = { #ifdef HAVE_SNDFILE - ".aif",".aifc",".aiff",".au",".bwf",".flac",".htk",".iff",".mat4",".mat5",".oga",".ogg" + ".aif",".aifc",".aiff",".au",".bwf",".flac",".htk",".iff",".mat4",".mat5",".oga",".ogg", ".paf",".pvf",".pvf5",".sd2",".sf",".snd",".svx",".vcc",".w64",".wav",".xi", #endif ".mp3" From c46d659340525f963c95a58747d06deabac9bd9b Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 12 May 2022 09:32:11 +0100 Subject: [PATCH 027/283] Fix transport reset logic for hosts with non-static buffer sizes --- src/CardinalPlugin.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index b53e81dd..a4c56ca7 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -448,7 +448,7 @@ class CardinalPlugin : public CardinalBasePlugin #endif std::string fAutosavePath; - uint64_t fPreviousFrame; + uint64_t fNextExpectedFrame; struct { String comment; @@ -474,7 +474,7 @@ class CardinalPlugin : public CardinalBasePlugin #if DISTRHO_PLUGIN_NUM_INPUTS != 0 fAudioBufferCopy(nullptr), #endif - fPreviousFrame(0), + fNextExpectedFrame(0), fWasBypassed(false) { #ifndef HEADLESS @@ -1082,7 +1082,7 @@ class CardinalPlugin : public CardinalBasePlugin fAudioBufferCopy[i] = new float[bufferSize]; #endif - fPreviousFrame = 0; + fNextExpectedFrame = 0; } void deactivate() override @@ -1108,7 +1108,7 @@ class CardinalPlugin : public CardinalBasePlugin { const TimePosition& timePos(getTimePosition()); - const bool reset = timePos.playing && (timePos.frame == 0 || fPreviousFrame + frames != timePos.frame); + const bool reset = timePos.playing && (timePos.frame == 0 || fNextExpectedFrame != timePos.frame); context->playing = timePos.playing; context->bbtValid = timePos.bbt.valid; @@ -1133,7 +1133,7 @@ class CardinalPlugin : public CardinalBasePlugin } context->reset = reset; - fPreviousFrame = timePos.frame; + fNextExpectedFrame = timePos.playing ? timePos.frame + frames : 0; } // separate buffers, use them From 9ba7c624b89681f76bb3ae48f1ad55dca2730c9f Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 12 May 2022 10:06:16 +0100 Subject: [PATCH 028/283] Wait 5 cycles before giving keyboard focus to UI --- dpf | 2 +- src/CardinalUI.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dpf b/dpf index cd1861ae..081d4d73 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit cd1861ae893c21045e9f47245bf41cabca7d5f2f +Subproject commit 081d4d7392ef587f46dc3b216369655828bbda7f diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index ae7918e7..dec24af1 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -244,7 +244,7 @@ class CardinalUI : public CardinalBaseUI, rack::math::Vec lastMousePos; WindowParameters windowParameters; int rateLimitStep = 0; - bool firstIdle = true; + int8_t counterForSelfFocus = 0; struct ScopedContext { CardinalPluginContext* const context; @@ -368,9 +368,9 @@ class CardinalUI : public CardinalBaseUI, void uiIdle() override { - if (firstIdle) + if (counterForSelfFocus >= 0 && ++counterForSelfFocus == 5) { - firstIdle = false; + counterForSelfFocus = -1; getWindow().focus(); } From 8e22956eb4b47cb229e5f005ce2bc38a5a28793d Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 13 May 2022 21:12:25 +0100 Subject: [PATCH 029/283] Update modules Signed-off-by: falkTX --- docs/LICENSES.md | 1 - plugins/AmalgamatedHarmonics | 2 +- plugins/Bidoo | 2 +- plugins/BogaudioModules | 2 +- plugins/ChowDSP | 2 +- plugins/GrandeModular | 2 +- plugins/ImpromptuModular | 2 +- plugins/Meander | 2 +- plugins/MindMeldModular | 2 +- plugins/PathSet | 2 +- plugins/PinkTrombone | 2 +- plugins/Prism | 2 +- plugins/ValleyAudio | 2 +- plugins/WhatTheRack | 2 +- plugins/plugins.cpp | 7 +++++-- plugins/repelzen | 2 +- plugins/voxglitch | 2 +- 17 files changed, 20 insertions(+), 18 deletions(-) diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 97e587cf..6e00996a 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -166,7 +166,6 @@ Below is a list of artwork licenses from plugins | Meander/* | GPL-3.0-or-later | No artwork specific license provided | | Meander/Bravura.otf | OFL-1.1-RFN | | | Meander/DejaVuSansMono.ttf | Bitstream-Vera | | -| Meander/Segment7Standard.ttf | OFL-1.1-RFN | | | Meander/Ubuntu Condensed 400.ttf | UFL-1.0 | Ubuntu Font License, based on OFL-1.1 | | MindMeld/* | CC-BY-NC-ND-4.0 | | | MindMeld/fonts/RobotoCondensed-*.ttf | Apache-2.0 | | diff --git a/plugins/AmalgamatedHarmonics b/plugins/AmalgamatedHarmonics index 21a03187..ab362486 160000 --- a/plugins/AmalgamatedHarmonics +++ b/plugins/AmalgamatedHarmonics @@ -1 +1 @@ -Subproject commit 21a031870db2068a98d9690eaffc24bbbfc99c2e +Subproject commit ab362486d556255f64a35ee3f71a3da87fe94ce8 diff --git a/plugins/Bidoo b/plugins/Bidoo index f771bf27..9440a7f2 160000 --- a/plugins/Bidoo +++ b/plugins/Bidoo @@ -1 +1 @@ -Subproject commit f771bf270393b8587516329614ba76e2894355b7 +Subproject commit 9440a7f2bcd6a3f8678b013d2274d2061088833b diff --git a/plugins/BogaudioModules b/plugins/BogaudioModules index a86e7d7b..4af2e2d3 160000 --- a/plugins/BogaudioModules +++ b/plugins/BogaudioModules @@ -1 +1 @@ -Subproject commit a86e7d7b18e0c7cb6e857df36263b0e85bf85566 +Subproject commit 4af2e2d38004b98645deb8a25c7ec74c7c8f1a03 diff --git a/plugins/ChowDSP b/plugins/ChowDSP index 52f89b94..25ed277c 160000 --- a/plugins/ChowDSP +++ b/plugins/ChowDSP @@ -1 +1 @@ -Subproject commit 52f89b94a25828f9debf8bca4d58854fb1e70228 +Subproject commit 25ed277c274d75b338df519243f6b47475958a28 diff --git a/plugins/GrandeModular b/plugins/GrandeModular index b0d8a6fc..3d652432 160000 --- a/plugins/GrandeModular +++ b/plugins/GrandeModular @@ -1 +1 @@ -Subproject commit b0d8a6fcdb28d2e56d6b024326a7378a2c8ee45d +Subproject commit 3d6524320ce33569e3553a53571c45425ba5d078 diff --git a/plugins/ImpromptuModular b/plugins/ImpromptuModular index 2bd5691c..eb514f1e 160000 --- a/plugins/ImpromptuModular +++ b/plugins/ImpromptuModular @@ -1 +1 @@ -Subproject commit 2bd5691c8f12e21e1e6db33e42fe2fe3db7726a3 +Subproject commit eb514f1e867a5626918dd70b947908b3181f66b8 diff --git a/plugins/Meander b/plugins/Meander index 48e654b5..c0958247 160000 --- a/plugins/Meander +++ b/plugins/Meander @@ -1 +1 @@ -Subproject commit 48e654b53a70a4e36f851fe10d12d9570081cdb6 +Subproject commit c095824708947630d9db6a6b7afcd51bdaa0a009 diff --git a/plugins/MindMeldModular b/plugins/MindMeldModular index a721e381..12e235b9 160000 --- a/plugins/MindMeldModular +++ b/plugins/MindMeldModular @@ -1 +1 @@ -Subproject commit a721e381fa1d72d738c9c2daae08c740107e3d5e +Subproject commit 12e235b969530e9ba29b767265483fe6a770e9d4 diff --git a/plugins/PathSet b/plugins/PathSet index d03e8b48..db63f261 160000 --- a/plugins/PathSet +++ b/plugins/PathSet @@ -1 +1 @@ -Subproject commit d03e8b486deba4740bc7f15ae95a08d823a7d00a +Subproject commit db63f26173303970b9203e84c9e7680f5bbe4e12 diff --git a/plugins/PinkTrombone b/plugins/PinkTrombone index ea6ab0c6..87ecd0ff 160000 --- a/plugins/PinkTrombone +++ b/plugins/PinkTrombone @@ -1 +1 @@ -Subproject commit ea6ab0c6887102ebbf6e3534e0e891b867b130cc +Subproject commit 87ecd0ff5212a65b064444362e76c9bf94c01826 diff --git a/plugins/Prism b/plugins/Prism index 8a9cc034..12db31e8 160000 --- a/plugins/Prism +++ b/plugins/Prism @@ -1 +1 @@ -Subproject commit 8a9cc034d905079f156ed6c64efaeb4baf81490f +Subproject commit 12db31e801907bf60f70d27fa133e72903415304 diff --git a/plugins/ValleyAudio b/plugins/ValleyAudio index 98698dc2..80e8976e 160000 --- a/plugins/ValleyAudio +++ b/plugins/ValleyAudio @@ -1 +1 @@ -Subproject commit 98698dc28e6ed7aec56e4ab8280171a160d673ef +Subproject commit 80e8976eebbea1e1177beba4de5645eb0ca680e3 diff --git a/plugins/WhatTheRack b/plugins/WhatTheRack index c10856fd..82c3c5e1 160000 --- a/plugins/WhatTheRack +++ b/plugins/WhatTheRack @@ -1 +1 @@ -Subproject commit c10856fd0e02c057a11c3c15b345fcea8b0abce3 +Subproject commit 82c3c5e11176c364b61d501059d9182e86464eca diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index d6aed249..f2f768fb 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -401,12 +401,13 @@ extern Model* modelPhraseSeq16; extern Model* modelPhraseSeq32; extern Model* modelPhraseSeqExpander; extern Model* modelProbKey; -// extern Model* modelProbKeyExpander; extern Model* modelSemiModularSynth; +extern Model* modelSygen; extern Model* modelTact; extern Model* modelTact1; extern Model* modelTactG; extern Model* modelTwelveKey; +extern Model* modelVariations; extern Model* modelWriteSeq32; extern Model* modelWriteSeq64; extern Model* modelBlankPanel; @@ -1709,6 +1710,7 @@ static void initStatic__GrandeModular() p->addModel(modelTails); p->addModel(modelVarSampleDelays); p->addModel(modelVCA3); + p->addModel(modelVCA4); } } @@ -1813,12 +1815,13 @@ static void initStatic__ImpromptuModular() p->addModel(modelPhraseSeq32); p->addModel(modelPhraseSeqExpander); p->addModel(modelProbKey); - // p->addModel(modelProbKeyExpander); p->addModel(modelSemiModularSynth); + p->addModel(modelSygen); p->addModel(modelTact); p->addModel(modelTact1); p->addModel(modelTactG); p->addModel(modelTwelveKey); + p->addModel(modelVariations); p->addModel(modelWriteSeq32); p->addModel(modelWriteSeq64); p->addModel(modelBlankPanel); diff --git a/plugins/repelzen b/plugins/repelzen index f812cc56..78b1765e 160000 --- a/plugins/repelzen +++ b/plugins/repelzen @@ -1 +1 @@ -Subproject commit f812cc56b7fe9e41bb13da99ef23f014015c86c1 +Subproject commit 78b1765eb9ccb9e4e2a1967ee02f4126b1846806 diff --git a/plugins/voxglitch b/plugins/voxglitch index 03f4fc5c..f475e1b3 160000 --- a/plugins/voxglitch +++ b/plugins/voxglitch @@ -1 +1 @@ -Subproject commit 03f4fc5cebb5d8eb152ac59d3a51ce0ec87a2740 +Subproject commit f475e1b3881b7df25ea13792d16d4361229ed412 From 0d4094d49f5b0291714b39e84568487d3fed66ff Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 16:19:19 +0100 Subject: [PATCH 030/283] Needed tweaks for updated modules Signed-off-by: falkTX --- deps/PawPaw | 2 +- plugins/BidooDark/plugin.cpp | 6 ++++++ plugins/ChowDSP | 2 +- plugins/Makefile | 2 +- plugins/PathSet | 2 +- plugins/WhatTheRack | 2 +- plugins/plugins.cpp | 4 ++++ plugins/voxglitch | 2 +- src/custom/dep.cpp | 10 ++++++---- 9 files changed, 22 insertions(+), 10 deletions(-) diff --git a/deps/PawPaw b/deps/PawPaw index 769385b5..39f441d0 160000 --- a/deps/PawPaw +++ b/deps/PawPaw @@ -1 +1 @@ -Subproject commit 769385b541cdb3c6c6493644ec901f1f2d320da5 +Subproject commit 39f441d0bcf04d16e3c865308a98c8bd3c665055 diff --git a/plugins/BidooDark/plugin.cpp b/plugins/BidooDark/plugin.cpp index f0a0c0ce..59077fd3 100644 --- a/plugins/BidooDark/plugin.cpp +++ b/plugins/BidooDark/plugin.cpp @@ -25,6 +25,12 @@ void BidooModule::dataFromJson(json_t*) { void BidooWidget::appendContextMenu(Menu*) { } +void BidooWidget::writeThemeAndContrastAsDefault() { +} + +void BidooWidget::readThemeAndContrastFromDefault() { +} + void BidooWidget::prepareThemes(const std::string& filename) { setPanel(APP->window->loadSvg(filename)); } diff --git a/plugins/ChowDSP b/plugins/ChowDSP index 25ed277c..58d4679e 160000 --- a/plugins/ChowDSP +++ b/plugins/ChowDSP @@ -1 +1 @@ -Subproject commit 25ed277c274d75b338df519243f6b47475958a28 +Subproject commit 58d4679ef9678a2d5e58a7f05b9a20da3efa0329 diff --git a/plugins/Makefile b/plugins/Makefile index 0d4cc8ec..f24775f4 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -1397,7 +1397,7 @@ $(BUILD_DIR)/ChowDSP/%.cpp.o: ChowDSP/%.cpp -DUSE_EIGEN \ -DSKIP_MINGW_FORMAT \ -IChowDSP/lib \ - -IChowDSP/lib/chowdsp_utils/DSP/WDF \ + -IChowDSP/lib/chowdsp_utils/modules/chowdsp_dsp/WDF \ -Wno-deprecated-copy $(BUILD_DIR)/DrumKit/%.cpp.o: DrumKit/%.cpp diff --git a/plugins/PathSet b/plugins/PathSet index db63f261..de53c786 160000 --- a/plugins/PathSet +++ b/plugins/PathSet @@ -1 +1 @@ -Subproject commit db63f26173303970b9203e84c9e7680f5bbe4e12 +Subproject commit de53c78658c42638b7c356b78d1559634644f733 diff --git a/plugins/WhatTheRack b/plugins/WhatTheRack index 82c3c5e1..e3733784 160000 --- a/plugins/WhatTheRack +++ b/plugins/WhatTheRack @@ -1 +1 @@ -Subproject commit 82c3c5e11176c364b61d501059d9182e86464eca +Subproject commit e373378491d2cf3b8257137d154aef1d389c5204 diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index f2f768fb..c9c3eee0 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -2288,8 +2288,11 @@ static void initStatic__PathSet() if (spl.ok()) { p->addModel(modelShiftyMod); + p->addModel(modelShiftyExpander); p->addModel(modelIceTray); p->addModel(modelAstroVibe); + p->addModel(modelGlassPane); + p->addModel(modelNudge); } } @@ -2492,6 +2495,7 @@ static void initStatic__Voxglitch() p->addModel(modelRepeater); p->addModel(modelSamplerX8); p->addModel(modelSatanonaut); + p->addModel(modelGrooveBox); p->addModel(modelWavBank); p->addModel(modelWavBankMC); p->addModel(modelXY); diff --git a/plugins/voxglitch b/plugins/voxglitch index f475e1b3..10a0716e 160000 --- a/plugins/voxglitch +++ b/plugins/voxglitch @@ -1 +1 @@ -Subproject commit f475e1b3881b7df25ea13792d16d4361229ed412 +Subproject commit 10a0716ec105669d561121affdde63591671429b diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index c124d551..7f7375fe 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -269,24 +269,26 @@ static const struct { { "/kocmoc/res/SVF.svg", {}, -1 }, { "/kocmoc/res/TRG.svg", {}, -1 }, // CC0-1.0 + { "/nonlinearcircuits/res/BOOLs2.svg", {}, -1 }, + { "/nonlinearcircuits/res/DoubleNeuronRef.svg", {}, -1 }, + { "/nonlinearcircuits/res/LetsSplosh.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - 4seq.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - 8 BIT CIPHER.svg", {}, -1 }, - { "/nonlinearcircuits/res/BOOLs2.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - DIVIDE & CONQUER.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - DIVINE CMOS.svg", {}, -1 }, - { "/nonlinearcircuits/res/DoubleNeuronRef.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - GENiE.svg", {}, -1 }, - { "/nonlinearcircuits/res/LetsSplosh.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - NEURON.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - NUMBERWANG.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - SEGUE.svg", {}, -1 }, - { "/nonlinearcircuits/res/squid-axon-papernoise-panel2.svg", {}, -1 }, { "/nonlinearcircuits/res/NLC - STATUES.svg", {}, -1 }, + { "/nonlinearcircuits/res/squid-axon-papernoise-panel2.svg", {}, -1 }, // Custom, runtime dark mode used with permission { "/ParableInstruments/res/Neil.svg", {}, -1 }, // GPL-3.0-or-later { "/PathSet/res/AstroVibe.svg", {}, -1 }, + { "/PathSet/res/GlassPane.svg", {}, -1 }, { "/PathSet/res/IceTray.svg", {}, -1 }, + { "/PathSet/res/Nudge.svg", {}, -1 }, { "/PathSet/res/ShiftyMod.svg", {}, -1 }, // BSD-3-Clause { "/voxglitch/res/autobreak_front_panel.svg", {}, -1 }, From e6c91bfa2607730854f32fb490a5070f8df48900 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 17:33:06 +0100 Subject: [PATCH 031/283] Build fixes Signed-off-by: falkTX --- .github/workflows/build.yml | 2 +- deps/PawPaw | 2 +- plugins/Fundamental | 2 +- plugins/Makefile | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1d5f4d46..cdda6a3d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: env: - CACHE_VERSION: 20 + CACHE_VERSION: 21 DEBIAN_FRONTEND: noninteractive HOMEBREW_NO_AUTO_UPDATE: 1 LIBGL_ALWAYS_SOFTWARE: 'true' diff --git a/deps/PawPaw b/deps/PawPaw index 39f441d0..06295f21 160000 --- a/deps/PawPaw +++ b/deps/PawPaw @@ -1 +1 @@ -Subproject commit 39f441d0bcf04d16e3c865308a98c8bd3c665055 +Subproject commit 06295f217fcaa3c023eef3c3d4a0fe9203b53cb1 diff --git a/plugins/Fundamental b/plugins/Fundamental index ec6d477c..612b0dba 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit ec6d477cedc9a00b7dde0f2713d263c4778162d2 +Subproject commit 612b0dba4634c365b98f96da2459ba58124bbcf0 diff --git a/plugins/Makefile b/plugins/Makefile index f24775f4..bffe70df 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -878,7 +878,7 @@ PLUGIN_FILES += $(filter-out WhatTheRack/src/plugin.cpp,$(wildcard WhatTheRack/s # modules/types which are present in other plugins VOXGLITCH_CUSTOM = $(DRWAV) AudioFile Looper Readout -VOXGLITCH_CUSTOM_PER_FILE = AudioBuffer GateSequencer Grain Sequencer SequencerDisplay VoltageSequencer +VOXGLITCH_CUSTOM_PER_FILE = AudioBuffer GateSequencer Grain SamplePlayer Sequencer SequencerDisplay VoltageSequencer # -------------------------------------------------------------- # ZetaCarinaeModules From 4a2cc44f6537ca98598625f2dfd99b5367af72b7 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 19:41:23 +0100 Subject: [PATCH 032/283] Cleanup Signed-off-by: falkTX --- .github/workflows/build.yml | 6 +- deps/Makefile | 3 +- deps/PawPaw | 2 +- deps/aubio/Makefile | 4 + deps/aubio/src/spectral/fft.c | 357 +--------------------------------- dpf | 2 +- 6 files changed, 19 insertions(+), 355 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cdda6a3d..56120197 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: env: - CACHE_VERSION: 21 + CACHE_VERSION: 22 DEBIAN_FRONTEND: noninteractive HOMEBREW_NO_AUTO_UPDATE: 1 LIBGL_ALWAYS_SOFTWARE: 'true' @@ -444,6 +444,8 @@ jobs: make features make CIBUILD=true NOOPT=true WITH_LTO=true -j $(sysctl -n hw.logicalcpu) - name: Build macOS intel (AU using juce) + env: + MACOSX_DEPLOYMENT_TARGET: '10.8' run: | pushd deps/PawPaw; source local.env macos; popd git clone --depth=1 -b master https://github.com/juce-framework/JUCE.git jucewrapper/JUCE @@ -531,6 +533,8 @@ jobs: make features make CIBUILD=true NOOPT=true WITH_LTO=true -j $(sysctl -n hw.logicalcpu) - name: Build macOS universal (AU using juce) + env: + MACOSX_DEPLOYMENT_TARGET: '10.12' run: | pushd deps/PawPaw; source local.env macos-universal; popd git clone --depth=1 -b master https://github.com/juce-framework/JUCE.git jucewrapper/JUCE diff --git a/deps/Makefile b/deps/Makefile index 56ba9a88..876e2ebf 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -103,7 +103,8 @@ ifneq (,$(findstring -arch$(SPACE),$(CXXFLAGS))) CMAKE += -DCMAKE_OSX_ARCHITECTURES='$(subst $(SPACE),;,$(subst -arch=,,$(filter -arch=%,$(subst -arch$(SPACE),-arch=,$(CXXFLAGS)))))' endif ifneq (,$(findstring -mmacosx-version-min=,$(CXXFLAGS))) -CMAKE += -DCMAKE_OSX_DEPLOYMENT_TARGET=$(subst -mmacosx-version-min=,,$(filter -mmacosx-version-min=%,$(CXXFLAGS))) +export MACOSX_DEPLOYMENT_TARGET = $(subst -mmacosx-version-min=,,$(filter -mmacosx-version-min=%,$(CXXFLAGS))) +CMAKE += -DCMAKE_OSX_DEPLOYMENT_TARGET=$(MACOSX_DEPLOYMENT_TARGET) endif # make sure debug/release matches diff --git a/deps/PawPaw b/deps/PawPaw index 06295f21..dbdcdb38 160000 --- a/deps/PawPaw +++ b/deps/PawPaw @@ -1 +1 @@ -Subproject commit 06295f217fcaa3c023eef3c3d4a0fe9203b53cb1 +Subproject commit dbdcdb38a1cfe1487fb7f1a072cba24e4270ee43 diff --git a/deps/aubio/Makefile b/deps/aubio/Makefile index 8d6e45a7..7c150a4f 100644 --- a/deps/aubio/Makefile +++ b/deps/aubio/Makefile @@ -17,6 +17,10 @@ BUILD_C_FLAGS += -I. BUILD_C_FLAGS += -Isrc BUILD_C_FLAGS += $(shell pkg-config --cflags fftw3f) +ifeq ($(CIBUILD),true) +BUILD_C_FLAGS += -DSKIP_FFTW_MUTEX +endif + OBJS = \ src/cvec.c.o \ src/fvec.c.o \ diff --git a/deps/aubio/src/spectral/fft.c b/deps/aubio/src/spectral/fft.c index 679231aa..9384ca24 100644 --- a/deps/aubio/src/spectral/fft.c +++ b/deps/aubio/src/spectral/fft.c @@ -24,34 +24,17 @@ #include "mathutils.h" #include "spectral/fft.h" -#ifdef HAVE_FFTW3 // using FFTW3 /* note that is not included here but only in aubio_priv.h, so that * c++ projects can still use their own complex definition. */ #include #include -#ifdef HAVE_COMPLEX_H -#ifdef HAVE_FFTW3F /** fft data type with complex.h and fftw3f */ #define FFTW_TYPE fftwf_complex -#else -/** fft data type with complex.h and fftw3 */ -#define FFTW_TYPE fftw_complex -#endif -#else -#ifdef HAVE_FFTW3F -/** fft data type without complex.h and with fftw3f */ -#define FFTW_TYPE float -#else -/** fft data type without complex.h and with fftw */ -#define FFTW_TYPE double -#endif -#endif /** fft data type */ typedef FFTW_TYPE fft_data_t; -#ifdef HAVE_FFTW3F #define fftw_malloc fftwf_malloc #define fftw_free fftwf_free #define fftw_execute fftwf_execute @@ -60,120 +43,26 @@ typedef FFTW_TYPE fft_data_t; #define fftw_plan_r2r_1d fftwf_plan_r2r_1d #define fftw_plan fftwf_plan #define fftw_destroy_plan fftwf_destroy_plan -#endif -#ifdef HAVE_FFTW3F #if HAVE_AUBIO_DOUBLE #error "Using aubio in double precision with fftw3 in single precision" #endif /* HAVE_AUBIO_DOUBLE */ + #define real_t float -#elif defined (HAVE_FFTW3) /* HAVE_FFTW3F */ -#if !HAVE_AUBIO_DOUBLE -#error "Using aubio in single precision with fftw3 in double precision" -#endif /* HAVE_AUBIO_DOUBLE */ -#define real_t double -#endif /* HAVE_FFTW3F */ -#ifndef __MOD_DEVICES__ +#ifndef SKIP_FFTW_MUTEX // a global mutex for FFTW thread safety pthread_mutex_t aubio_fftw_mutex = PTHREAD_MUTEX_INITIALIZER; #endif -#elif defined HAVE_ACCELERATE // using ACCELERATE -// https://developer.apple.com/library/mac/#documentation/Accelerate/Reference/vDSPRef/Reference/reference.html -#include - -#if !HAVE_AUBIO_DOUBLE -#define aubio_vDSP_ctoz vDSP_ctoz -#define aubio_vDSP_fft_zrip vDSP_fft_zrip -#define aubio_vDSP_ztoc vDSP_ztoc -#define aubio_vDSP_zvmags vDSP_zvmags -#define aubio_vDSP_zvphas vDSP_zvphas -#define aubio_vDSP_vsadd vDSP_vsadd -#define aubio_vDSP_vsmul vDSP_vsmul -#define aubio_DSPComplex DSPComplex -#define aubio_DSPSplitComplex DSPSplitComplex -#define aubio_vDSP_DFT_Setup vDSP_DFT_Setup -#define aubio_vDSP_DFT_zrop_CreateSetup vDSP_DFT_zrop_CreateSetup -#define aubio_vDSP_DFT_Execute vDSP_DFT_Execute -#define aubio_vDSP_DFT_DestroySetup vDSP_DFT_DestroySetup -#define aubio_vvsqrt vvsqrtf -#else -#define aubio_vDSP_ctoz vDSP_ctozD -#define aubio_vDSP_fft_zrip vDSP_fft_zripD -#define aubio_vDSP_ztoc vDSP_ztocD -#define aubio_vDSP_zvmags vDSP_zvmagsD -#define aubio_vDSP_zvphas vDSP_zvphasD -#define aubio_vDSP_vsadd vDSP_vsaddD -#define aubio_vDSP_vsmul vDSP_vsmulD -#define aubio_DSPComplex DSPDoubleComplex -#define aubio_DSPSplitComplex DSPDoubleSplitComplex -#define aubio_vDSP_DFT_Setup vDSP_DFT_SetupD -#define aubio_vDSP_DFT_zrop_CreateSetup vDSP_DFT_zrop_CreateSetupD -#define aubio_vDSP_DFT_Execute vDSP_DFT_ExecuteD -#define aubio_vDSP_DFT_DestroySetup vDSP_DFT_DestroySetupD -#define aubio_vvsqrt vvsqrt -#endif /* HAVE_AUBIO_DOUBLE */ - -#elif defined HAVE_INTEL_IPP // using INTEL IPP - -#if !HAVE_AUBIO_DOUBLE -#define aubio_IppFloat Ipp32f -#define aubio_IppComplex Ipp32fc -#define aubio_FFTSpec FFTSpec_R_32f -#define aubio_ippsMalloc_complex ippsMalloc_32fc -#define aubio_ippsFFTInit_R ippsFFTInit_R_32f -#define aubio_ippsFFTGetSize_R ippsFFTGetSize_R_32f -#define aubio_ippsFFTInv_CCSToR ippsFFTInv_CCSToR_32f -#define aubio_ippsFFTFwd_RToCCS ippsFFTFwd_RToCCS_32f -#define aubio_ippsAtan2 ippsAtan2_32f_A21 -#else /* HAVE_AUBIO_DOUBLE */ -#define aubio_IppFloat Ipp64f -#define aubio_IppComplex Ipp64fc -#define aubio_FFTSpec FFTSpec_R_64f -#define aubio_ippsMalloc_complex ippsMalloc_64fc -#define aubio_ippsFFTInit_R ippsFFTInit_R_64f -#define aubio_ippsFFTGetSize_R ippsFFTGetSize_R_64f -#define aubio_ippsFFTInv_CCSToR ippsFFTInv_CCSToR_64f -#define aubio_ippsFFTFwd_RToCCS ippsFFTFwd_RToCCS_64f -#define aubio_ippsAtan2 ippsAtan2_64f_A50 -#endif - - -#else // using OOURA -// let's use ooura instead -extern void aubio_ooura_rdft(int, int, smpl_t *, int *, smpl_t *); - -#endif - struct _aubio_fft_t { uint_t winsize; uint_t fft_size; -#ifdef HAVE_FFTW3 // using FFTW3 real_t *in, *out; fftw_plan pfw, pbw; fft_data_t * specdata; /* complex spectral data */ -#elif defined HAVE_ACCELERATE // using ACCELERATE - aubio_vDSP_DFT_Setup fftSetupFwd; - aubio_vDSP_DFT_Setup fftSetupBwd; - aubio_DSPSplitComplex spec; - smpl_t *in, *out; - -#elif defined HAVE_INTEL_IPP // using Intel IPP - smpl_t *in, *out; - Ipp8u* memSpec; - Ipp8u* memInit; - Ipp8u* memBuffer; - struct aubio_FFTSpec* fftSpec; - aubio_IppComplex* complexOut; -#else // using OOURA - smpl_t *in, *out; - smpl_t *w; - int *ip; -#endif /* using OOURA */ - fvec_t * compspec; }; @@ -184,7 +73,6 @@ aubio_fft_t * new_aubio_fft (uint_t winsize) { goto beach; } -#ifdef HAVE_FFTW3 uint_t i; s->winsize = winsize; /* allocate memory */ @@ -192,21 +80,14 @@ aubio_fft_t * new_aubio_fft (uint_t winsize) { s->out = AUBIO_ARRAY(real_t,winsize); s->compspec = new_fvec(winsize); /* create plans */ -#ifndef __MOD_DEVICES__ +#ifndef SKIP_FFTW_MUTEX pthread_mutex_lock(&aubio_fftw_mutex); #endif -#ifdef HAVE_COMPLEX_H s->fft_size = winsize/2 + 1; s->specdata = (fft_data_t*)fftw_malloc(sizeof(fft_data_t)*s->fft_size); s->pfw = fftw_plan_dft_r2c_1d(winsize, s->in, s->specdata, FFTW_ESTIMATE); s->pbw = fftw_plan_dft_c2r_1d(winsize, s->specdata, s->out, FFTW_ESTIMATE); -#else - s->fft_size = winsize; - s->specdata = (fft_data_t*)fftw_malloc(sizeof(fft_data_t)*s->fft_size); - s->pfw = fftw_plan_r2r_1d(winsize, s->in, s->specdata, FFTW_R2HC, FFTW_ESTIMATE); - s->pbw = fftw_plan_r2r_1d(winsize, s->specdata, s->out, FFTW_HC2R, FFTW_ESTIMATE); -#endif -#ifndef __MOD_DEVICES__ +#ifndef SKIP_FFTW_MUTEX pthread_mutex_unlock(&aubio_fftw_mutex); #endif for (i = 0; i < s->winsize; i++) { @@ -217,87 +98,6 @@ aubio_fft_t * new_aubio_fft (uint_t winsize) { s->specdata[i] = 0.; } -#elif defined HAVE_ACCELERATE // using ACCELERATE - { - uint_t radix = winsize; - uint_t order = 0; - while ((radix / 2) * 2 == radix) { - radix /= 2; - order++; - } - if (order < 4 || (radix != 1 && radix != 3 && radix != 5 && radix != 15)) { - AUBIO_ERR("fft: vDSP/Accelerate supports FFT with sizes = " - "f * 2 ** n, where n > 4 and f in [1, 3, 5, 15], but requested %d. " - "Use the closest power of two, or try recompiling aubio with " - "--enable-fftw3.\n", winsize); - goto beach; - } - } - s->winsize = winsize; - s->fft_size = winsize; - s->compspec = new_fvec(winsize); - s->in = AUBIO_ARRAY(smpl_t, s->fft_size); - s->out = AUBIO_ARRAY(smpl_t, s->fft_size); - s->spec.realp = AUBIO_ARRAY(smpl_t, s->fft_size/2); - s->spec.imagp = AUBIO_ARRAY(smpl_t, s->fft_size/2); - s->fftSetupFwd = aubio_vDSP_DFT_zrop_CreateSetup(NULL, - s->fft_size, vDSP_DFT_FORWARD); - s->fftSetupBwd = aubio_vDSP_DFT_zrop_CreateSetup(s->fftSetupFwd, - s->fft_size, vDSP_DFT_INVERSE); - -#elif defined HAVE_INTEL_IPP // using Intel IPP - const IppHintAlgorithm qualityHint = ippAlgHintAccurate; // OR ippAlgHintFast; - const int flags = IPP_FFT_NODIV_BY_ANY; // we're scaling manually afterwards - int order = aubio_power_of_two_order(winsize); - int sizeSpec, sizeInit, sizeBuffer; - IppStatus status; - - if (winsize <= 4 || aubio_is_power_of_two(winsize) != 1) - { - AUBIO_ERR("intel IPP fft: can only create with sizes > 4 and power of two, requested %d," - " try recompiling aubio with --enable-fftw3\n", winsize); - goto beach; - } - - status = aubio_ippsFFTGetSize_R(order, flags, qualityHint, - &sizeSpec, &sizeInit, &sizeBuffer); - if (status != ippStsNoErr) { - AUBIO_ERR("fft: failed to initialize fft. IPP error: %d\n", status); - goto beach; - } - s->fft_size = s->winsize = winsize; - s->compspec = new_fvec(winsize); - s->in = AUBIO_ARRAY(smpl_t, s->winsize); - s->out = AUBIO_ARRAY(smpl_t, s->winsize); - s->memSpec = ippsMalloc_8u(sizeSpec); - s->memBuffer = ippsMalloc_8u(sizeBuffer); - if (sizeInit > 0 ) { - s->memInit = ippsMalloc_8u(sizeInit); - } - s->complexOut = aubio_ippsMalloc_complex(s->fft_size / 2 + 1); - status = aubio_ippsFFTInit_R( - &s->fftSpec, order, flags, qualityHint, s->memSpec, s->memInit); - if (status != ippStsNoErr) { - AUBIO_ERR("fft: failed to initialize. IPP error: %d\n", status); - goto beach; - } - -#else // using OOURA - if (aubio_is_power_of_two(winsize) != 1) { - AUBIO_ERR("fft: can only create with sizes power of two, requested %d," - " try recompiling aubio with --enable-fftw3\n", winsize); - goto beach; - } - s->winsize = winsize; - s->fft_size = winsize / 2 + 1; - s->compspec = new_fvec(winsize); - s->in = AUBIO_ARRAY(smpl_t, s->winsize); - s->out = AUBIO_ARRAY(smpl_t, s->winsize); - s->ip = AUBIO_ARRAY(int , s->fft_size); - s->w = AUBIO_ARRAY(smpl_t, s->fft_size); - s->ip[0] = 0; -#endif /* using OOURA */ - return s; beach: @@ -307,34 +107,16 @@ aubio_fft_t * new_aubio_fft (uint_t winsize) { void del_aubio_fft(aubio_fft_t * s) { /* destroy data */ -#ifdef HAVE_FFTW3 // using FFTW3 -#ifndef __MOD_DEVICES__ +#ifndef SKIP_FFTW_MUTEX pthread_mutex_lock(&aubio_fftw_mutex); #endif fftw_destroy_plan(s->pfw); fftw_destroy_plan(s->pbw); fftw_free(s->specdata); -#ifndef __MOD_DEVICES__ +#ifndef SKIP_FFTW_MUTEX pthread_mutex_unlock(&aubio_fftw_mutex); #endif -#elif defined HAVE_ACCELERATE // using ACCELERATE - AUBIO_FREE(s->spec.realp); - AUBIO_FREE(s->spec.imagp); - aubio_vDSP_DFT_DestroySetup(s->fftSetupBwd); - aubio_vDSP_DFT_DestroySetup(s->fftSetupFwd); - -#elif defined HAVE_INTEL_IPP // using Intel IPP - ippFree(s->memSpec); - ippFree(s->memInit); - ippFree(s->memBuffer); - ippFree(s->complexOut); - -#else // using OOURA - AUBIO_FREE(s->w); - AUBIO_FREE(s->ip); -#endif - del_fvec(s->compspec); AUBIO_FREE(s->in); AUBIO_FREE(s->out); @@ -361,131 +143,28 @@ void aubio_fft_do_complex(aubio_fft_t * s, const fvec_t * input, fvec_t * compsp memcpy(s->in, input->data, s->winsize * sizeof(smpl_t)); #endif /* HAVE_MEMCPY_HACKS */ -#ifdef HAVE_FFTW3 // using FFTW3 fftw_execute(s->pfw); -#ifdef HAVE_COMPLEX_H compspec->data[0] = REAL(s->specdata[0]); for (i = 1; i < s->fft_size -1 ; i++) { compspec->data[i] = REAL(s->specdata[i]); compspec->data[compspec->length - i] = IMAG(s->specdata[i]); } compspec->data[s->fft_size-1] = REAL(s->specdata[s->fft_size-1]); -#else /* HAVE_COMPLEX_H */ - for (i = 0; i < s->fft_size; i++) { - compspec->data[i] = s->specdata[i]; - } -#endif /* HAVE_COMPLEX_H */ - -#elif defined HAVE_ACCELERATE // using ACCELERATE - // convert real data to even/odd format used in vDSP - aubio_vDSP_ctoz((aubio_DSPComplex*)s->in, 2, &s->spec, 1, s->fft_size/2); - // compute the FFT - aubio_vDSP_DFT_Execute(s->fftSetupFwd, s->spec.realp, s->spec.imagp, - s->spec.realp, s->spec.imagp); - // convert from vDSP complex split to [ r0, r1, ..., rN, iN-1, .., i2, i1] - compspec->data[0] = s->spec.realp[0]; - compspec->data[s->fft_size / 2] = s->spec.imagp[0]; - for (i = 1; i < s->fft_size / 2; i++) { - compspec->data[i] = s->spec.realp[i]; - compspec->data[s->fft_size - i] = s->spec.imagp[i]; - } - // apply scaling - smpl_t scale = 1./2.; - aubio_vDSP_vsmul(compspec->data, 1, &scale, compspec->data, 1, s->fft_size); - -#elif defined HAVE_INTEL_IPP // using Intel IPP - - // apply fft - aubio_ippsFFTFwd_RToCCS(s->in, (aubio_IppFloat*)s->complexOut, s->fftSpec, s->memBuffer); - // convert complex buffer to [ r0, r1, ..., rN, iN-1, .., i2, i1] - compspec->data[0] = s->complexOut[0].re; - compspec->data[s->fft_size / 2] = s->complexOut[s->fft_size / 2].re; - for (i = 1; i < s->fft_size / 2; i++) { - compspec->data[i] = s->complexOut[i].re; - compspec->data[s->fft_size - i] = s->complexOut[i].im; - } - -#else // using OOURA - aubio_ooura_rdft(s->winsize, 1, s->in, s->ip, s->w); - compspec->data[0] = s->in[0]; - compspec->data[s->winsize / 2] = s->in[1]; - for (i = 1; i < s->fft_size - 1; i++) { - compspec->data[i] = s->in[2 * i]; - compspec->data[s->winsize - i] = - s->in[2 * i + 1]; - } -#endif /* using OOURA */ } void aubio_fft_rdo_complex(aubio_fft_t * s, const fvec_t * compspec, fvec_t * output) { uint_t i; -#ifdef HAVE_FFTW3 const smpl_t renorm = 1./(smpl_t)s->winsize; -#ifdef HAVE_COMPLEX_H s->specdata[0] = compspec->data[0]; for (i=1; i < s->fft_size - 1; i++) { s->specdata[i] = compspec->data[i] + I * compspec->data[compspec->length - i]; } s->specdata[s->fft_size - 1] = compspec->data[s->fft_size - 1]; -#else - for (i=0; i < s->fft_size; i++) { - s->specdata[i] = compspec->data[i]; - } -#endif fftw_execute(s->pbw); for (i = 0; i < output->length; i++) { output->data[i] = s->out[i]*renorm; } - -#elif defined HAVE_ACCELERATE // using ACCELERATE - // convert from real imag [ r0, r1, ..., rN, iN-1, .., i2, i1] - // to vDSP packed format [ r0, rN, r1, i1, ..., rN-1, iN-1 ] - s->out[0] = compspec->data[0]; - s->out[1] = compspec->data[s->winsize / 2]; - for (i = 1; i < s->fft_size / 2; i++) { - s->out[2 * i] = compspec->data[i]; - s->out[2 * i + 1] = compspec->data[s->winsize - i]; - } - // convert to split complex format used in vDSP - aubio_vDSP_ctoz((aubio_DSPComplex*)s->out, 2, &s->spec, 1, s->fft_size/2); - // compute the FFT - aubio_vDSP_DFT_Execute(s->fftSetupBwd, s->spec.realp, s->spec.imagp, - s->spec.realp, s->spec.imagp); - // convert result to real output - aubio_vDSP_ztoc(&s->spec, 1, (aubio_DSPComplex*)output->data, 2, s->fft_size/2); - // apply scaling - smpl_t scale = 1.0 / s->winsize; - aubio_vDSP_vsmul(output->data, 1, &scale, output->data, 1, s->fft_size); - -#elif defined HAVE_INTEL_IPP // using Intel IPP - - // convert from real imag [ r0, 0, ..., rN, iN-1, .., i2, i1, iN-1] to complex format - s->complexOut[0].re = compspec->data[0]; - s->complexOut[0].im = 0; - s->complexOut[s->fft_size / 2].re = compspec->data[s->fft_size / 2]; - s->complexOut[s->fft_size / 2].im = 0.0; - for (i = 1; i < s->fft_size / 2; i++) { - s->complexOut[i].re = compspec->data[i]; - s->complexOut[i].im = compspec->data[s->fft_size - i]; - } - // apply fft - aubio_ippsFFTInv_CCSToR((const aubio_IppFloat *)s->complexOut, output->data, s->fftSpec, s->memBuffer); - // apply scaling - aubio_ippsMulC(output->data, 1.0 / s->winsize, output->data, s->fft_size); - -#else // using OOURA - smpl_t scale = 2.0 / s->winsize; - s->out[0] = compspec->data[0]; - s->out[1] = compspec->data[s->winsize / 2]; - for (i = 1; i < s->fft_size - 1; i++) { - s->out[2 * i] = compspec->data[i]; - s->out[2 * i + 1] = - compspec->data[s->winsize - i]; - } - aubio_ooura_rdft(s->winsize, -1, s->out, s->ip, s->w); - for (i=0; i < s->winsize; i++) { - output->data[i] = s->out[i] * scale; - } -#endif } void aubio_fft_get_spectrum(const fvec_t * compspec, cvec_t * spectrum) { @@ -505,42 +184,22 @@ void aubio_fft_get_phas(const fvec_t * compspec, cvec_t * spectrum) { } else { spectrum->phas[0] = 0.; } -#if defined(HAVE_INTEL_IPP) - // convert from real imag [ r0, r1, ..., rN, iN-1, ..., i2, i1, i0] - // to [ r0, r1, ..., rN, i0, i1, i2, ..., iN-1] - for (i = 1; i < spectrum->length / 2; i++) { - ELEM_SWAP(compspec->data[compspec->length - i], - compspec->data[spectrum->length + i - 1]); - } - aubio_ippsAtan2(compspec->data + spectrum->length, - compspec->data + 1, spectrum->phas + 1, spectrum->length - 1); - // revert the imaginary part back again - for (i = 1; i < spectrum->length / 2; i++) { - ELEM_SWAP(compspec->data[spectrum->length + i - 1], - compspec->data[compspec->length - i]); - } -#else for (i=1; i < spectrum->length - 1; i++) { spectrum->phas[i] = ATAN2(compspec->data[compspec->length-i], compspec->data[i]); } -#endif -#ifdef HAVE_FFTW3 // for even length only, make sure last element is 0 or PI if (2 * (compspec->length / 2) == compspec->length) { -#endif if (compspec->data[compspec->length/2] < 0) { spectrum->phas[spectrum->length - 1] = PI; } else { spectrum->phas[spectrum->length - 1] = 0.; } -#ifdef HAVE_FFTW3 } else { i = spectrum->length - 1; spectrum->phas[i] = ATAN2(compspec->data[compspec->length-i], compspec->data[i]); } -#endif } void aubio_fft_get_norm(const fvec_t * compspec, cvec_t * spectrum) { @@ -550,19 +209,15 @@ void aubio_fft_get_norm(const fvec_t * compspec, cvec_t * spectrum) { spectrum->norm[i] = SQRT(SQR(compspec->data[i]) + SQR(compspec->data[compspec->length - i]) ); } -#ifdef HAVE_FFTW3 // for even length, make sure last element is > 0 if (2 * (compspec->length / 2) == compspec->length) { -#endif spectrum->norm[spectrum->length-1] = ABS(compspec->data[compspec->length/2]); -#ifdef HAVE_FFTW3 } else { i = spectrum->length - 1; spectrum->norm[i] = SQRT(SQR(compspec->data[i]) + SQR(compspec->data[compspec->length - i]) ); } -#endif } void aubio_fft_get_imag(const cvec_t * spectrum, fvec_t * compspec) { diff --git a/dpf b/dpf index 081d4d73..dba284c2 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 081d4d7392ef587f46dc3b216369655828bbda7f +Subproject commit dba284c267c74b12338a576c609885553c19552e From e91ad350b4617e815b1ae3beb9624d3609b5d1f6 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 20:29:25 +0100 Subject: [PATCH 033/283] Fix PathSet Nudge colors; Import AudibleInstruments fixes Signed-off-by: falkTX --- .github/workflows/build.yml | 2 +- deps/PawPaw | 2 +- plugins/AudibleInstruments | 2 +- src/custom/dep.cpp | 105 +++++++++++++++++++++--------------- 4 files changed, 65 insertions(+), 46 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 56120197..a0b9c411 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: env: - CACHE_VERSION: 22 + CACHE_VERSION: 23 DEBIAN_FRONTEND: noninteractive HOMEBREW_NO_AUTO_UPDATE: 1 LIBGL_ALWAYS_SOFTWARE: 'true' diff --git a/deps/PawPaw b/deps/PawPaw index dbdcdb38..6c11b17d 160000 --- a/deps/PawPaw +++ b/deps/PawPaw @@ -1 +1 @@ -Subproject commit dbdcdb38a1cfe1487fb7f1a072cba24e4270ee43 +Subproject commit 6c11b17d5f794c224fd0ee8aa872c54e36279123 diff --git a/plugins/AudibleInstruments b/plugins/AudibleInstruments index fec73bc2..6833adeb 160000 --- a/plugins/AudibleInstruments +++ b/plugins/AudibleInstruments @@ -1 +1 @@ -Subproject commit fec73bc29fc3771d23e6ea03132597774f61c92e +Subproject commit 6833adeb7141a06151c9ee7059cc43d3c854c96d diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index 7f7375fe..25f67a67 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -451,56 +451,75 @@ static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const c // Special case for PathSet colors if (svgFileToInvert != nullptr && std::strncmp(svgFileToInvert, "/PathSet/", 9) == 0) { - switch (paint.color) + // only invert main colors for Nudge.svg + if (std::strcmp(svgFileToInvert, "/PathSet/res/Nudge.svg") == 0) { - // main blue tone - case 0xffdf7a1a: - if (shape->opacity == 0.5f && std::strcmp(svgFileToInvert, "/PathSet/res/AstroVibe.svg") == 0) + switch (paint.color) { - shape->opacity = 0.2f; + case 0xffe6e6e6: + paint.color = 0xff191919; + return true; + case 0xff000000: + paint.color = 0xffffffff; return true; + default: + return false; } - if (shape->opacity == 0.25f) - shape->opacity = 0.75f; - return false; - // bottom logo stuff, set to full white - case 0xff000000: - if (shape->stroke.type != NSVG_PAINT_NONE) + } + // everything else + else + { + switch (paint.color) { - paint.color = 0xffffffff; + // main blue tone + case 0xffdf7a1a: + if (shape->opacity == 0.5f && std::strcmp(svgFileToInvert, "/PathSet/res/AstroVibe.svg") == 0) + { + shape->opacity = 0.2f; + return true; + } + if (shape->opacity == 0.25f) + shape->opacity = 0.75f; + return false; + // bottom logo stuff, set to full white + case 0xff000000: + if (shape->stroke.type != NSVG_PAINT_NONE) + { + paint.color = 0xffffffff; + return true; + } + break; + // pink step 2 (pink with 50% opacity on bg) + case 0xffef73ea: + paint.color = 0xff812d7d; + return true; + // pink step 3 (pink with 33.3% opacity on bg) + case 0xfff49ff0: + paint.color = 0xff4d234c; + return true; + // pink and orange + case 0xffe941e2: + case 0xff698efb: + return false; + // blue darker 1 (blue with 50% opacity on bg) + case 0xffde944f: + case 0xffe3b080: + case 0xffe4cbb3: + case 0xfff5c99f: + case 0xfff6d1b0: + paint.color = 0xff7c4919; + return true; + // blue darker 2 (blue with 33.3% opacity on bg) + case 0xffe5d9cd: + case 0xfff8dcc2: + case 0xffe1a265: + paint.color = 0xff5b3a1a; + return true; + // blue darker 3 (blue with 25% opacity on bg) + case 0xffe5cbb3: + paint.color = 0xff4b321a; return true; } - break; - // pink step 2 (pink with 50% opacity on bg) - case 0xffef73ea: - paint.color = 0xff812d7d; - return true; - // pink step 3 (pink with 33.3% opacity on bg) - case 0xfff49ff0: - paint.color = 0xff4d234c; - return true; - // pink and orange - case 0xffe941e2: - case 0xff698efb: - return false; - // blue darker 1 (blue with 50% opacity on bg) - case 0xffde944f: - case 0xffe3b080: - case 0xffe4cbb3: - case 0xfff5c99f: - case 0xfff6d1b0: - paint.color = 0xff7c4919; - return true; - // blue darker 2 (blue with 33.3% opacity on bg) - case 0xffe5d9cd: - case 0xfff8dcc2: - case 0xffe1a265: - paint.color = 0xff5b3a1a; - return true; - // blue darker 3 (blue with 25% opacity on bg) - case 0xffe5cbb3: - paint.color = 0xff4b321a; - return true; } } From e00515e69bfede42e075df5e5a750490111cc2fc Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 21:36:26 +0100 Subject: [PATCH 034/283] Fix DrumKit Sequencer memory corruption Signed-off-by: falkTX --- plugins/DrumKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/DrumKit b/plugins/DrumKit index 8d78f221..7681d30a 160000 --- a/plugins/DrumKit +++ b/plugins/DrumKit @@ -1 +1 @@ -Subproject commit 8d78f221927f5aa75d99e4fb8a6b8750141e0933 +Subproject commit 7681d30ac0b9246605d3d8d71dc7e25030748ec6 From c89affd980afe3623ca15f2b44ae3d576e0e9481 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 21:36:50 +0100 Subject: [PATCH 035/283] Fix vst2 plugin path in debugging docs Signed-off-by: falkTX --- docs/DEBUGGING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/DEBUGGING.md b/docs/DEBUGGING.md index 9cd50718..27abd547 100644 --- a/docs/DEBUGGING.md +++ b/docs/DEBUGGING.md @@ -12,7 +12,7 @@ By default carla-discovery will do 1 audio processing/run block for testing, whi ``` valgrind --leak-check=full --track-origins=yes --suppressions=./dpf/utils/valgrind-dpf.supp \ -/usr/lib/carla/carla-discovery-native vst2 ./bin/CardinalFX.vst/CardinalFX.so +/usr/lib/carla/carla-discovery-native vst2 ./bin/Cardinal.vst/CardinalFX.so ``` ## Plugin usage @@ -26,5 +26,5 @@ It is recommended to remove all modules from the Rack except for the strictly ne ``` env CARLA_BRIDGE_DUMMY=30 \ valgrind --leak-check=full --track-origins=yes --suppressions=./dpf/utils/valgrind-dpf.supp \ -/usr/lib/carla/carla-bridge-native vst2 ./bin/CardinalFX.vst/CardinalFX.so "" +/usr/lib/carla/carla-bridge-native vst2 ./bin/Cardinal.vst/CardinalFX.so "" ``` From b296259bde0ed5e5aa6481070d451eb7e1bd67d5 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 22:03:14 +0100 Subject: [PATCH 036/283] Fix Audio2 meters stuck state when both L & R are disconnected Signed-off-by: falkTX --- plugins/Cardinal/src/HostAudio.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/Cardinal/src/HostAudio.cpp b/plugins/Cardinal/src/HostAudio.cpp index 35559636..384e5b95 100644 --- a/plugins/Cardinal/src/HostAudio.cpp +++ b/plugins/Cardinal/src/HostAudio.cpp @@ -158,7 +158,17 @@ struct HostAudio2 : HostAudio<2> { void processTerminalOutput(const ProcessArgs&) override { if (!in1connected && !in2connected) + { +#ifndef HEADLESS + if (resetMeters) + { + internalDataFrame = 0; + gainMeterL = gainMeterR = 0.0f; + resetMeters = false; + } +#endif return; + } const uint32_t bufferSize = pcontext->bufferSize; From c580405fa201846adcc953a1e351dc5c55cae5dc Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 22:23:38 +0100 Subject: [PATCH 037/283] Fix mscHack PingPong filter cutoff value when loaded without GUI Signed-off-by: falkTX --- plugins/mscHack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/mscHack b/plugins/mscHack index cf6b1aa5..80883512 160000 --- a/plugins/mscHack +++ b/plugins/mscHack @@ -1 +1 @@ -Subproject commit cf6b1aa5ae47a9e56a0f2ddb0c1aa54927134fb5 +Subproject commit 80883512cc397c173e40e3bc014640b838ab343a From fd6cd85f309db9429f9bf0eaccbcee91ff42d54b Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 14 May 2022 22:25:52 +0100 Subject: [PATCH 038/283] Fix macOS AU build (add new libaubio.a for linking) Signed-off-by: falkTX --- jucewrapper/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 62cffa7b..26bd6ce0 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -58,6 +58,9 @@ set_property(TARGET sPlugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/. add_library(sRack STATIC IMPORTED) set_property(TARGET sRack PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/rack.a") +add_library(libaubio STATIC IMPORTED) +set_property(TARGET libaubio PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../deps/aubio/libaubio.a") + add_library(libarchive STATIC IMPORTED) if (WIN32) set_property(TARGET libarchive PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libarchive_static.a") @@ -167,6 +170,7 @@ target_link_libraries(CardinalFX water zita_resampler dgl + libaubio libarchive libjansson libquickjs @@ -254,6 +258,7 @@ target_link_libraries(CardinalSynth water zita_resampler dgl + libaubio libarchive libjansson libquickjs From 1cb5fa39d3bb38588c8895ab3ad842d39dbfc6f7 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 15 May 2022 00:05:55 +0100 Subject: [PATCH 039/283] Deal with buffer size only in activate --- src/CardinalPlugin.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index a4c56ca7..67674040 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -1075,11 +1075,12 @@ class CardinalPlugin : public CardinalBasePlugin void activate() override { + context->bufferSize = getBufferSize(); + #if DISTRHO_PLUGIN_NUM_INPUTS != 0 - const uint32_t bufferSize = getBufferSize(); fAudioBufferCopy = new float*[DISTRHO_PLUGIN_NUM_INPUTS]; for (int i=0; ibufferSize]; #endif fNextExpectedFrame = 0; @@ -1183,12 +1184,6 @@ class CardinalPlugin : public CardinalBasePlugin fWasBypassed = bypassed; } - void bufferSizeChanged(const uint32_t newBufferSize) override - { - rack::contextSet(context); - context->bufferSize = newBufferSize; - } - void sampleRateChanged(const double newSampleRate) override { rack::contextSet(context); From 879d0862d893b7bc460edf415f734be3f44644ee Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 15 May 2022 00:38:32 +0100 Subject: [PATCH 040/283] Mute audio output if bypassed --- plugins/Cardinal/src/HostAudio.cpp | 5 ++++- plugins/Cardinal/src/HostCV.cpp | 8 +++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/plugins/Cardinal/src/HostAudio.cpp b/plugins/Cardinal/src/HostAudio.cpp index 384e5b95..482a8f45 100644 --- a/plugins/Cardinal/src/HostAudio.cpp +++ b/plugins/Cardinal/src/HostAudio.cpp @@ -157,7 +157,7 @@ struct HostAudio2 : HostAudio<2> { void processTerminalOutput(const ProcessArgs&) override { - if (!in1connected && !in2connected) + if (pcontext->bypassed || (!in1connected && !in2connected)) { #ifndef HEADLESS if (resetMeters) @@ -258,6 +258,9 @@ struct HostAudio8 : HostAudio<8> { void processTerminalOutput(const ProcessArgs&) override { + if (pcontext->bypassed) + return; + const uint32_t bufferSize = pcontext->bufferSize; // only incremented on output diff --git a/plugins/Cardinal/src/HostCV.cpp b/plugins/Cardinal/src/HostCV.cpp index 9626219f..7f23b47e 100644 --- a/plugins/Cardinal/src/HostCV.cpp +++ b/plugins/Cardinal/src/HostCV.cpp @@ -26,6 +26,7 @@ USE_NAMESPACE_DISTRHO; struct HostCV : TerminalModule { CardinalPluginContext* const pcontext; + bool bypassed = false; int dataFrame = 0; uint32_t lastProcessCounter = 0; @@ -70,6 +71,7 @@ struct HostCV : TerminalModule { // only checked on input if (lastProcessCounter != processCounter) { + bypassed = isBypassed(); dataFrame = 0; lastProcessCounter = processCounter; } @@ -78,7 +80,7 @@ struct HostCV : TerminalModule { const uint32_t k = dataFrame; DISTRHO_SAFE_ASSERT_RETURN(k < bufferSize,); - if (isBypassed()) + if (bypassed) { for (int i=0; i<10; ++i) outputs[i].setVoltage(0.0f); @@ -100,7 +102,7 @@ struct HostCV : TerminalModule { void processTerminalOutput(const ProcessArgs&) override { - if (pcontext->variant != kCardinalVariantMain) + if (pcontext->variant != kCardinalVariantMain || pcontext->bypassed) return; const uint32_t bufferSize = pcontext->bufferSize; @@ -109,7 +111,7 @@ struct HostCV : TerminalModule { const uint32_t k = dataFrame++; DISTRHO_SAFE_ASSERT_RETURN(k < bufferSize,); - if (isBypassed()) + if (bypassed) return; float** const dataOuts = pcontext->dataOuts; From ec7e6b231e10c441a579cee4339bc3c7a2d9b4cd Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 15 May 2022 01:16:23 +0100 Subject: [PATCH 041/283] Fail build if wrong macOS target used, fix macOS AU (missing fftw) --- .github/workflows/build.yml | 6 +++--- deps/Makefile | 7 +++++++ jucewrapper/CMakeLists.txt | 3 +++ jucewrapper/CardinalWrapper.cpp | 5 +++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a0b9c411..3f5f0951 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: env: - CACHE_VERSION: 23 + CACHE_VERSION: 24 DEBIAN_FRONTEND: noninteractive HOMEBREW_NO_AUTO_UPDATE: 1 LIBGL_ALWAYS_SOFTWARE: 'true' @@ -451,7 +451,7 @@ jobs: git clone --depth=1 -b master https://github.com/juce-framework/JUCE.git jucewrapper/JUCE sed -i -e 's/kAudioUnitProperty_SupportsMPE/kAudioUnitProperty_ignore_SupportsMPE/' jucewrapper/JUCE/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h mkdir -p jucewrapper/build - pushd jucewrapper/build; cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8 -DCMAKE_BUILD_TYPE=Release .. && make -j $(sysctl -n hw.logicalcpu); popd + pushd jucewrapper/build; cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8 -DCMAKE_BUILD_TYPE=Release .. && make VERBOSE=1 -j $(sysctl -n hw.logicalcpu); popd mv jucewrapper/build/*_artefacts/Release/AU/*.component bin/ - name: Build macOS intel (packaging) run: | @@ -539,7 +539,7 @@ jobs: pushd deps/PawPaw; source local.env macos-universal; popd git clone --depth=1 -b master https://github.com/juce-framework/JUCE.git jucewrapper/JUCE mkdir -p jucewrapper/build - pushd jucewrapper/build; cmake -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64' -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12 -DCMAKE_BUILD_TYPE=Release .. && make -j $(sysctl -n hw.logicalcpu); popd + pushd jucewrapper/build; cmake -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64' -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12 -DCMAKE_BUILD_TYPE=Release .. && make VERBOSE=1 -j $(sysctl -n hw.logicalcpu); popd mv jucewrapper/build/*_artefacts/Release/AU/*.component bin/ - name: Build macOS universal (packaging) run: | diff --git a/deps/Makefile b/deps/Makefile index 876e2ebf..94b15c19 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -99,12 +99,18 @@ CMAKE += -DCMAKE_INSTALL_PREFIX='$(DEP_PATH)' CMAKE += -DBUILD_SHARED_LIBS=OFF # make sure macOS target matches ours +ifeq ($(MACOS),true) ifneq (,$(findstring -arch$(SPACE),$(CXXFLAGS))) CMAKE += -DCMAKE_OSX_ARCHITECTURES='$(subst $(SPACE),;,$(subst -arch=,,$(filter -arch=%,$(subst -arch$(SPACE),-arch=,$(CXXFLAGS)))))' +else ifeq ($(CIBUILD),true) +$(error CI build requires -march flag on macOS) endif ifneq (,$(findstring -mmacosx-version-min=,$(CXXFLAGS))) export MACOSX_DEPLOYMENT_TARGET = $(subst -mmacosx-version-min=,,$(filter -mmacosx-version-min=%,$(CXXFLAGS))) CMAKE += -DCMAKE_OSX_DEPLOYMENT_TARGET=$(MACOSX_DEPLOYMENT_TARGET) +else ifeq ($(CIBUILD),true) +$(error CI build requires -mmacosx-version-min flag on macOS) +endif endif # make sure debug/release matches @@ -151,6 +157,7 @@ DEP_MAKE += CONFIGURE="$(CONFIGURE)" DEP_MAKE += DEP_FLAGS="$(BASE_FLAGS)" DEP_MAKE += DEP_MAC_SDK_FLAGS= DEP_MAKE += MACHINE=$(MACHINE)$(MACHINE_SUFFIX) +DEP_MAKE += VERBOSE=1 ifeq ($(MACOS),true) DEP_MAKE += SHA256SUM="shasum5.28 -a 256" diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 26bd6ce0..8f564a66 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -86,6 +86,7 @@ set_property(TARGET libzstd PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/.. # dependencies find_package(PkgConfig REQUIRED) +pkg_check_modules(FFTW3F REQUIRED fftw3f) pkg_check_modules(LIBLO REQUIRED liblo) pkg_check_modules(SNDFILE REQUIRED sndfile) @@ -181,6 +182,7 @@ target_link_libraries(CardinalFX ${GL_LIBRARIES} ${DBUS_LIBRARIES} -L${LIBLO_LIBRARY_DIRS} + ${FFTW3F_LIBRARIES} ${LIBLO_LIBRARIES} ${SNDFILE_LIBRARIES} ${X11_LIBRARIES} @@ -269,6 +271,7 @@ target_link_libraries(CardinalSynth ${GL_LIBRARIES} ${DBUS_LIBRARIES} -L${LIBLO_LIBRARY_DIRS} + ${FFTW3F_LIBRARIES} ${LIBLO_LIBRARIES} ${SNDFILE_LIBRARIES} ${X11_LIBRARIES} diff --git a/jucewrapper/CardinalWrapper.cpp b/jucewrapper/CardinalWrapper.cpp index c4da989a..f0b305f6 100644 --- a/jucewrapper/CardinalWrapper.cpp +++ b/jucewrapper/CardinalWrapper.cpp @@ -17,6 +17,11 @@ #include +#include +#if MAC_OS_X_VERSION_MAX_ALLOWED > 101200 + #error unwanted macOS version, too new +#endif + #define createPlugin createStaticPlugin #include "src/DistrhoPluginInternal.hpp" #include "src/DistrhoUIInternal.hpp" From 4f2550df5cb95b0b7950f7fe1b85d846554bedee Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 15 May 2022 05:56:49 +0100 Subject: [PATCH 042/283] Rework lv2export approach, get things to actually work Tested to work with 3 plugins so far Signed-off-by: falkTX --- lv2export/Makefile | 194 ++-- lv2export/dep2.cpp | 272 ----- lv2export/export.cpp | 115 +++ lv2export/includes/asset.hpp | 0 lv2export/includes/rack.hpp | 1103 +++++++++++++++++++++ lv2export/includes/settings.hpp | 0 lv2export/lv2plugin.cpp | 141 +-- lv2export/lv2ttl/chow-chorus.ttl | 64 -- lv2export/manifest.ttl.in | 6 +- lv2export/plugins/msm-phaser.cpp | 25 + lv2export/plugins/rackwindows-mv.cpp | 25 + lv2export/plugins/rackwindows-vibrato.cpp | 25 + lv2export/test.cpp | 123 --- 13 files changed, 1416 insertions(+), 677 deletions(-) delete mode 100644 lv2export/dep2.cpp create mode 100644 lv2export/export.cpp create mode 100644 lv2export/includes/asset.hpp create mode 100644 lv2export/includes/rack.hpp create mode 100644 lv2export/includes/settings.hpp delete mode 100644 lv2export/lv2ttl/chow-chorus.ttl create mode 100644 lv2export/plugins/msm-phaser.cpp create mode 100644 lv2export/plugins/rackwindows-mv.cpp create mode 100644 lv2export/plugins/rackwindows-vibrato.cpp delete mode 100644 lv2export/test.cpp diff --git a/lv2export/Makefile b/lv2export/Makefile index 0549e88d..c5b8ce2b 100644 --- a/lv2export/Makefile +++ b/lv2export/Makefile @@ -14,6 +14,7 @@ SYSDEPS ?= false # -------------------------------------------------------------- # Import base definitions +USE_NANOVG_FBO = true include ../dpf/Makefile.base.mk # -------------------------------------------------------------- @@ -21,9 +22,6 @@ include ../dpf/Makefile.base.mk BUILD_DIR = ../build/lv2export -BASE_FLAGS += -DHEADLESS -BASE_FLAGS += -DPRIVATE= - ifeq ($(MACOS),true) BASE_FLAGS += -DARCH_MAC else ifeq ($(WINDOWS),true) @@ -32,120 +30,77 @@ else BASE_FLAGS += -DARCH_LIN endif -BASE_FLAGS += -fno-finite-math-only -# BASE_FLAGS += -I../dpf/dgl -BASE_FLAGS += -I../dpf/dgl/src/nanovg -BASE_FLAGS += -I../dpf/distrho -BASE_FLAGS += -I../include -BASE_FLAGS += -I../include/neon-compat -BASE_FLAGS += -I../src/Rack/include -ifeq ($(SYSDEPS),true) -BASE_FLAGS += -DCARDINAL_SYSDEPS -BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp) -else -BASE_FLAGS += -DZSTDLIB_VISIBILITY= -BASE_FLAGS += -I../src/Rack/dep/include -endif -BASE_FLAGS += -I../src/Rack/dep/filesystem/include -BASE_FLAGS += -I../src/Rack/dep/fuzzysearchdatabase/src -BASE_FLAGS += -I../src/Rack/dep/glfw/include -BASE_FLAGS += -I../src/Rack/dep/nanosvg/src -# BASE_FLAGS += -IRack/dep/osdialog -BASE_FLAGS += -I../src/Rack/dep/oui-blendish -BASE_FLAGS += -I../src/Rack/dep/pffft -BASE_FLAGS += -pthread - -ifeq ($(WINDOWS),true) -BASE_FLAGS += -D_USE_MATH_DEFINES -BASE_FLAGS += -DWIN32_LEAN_AND_MEAN -BASE_FLAGS += -I../include/mingw-compat -BASE_FLAGS += -I../include/mingw-std-threads +ifeq ($(DEBUG),true) +BASE_FLAGS += -UDEBUG endif +# BASE_FLAGS += -DHEADLESS +# BASE_FLAGS += -DPRIVATE= +# +# BASE_FLAGS += -fno-finite-math-only +# # BASE_FLAGS += -I../dpf/dgl +# BASE_FLAGS += -I../dpf/dgl/src/nanovg +# BASE_FLAGS += -I../dpf/distrho +# BASE_FLAGS += -I../include +# BASE_FLAGS += -I../include/neon-compat +# BASE_FLAGS += -I../src/Rack/include +# ifeq ($(SYSDEPS),true) +# BASE_FLAGS += -DCARDINAL_SYSDEPS +# BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp) +# else +# BASE_FLAGS += -DZSTDLIB_VISIBILITY= +# BASE_FLAGS += -I../src/Rack/dep/include +# endif +# BASE_FLAGS += -I../src/Rack/dep/filesystem/include +# BASE_FLAGS += -I../src/Rack/dep/fuzzysearchdatabase/src +# BASE_FLAGS += -I../src/Rack/dep/glfw/include +# BASE_FLAGS += -I../src/Rack/dep/nanosvg/src +# # BASE_FLAGS += -IRack/dep/osdialog +# BASE_FLAGS += -I../src/Rack/dep/oui-blendish +# BASE_FLAGS += -I../src/Rack/dep/pffft +# BASE_FLAGS += -pthread +# +# ifeq ($(WINDOWS),true) +# BASE_FLAGS += -D_USE_MATH_DEFINES +# BASE_FLAGS += -DWIN32_LEAN_AND_MEAN +# BASE_FLAGS += -I../include/mingw-compat +# BASE_FLAGS += -I../include/mingw-std-threads +# endif + # -------------------------------------------------------------- # lots of warnings from VCV side -BASE_FLAGS += -Wno-unused-but-set-variable BASE_FLAGS += -Wno-unused-parameter -BASE_FLAGS += -Wno-unused-result BASE_FLAGS += -Wno-unused-variable -ifeq ($(MACOS),true) -BASE_FLAGS += -Wno-unknown-warning-option -endif - # -------------------------------------------------------------- -# extra linker flags - -LINK_FLAGS += -pthread +# also from plugins -ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS),true) -LINK_FLAGS += -ldl -endif +BASE_FLAGS += -Wno-deprecated-declarations +BASE_FLAGS += -Wno-implicit-fallthrough ifeq ($(MACOS),true) -LINK_FLAGS += -framework IOKit -else ifeq ($(WINDOWS),true) -# needed by VCVRack -EXTRA_LIBS += -ldbghelp -lshlwapi -# needed by JW-Modules -EXTRA_LIBS += -lws2_32 -lwinmm -endif - -ifeq ($(SYSDEPS),true) -EXTRA_LIBS += $(shell pkg-config --libs jansson libarchive samplerate speexdsp) +BASE_FLAGS += -Wno-unknown-warning-option endif # -------------------------------------------------------------- -# Build files - -# BUILD_FILES += test.cpp -# BUILD_FILES = dep.cpp -BUILD_FILES += dep2.cpp -BUILD_FILES += ../src/override/context.cpp -BUILD_FILES += ../src/override/RemoteNanoVG.cpp -BUILD_FILES += ../src/Rack/src/logger.cpp -BUILD_FILES += ../src/Rack/src/random.cpp -BUILD_FILES += ../src/Rack/src/string.cpp -BUILD_FILES += ../src/Rack/src/system.cpp -BUILD_FILES += ../src/Rack/src/tinyexpr.c -BUILD_FILES += ../src/Rack/src/Quantity.cpp -BUILD_FILES += ../src/Rack/src/engine/Module.cpp -BUILD_FILES += ../src/Rack/src/engine/ParamQuantity.cpp -BUILD_FILES += ../src/Rack/src/engine/PortInfo.cpp -BUILD_FILES += ../src/Rack/dep/pffft/pffft.c -BUILD_FILES += ../src/Rack/dep/pffft/fftpack.c - -BUILD_OBJS = $(BUILD_FILES:%=$(BUILD_DIR)/%.o) - -# ChowDSP Chorus -BUILD_OBJS += $(BUILD_DIR)/lv2plugin/chowdsp-chorus.o -BUILD_OBJS += $(BUILD_DIR)/plugin/ChowDSP/ChowChorus/ChowChorus.cpp.o -BUILD_OBJS += $(BUILD_DIR)/plugin/ChowDSP/ChowChorus/BBDDelayLine.cpp.o -BUILD_OBJS += $(BUILD_DIR)/plugin/ChowDSP/shared/SineWave.cpp.o -BUILD_OBJS += $(BUILD_DIR)/plugin/ChowDSP/plugin.cpp.o - -# EXTRA_LIBS = ../plugins/plugins.a - -ifneq ($(SYSDEPS),true) -EXTRA_LIBS += ../src/Rack/dep/lib/libjansson.a -EXTRA_LIBS += ../src/Rack/dep/lib/libsamplerate.a -EXTRA_LIBS += ../src/Rack/dep/lib/libspeexdsp.a -ifeq ($(WINDOWS),true) -EXTRA_LIBS += ../src/Rack/dep/lib/libarchive_static.a -else -EXTRA_LIBS += ../src/Rack/dep/lib/libarchive.a -endif -EXTRA_LIBS += ../src/Rack/dep/lib/libzstd.a -endif +# stuff to include + +BUILD_CXX_FLAGS += -I. +BUILD_CXX_FLAGS += -Iincludes +BUILD_CXX_FLAGS += -I../dpf/distrho +BUILD_CXX_FLAGS += -I../plugins # -------------------------------------------------------------- # Build targets -TARGETS = ../bin/CardinalModules.lv2/manifest.ttl -TARGETS += ../bin/CardinalModules.lv2/plugins$(LIB_EXT) +PLUGINS = $(subst plugins/,,$(subst .cpp,,$(wildcard plugins/*.cpp))) -all: $(TARGETS) +BINARIES = $(PLUGINS:%=../bin/cardinal-%.lv2/plugin$(LIB_EXT)) +RESOURCES = $(PLUGINS:%=../bin/cardinal-%.lv2/manifest.ttl) +RESOURCES += $(PLUGINS:%=../bin/cardinal-%.lv2/plugin.ttl) + +all: $(BINARIES) $(RESOURCES) clean: rm -f $(TARGETS) $(BUILD_OBJS) @@ -153,44 +108,31 @@ clean: # -------------------------------------------------------------- # Build commands -../bin/CardinalModules.lv2/manifest.ttl: manifest.ttl.in - -@mkdir -p $(shell dirname $@) - sed -e "s/@LIB_EXT@/$(LIB_EXT)/" $< > $@ - # FIXME wildcard install - install -m 644 lv2ttl/* ../bin/CardinalModules.lv2/ - -../bin/CardinalModules.lv2/plugins$(LIB_EXT): $(BUILD_OBJS) +../bin/cardinal-%.lv2/manifest.ttl: manifest.ttl.in -@mkdir -p $(shell dirname $@) - $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(SHARED) -o $@ + sed -e "s/@LIB_EXT@/$(LIB_EXT)/" -e "s/@SLUG@/$*/" $< > $@ -$(BUILD_DIR)/%.c.o: %.c - -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" - @echo "Compiling $<" - $(SILENT)$(CC) $< $(BUILD_C_FLAGS) -c -o $@ +../bin/cardinal-%.lv2/plugin.ttl: ../bin/cardinal-%.lv2/plugin$(LIB_EXT) + ../dpf/utils/lv2_ttl_generator$(APP_EXT) $^ | tail -n +2 > $@ -$(BUILD_DIR)/%.cpp.o: %.cpp - -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" - @echo "Compiling $<" - $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ +../bin/cardinal-%.lv2/plugin$(LIB_EXT): $(BUILD_DIR)/%.cpp.o + -@mkdir -p $(shell dirname $@) + $(SILENT)$(CXX) $< $(LINK_FLAGS) $(SHARED) -o $@ # -------------------------------------------------------------- -$(BUILD_DIR)/lv2plugin/chowdsp-chorus.o: lv2plugin.cpp - -@mkdir -p "$(shell dirname $@)" - @echo "Compiling $< (ChowDSP Chorus)" - $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -UPRIVATE -c -o $@ \ - -DPLUGIN_INSTANCE=pluginInstance__ChowDSP \ - -DPLUGIN_MODEL=modelChowChorus \ - -DPLUGIN_URI='"urn:cardinal:chow:chorus"' +# $(BUILD_DIR)/valleyaudio-plateau.cpp.o: plugins/valleyaudio-plateau.cpp +# -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" +# @echo "Compiling $<" +# $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -DSLUG='"$*"' -c -o $@ -$(BUILD_DIR)/plugin/ChowDSP/%.o: ../plugins/ChowDSP/src/% - -@mkdir -p "$(shell dirname $@)" - @echo "Compiling $< (ChowDSP Chorus)" - $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -UPRIVATE -c -o $@ \ - -DpluginInstance=pluginInstance__ChowDSP +$(BUILD_DIR)/%.cpp.o: plugins/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -DSLUG='"$*"' -c -o $@ # -------------------------------------------------------------- --include $(BUILD_OBJS:%.o=%.d) +-include $(PLUGINS:%=$(BUILD_DIR)/%.cpp.d) # -------------------------------------------------------------- diff --git a/lv2export/dep2.cpp b/lv2export/dep2.cpp deleted file mode 100644 index ecf7cfbf..00000000 --- a/lv2export/dep2.cpp +++ /dev/null @@ -1,272 +0,0 @@ -/* - * DISTRHO Cardinal Plugin - * Copyright (C) 2021 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * For a full copy of the GNU General Public License see the LICENSE file. - */ - -#define PRIVATE -#include - -#undef PRIVATE -#include - -using namespace rack; - -namespace rack { -namespace settings { -bool cpuMeter = false; -} -Exception::Exception(const char* format, ...) -{ - va_list args; - va_start(args, format); - msg = string::fV(format, args); - va_end(args); -} -namespace asset { -std::string plugin(plugin::Plugin* plugin, std::string filename) { return {}; } -std::string system(std::string filename) { return {}; } -} -namespace engine { -float Engine::getParamValue(Module* module, int paramId) { return 0.0f; } -float Engine::getParamSmoothValue(Module* module, int paramId) { return 0.0f; } -void Engine::setParamValue(Module* module, int paramId, float value) {} -void Engine::setParamSmoothValue(Module* module, int paramId, float value) {} -} -} - -namespace rack { -namespace app { - -Knob::Knob() {} -Knob::~Knob() {} -void Knob::initParamQuantity() {} -void Knob::onHover(const HoverEvent& e) {} -void Knob::onButton(const ButtonEvent& e) {} -void Knob::onDragStart(const DragStartEvent& e) {} -void Knob::onDragEnd(const DragEndEvent& e) {} -void Knob::onDragMove(const DragMoveEvent& e) {} -void Knob::onDragLeave(const DragLeaveEvent& e) {} -void Knob::onHoverScroll(const HoverScrollEvent& e) {} -void Knob::onLeave(const LeaveEvent& e) {} - -void LightWidget::draw(const DrawArgs& args) {} -void LightWidget::drawLayer(const DrawArgs& args, int layer) {} -void LightWidget::drawBackground(const DrawArgs& args) {} -void LightWidget::drawLight(const DrawArgs& args) {} -void LightWidget::drawHalo(const DrawArgs& args) {} - -ModuleLightWidget::~ModuleLightWidget() {} -engine::Light* ModuleLightWidget::getLight(int colorId) { return nullptr; } -engine::LightInfo* ModuleLightWidget::getLightInfo() { return nullptr; } -void ModuleLightWidget::createTooltip() {} -void ModuleLightWidget::destroyTooltip() {} -void ModuleLightWidget::step() {} -void ModuleLightWidget::onHover(const HoverEvent& e) {} -void ModuleLightWidget::onEnter(const EnterEvent& e) {} -void ModuleLightWidget::onLeave(const LeaveEvent& e) {} - -ModuleWidget::ModuleWidget() {} -ModuleWidget::~ModuleWidget() {} -plugin::Model* ModuleWidget::getModel() { return nullptr; } -void ModuleWidget::setModel(plugin::Model* model) {} -engine::Module* ModuleWidget::getModule() { return nullptr; } -void ModuleWidget::setModule(engine::Module* module) {} -widget::Widget* ModuleWidget::getPanel() { return nullptr; } -void ModuleWidget::setPanel(widget::Widget* panel) {} -void ModuleWidget::setPanel(std::shared_ptr svg) {} -void ModuleWidget::addParam(ParamWidget* param) {} -void ModuleWidget::addInput(PortWidget* input) {} -void ModuleWidget::addOutput(PortWidget* output) {} -ParamWidget* ModuleWidget::getParam(int paramId) { return nullptr; } -PortWidget* ModuleWidget::getInput(int portId) { return nullptr; } -PortWidget* ModuleWidget::getOutput(int portId) { return nullptr; } -std::vector ModuleWidget::getParams() { return {}; } -std::vector ModuleWidget::getPorts() { return {}; } -std::vector ModuleWidget::getInputs() { return {}; } -std::vector ModuleWidget::getOutputs() { return {}; } -void ModuleWidget::draw(const DrawArgs& args) {} -void ModuleWidget::drawLayer(const DrawArgs& args, int layer) {} -void ModuleWidget::onHover(const HoverEvent& e) {} -void ModuleWidget::onHoverKey(const HoverKeyEvent& e) {} -void ModuleWidget::onButton(const ButtonEvent& e) {} -void ModuleWidget::onDragStart(const DragStartEvent& e) {} -void ModuleWidget::onDragEnd(const DragEndEvent& e) {} -void ModuleWidget::onDragMove(const DragMoveEvent& e) {} -void ModuleWidget::onDragHover(const DragHoverEvent& e) {} -json_t* ModuleWidget::toJson() { return nullptr; } -void ModuleWidget::fromJson(json_t* rootJ) {} -bool ModuleWidget::pasteJsonAction(json_t* rootJ) { return false; } -void ModuleWidget::copyClipboard() {} -bool ModuleWidget::pasteClipboardAction() { return false; } -void ModuleWidget::load(std::string filename) {} -void ModuleWidget::loadAction(std::string filename) {} -void ModuleWidget::loadTemplate() {} -void ModuleWidget::loadDialog() {} -void ModuleWidget::save(std::string filename) {} -void ModuleWidget::saveTemplate() {} -void ModuleWidget::saveTemplateDialog() {} -bool ModuleWidget::hasTemplate() { return false; } -void ModuleWidget::clearTemplate() {} -void ModuleWidget::clearTemplateDialog() {} -void ModuleWidget::saveDialog() {} -void ModuleWidget::disconnect() {} -void ModuleWidget::resetAction() {} -void ModuleWidget::randomizeAction() {} -void ModuleWidget::appendDisconnectActions(history::ComplexAction* complexAction) {} -void ModuleWidget::disconnectAction() {} -void ModuleWidget::cloneAction(bool cloneCables) {} -void ModuleWidget::bypassAction(bool bypassed) {} -void ModuleWidget::removeAction() {} -void ModuleWidget::createContextMenu() {} -math::Vec& ModuleWidget::dragOffset() { static math::Vec r; return r; } -bool& ModuleWidget::dragEnabled() { static bool r; return r; } -math::Vec& ModuleWidget::oldPos() { static math::Vec r; return r; } -engine::Module* ModuleWidget::releaseModule() { return nullptr; } - -int MultiLightWidget::getNumColors() { return 0; } -void MultiLightWidget::addBaseColor(NVGcolor baseColor) {} -void MultiLightWidget::setBrightnesses(const std::vector& brightnesses) {} - -ParamWidget::ParamWidget() {} -ParamWidget::~ParamWidget() {} -engine::ParamQuantity* ParamWidget::getParamQuantity() { return nullptr; } -void ParamWidget::createTooltip() {} -void ParamWidget::destroyTooltip() {} -void ParamWidget::step() {} -void ParamWidget::draw(const DrawArgs& args) {} -void ParamWidget::onButton(const ButtonEvent& e) {} -void ParamWidget::onDoubleClick(const DoubleClickEvent& e) {} -void ParamWidget::onEnter(const EnterEvent& e) {} -void ParamWidget::onLeave(const LeaveEvent& e) {} -void ParamWidget::createContextMenu() {} -void ParamWidget::resetAction() {} - -PortWidget::PortWidget() {} -PortWidget::~PortWidget() {} -engine::Port* PortWidget::getPort() { return nullptr; } -engine::PortInfo* PortWidget::getPortInfo() { return nullptr; } -void PortWidget::createTooltip() {} -void PortWidget::destroyTooltip() {} -void PortWidget::createContextMenu() {} -void PortWidget::deleteTopCableAction() {} -void PortWidget::step() {} -void PortWidget::draw(const DrawArgs& args) {} -void PortWidget::onButton(const ButtonEvent& e) {} -void PortWidget::onEnter(const EnterEvent& e) {} -void PortWidget::onLeave(const LeaveEvent& e) {} -void PortWidget::onDragStart(const DragStartEvent& e) {} -void PortWidget::onDragEnd(const DragEndEvent& e) {} -void PortWidget::onDragDrop(const DragDropEvent& e) {} -void PortWidget::onDragEnter(const DragEnterEvent& e) {} -void PortWidget::onDragLeave(const DragLeaveEvent& e) {} - -SliderKnob::SliderKnob() {} -void SliderKnob::onHover(const HoverEvent& e) {} -void SliderKnob::onButton(const ButtonEvent& e) {} - -SvgKnob::SvgKnob() {} -void SvgKnob::setSvg(std::shared_ptr svg) {} -void SvgKnob::onChange(const ChangeEvent& e) {} - -SvgPort::SvgPort() {} -void SvgPort::setSvg(std::shared_ptr svg) {} - -SvgScrew::SvgScrew() {} -void SvgScrew::setSvg(std::shared_ptr svg) {} - -SvgSlider::SvgSlider() {} -void SvgSlider::setBackgroundSvg(std::shared_ptr svg) {} -void SvgSlider::setHandleSvg(std::shared_ptr svg) {} -void SvgSlider::setHandlePos(math::Vec minHandlePos, math::Vec maxHandlePos) {} -void SvgSlider::setHandlePosCentered(math::Vec minHandlePosCentered, math::Vec maxHandlePosCentered) {} -void SvgSlider::onChange(const ChangeEvent& e) {} - -} - -namespace engine { - -std::string LightInfo::getName() { return name; } -std::string LightInfo::getDescription() { return description; } - -} - -namespace widget { - -FramebufferWidget::FramebufferWidget() {} -FramebufferWidget::~FramebufferWidget() {} -void FramebufferWidget::setDirty(bool dirty) {} -int FramebufferWidget::getImageHandle() { return 0; } -NVGLUframebuffer* FramebufferWidget::getFramebuffer() { return nullptr; } -math::Vec FramebufferWidget::getFramebufferSize() { return {}; } -void FramebufferWidget::deleteFramebuffer() {} -void FramebufferWidget::step() {} -void FramebufferWidget::draw(const DrawArgs& args) {} -void FramebufferWidget::render(math::Vec scale, math::Vec offsetF, math::Rect clipBox) {} -void FramebufferWidget::drawFramebuffer() {} -void FramebufferWidget::onDirty(const DirtyEvent& e) {} -void FramebufferWidget::onContextCreate(const ContextCreateEvent& e) {} -void FramebufferWidget::onContextDestroy(const ContextDestroyEvent& e) {} - -SvgWidget::SvgWidget() {} -void SvgWidget::wrap() {} -void SvgWidget::setSvg(std::shared_ptr svg) {} -void SvgWidget::draw(const DrawArgs& args) {} - -Widget::~Widget() {} -math::Rect Widget::getBox() { return {}; } -void Widget::setBox(math::Rect box) {} -math::Vec Widget::getPosition() { return {}; } -void Widget::setPosition(math::Vec pos) {} -math::Vec Widget::getSize() { return {}; } -void Widget::setSize(math::Vec size) {} -widget::Widget* Widget::getParent() { return nullptr; } -bool Widget::isVisible() { return false; } -void Widget::setVisible(bool visible) {} -void Widget::requestDelete() {} -math::Rect Widget::getChildrenBoundingBox() { return {}; } -math::Rect Widget::getVisibleChildrenBoundingBox() { return {}; } -bool Widget::isDescendantOf(Widget* ancestor) { return false; } -math::Vec Widget::getRelativeOffset(math::Vec v, Widget* ancestor) { return {}; } -float Widget::getRelativeZoom(Widget* ancestor) { return 0.0f; } -math::Rect Widget::getViewport(math::Rect r) { return {}; } -bool Widget::hasChild(Widget* child) { return false; } -void Widget::addChild(Widget* child) {} -void Widget::addChildBottom(Widget* child) {} -void Widget::addChildBelow(Widget* child, Widget* sibling) {} -void Widget::addChildAbove(Widget* child, Widget* sibling) {} -void Widget::removeChild(Widget* child) {} -void Widget::clearChildren() {} -void Widget::step() {} -void Widget::draw(const DrawArgs& args) {} -void Widget::drawLayer(const DrawArgs& args, int layer) {} -void Widget::drawChild(Widget* child, const DrawArgs& args, int layer) {} - -} - -namespace window { - -Svg::~Svg() {} -void Svg::loadFile(const std::string& filename) {} -void Svg::loadString(const std::string& str) {} -math::Vec Svg::getSize() { return {}; } -int Svg::getNumShapes() { return 0; } -int Svg::getNumPaths() { return 0; } -int Svg::getNumPoints() { return 0; } -void Svg::draw(NVGcontext* vg) {} -std::shared_ptr Svg::load(const std::string& filename) { return {}; } - -} - -} diff --git a/lv2export/export.cpp b/lv2export/export.cpp new file mode 100644 index 00000000..cf8210d2 --- /dev/null +++ b/lv2export/export.cpp @@ -0,0 +1,115 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#ifndef PLUGIN_MODEL +# error PLUGIN_MODEL undefined +#endif + +#ifndef PLUGIN_CV_INPUTS +# error PLUGIN_CV_INPUTS undefined +#endif + +#ifndef PLUGIN_CV_OUTPUTS +# error PLUGIN_CV_OUTPUTS undefined +#endif + +#include + +// ----------------------------------------------------------------------- + +DISTRHO_PLUGIN_EXPORT +void lv2_generate_ttl() +{ + Context context; + context._engine.sampleRate = 48000.f; + contextSet(&context); + + engine::Module* module = PLUGIN_MODEL->createModule(); + + d_stdout("@prefix doap: ."); + d_stdout("@prefix foaf: ."); + d_stdout("@prefix lv2: ."); + d_stdout(""); + + d_stdout(""); + d_stdout(" a lv2:Plugin, doap:Project ;"); + d_stdout(" doap:name \"" SLUG "\" ;"); + d_stdout(""); + + int index = 0; + + for (int i=0, numAudio=0, numCV=0; igetNumInputs(); ++i) + { + d_stdout(" lv2:port ["); + if (kCvInputs[i]) + { + d_stdout(" a lv2:InputPort, lv2:CVPort ;"); + d_stdout(" lv2:symbol \"lv2_cv_in_%d\" ;", ++numCV); + } + else + { + d_stdout(" a lv2:InputPort, lv2:AudioPort ;"); + d_stdout(" lv2:symbol \"lv2_audio_in_%d\" ;", ++numAudio); + } + d_stdout(" lv2:name \"%s\" ;", module->getInputInfo(i)->getFullName().c_str()); + d_stdout(" lv2:index %d ;", index++); + d_stdout(" ] ;"); + d_stdout(""); + } + + for (int i=0, numAudio=0, numCV=0; igetNumOutputs(); ++i) + { + d_stdout(" lv2:port ["); + if (kCvOutputs[i]) + { + d_stdout(" a lv2:OutputPort, lv2:CVPort ;"); + d_stdout(" lv2:symbol \"lv2_cv_out_%d\" ;", ++numCV); + } + else + { + d_stdout(" a lv2:OutputPort, lv2:AudioPort ;"); + d_stdout(" lv2:symbol \"lv2_audio_out_%d\" ;", ++numAudio); + } + d_stdout(" lv2:name \"%s\" ;", module->getOutputInfo(i)->getFullName().c_str()); + d_stdout(" lv2:index %d ;", index++); + d_stdout(" ] ;"); + d_stdout(""); + } + + for (int i=0; igetNumParams(); ++i) + { + ParamQuantity* q = module->getParamQuantity(i); + d_stdout(" lv2:port ["); + d_stdout(" a lv2:InputPort, lv2:ControlPort ;"); + d_stdout(" lv2:index %d ;", index++); + d_stdout(" lv2:symbol \"lv2_param_%d\" ;", i + 1); + d_stdout(" lv2:name \"%s\" ;", q->name.c_str()); + d_stdout(" lv2:default %f ;", q->defaultValue); + d_stdout(" lv2:minimum %f ;", q->minValue); + d_stdout(" lv2:maximum %f ;", q->maxValue); + d_stdout(" ] ;"); + d_stdout(""); + // q->getDescription().c_str() + // q->unit.c_str() + } + + d_stdout(" ."); + + delete module; +} + +// ----------------------------------------------------------------------- diff --git a/lv2export/includes/asset.hpp b/lv2export/includes/asset.hpp new file mode 100644 index 00000000..e69de29b diff --git a/lv2export/includes/rack.hpp b/lv2export/includes/rack.hpp new file mode 100644 index 00000000..ab7dd73c --- /dev/null +++ b/lv2export/includes/rack.hpp @@ -0,0 +1,1103 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +/** + * This file contains a substantial amount of code from VCVRack, adjusted for inline use + * Copyright (C) 2016-2021 VCV. + * + * 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 (at your option) any later version. + */ + +#pragma once + +#include +#include +#include + +#include +#include +#include +#include +#include + +struct NVGcolor { float a; }; +struct NVGpaint {}; + +inline NVGcolor nvgRGB(int r, int g, int b) { return {}; } +inline NVGcolor nvgRGBA(int r, int g, int b, int a) { return {}; } +inline NVGcolor nvgRGBf(float r, float g, float b) { return {}; } +inline NVGcolor nvgRGBAf(float r, float g, float b, float a) { return {}; } +inline void nvgBeginPath(void* vg) {} +inline void nvgFillColor(void* vg, NVGcolor) {} +inline void nvgFillPaint(void* vg, NVGpaint) {} +inline void nvgFill(void* vg) {} +inline void nvgStrokeColor(void* vg, NVGcolor) {} +inline void nvgStrokeWidth(void* vg, float) {} +inline void nvgStroke(void* vg) {} +inline void nvgRect(void* vg, float a, float b, float c, float d) {} +inline void nvgImageSize(void*, int, void*, void*) {} +inline NVGpaint nvgImagePattern(void*, float, float, float, float, float, int handle, float) { return {}; } + +struct json_t {}; +json_t* json_integer(int) { return NULL; } +json_t* json_object() { return NULL; } +json_t* json_object_get(json_t*, const char*) { return NULL; } +int json_integer_value(json_t*) { return 0; } +void json_object_set_new(json_t*, const char*, json_t*) {} + +namespace rack { + +struct Quantity { + virtual ~Quantity() {} + virtual void setValue(float value) {} + virtual float getValue() { return 0.f; } + virtual float getMinValue() { return 0.f; } + virtual float getMaxValue() { return 1.f; } + virtual float getDefaultValue() { return 0.f; } +// virtual float getDisplayValue(); +// virtual void setDisplayValue(float displayValue); +// virtual int getDisplayPrecision(); +// virtual std::string getDisplayValueString(); +// virtual void setDisplayValueString(std::string s); + virtual std::string getLabel() { return ""; } + virtual std::string getUnit() { return ""; } +// virtual std::string getString(); +// virtual void reset(); +// virtual void randomize(); +// bool isMin(); +// bool isMax(); +// void setMin(); +// void setMax(); +// void toggle(); +// void moveValue(float deltaValue); +// float getRange(); +// bool isBounded(); +// float toScaled(float value); +// float fromScaled(float scaledValue); +// void setScaledValue(float scaledValue); +// float getScaledValue(); +// void moveScaledValue(float deltaScaledValue); +}; + +namespace ui { +struct Menu; +} + +namespace math { + +inline int clamp(int x, int a, int b) { + return std::max(std::min(x, b), a); +} + +inline float clamp(float x, float a = 0.f, float b = 1.f) { + return std::fmax(std::fmin(x, b), a); +} + +struct Vec { + float x = 0.f; + float y = 0.f; + Vec() {} + Vec(float xy) : x(xy), y(xy) {} + Vec(float x, float y) : x(x), y(y) {} + Vec neg() const { return Vec(-x, -y); } + Vec plus(Vec b) const { return Vec(x + b.x, y + b.y); } + Vec minus(Vec b) const { return Vec(x - b.x, y - b.y); } + Vec mult(float s) const { return Vec(x * s, y * s); } + Vec mult(Vec b) const { return Vec(x * b.x, y * b.y); } +}; + +struct Rect { + Vec pos; + Vec size; +}; + +} // namespace math + +namespace engine { + +static constexpr const int PORT_MAX_CHANNELS = 16; + +struct Module; + +struct Engine { + float getSampleRate() { return sampleRate; } + // custom + float sampleRate = 0.f; +}; + +struct Light { + float value = 0.f; + void setBrightness(float brightness) { + value = brightness; + } + float getBrightness() { + return value; + } + void setBrightnessSmooth(float brightness, float deltaTime, float lambda = 30.f) { + if (brightness < value) { + // Fade out light + value += (brightness - value) * lambda * deltaTime; + } + else { + // Immediately illuminate light + value = brightness; + } + } + void setSmoothBrightness(float brightness, float deltaTime) { + setBrightnessSmooth(brightness, deltaTime); + } + void setBrightnessSmooth(float brightness, int frames = 1) { + setBrightnessSmooth(brightness, frames / 44100.f); + } +}; + +struct Param { + float value = 0.f; + float getValue() { return value; } + void setValue(float value) { this->value = value; } +}; + +struct Port { + union { + float voltages[PORT_MAX_CHANNELS] = {}; + float value; + }; + union { + uint8_t channels = 0; + uint8_t active; + }; + Light plugLights[3]; + enum Type { + INPUT, + OUTPUT, + }; + + void setVoltage(float voltage, int channel = 0) { voltages[channel] = voltage; } + float getVoltage(int channel = 0) { return voltages[channel]; } + float getPolyVoltage(int channel) { return isMonophonic() ? getVoltage(0) : getVoltage(channel); } + + float getNormalVoltage(float normalVoltage, int channel = 0) { return isConnected() ? getVoltage(channel) : normalVoltage; } + + float getNormalPolyVoltage(float normalVoltage, int channel) { return isConnected() ? getPolyVoltage(channel) : normalVoltage; } + + float* getVoltages(int firstChannel = 0) { return &voltages[firstChannel]; } + + void readVoltages(float* v) { + for (int c = 0; c < channels; c++) { + v[c] = voltages[c]; + } + } + + void writeVoltages(const float* v) { + for (int c = 0; c < channels; c++) { + voltages[c] = v[c]; + } + } + + void clearVoltages() { + for (int c = 0; c < channels; c++) { + voltages[c] = 0.f; + } + } + + float getVoltageSum() { + float sum = 0.f; + for (int c = 0; c < channels; c++) { + sum += voltages[c]; + } + return sum; + } + + float getVoltageRMS() { + if (channels == 0) { + return 0.f; + } + else if (channels == 1) { + return std::fabs(voltages[0]); + } + else { + float sum = 0.f; + for (int c = 0; c < channels; c++) { + sum += std::pow(voltages[c], 2); + } + return std::sqrt(sum); + } + } + +// template +// T getVoltageSimd(int firstChannel) { +// return T::load(&voltages[firstChannel]); +// } +// +// template +// T getPolyVoltageSimd(int firstChannel) { +// return isMonophonic() ? getVoltage(0) : getVoltageSimd(firstChannel); +// } +// +// template +// T getNormalVoltageSimd(T normalVoltage, int firstChannel) { +// return isConnected() ? getVoltageSimd(firstChannel) : normalVoltage; +// } +// +// template +// T getNormalPolyVoltageSimd(T normalVoltage, int firstChannel) { +// return isConnected() ? getPolyVoltageSimd(firstChannel) : normalVoltage; +// } +// +// template +// void setVoltageSimd(T voltage, int firstChannel) { +// voltage.store(&voltages[firstChannel]); +// } + + void setChannels(int channels) { + if (this->channels == 0) { + return; + } + for (int c = channels; c < this->channels; c++) { + voltages[c] = 0.f; + } + if (channels == 0) { + channels = 1; + } + this->channels = channels; + } + + int getChannels() { return channels; } + bool isConnected() { return channels > 0; } + bool isMonophonic() { return channels == 1; } + bool isPolyphonic() { return channels > 1; } + float normalize(float normalVoltage) { return getNormalVoltage(normalVoltage); } +}; + +struct Output : Port {}; + +struct Input : Port {}; + +struct PortInfo { + Module* module = NULL; + Port::Type type = Port::INPUT; + int portId = -1; + std::string name; + std::string description; + virtual ~PortInfo() {} + virtual std::string getName() { + if (name == "") + return std::string("#") + std::to_string(portId + 1); + return name; + } + std::string getFullName() { + std::string name = getName(); + name += " "; + name += (type == Port::INPUT) ? "input" : "output"; + return name; + } + virtual std::string getDescription() { return description; } +}; + +struct ParamQuantity : Quantity { + Module* module = NULL; + int paramId = -1; + float minValue = 0.f; + float maxValue = 1.f; + float defaultValue = 0.f; + std::string name; + std::string unit; + float displayBase = 0.f; + float displayMultiplier = 1.f; + float displayOffset = 0.f; + int displayPrecision = 5; + std::string description; + bool resetEnabled = true; + bool randomizeEnabled = true; + bool smoothEnabled = false; + bool snapEnabled = false; + +// Param* getParam(); +// /** If smoothEnabled is true, requests to the engine to smoothly move to a target value each sample. */ +// void setSmoothValue(float value); +// float getSmoothValue(); + +// void setValue(float value) override; +// float getValue() override; + float getMinValue() override { return minValue; } + float getMaxValue() override { return maxValue; } + float getDefaultValue() override { return defaultValue; } +// float getDisplayValue() override; +// void setDisplayValue(float displayValue) override; +// std::string getDisplayValueString() override; +// void setDisplayValueString(std::string s) override; +// int getDisplayPrecision() override; +// std::string getLabel() override; +// std::string getUnit() override; +// void reset() override; +// void randomize() override; + + virtual std::string getDescription() { return description; } + +// virtual json_t* toJson(); +// virtual void fromJson(json_t* rootJ); +}; + +struct SwitchQuantity : ParamQuantity { +// std::vector labels; +// std::string getDisplayValueString() override; +// void setDisplayValueString(std::string s) override; +}; + +struct Module { + std::vector params; + std::vectorn<^dKw-ParULv&;Kp^Xx!J41CV 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⁣1AWMo&h!Z8vL20)i{&| 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%0DL(x&*lN9)S?q`Y+{KJUMqsE^y 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⩔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%0D|0{Nl&dU=k02* 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 fnV*su!mAIF=r>tY-96@GqM_#@ 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%0Dw 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´pke`-=2bl&|Xnrg0#^7tj}%w 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%0DQkyQ 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쩳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 Z<~GZOPxXPj1&NnKNh?ZaT+)B|zW|zU0`LF; literal 0 HcmV?d00001 diff --git a/docs/Screenshot_Init-Patch.png b/docs/Screenshot_Init-Patch.png deleted file mode 100644 index c2f1a0761a47468ac2ac05ce751b0b9a55a3590f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123147 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 From 6e29483c40a9c65d847ef49f3d4ba7f74650238d Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 15 May 2022 12:17:12 +0100 Subject: [PATCH 044/283] Update README currrent status Signed-off-by: falkTX --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8b9b7a69..8a5d28bb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - +# DISTRHO Cardinal *Cardinal, the Rack!* @@ -19,15 +19,15 @@ All "Core" modules from Rack have been replaced by Cardinal equivalents, simplif Cardinal does not load external modules and does not connect to the official Rack library/store. All VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues. -The VST3 version is in progress, already part of the build but still experimental. +**The VST3 version is in progress, already part of the build but still experimental.** +Prefer to use other formats if you can. ## Current status -With the exception of a few bugs, Cardinal can be considered stable. -Though currently the following should be noted: +Cardinal should be considered stable, if you spot any bugs please report them. +Currently the following should be noted: -- Keyboard input does not always work in some hosts [#24](https://github.com/DISTRHO/Cardinal/issues/24) - VST3 support incomplete/experimental [#41](https://github.com/DISTRHO/Cardinal/issues/41) - Windows 32bit builds do not work well [#80](https://github.com/DISTRHO/Cardinal/issues/80) From 1c236cace0aa76193ce7fbf68e28a8f3abc760c7 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 15 May 2022 12:34:35 +0100 Subject: [PATCH 045/283] Dark theme for ShiftyExpander Signed-off-by: falkTX --- src/custom/dep.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index 25f67a67..d72ff45d 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -289,6 +289,7 @@ static const struct { { "/PathSet/res/GlassPane.svg", {}, -1 }, { "/PathSet/res/IceTray.svg", {}, -1 }, { "/PathSet/res/Nudge.svg", {}, -1 }, + { "/PathSet/res/ShiftyExpander.svg", {}, -1 }, { "/PathSet/res/ShiftyMod.svg", {}, -1 }, // BSD-3-Clause { "/voxglitch/res/autobreak_front_panel.svg", {}, -1 }, @@ -500,6 +501,9 @@ static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const c // pink and orange case 0xffe941e2: case 0xff698efb: + // pink and orange (translucent) + case 0x4de941e2: + case 0x62698efb: return false; // blue darker 1 (blue with 50% opacity on bg) case 0xffde944f: From 946056b1fd42f867d2032fee8ebfeff1ff433bd2 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 17 May 2022 19:48:26 +0100 Subject: [PATCH 046/283] Avoid duplicate symbol Signed-off-by: falkTX --- plugins/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Makefile b/plugins/Makefile index bffe70df..513ff687 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -874,7 +874,7 @@ PLUGIN_FILES += $(filter-out voxglitch/src/plugin.cpp,$(wildcard voxglitch/src/* # -------------------------------------------------------------- # WhatTheRack -PLUGIN_FILES += $(filter-out WhatTheRack/src/plugin.cpp,$(wildcard WhatTheRack/src/*.cpp)) +PLUGIN_FILES += $(filter-out WhatTheRack/src/WhatTheRack.cpp,$(wildcard WhatTheRack/src/*.cpp)) # modules/types which are present in other plugins VOXGLITCH_CUSTOM = $(DRWAV) AudioFile Looper Readout From fa1e6a1343e85bd8ad27c11801326c91f85f71f9 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 17 May 2022 19:48:58 +0100 Subject: [PATCH 047/283] Allow host to not supply CV ports Signed-off-by: falkTX --- plugins/Cardinal/src/HostCV.cpp | 6 ++++++ src/CardinalPlugin.cpp | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/plugins/Cardinal/src/HostCV.cpp b/plugins/Cardinal/src/HostCV.cpp index 7f23b47e..1be4141c 100644 --- a/plugins/Cardinal/src/HostCV.cpp +++ b/plugins/Cardinal/src/HostCV.cpp @@ -87,6 +87,9 @@ struct HostCV : TerminalModule { } else if (const float* const* const dataIns = pcontext->dataIns) { + if (dataIns[CARDINAL_AUDIO_IO_OFFSET] == nullptr) + return; + float outputOffset; outputOffset = params[BIPOLAR_OUTPUTS_1_5].getValue() > 0.1f ? 5.0f : 0.0f; @@ -116,6 +119,9 @@ struct HostCV : TerminalModule { float** const dataOuts = pcontext->dataOuts; + if (dataOuts[CARDINAL_AUDIO_IO_OFFSET] == nullptr) + return; + float inputOffset; inputOffset = params[BIPOLAR_INPUTS_1_5].getValue() > 0.1f ? 5.0f : 0.0f; diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 67674040..b37aac1f 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -1148,7 +1148,13 @@ class CardinalPlugin : public CardinalBasePlugin { #if DISTRHO_PLUGIN_NUM_INPUTS != 0 for (int i=0; idataIns = fAudioBufferCopy; #else context->dataIns = nullptr; @@ -1157,7 +1163,13 @@ class CardinalPlugin : public CardinalBasePlugin } for (int i=0; i Date: Tue, 17 May 2022 19:49:54 +0100 Subject: [PATCH 048/283] Add sorta-main variant for AU, 8 audio IO but no CV Signed-off-by: falkTX --- jucewrapper/CMakeLists.txt | 95 ++++++++++++++++++++++++++++++++- jucewrapper/CardinalWrapper.cpp | 18 ++++--- src/Makefile.cardinal.mk | 2 +- 3 files changed, 104 insertions(+), 11 deletions(-) diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 8f564a66..61e7372d 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -46,6 +46,9 @@ set_property(TARGET water PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../c add_library(zita_resampler STATIC IMPORTED) set_property(TARGET zita_resampler PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/zita-resampler.a") +add_library(sCardinal STATIC IMPORTED) +set_property(TARGET sCardinal PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../bin/Cardinal.a") + add_library(sCardinalFX STATIC IMPORTED) set_property(TARGET sCardinalFX PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../bin/CardinalFX.a") @@ -107,6 +110,94 @@ set(STATIC_LIBS_END "-Wl,--no-whole-archive") set(PLUGIN_FORMATS Standalone VST3) endif (APPLE) +# Main variant + +juce_add_plugin(Cardinal + AU_MAIN_TYPE kAudioUnitType_MusicEffect + COMPANY_COPYRIGHT "GPL-3.0-or-later" + COMPANY_NAME "DISTRHO" + COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal" + DESCRIPTION "Virtual modular synthesizer plugin" + EDITOR_WANTS_KEYBOARD_FOCUS FALSE + FORMATS ${PLUGIN_FORMATS} + IS_MIDI_EFFECT FALSE + IS_SYNTH FALSE + NEEDS_MIDI_INPUT TRUE + NEEDS_MIDI_OUTPUT TRUE + PLUGIN_CODE DcnM + PLUGIN_MANUFACTURER_CODE Dstr + PRODUCT_NAME "Cardinal") + +target_sources(Cardinal + PRIVATE + CardinalWrapper.cpp) + +target_include_directories(Cardinal + PRIVATE + ../dpf/distrho + ../src/CardinalFX) + +target_compile_definitions(Cardinal + PUBLIC + JucePlugin_PreferredChannelConfigurations=8,8 + JUCE_CHECK_MEMORY_LEAKS=0 + JUCE_DISABLE_NATIVE_FILECHOOSERS=1 + JUCE_DISPLAY_SPLASH_SCREEN=0 + JUCE_MODAL_LOOPS_PERMITTED=0 + JUCE_USE_CURL=0 + JUCE_USE_FLAC=0 + JUCE_USE_OGGVORBIS=0 + JUCE_USE_XINERAMA=0 + JUCE_VST3_CAN_REPLACE_VST2=0 + JUCE_ALSA=1 + JUCE_DIRECTSOUND=0 + JUCE_JACK=1 + JUCE_WASAPI=0 + JUCE_WEB_BROWSER=0) + +target_link_libraries(Cardinal + PRIVATE + juce::juce_audio_utils + ${STATIC_LIBS_START} + sCardinal + sPlugins + sRack + carla_host_plugin + carla_engine_plugin + carla_plugin + native_plugins + audio_decoder + jackbridge + lilv + rtmempool + sfzero + water + zita_resampler + dgl + libaubio + libarchive + libjansson + libquickjs + libsamplerate + libspeexdsp + libzstd + ${STATIC_LIBS_END} + ${GL_LIBRARIES} + ${DBUS_LIBRARIES} + -L${LIBLO_LIBRARY_DIRS} + ${FFTW3F_LIBRARIES} + ${LIBLO_LIBRARIES} + ${SNDFILE_LIBRARIES} + ${X11_LIBRARIES} + ${XCURSOR_LIBRARIES} + ${XEXT_LIBRARIES} + ${XRANDR_LIBRARIES} + ${EXTRA_LIBS} + PUBLIC + juce::juce_recommended_config_flags + juce::juce_recommended_lto_flags + juce::juce_recommended_warning_flags) + # FX variant juce_add_plugin(CardinalFX @@ -115,7 +206,7 @@ juce_add_plugin(CardinalFX COMPANY_NAME "DISTRHO" COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal" DESCRIPTION "Virtual modular synthesizer plugin" - EDITOR_WANTS_KEYBOARD_FOCUS TRUE + EDITOR_WANTS_KEYBOARD_FOCUS FALSE FORMATS ${PLUGIN_FORMATS} IS_MIDI_EFFECT FALSE IS_SYNTH FALSE @@ -204,7 +295,7 @@ juce_add_plugin(CardinalSynth COMPANY_NAME "DISTRHO" COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal" DESCRIPTION "Virtual modular synthesizer plugin" - EDITOR_WANTS_KEYBOARD_FOCUS TRUE + EDITOR_WANTS_KEYBOARD_FOCUS FALSE FORMATS ${PLUGIN_FORMATS} IS_MIDI_EFFECT FALSE IS_SYNTH TRUE diff --git a/jucewrapper/CardinalWrapper.cpp b/jucewrapper/CardinalWrapper.cpp index f0b305f6..984f23d6 100644 --- a/jucewrapper/CardinalWrapper.cpp +++ b/jucewrapper/CardinalWrapper.cpp @@ -401,14 +401,16 @@ class CardinalWrapperProcessor : public juce::AudioProcessor plugin.setTimePosition(timePosition); - DISTRHO_SAFE_ASSERT_RETURN(buffer.getNumChannels() == 2,); - - const float* audioBufferIn[2]; - float* audioBufferOut[2]; - audioBufferIn[0] = buffer.getReadPointer(0); - audioBufferIn[1] = buffer.getReadPointer(1); - audioBufferOut[0] = buffer.getWritePointer(0); - audioBufferOut[1] = buffer.getWritePointer(1); + DISTRHO_SAFE_ASSERT_RETURN(buffer.getNumChannels() >= 2,); + + const float* audioBufferIn[18] = {}; + float* audioBufferOut[18] = {}; + + for (int i=buffer.getNumChannels(); --i >= 0;) + { + audioBufferIn[i] = buffer.getReadPointer(i); + audioBufferOut[i] = buffer.getWritePointer(i); + } plugin.run(audioBufferIn, audioBufferOut, static_cast(numSamples), midiEvents, midiEventCount); } diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index f2caae90..f83d3c05 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -269,7 +269,7 @@ BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' ifeq ($(CARDINAL_VARIANT),main) ifneq ($(STATIC_BUILD),true) -all: jack lv2 vst3 +all: jack lv2 vst3 static else all: lv2 vst3 endif # STATIC_BUILD From d46d24719b7cd4ab385b47f9d12637dfa093e379 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 17 May 2022 20:06:46 +0100 Subject: [PATCH 049/283] Fix a typo in the previous commit Signed-off-by: falkTX --- jucewrapper/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 61e7372d..def58201 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -135,7 +135,7 @@ target_sources(Cardinal target_include_directories(Cardinal PRIVATE ../dpf/distrho - ../src/CardinalFX) + ../src/Cardinal) target_compile_definitions(Cardinal PUBLIC From 6cfbf95ffc33091ae851b225e419ca486d4842d1 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 18 May 2022 05:14:19 +0100 Subject: [PATCH 050/283] Fix AU build --- jucewrapper/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index def58201..d84f442e 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -193,6 +193,7 @@ target_link_libraries(Cardinal ${XEXT_LIBRARIES} ${XRANDR_LIBRARIES} ${EXTRA_LIBS} + -lmagic PUBLIC juce::juce_recommended_config_flags juce::juce_recommended_lto_flags From f83b483e82be940f81e144986934fc83fd649796 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 18 May 2022 14:52:19 +0100 Subject: [PATCH 051/283] Bring in Sassy Scope Signed-off-by: falkTX --- plugins/Cardinal/plugin.json | 9 + plugins/Cardinal/src/SassyScope.cpp | 274 ++++++ plugins/Cardinal/src/plugin.hpp | 1 + plugins/Cardinal/src/sassy/fftreal/Array.h | 98 ++ plugins/Cardinal/src/sassy/fftreal/Array.hpp | 99 ++ plugins/Cardinal/src/sassy/fftreal/DynArray.h | 101 ++ .../Cardinal/src/sassy/fftreal/DynArray.hpp | 144 +++ plugins/Cardinal/src/sassy/fftreal/FFTReal.h | 143 +++ .../Cardinal/src/sassy/fftreal/FFTReal.hpp | 917 ++++++++++++++++++ .../src/sassy/fftreal/FFTRealFixLen.h | 131 +++ .../src/sassy/fftreal/FFTRealFixLen.hpp | 323 ++++++ .../src/sassy/fftreal/FFTRealFixLenParam.h | 90 ++ .../src/sassy/fftreal/FFTRealPassDirect.h | 96 ++ .../src/sassy/fftreal/FFTRealPassDirect.hpp | 205 ++++ .../src/sassy/fftreal/FFTRealPassInverse.h | 101 ++ .../src/sassy/fftreal/FFTRealPassInverse.hpp | 230 +++++ .../src/sassy/fftreal/FFTRealSelect.h | 78 ++ .../src/sassy/fftreal/FFTRealSelect.hpp | 63 ++ .../src/sassy/fftreal/FFTRealUseTrigo.h | 99 ++ .../src/sassy/fftreal/FFTRealUseTrigo.hpp | 92 ++ .../Cardinal/src/sassy/fftreal/OscSinCos.h | 107 ++ .../Cardinal/src/sassy/fftreal/OscSinCos.hpp | 123 +++ plugins/Cardinal/src/sassy/fftreal/def.h | 60 ++ .../Cardinal/src/sassy/fftreal/license.txt | 14 + plugins/Cardinal/src/sassy/fftreal/readme.txt | 293 ++++++ plugins/Cardinal/src/sassy/sassy.hpp | 131 +++ plugins/Cardinal/src/sassy/sassy_scope.cpp | 872 +++++++++++++++++ plugins/Makefile | 2 + plugins/plugins.cpp | 5 + 29 files changed, 4901 insertions(+) create mode 100644 plugins/Cardinal/src/SassyScope.cpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/Array.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/Array.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/DynArray.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/DynArray.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTReal.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTReal.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealFixLen.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealFixLen.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealFixLenParam.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealPassDirect.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealPassDirect.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealPassInverse.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealPassInverse.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealSelect.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealSelect.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealUseTrigo.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/FFTRealUseTrigo.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/OscSinCos.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/OscSinCos.hpp create mode 100644 plugins/Cardinal/src/sassy/fftreal/def.h create mode 100644 plugins/Cardinal/src/sassy/fftreal/license.txt create mode 100644 plugins/Cardinal/src/sassy/fftreal/readme.txt create mode 100644 plugins/Cardinal/src/sassy/sassy.hpp create mode 100644 plugins/Cardinal/src/sassy/sassy_scope.cpp diff --git a/plugins/Cardinal/plugin.json b/plugins/Cardinal/plugin.json index 357f2bdc..dfeed6e0 100644 --- a/plugins/Cardinal/plugin.json +++ b/plugins/Cardinal/plugin.json @@ -182,6 +182,15 @@ "Visual" ] }, + { + "slug": "SassyScope", + "name": "Sassy Scope", + "description": "Scope from Sassy Audio Spreadsheet", + "manualUrl": "https://github.com/DISTRHO/Cardinal/blob/main/docs/CARDINAL-MODULES.md#sassy-scope", + "tags": [ + "Visual" + ] + }, { "slug": "TextEditor", "name": "Text Editor", diff --git a/plugins/Cardinal/src/SassyScope.cpp b/plugins/Cardinal/src/SassyScope.cpp new file mode 100644 index 00000000..fcee4787 --- /dev/null +++ b/plugins/Cardinal/src/SassyScope.cpp @@ -0,0 +1,274 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "plugincontext.hpp" +#include "ImGuiWidget.hpp" +#include "sassy/sassy.hpp" +#include "sassy/sassy_scope.cpp" + +namespace ffft { +template +class FFTRealWithSize : public FFTReal

    { +public: + explicit FFTRealWithSize() : FFTReal
    (size) {} +}; +} + +struct SassyScopeModule : Module { + enum ParamIds { + NUM_PARAMS + }; + enum InputIds { + INPUT1, + INPUT2, + INPUT3, + INPUT4, + NUM_INPUTS + }; + enum OutputIds { + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + + ScopeData scope; + + ffft::FFTRealWithSize fftObj16; + ffft::FFTRealWithSize fftObj32; + ffft::FFTRealWithSize fftObj64; + ffft::FFTRealWithSize fftObj128; + ffft::FFTRealWithSize fftObj256; + ffft::FFTRealWithSize fftObj512; + ffft::FFTRealWithSize fftObj1024; + ffft::FFTRealWithSize fftObj2048; + ffft::FFTRealWithSize fftObj4096; + ffft::FFTRealWithSize fftObj8192; + ffft::FFTRealWithSize fftObj16384; + ffft::FFTRealWithSize fftObj32768; + ffft::FFTRealWithSize fftObj65536; + + SassyScopeModule() + { + config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); + + scope.fft.average = 1; + scope.fft.obj16 = &fftObj16; + scope.fft.obj32 = &fftObj32; + scope.fft.obj64 = &fftObj64; + scope.fft.obj128 = &fftObj128; + scope.fft.obj256 = &fftObj256; + scope.fft.obj512 = &fftObj512; + scope.fft.obj1024 = &fftObj1024; + scope.fft.obj2048 = &fftObj2048; + scope.fft.obj4096 = &fftObj4096; + scope.fft.obj8192 = &fftObj8192; + scope.fft.obj16384 = &fftObj16384; + scope.fft.obj32768 = &fftObj32768; + scope.fft.obj65536 = &fftObj65536; + } + + void process(const ProcessArgs&) override + { + scope.probe(inputs[INPUT1].getVoltage(), + inputs[INPUT2].getVoltage(), + inputs[INPUT3].getVoltage(), + inputs[INPUT4].getVoltage()); + } + + void onSampleRateChange(const SampleRateChangeEvent& e) override + { + scope.realloc(e.sampleRate); + } +}; + +// used for module browser +static ScopeData* getFakeScopeInstance() +{ + static ScopeData scope; + static ffft::FFTReal fftObj16(16*2); + static ffft::FFTReal fftObj32(32*2); + static ffft::FFTReal fftObj64(64*2); + static ffft::FFTReal fftObj128(128*2); + static ffft::FFTReal fftObj256(256*2); + static ffft::FFTReal fftObj512(512*2); + static ffft::FFTReal fftObj1024(1024*2); + static ffft::FFTReal fftObj2048(2048*2); + static ffft::FFTReal fftObj4096(4096*2); + static ffft::FFTReal fftObj8192(8192*2); + static ffft::FFTReal fftObj16384(16384*2); + static ffft::FFTReal fftObj32768(32768*2); + static ffft::FFTReal fftObj65536(65536*2); + + static bool needsInit = true; + + if (needsInit) + { + needsInit = false; + scope.fft.average = 1; + scope.fft.obj16 = &fftObj16; + scope.fft.obj32 = &fftObj32; + scope.fft.obj64 = &fftObj64; + scope.fft.obj128 = &fftObj128; + scope.fft.obj256 = &fftObj256; + scope.fft.obj512 = &fftObj512; + scope.fft.obj1024 = &fftObj1024; + scope.fft.obj2048 = &fftObj2048; + scope.fft.obj4096 = &fftObj4096; + scope.fft.obj8192 = &fftObj8192; + scope.fft.obj16384 = &fftObj16384; + scope.fft.obj32768 = &fftObj32768; + scope.fft.obj65536 = &fftObj65536; + scope.realloc(48000); + } + + return &scope; +} + +struct SassyScopeWidget : ImGuiWidget { + SassyScopeModule* module = nullptr; + + void drawImGui() override + { + const float scaleFactor = getScaleFactor(); + + ImGui::SetNextWindowPos(ImVec2(0, 0)); + ImGui::SetNextWindowSize(ImVec2(box.size.x * scaleFactor, box.size.y * scaleFactor)); + + do_show_scope_window(module != nullptr ? &module->scope : getFakeScopeInstance(), scaleFactor); + } + + void onButton(const ButtonEvent& e) + { + // if mouse press is over draggable areas, do nothing so event can go to Rack + if (e.action == GLFW_PRESS) + { + // bottom left + if (e.pos.x < 116 && e.pos.y >= 335) + return; + // bottom right + if (e.pos.x >= 456 && e.pos.y >= 348) + return; + // fft label + if (e.pos.x >= 491 && e.pos.y >= 54 && e.pos.y <= 74) + return; + // nudge label + if (e.pos.x >= 463 && e.pos.y >= 236 && e.pos.y <= 255) + return; + // center scope + if (e.pos.x >= 110 && e.pos.x <= 452 && e.pos.y >= 0 && e.pos.y <= 350) + return; + } + + ImGuiWidget::onButton(e); + } +}; + +struct SassyScopeModuleWidget : ModuleWidget { + SassyScopeModule* scopeModule = nullptr; + SassyScopeWidget* scopeWidget = nullptr; + + SassyScopeModuleWidget(SassyScopeModule* const module) { + setModule(module); + box.size = Vec(RACK_GRID_WIDTH * 37, RACK_GRID_HEIGHT); + + scopeModule = module; + scopeWidget = new SassyScopeWidget(); + scopeWidget->box.pos = Vec(0, 0); + scopeWidget->box.size = Vec(box.size.x, box.size.y); + scopeWidget->module = module; + addChild(scopeWidget); + + for (int i=0; i(Vec(5 + 26.5f * i, RACK_GRID_HEIGHT - 40), module, i)); + } + + void draw(const DrawArgs& args) override + { + nvgBeginPath(args.vg); + nvgRect(args.vg, 0.0, 0.0, box.size.x, box.size.y); + nvgFillColor(args.vg, nvgRGB(0x20, 0x20, 0x20)); + nvgFill(args.vg); + ModuleWidget::draw(args); + } + + void step() override + { + ModuleWidget::step(); + + if (scopeModule == nullptr) + return; + + // Update colors + for (int i=0; iscene->rack->getTopCable(getInput(i))) + { + NVGcolor c = cableWidget->color; + scopeModule->scope.colors[i] = (clamp(int(c.a * 0xff), 0, 0xff) << 24) + | (clamp(int(c.b * 0xff), 0, 0xff) << 16) + | (clamp(int(c.g * 0xff), 0, 0xff) << 8) + | clamp(int(c.r * 0xff), 0, 0xff); + } + } + } + + void appendContextMenu(Menu* const menu) override + { + menu->addChild(new MenuSeparator); + + struct AveragingItem : MenuItem { + ScopeData* scope; + Menu* createChildMenu() override { + Menu* menu = new Menu; + menu->addChild(createCheckMenuItem("1x", "", + [=]() {return scope->fft.average == 1;}, + [=]() {scope->fft.average = 1;} + )); + menu->addChild(createCheckMenuItem("4x", "", + [=]() {return scope->fft.average == 4;}, + [=]() {scope->fft.average = 4;} + )); + menu->addChild(createCheckMenuItem("16x", "", + [=]() {return scope->fft.average == 16;}, + [=]() {scope->fft.average = 16;} + )); + menu->addChild(createCheckMenuItem("64x", "", + [=]() {return scope->fft.average == 64;}, + [=]() {scope->fft.average = 64;} + )); + menu->addChild(createCheckMenuItem("256x", "", + [=]() {return scope->fft.average == 256;}, + [=]() {scope->fft.average = 256;} + )); + return menu; + } + }; + AveragingItem* const averagingItem = new AveragingItem; + averagingItem->text = "Averaging (FFT mode)"; + averagingItem->rightText = string::f("%d", scopeModule->scope.fft.average) + " " + RIGHT_ARROW; + averagingItem->scope = &scopeModule->scope; + menu->addChild(averagingItem); + } +}; + +// -------------------------------------------------------------------------------------------------------------------- + +Model* modelSassyScope = createModel("SassyScope"); + +// -------------------------------------------------------------------------------------------------------------------- + diff --git a/plugins/Cardinal/src/plugin.hpp b/plugins/Cardinal/src/plugin.hpp index 230e9572..d87d648a 100644 --- a/plugins/Cardinal/src/plugin.hpp +++ b/plugins/Cardinal/src/plugin.hpp @@ -46,6 +46,7 @@ extern Model* modelHostParameters; extern Model* modelHostTime; extern Model* modelIldaeil; extern Model* modelMPV; +extern Model* modelSassyScope; extern Model* modelTextEditor; extern std::vector hostTerminalModels; diff --git a/plugins/Cardinal/src/sassy/fftreal/Array.h b/plugins/Cardinal/src/sassy/fftreal/Array.h new file mode 100644 index 00000000..f31b8979 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/Array.h @@ -0,0 +1,98 @@ +/***************************************************************************** + + Array.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_Array_HEADER_INCLUDED) +#define ffft_Array_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +namespace ffft +{ + + + +template +class Array +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + typedef T DataType; + + Array (); + + inline const DataType & + operator [] (long pos) const; + inline DataType & + operator [] (long pos); + + static inline long + size (); + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + DataType _data_arr [LEN]; + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + Array (const Array &other); + Array & operator = (const Array &other); + bool operator == (const Array &other); + bool operator != (const Array &other); + +}; // class Array + + + +} // namespace ffft + + + +#include "Array.hpp" + + + +#endif // ffft_Array_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/Array.hpp b/plugins/Cardinal/src/sassy/fftreal/Array.hpp new file mode 100644 index 00000000..0c9c2852 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/Array.hpp @@ -0,0 +1,99 @@ +/***************************************************************************** + + Array.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_Array_CURRENT_CODEHEADER) + #error Recursive inclusion of Array code header. +#endif +#define ffft_Array_CURRENT_CODEHEADER + +#if ! defined (ffft_Array_CODEHEADER_INCLUDED) +#define ffft_Array_CODEHEADER_INCLUDED + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include + + + +namespace ffft +{ + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +Array ::Array () +{ + // Nothing +} + + + +template +const typename Array ::DataType & Array ::operator [] (long pos) const +{ + assert (pos >= 0); + assert (pos < LEN); + + return (_data_arr [pos]); +} + + + +template +typename Array ::DataType & Array ::operator [] (long pos) +{ + assert (pos >= 0); + assert (pos < LEN); + + return (_data_arr [pos]); +} + + + +template +long Array ::size () +{ + return (LEN); +} + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +} // namespace ffft + + + +#endif // ffft_Array_CODEHEADER_INCLUDED + +#undef ffft_Array_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/DynArray.h b/plugins/Cardinal/src/sassy/fftreal/DynArray.h new file mode 100644 index 00000000..756e4433 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/DynArray.h @@ -0,0 +1,101 @@ +/***************************************************************************** + + DynArray.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_DynArray_HEADER_INCLUDED) +#define ffft_DynArray_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +namespace ffft +{ + + + +template +class DynArray +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + typedef T DataType; + + DynArray (); + explicit DynArray (long size); + ~DynArray (); + + inline long size () const; + inline void resize (long size); + + inline const DataType & + operator [] (long pos) const; + inline DataType & + operator [] (long pos); + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + DataType * _data_ptr; + long _len; + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + DynArray (const DynArray &other); + DynArray & operator = (const DynArray &other); + bool operator == (const DynArray &other); + bool operator != (const DynArray &other); + +}; // class DynArray + + + +} // namespace ffft + + + +#include "DynArray.hpp" + + + +#endif // ffft_DynArray_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/DynArray.hpp b/plugins/Cardinal/src/sassy/fftreal/DynArray.hpp new file mode 100644 index 00000000..38f1471c --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/DynArray.hpp @@ -0,0 +1,144 @@ +/***************************************************************************** + + DynArray.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_DynArray_CURRENT_CODEHEADER) + #error Recursive inclusion of DynArray code header. +#endif +#define ffft_DynArray_CURRENT_CODEHEADER + +#if ! defined (ffft_DynArray_CODEHEADER_INCLUDED) +#define ffft_DynArray_CODEHEADER_INCLUDED + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include + + + +namespace ffft +{ + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +DynArray ::DynArray () +: _data_ptr (0) +, _len (0) +{ + // Nothing +} + + + +template +DynArray ::DynArray (long size) +: _data_ptr (0) +, _len (0) +{ + assert (size >= 0); + if (size > 0) + { + _data_ptr = new DataType [size]; + _len = size; + } +} + + + +template +DynArray ::~DynArray () +{ + delete [] _data_ptr; + _data_ptr = 0; + _len = 0; +} + + + +template +long DynArray ::size () const +{ + return (_len); +} + + + +template +void DynArray ::resize (long size) +{ + assert (size >= 0); + if (size > 0) + { + DataType * old_data_ptr = _data_ptr; + DataType * tmp_data_ptr = new DataType [size]; + + _data_ptr = tmp_data_ptr; + _len = size; + + delete [] old_data_ptr; + } +} + + + +template +const typename DynArray ::DataType & DynArray ::operator [] (long pos) const +{ + assert (pos >= 0); + assert (pos < _len); + + return (_data_ptr [pos]); +} + + + +template +typename DynArray ::DataType & DynArray ::operator [] (long pos) +{ + assert (pos >= 0); + assert (pos < _len); + + return (_data_ptr [pos]); +} + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +} // namespace ffft + + + +#endif // ffft_DynArray_CODEHEADER_INCLUDED + +#undef ffft_DynArray_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTReal.h b/plugins/Cardinal/src/sassy/fftreal/FFTReal.h new file mode 100644 index 00000000..f9a2553d --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTReal.h @@ -0,0 +1,143 @@ +/***************************************************************************** + + FFTReal.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_FFTReal_HEADER_INCLUDED) +#define ffft_FFTReal_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "def.h" +#include "DynArray.h" +#include "OscSinCos.h" + + + +namespace ffft +{ + + + +template +class FFTReal +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + enum { MAX_BIT_DEPTH = 30 }; // So length can be represented as long int + + typedef DT DataType; + + explicit FFTReal (long length); + virtual ~FFTReal () {} + + long get_length () const; + void do_fft (DataType f [], const DataType x []) const; + void do_ifft (const DataType f [], DataType x []) const; + void rescale (DataType x []) const; + DataType * use_buffer () const; + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + // Over this bit depth, we use direct calculation for sin/cos + enum { TRIGO_BD_LIMIT = 12 }; + + typedef OscSinCos OscType; + + void init_br_lut (); + void init_trigo_lut (); + void init_trigo_osc (); + + ffft_FORCEINLINE const long * + get_br_ptr () const; + ffft_FORCEINLINE const DataType * + get_trigo_ptr (int level) const; + ffft_FORCEINLINE long + get_trigo_level_index (int level) const; + + inline void compute_fft_general (DataType f [], const DataType x []) const; + inline void compute_direct_pass_1_2 (DataType df [], const DataType x []) const; + inline void compute_direct_pass_3 (DataType df [], const DataType sf []) const; + inline void compute_direct_pass_n (DataType df [], const DataType sf [], int pass) const; + inline void compute_direct_pass_n_lut (DataType df [], const DataType sf [], int pass) const; + inline void compute_direct_pass_n_osc (DataType df [], const DataType sf [], int pass) const; + + inline void compute_ifft_general (const DataType f [], DataType x []) const; + inline void compute_inverse_pass_n (DataType df [], const DataType sf [], int pass) const; + inline void compute_inverse_pass_n_osc (DataType df [], const DataType sf [], int pass) const; + inline void compute_inverse_pass_n_lut (DataType df [], const DataType sf [], int pass) const; + inline void compute_inverse_pass_3 (DataType df [], const DataType sf []) const; + inline void compute_inverse_pass_1_2 (DataType x [], const DataType sf []) const; + + const long _length; + const int _nbr_bits; + DynArray + _br_lut; + DynArray + _trigo_lut; + mutable DynArray + _buffer; + mutable DynArray + _trigo_osc; + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + FFTReal (); + FFTReal (const FFTReal &other); + FFTReal & operator = (const FFTReal &other); + bool operator == (const FFTReal &other); + bool operator != (const FFTReal &other); + +}; // class FFTReal + + + +} // namespace ffft + + + +#include "FFTReal.hpp" + + + +#endif // ffft_FFTReal_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTReal.hpp b/plugins/Cardinal/src/sassy/fftreal/FFTReal.hpp new file mode 100644 index 00000000..590a3ff0 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTReal.hpp @@ -0,0 +1,917 @@ +/***************************************************************************** + + FFTReal.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_FFTReal_CURRENT_CODEHEADER) + #error Recursive inclusion of FFTReal code header. +#endif +#define ffft_FFTReal_CURRENT_CODEHEADER + +#if ! defined (ffft_FFTReal_CODEHEADER_INCLUDED) +#define ffft_FFTReal_CODEHEADER_INCLUDED + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include +#include + + + +namespace ffft +{ + + + +static inline bool FFTReal_is_pow2 (long x) +{ + assert (x > 0); + + return ((x & -x) == x); +} + + + +static inline int FFTReal_get_next_pow2 (long x) +{ + --x; + + int p = 0; + while ((x & ~0xFFFFL) != 0) + { + p += 16; + x >>= 16; + } + while ((x & ~0xFL) != 0) + { + p += 4; + x >>= 4; + } + while (x > 0) + { + ++p; + x >>= 1; + } + + return (p); +} + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/* +============================================================================== +Name: ctor +Input parameters: + - length: length of the array on which we want to do a FFT. Range: power of + 2 only, > 0. +Throws: std::bad_alloc +============================================================================== +*/ + +template +FFTReal
    ::FFTReal (long length) +: _length (length) +, _nbr_bits (FFTReal_get_next_pow2 (length)) +, _br_lut () +, _trigo_lut () +, _buffer (length) +, _trigo_osc () +{ + assert (FFTReal_is_pow2 (length)); + assert (_nbr_bits <= MAX_BIT_DEPTH); + + init_br_lut (); + init_trigo_lut (); + init_trigo_osc (); +} + + + +/* +============================================================================== +Name: get_length +Description: + Returns the number of points processed by this FFT object. +Returns: The number of points, power of 2, > 0. +Throws: Nothing +============================================================================== +*/ + +template +long FFTReal
    ::get_length () const +{ + return (_length); +} + + + +/* +============================================================================== +Name: do_fft +Description: + Compute the FFT of the array. +Input parameters: + - x: pointer on the source array (time). +Output parameters: + - f: pointer on the destination array (frequencies). + f [0...length(x)/2] = real values, + f [length(x)/2+1...length(x)-1] = negative imaginary values of + coefficents 1...length(x)/2-1. +Throws: Nothing +============================================================================== +*/ + +template +void FFTReal
    ::do_fft (DataType f [], const DataType x []) const +{ + assert (f != 0); + assert (f != use_buffer ()); + assert (x != 0); + assert (x != use_buffer ()); + assert (x != f); + + // General case + if (_nbr_bits > 2) + { + compute_fft_general (f, x); + } + + // 4-point FFT + else if (_nbr_bits == 2) + { + f [1] = x [0] - x [2]; + f [3] = x [1] - x [3]; + + const DataType b_0 = x [0] + x [2]; + const DataType b_2 = x [1] + x [3]; + + f [0] = b_0 + b_2; + f [2] = b_0 - b_2; + } + + // 2-point FFT + else if (_nbr_bits == 1) + { + f [0] = x [0] + x [1]; + f [1] = x [0] - x [1]; + } + + // 1-point FFT + else + { + f [0] = x [0]; + } +} + + + +/* +============================================================================== +Name: do_ifft +Description: + Compute the inverse FFT of the array. Note that data must be post-scaled: + IFFT (FFT (x)) = x * length (x). +Input parameters: + - f: pointer on the source array (frequencies). + f [0...length(x)/2] = real values + f [length(x)/2+1...length(x)-1] = negative imaginary values of + coefficents 1...length(x)/2-1. +Output parameters: + - x: pointer on the destination array (time). +Throws: Nothing +============================================================================== +*/ + +template +void FFTReal
    ::do_ifft (const DataType f [], DataType x []) const +{ + assert (f != 0); + assert (f != use_buffer ()); + assert (x != 0); + assert (x != use_buffer ()); + assert (x != f); + + // General case + if (_nbr_bits > 2) + { + compute_ifft_general (f, x); + } + + // 4-point IFFT + else if (_nbr_bits == 2) + { + const DataType b_0 = f [0] + f [2]; + const DataType b_2 = f [0] - f [2]; + + x [0] = b_0 + f [1] * 2; + x [2] = b_0 - f [1] * 2; + x [1] = b_2 + f [3] * 2; + x [3] = b_2 - f [3] * 2; + } + + // 2-point IFFT + else if (_nbr_bits == 1) + { + x [0] = f [0] + f [1]; + x [1] = f [0] - f [1]; + } + + // 1-point IFFT + else + { + x [0] = f [0]; + } +} + + + +/* +============================================================================== +Name: rescale +Description: + Scale an array by divide each element by its length. This function should + be called after FFT + IFFT. +Input parameters: + - x: pointer on array to rescale (time or frequency). +Throws: Nothing +============================================================================== +*/ + +template +void FFTReal
    ::rescale (DataType x []) const +{ + const DataType mul = DataType (1.0 / _length); + + if (_length < 4) + { + long i = _length - 1; + do + { + x [i] *= mul; + --i; + } + while (i >= 0); + } + + else + { + assert ((_length & 3) == 0); + + // Could be optimized with SIMD instruction sets (needs alignment check) + long i = _length - 4; + do + { + x [i + 0] *= mul; + x [i + 1] *= mul; + x [i + 2] *= mul; + x [i + 3] *= mul; + i -= 4; + } + while (i >= 0); + } +} + + + +/* +============================================================================== +Name: use_buffer +Description: + Access the internal buffer, whose length is the FFT one. + Buffer content will be erased at each do_fft() / do_ifft() call! + This buffer cannot be used as: + - source for FFT or IFFT done with this object + - destination for FFT or IFFT done with this object +Returns: + Buffer start address +Throws: Nothing +============================================================================== +*/ + +template +typename FFTReal
    ::DataType * FFTReal
    ::use_buffer () const +{ + return (&_buffer [0]); +} + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +void FFTReal
    ::init_br_lut () +{ + const long length = 1L << _nbr_bits; + _br_lut.resize (length); + + _br_lut [0] = 0; + long br_index = 0; + for (long cnt = 1; cnt < length; ++cnt) + { + // ++br_index (bit reversed) + long bit = length >> 1; + while (((br_index ^= bit) & bit) == 0) + { + bit >>= 1; + } + + _br_lut [cnt] = br_index; + } +} + + + +template +void FFTReal
    ::init_trigo_lut () +{ + using namespace std; + + if (_nbr_bits > 3) + { + const long total_len = (1L << (_nbr_bits - 1)) - 4; + _trigo_lut.resize (total_len); + + for (int level = 3; level < _nbr_bits; ++level) + { + const long level_len = 1L << (level - 1); + DataType * const level_ptr = + &_trigo_lut [get_trigo_level_index (level)]; + const double mul = PI / (level_len << 1); + + for (long i = 0; i < level_len; ++ i) + { + level_ptr [i] = static_cast (cos (i * mul)); + } + } + } +} + + + +template +void FFTReal
    ::init_trigo_osc () +{ + const int nbr_osc = _nbr_bits - TRIGO_BD_LIMIT; + if (nbr_osc > 0) + { + _trigo_osc.resize (nbr_osc); + + for (int osc_cnt = 0; osc_cnt < nbr_osc; ++osc_cnt) + { + OscType & osc = _trigo_osc [osc_cnt]; + + const long len = 1L << (TRIGO_BD_LIMIT + osc_cnt); + const double mul = (0.5 * PI) / len; + osc.set_step (mul); + } + } +} + + + +template +const long * FFTReal
    ::get_br_ptr () const +{ + return (&_br_lut [0]); +} + + + +template +const typename FFTReal
    ::DataType * FFTReal
    ::get_trigo_ptr (int level) const +{ + assert (level >= 3); + + return (&_trigo_lut [get_trigo_level_index (level)]); +} + + + +template +long FFTReal
    ::get_trigo_level_index (int level) const +{ + assert (level >= 3); + + return ((1L << (level - 1)) - 4); +} + + + +// Transform in several passes +template +void FFTReal
    ::compute_fft_general (DataType f [], const DataType x []) const +{ + assert (f != 0); + assert (f != use_buffer ()); + assert (x != 0); + assert (x != use_buffer ()); + assert (x != f); + + DataType * sf; + DataType * df; + + if ((_nbr_bits & 1) != 0) + { + df = use_buffer (); + sf = f; + } + else + { + df = f; + sf = use_buffer (); + } + + compute_direct_pass_1_2 (df, x); + compute_direct_pass_3 (sf, df); + + for (int pass = 3; pass < _nbr_bits; ++ pass) + { + compute_direct_pass_n (df, sf, pass); + + DataType * const temp_ptr = df; + df = sf; + sf = temp_ptr; + } +} + + + +template +void FFTReal
    ::compute_direct_pass_1_2 (DataType df [], const DataType x []) const +{ + assert (df != 0); + assert (x != 0); + assert (df != x); + + const long * const bit_rev_lut_ptr = get_br_ptr (); + long coef_index = 0; + do + { + const long rev_index_0 = bit_rev_lut_ptr [coef_index]; + const long rev_index_1 = bit_rev_lut_ptr [coef_index + 1]; + const long rev_index_2 = bit_rev_lut_ptr [coef_index + 2]; + const long rev_index_3 = bit_rev_lut_ptr [coef_index + 3]; + + DataType * const df2 = df + coef_index; + df2 [1] = x [rev_index_0] - x [rev_index_1]; + df2 [3] = x [rev_index_2] - x [rev_index_3]; + + const DataType sf_0 = x [rev_index_0] + x [rev_index_1]; + const DataType sf_2 = x [rev_index_2] + x [rev_index_3]; + + df2 [0] = sf_0 + sf_2; + df2 [2] = sf_0 - sf_2; + + coef_index += 4; + } + while (coef_index < _length); +} + + + +template +void FFTReal
    ::compute_direct_pass_3 (DataType df [], const DataType sf []) const +{ + assert (df != 0); + assert (sf != 0); + assert (df != sf); + + const DataType sqrt2_2 = DataType (SQRT2 * 0.5); + long coef_index = 0; + do + { + DataType v; + + df [coef_index] = sf [coef_index] + sf [coef_index + 4]; + df [coef_index + 4] = sf [coef_index] - sf [coef_index + 4]; + df [coef_index + 2] = sf [coef_index + 2]; + df [coef_index + 6] = sf [coef_index + 6]; + + v = (sf [coef_index + 5] - sf [coef_index + 7]) * sqrt2_2; + df [coef_index + 1] = sf [coef_index + 1] + v; + df [coef_index + 3] = sf [coef_index + 1] - v; + + v = (sf [coef_index + 5] + sf [coef_index + 7]) * sqrt2_2; + df [coef_index + 5] = v + sf [coef_index + 3]; + df [coef_index + 7] = v - sf [coef_index + 3]; + + coef_index += 8; + } + while (coef_index < _length); +} + + + +template +void FFTReal
    ::compute_direct_pass_n (DataType df [], const DataType sf [], int pass) const +{ + assert (df != 0); + assert (sf != 0); + assert (df != sf); + assert (pass >= 3); + assert (pass < _nbr_bits); + + if (pass <= TRIGO_BD_LIMIT) + { + compute_direct_pass_n_lut (df, sf, pass); + } + else + { + compute_direct_pass_n_osc (df, sf, pass); + } +} + + + +template +void FFTReal
    ::compute_direct_pass_n_lut (DataType df [], const DataType sf [], int pass) const +{ + assert (df != 0); + assert (sf != 0); + assert (df != sf); + assert (pass >= 3); + assert (pass < _nbr_bits); + + const long nbr_coef = 1 << pass; + const long h_nbr_coef = nbr_coef >> 1; + const long d_nbr_coef = nbr_coef << 1; + long coef_index = 0; + const DataType * const cos_ptr = get_trigo_ptr (pass); + do + { + const DataType * const sf1r = sf + coef_index; + const DataType * const sf2r = sf1r + nbr_coef; + DataType * const dfr = df + coef_index; + DataType * const dfi = dfr + nbr_coef; + + // Extreme coefficients are always real + dfr [0] = sf1r [0] + sf2r [0]; + dfi [0] = sf1r [0] - sf2r [0]; // dfr [nbr_coef] = + dfr [h_nbr_coef] = sf1r [h_nbr_coef]; + dfi [h_nbr_coef] = sf2r [h_nbr_coef]; + + // Others are conjugate complex numbers + const DataType * const sf1i = sf1r + h_nbr_coef; + const DataType * const sf2i = sf1i + nbr_coef; + for (long i = 1; i < h_nbr_coef; ++ i) + { + const DataType c = cos_ptr [i]; // cos (i*PI/nbr_coef); + const DataType s = cos_ptr [h_nbr_coef - i]; // sin (i*PI/nbr_coef); + DataType v; + + v = sf2r [i] * c - sf2i [i] * s; + dfr [i] = sf1r [i] + v; + dfi [-i] = sf1r [i] - v; // dfr [nbr_coef - i] = + + v = sf2r [i] * s + sf2i [i] * c; + dfi [i] = v + sf1i [i]; + dfi [nbr_coef - i] = v - sf1i [i]; + } + + coef_index += d_nbr_coef; + } + while (coef_index < _length); +} + + + +template +void FFTReal
    ::compute_direct_pass_n_osc (DataType df [], const DataType sf [], int pass) const +{ + assert (df != 0); + assert (sf != 0); + assert (df != sf); + assert (pass > TRIGO_BD_LIMIT); + assert (pass < _nbr_bits); + + const long nbr_coef = 1 << pass; + const long h_nbr_coef = nbr_coef >> 1; + const long d_nbr_coef = nbr_coef << 1; + long coef_index = 0; + OscType & osc = _trigo_osc [pass - (TRIGO_BD_LIMIT + 1)]; + do + { + const DataType * const sf1r = sf + coef_index; + const DataType * const sf2r = sf1r + nbr_coef; + DataType * const dfr = df + coef_index; + DataType * const dfi = dfr + nbr_coef; + + osc.clear_buffers (); + + // Extreme coefficients are always real + dfr [0] = sf1r [0] + sf2r [0]; + dfi [0] = sf1r [0] - sf2r [0]; // dfr [nbr_coef] = + dfr [h_nbr_coef] = sf1r [h_nbr_coef]; + dfi [h_nbr_coef] = sf2r [h_nbr_coef]; + + // Others are conjugate complex numbers + const DataType * const sf1i = sf1r + h_nbr_coef; + const DataType * const sf2i = sf1i + nbr_coef; + for (long i = 1; i < h_nbr_coef; ++ i) + { + osc.step (); + const DataType c = osc.get_cos (); + const DataType s = osc.get_sin (); + DataType v; + + v = sf2r [i] * c - sf2i [i] * s; + dfr [i] = sf1r [i] + v; + dfi [-i] = sf1r [i] - v; // dfr [nbr_coef - i] = + + v = sf2r [i] * s + sf2i [i] * c; + dfi [i] = v + sf1i [i]; + dfi [nbr_coef - i] = v - sf1i [i]; + } + + coef_index += d_nbr_coef; + } + while (coef_index < _length); +} + + + +// Transform in several pass +template +void FFTReal
    ::compute_ifft_general (const DataType f [], DataType x []) const +{ + assert (f != 0); + assert (f != use_buffer ()); + assert (x != 0); + assert (x != use_buffer ()); + assert (x != f); + + DataType * sf = const_cast (f); + DataType * df; + DataType * df_temp; + + if (_nbr_bits & 1) + { + df = use_buffer (); + df_temp = x; + } + else + { + df = x; + df_temp = use_buffer (); + } + + for (int pass = _nbr_bits - 1; pass >= 3; -- pass) + { + compute_inverse_pass_n (df, sf, pass); + + if (pass < _nbr_bits - 1) + { + DataType * const temp_ptr = df; + df = sf; + sf = temp_ptr; + } + else + { + sf = df; + df = df_temp; + } + } + + compute_inverse_pass_3 (df, sf); + compute_inverse_pass_1_2 (x, df); +} + + + +template +void FFTReal
    ::compute_inverse_pass_n (DataType df [], const DataType sf [], int pass) const +{ + assert (df != 0); + assert (sf != 0); + assert (df != sf); + assert (pass >= 3); + assert (pass < _nbr_bits); + + if (pass <= TRIGO_BD_LIMIT) + { + compute_inverse_pass_n_lut (df, sf, pass); + } + else + { + compute_inverse_pass_n_osc (df, sf, pass); + } +} + + + +template +void FFTReal
    ::compute_inverse_pass_n_lut (DataType df [], const DataType sf [], int pass) const +{ + assert (df != 0); + assert (sf != 0); + assert (df != sf); + assert (pass >= 3); + assert (pass < _nbr_bits); + + const long nbr_coef = 1 << pass; + const long h_nbr_coef = nbr_coef >> 1; + const long d_nbr_coef = nbr_coef << 1; + long coef_index = 0; + const DataType * const cos_ptr = get_trigo_ptr (pass); + do + { + const DataType * const sfr = sf + coef_index; + const DataType * const sfi = sfr + nbr_coef; + DataType * const df1r = df + coef_index; + DataType * const df2r = df1r + nbr_coef; + + // Extreme coefficients are always real + df1r [0] = sfr [0] + sfi [0]; // + sfr [nbr_coef] + df2r [0] = sfr [0] - sfi [0]; // - sfr [nbr_coef] + df1r [h_nbr_coef] = sfr [h_nbr_coef] * 2; + df2r [h_nbr_coef] = sfi [h_nbr_coef] * 2; + + // Others are conjugate complex numbers + DataType * const df1i = df1r + h_nbr_coef; + DataType * const df2i = df1i + nbr_coef; + for (long i = 1; i < h_nbr_coef; ++ i) + { + df1r [i] = sfr [i] + sfi [-i]; // + sfr [nbr_coef - i] + df1i [i] = sfi [i] - sfi [nbr_coef - i]; + + const DataType c = cos_ptr [i]; // cos (i*PI/nbr_coef); + const DataType s = cos_ptr [h_nbr_coef - i]; // sin (i*PI/nbr_coef); + const DataType vr = sfr [i] - sfi [-i]; // - sfr [nbr_coef - i] + const DataType vi = sfi [i] + sfi [nbr_coef - i]; + + df2r [i] = vr * c + vi * s; + df2i [i] = vi * c - vr * s; + } + + coef_index += d_nbr_coef; + } + while (coef_index < _length); +} + + + +template +void FFTReal
    ::compute_inverse_pass_n_osc (DataType df [], const DataType sf [], int pass) const +{ + assert (df != 0); + assert (sf != 0); + assert (df != sf); + assert (pass > TRIGO_BD_LIMIT); + assert (pass < _nbr_bits); + + const long nbr_coef = 1 << pass; + const long h_nbr_coef = nbr_coef >> 1; + const long d_nbr_coef = nbr_coef << 1; + long coef_index = 0; + OscType & osc = _trigo_osc [pass - (TRIGO_BD_LIMIT + 1)]; + do + { + const DataType * const sfr = sf + coef_index; + const DataType * const sfi = sfr + nbr_coef; + DataType * const df1r = df + coef_index; + DataType * const df2r = df1r + nbr_coef; + + osc.clear_buffers (); + + // Extreme coefficients are always real + df1r [0] = sfr [0] + sfi [0]; // + sfr [nbr_coef] + df2r [0] = sfr [0] - sfi [0]; // - sfr [nbr_coef] + df1r [h_nbr_coef] = sfr [h_nbr_coef] * 2; + df2r [h_nbr_coef] = sfi [h_nbr_coef] * 2; + + // Others are conjugate complex numbers + DataType * const df1i = df1r + h_nbr_coef; + DataType * const df2i = df1i + nbr_coef; + for (long i = 1; i < h_nbr_coef; ++ i) + { + df1r [i] = sfr [i] + sfi [-i]; // + sfr [nbr_coef - i] + df1i [i] = sfi [i] - sfi [nbr_coef - i]; + + osc.step (); + const DataType c = osc.get_cos (); + const DataType s = osc.get_sin (); + const DataType vr = sfr [i] - sfi [-i]; // - sfr [nbr_coef - i] + const DataType vi = sfi [i] + sfi [nbr_coef - i]; + + df2r [i] = vr * c + vi * s; + df2i [i] = vi * c - vr * s; + } + + coef_index += d_nbr_coef; + } + while (coef_index < _length); +} + + + +template +void FFTReal
    ::compute_inverse_pass_3 (DataType df [], const DataType sf []) const +{ + assert (df != 0); + assert (sf != 0); + assert (df != sf); + + const DataType sqrt2_2 = DataType (SQRT2 * 0.5); + long coef_index = 0; + do + { + df [coef_index] = sf [coef_index] + sf [coef_index + 4]; + df [coef_index + 4] = sf [coef_index] - sf [coef_index + 4]; + df [coef_index + 2] = sf [coef_index + 2] * 2; + df [coef_index + 6] = sf [coef_index + 6] * 2; + + df [coef_index + 1] = sf [coef_index + 1] + sf [coef_index + 3]; + df [coef_index + 3] = sf [coef_index + 5] - sf [coef_index + 7]; + + const DataType vr = sf [coef_index + 1] - sf [coef_index + 3]; + const DataType vi = sf [coef_index + 5] + sf [coef_index + 7]; + + df [coef_index + 5] = (vr + vi) * sqrt2_2; + df [coef_index + 7] = (vi - vr) * sqrt2_2; + + coef_index += 8; + } + while (coef_index < _length); +} + + + +template +void FFTReal
    ::compute_inverse_pass_1_2 (DataType x [], const DataType sf []) const +{ + assert (x != 0); + assert (sf != 0); + assert (x != sf); + + const long * bit_rev_lut_ptr = get_br_ptr (); + const DataType * sf2 = sf; + long coef_index = 0; + do + { + { + const DataType b_0 = sf2 [0] + sf2 [2]; + const DataType b_2 = sf2 [0] - sf2 [2]; + const DataType b_1 = sf2 [1] * 2; + const DataType b_3 = sf2 [3] * 2; + + x [bit_rev_lut_ptr [0]] = b_0 + b_1; + x [bit_rev_lut_ptr [1]] = b_0 - b_1; + x [bit_rev_lut_ptr [2]] = b_2 + b_3; + x [bit_rev_lut_ptr [3]] = b_2 - b_3; + } + { + const DataType b_0 = sf2 [4] + sf2 [6]; + const DataType b_2 = sf2 [4] - sf2 [6]; + const DataType b_1 = sf2 [5] * 2; + const DataType b_3 = sf2 [7] * 2; + + x [bit_rev_lut_ptr [4]] = b_0 + b_1; + x [bit_rev_lut_ptr [5]] = b_0 - b_1; + x [bit_rev_lut_ptr [6]] = b_2 + b_3; + x [bit_rev_lut_ptr [7]] = b_2 - b_3; + } + + sf2 += 8; + coef_index += 8; + bit_rev_lut_ptr += 8; + } + while (coef_index < _length); +} + + + +} // namespace ffft + + + +#endif // ffft_FFTReal_CODEHEADER_INCLUDED + +#undef ffft_FFTReal_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLen.h b/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLen.h new file mode 100644 index 00000000..3c087a8a --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLen.h @@ -0,0 +1,131 @@ +/***************************************************************************** + + FFTRealFixLen.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_FFTRealFixLen_HEADER_INCLUDED) +#define ffft_FFTRealFixLen_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "Array.h" +#include "DynArray.h" +#include "FFTRealFixLenParam.h" +#include "OscSinCos.h" + + + +namespace ffft +{ + + + +template +class FFTRealFixLen +{ + typedef int CompileTimeCheck1 [(LL2 >= 0) ? 1 : -1]; + typedef int CompileTimeCheck2 [(LL2 <= 30) ? 1 : -1]; + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + typedef FFTRealFixLenParam::DataType DataType; + typedef OscSinCos OscType; + + enum { FFT_LEN_L2 = LL2 }; + enum { FFT_LEN = 1 << FFT_LEN_L2 }; + + FFTRealFixLen (); + + inline long get_length () const; + void do_fft (DataType f [], const DataType x []); + void do_ifft (const DataType f [], DataType x []); + void rescale (DataType x []) const; + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + enum { TRIGO_BD_LIMIT = FFTRealFixLenParam::TRIGO_BD_LIMIT }; + + enum { BR_ARR_SIZE_L2 = ((FFT_LEN_L2 - 3) < 0) ? 0 : (FFT_LEN_L2 - 2) }; + enum { BR_ARR_SIZE = 1 << BR_ARR_SIZE_L2 }; + + enum { TRIGO_BD = ((FFT_LEN_L2 - TRIGO_BD_LIMIT) < 0) + ? (int)FFT_LEN_L2 + : (int)TRIGO_BD_LIMIT }; + enum { TRIGO_TABLE_ARR_SIZE_L2 = (LL2 < 4) ? 0 : (TRIGO_BD - 2) }; + enum { TRIGO_TABLE_ARR_SIZE = 1 << TRIGO_TABLE_ARR_SIZE_L2 }; + + enum { NBR_TRIGO_OSC = FFT_LEN_L2 - TRIGO_BD }; + enum { TRIGO_OSC_ARR_SIZE = (NBR_TRIGO_OSC > 0) ? NBR_TRIGO_OSC : 1 }; + + void build_br_lut (); + void build_trigo_lut (); + void build_trigo_osc (); + + DynArray + _buffer; + DynArray + _br_data; + DynArray + _trigo_data; + Array + _trigo_osc; + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + FFTRealFixLen (const FFTRealFixLen &other); + FFTRealFixLen& operator = (const FFTRealFixLen &other); + bool operator == (const FFTRealFixLen &other); + bool operator != (const FFTRealFixLen &other); + +}; // class FFTRealFixLen + + + +} // namespace ffft + + + +#include "FFTRealFixLen.hpp" + + + +#endif // ffft_FFTRealFixLen_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLen.hpp b/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLen.hpp new file mode 100644 index 00000000..d8ac5c56 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLen.hpp @@ -0,0 +1,323 @@ +/***************************************************************************** + + FFTRealFixLen.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_FFTRealFixLen_CURRENT_CODEHEADER) + #error Recursive inclusion of FFTRealFixLen code header. +#endif +#define ffft_FFTRealFixLen_CURRENT_CODEHEADER + +#if ! defined (ffft_FFTRealFixLen_CODEHEADER_INCLUDED) +#define ffft_FFTRealFixLen_CODEHEADER_INCLUDED + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "def.h" +#include "FFTRealPassDirect.h" +#include "FFTRealPassInverse.h" +#include "FFTRealSelect.h" + +#include +#include + +namespace std { } + + + +namespace ffft +{ + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +FFTRealFixLen ::FFTRealFixLen () +: _buffer (FFT_LEN) +, _br_data (BR_ARR_SIZE) +, _trigo_data (TRIGO_TABLE_ARR_SIZE) +, _trigo_osc () +{ + build_br_lut (); + build_trigo_lut (); + build_trigo_osc (); +} + + + +template +long FFTRealFixLen ::get_length () const +{ + return (FFT_LEN); +} + + + +// General case +template +void FFTRealFixLen ::do_fft (DataType f [], const DataType x []) +{ + assert (f != 0); + assert (x != 0); + assert (x != f); + assert (FFT_LEN_L2 >= 3); + + // Do the transform in several passes + const DataType * cos_ptr = &_trigo_data [0]; + const long * br_ptr = &_br_data [0]; + + FFTRealPassDirect ::process ( + FFT_LEN, + f, + &_buffer [0], + x, + cos_ptr, + TRIGO_TABLE_ARR_SIZE, + br_ptr, + &_trigo_osc [0] + ); +} + +// 4-point FFT +template <> +inline void FFTRealFixLen <2>::do_fft (DataType f [], const DataType x []) +{ + assert (f != 0); + assert (x != 0); + assert (x != f); + + f [1] = x [0] - x [2]; + f [3] = x [1] - x [3]; + + const DataType b_0 = x [0] + x [2]; + const DataType b_2 = x [1] + x [3]; + + f [0] = b_0 + b_2; + f [2] = b_0 - b_2; +} + +// 2-point FFT +template <> +inline void FFTRealFixLen <1>::do_fft (DataType f [], const DataType x []) +{ + assert (f != 0); + assert (x != 0); + assert (x != f); + + f [0] = x [0] + x [1]; + f [1] = x [0] - x [1]; +} + +// 1-point FFT +template <> +inline void FFTRealFixLen <0>::do_fft (DataType f [], const DataType x []) +{ + assert (f != 0); + assert (x != 0); + + f [0] = x [0]; +} + + + +// General case +template +void FFTRealFixLen ::do_ifft (const DataType f [], DataType x []) +{ + assert (f != 0); + assert (x != 0); + assert (x != f); + assert (FFT_LEN_L2 >= 3); + + // Do the transform in several passes + DataType * s_ptr = + FFTRealSelect ::sel_bin (&_buffer [0], x); + DataType * d_ptr = + FFTRealSelect ::sel_bin (x, &_buffer [0]); + const DataType * cos_ptr = &_trigo_data [0]; + const long * br_ptr = &_br_data [0]; + + FFTRealPassInverse ::process ( + FFT_LEN, + d_ptr, + s_ptr, + f, + cos_ptr, + TRIGO_TABLE_ARR_SIZE, + br_ptr, + &_trigo_osc [0] + ); +} + +// 4-point IFFT +template <> +inline void FFTRealFixLen <2>::do_ifft (const DataType f [], DataType x []) +{ + assert (f != 0); + assert (x != 0); + assert (x != f); + + const DataType b_0 = f [0] + f [2]; + const DataType b_2 = f [0] - f [2]; + + x [0] = b_0 + f [1] * 2; + x [2] = b_0 - f [1] * 2; + x [1] = b_2 + f [3] * 2; + x [3] = b_2 - f [3] * 2; +} + +// 2-point IFFT +template <> +inline void FFTRealFixLen <1>::do_ifft (const DataType f [], DataType x []) +{ + assert (f != 0); + assert (x != 0); + assert (x != f); + + x [0] = f [0] + f [1]; + x [1] = f [0] - f [1]; +} + +// 1-point IFFT +template <> +inline void FFTRealFixLen <0>::do_ifft (const DataType f [], DataType x []) +{ + assert (f != 0); + assert (x != 0); + assert (x != f); + + x [0] = f [0]; +} + + + + +template +void FFTRealFixLen ::rescale (DataType x []) const +{ + assert (x != 0); + + const DataType mul = DataType (1.0 / FFT_LEN); + + if (FFT_LEN < 4) + { + long i = FFT_LEN - 1; + do + { + x [i] *= mul; + --i; + } + while (i >= 0); + } + + else + { + assert ((FFT_LEN & 3) == 0); + + // Could be optimized with SIMD instruction sets (needs alignment check) + long i = FFT_LEN - 4; + do + { + x [i + 0] *= mul; + x [i + 1] *= mul; + x [i + 2] *= mul; + x [i + 3] *= mul; + i -= 4; + } + while (i >= 0); + } +} + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +void FFTRealFixLen ::build_br_lut () +{ + _br_data [0] = 0; + for (long cnt = 1; cnt < BR_ARR_SIZE; ++cnt) + { + long index = cnt << 2; + long br_index = 0; + + int bit_cnt = FFT_LEN_L2; + do + { + br_index <<= 1; + br_index += (index & 1); + index >>= 1; + + -- bit_cnt; + } + while (bit_cnt > 0); + + _br_data [cnt] = br_index; + } +} + + + +template +void FFTRealFixLen ::build_trigo_lut () +{ + const double mul = (0.5 * PI) / TRIGO_TABLE_ARR_SIZE; + for (long i = 0; i < TRIGO_TABLE_ARR_SIZE; ++ i) + { + using namespace std; + + _trigo_data [i] = DataType (cos (i * mul)); + } +} + + + +template +void FFTRealFixLen ::build_trigo_osc () +{ + for (int i = 0; i < NBR_TRIGO_OSC; ++i) + { + OscType & osc = _trigo_osc [i]; + + const long len = static_cast (TRIGO_TABLE_ARR_SIZE) << (i + 1); + const double mul = (0.5 * PI) / len; + osc.set_step (mul); + } +} + + + +} // namespace ffft + + + +#endif // ffft_FFTRealFixLen_CODEHEADER_INCLUDED + +#undef ffft_FFTRealFixLen_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLenParam.h b/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLenParam.h new file mode 100644 index 00000000..2fde41ca --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealFixLenParam.h @@ -0,0 +1,90 @@ +/***************************************************************************** + + FFTRealFixLenParam.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_FFTRealFixLenParam_HEADER_INCLUDED) +#define ffft_FFTRealFixLenParam_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +namespace ffft +{ + + + +class FFTRealFixLenParam +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + // Over this bit depth, we use direct calculation for sin/cos + enum { TRIGO_BD_LIMIT = 12 }; + + typedef float DataType; + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + FFTRealFixLenParam (); + FFTRealFixLenParam (const FFTRealFixLenParam &other); + FFTRealFixLenParam & + operator = (const FFTRealFixLenParam &other); + bool operator == (const FFTRealFixLenParam &other); + bool operator != (const FFTRealFixLenParam &other); + +}; // class FFTRealFixLenParam + + + +} // namespace ffft + + + +//#include "ffft/FFTRealFixLenParam.hpp" + + + +#endif // ffft_FFTRealFixLenParam_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealPassDirect.h b/plugins/Cardinal/src/sassy/fftreal/FFTRealPassDirect.h new file mode 100644 index 00000000..7aa5816c --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealPassDirect.h @@ -0,0 +1,96 @@ +/***************************************************************************** + + FFTRealPassDirect.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_FFTRealPassDirect_HEADER_INCLUDED) +#define ffft_FFTRealPassDirect_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "def.h" +#include "FFTRealFixLenParam.h" +#include "OscSinCos.h" + + + +namespace ffft +{ + + + +template +class FFTRealPassDirect +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + typedef FFTRealFixLenParam::DataType DataType; + typedef OscSinCos OscType; + + ffft_FORCEINLINE static void + process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []); + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + FFTRealPassDirect (); + FFTRealPassDirect (const FFTRealPassDirect &other); + FFTRealPassDirect & + operator = (const FFTRealPassDirect &other); + bool operator == (const FFTRealPassDirect &other); + bool operator != (const FFTRealPassDirect &other); + +}; // class FFTRealPassDirect + + + +} // namespace ffft + + + +#include "FFTRealPassDirect.hpp" + + + +#endif // ffft_FFTRealPassDirect_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealPassDirect.hpp b/plugins/Cardinal/src/sassy/fftreal/FFTRealPassDirect.hpp new file mode 100644 index 00000000..2cbc5bf4 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealPassDirect.hpp @@ -0,0 +1,205 @@ +/***************************************************************************** + + FFTRealPassDirect.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_FFTRealPassDirect_CURRENT_CODEHEADER) + #error Recursive inclusion of FFTRealPassDirect code header. +#endif +#define ffft_FFTRealPassDirect_CURRENT_CODEHEADER + +#if ! defined (ffft_FFTRealPassDirect_CODEHEADER_INCLUDED) +#define ffft_FFTRealPassDirect_CODEHEADER_INCLUDED + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "FFTRealUseTrigo.h" + + + +namespace ffft +{ + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template <> +inline void FFTRealPassDirect <1>::process (long len, DataType dest_ptr [], DataType [], const DataType x_ptr [], const DataType [], long , const long br_ptr [], OscType []) +{ + // First and second pass at once + const long qlen = len >> 2; + + long coef_index = 0; + do + { + // To do: unroll the loop (2x). + const long ri_0 = br_ptr [coef_index >> 2]; + const long ri_1 = ri_0 + 2 * qlen; // bit_rev_lut_ptr [coef_index + 1]; + const long ri_2 = ri_0 + 1 * qlen; // bit_rev_lut_ptr [coef_index + 2]; + const long ri_3 = ri_0 + 3 * qlen; // bit_rev_lut_ptr [coef_index + 3]; + + DataType * const df2 = dest_ptr + coef_index; + df2 [1] = x_ptr [ri_0] - x_ptr [ri_1]; + df2 [3] = x_ptr [ri_2] - x_ptr [ri_3]; + + const DataType sf_0 = x_ptr [ri_0] + x_ptr [ri_1]; + const DataType sf_2 = x_ptr [ri_2] + x_ptr [ri_3]; + + df2 [0] = sf_0 + sf_2; + df2 [2] = sf_0 - sf_2; + + coef_index += 4; + } + while (coef_index < len); +} + +template <> +inline void FFTRealPassDirect <2>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []) +{ + // Executes "previous" passes first. Inverts source and destination buffers + FFTRealPassDirect <1>::process ( + len, + src_ptr, + dest_ptr, + x_ptr, + cos_ptr, + cos_len, + br_ptr, + osc_list + ); + + // Third pass + const DataType sqrt2_2 = DataType (SQRT2 * 0.5); + + long coef_index = 0; + do + { + dest_ptr [coef_index ] = src_ptr [coef_index] + src_ptr [coef_index + 4]; + dest_ptr [coef_index + 4] = src_ptr [coef_index] - src_ptr [coef_index + 4]; + dest_ptr [coef_index + 2] = src_ptr [coef_index + 2]; + dest_ptr [coef_index + 6] = src_ptr [coef_index + 6]; + + DataType v; + + v = (src_ptr [coef_index + 5] - src_ptr [coef_index + 7]) * sqrt2_2; + dest_ptr [coef_index + 1] = src_ptr [coef_index + 1] + v; + dest_ptr [coef_index + 3] = src_ptr [coef_index + 1] - v; + + v = (src_ptr [coef_index + 5] + src_ptr [coef_index + 7]) * sqrt2_2; + dest_ptr [coef_index + 5] = v + src_ptr [coef_index + 3]; + dest_ptr [coef_index + 7] = v - src_ptr [coef_index + 3]; + + coef_index += 8; + } + while (coef_index < len); +} + +template +void FFTRealPassDirect ::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []) +{ + // Executes "previous" passes first. Inverts source and destination buffers + FFTRealPassDirect ::process ( + len, + src_ptr, + dest_ptr, + x_ptr, + cos_ptr, + cos_len, + br_ptr, + osc_list + ); + + const long dist = 1L << (PASS - 1); + const long c1_r = 0; + const long c1_i = dist; + const long c2_r = dist * 2; + const long c2_i = dist * 3; + const long cend = dist * 4; + const long table_step = cos_len >> (PASS - 1); + + enum { TRIGO_OSC = PASS - FFTRealFixLenParam::TRIGO_BD_LIMIT }; + enum { TRIGO_DIRECT = (TRIGO_OSC >= 0) ? 1 : 0 }; + + long coef_index = 0; + do + { + const DataType * const sf = src_ptr + coef_index; + DataType * const df = dest_ptr + coef_index; + + // Extreme coefficients are always real + df [c1_r] = sf [c1_r] + sf [c2_r]; + df [c2_r] = sf [c1_r] - sf [c2_r]; + df [c1_i] = sf [c1_i]; + df [c2_i] = sf [c2_i]; + + FFTRealUseTrigo ::prepare (osc_list [TRIGO_OSC]); + + // Others are conjugate complex numbers + for (long i = 1; i < dist; ++ i) + { + DataType c; + DataType s; + FFTRealUseTrigo ::iterate ( + osc_list [TRIGO_OSC], + c, + s, + cos_ptr, + i * table_step, + (dist - i) * table_step + ); + + const DataType sf_r_i = sf [c1_r + i]; + const DataType sf_i_i = sf [c1_i + i]; + + const DataType v1 = sf [c2_r + i] * c - sf [c2_i + i] * s; + df [c1_r + i] = sf_r_i + v1; + df [c2_r - i] = sf_r_i - v1; + + const DataType v2 = sf [c2_r + i] * s + sf [c2_i + i] * c; + df [c2_r + i] = v2 + sf_i_i; + df [cend - i] = v2 - sf_i_i; + } + + coef_index += cend; + } + while (coef_index < len); +} + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +} // namespace ffft + + + +#endif // ffft_FFTRealPassDirect_CODEHEADER_INCLUDED + +#undef ffft_FFTRealPassDirect_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealPassInverse.h b/plugins/Cardinal/src/sassy/fftreal/FFTRealPassInverse.h new file mode 100644 index 00000000..f822231f --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealPassInverse.h @@ -0,0 +1,101 @@ +/***************************************************************************** + + FFTRealPassInverse.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_FFTRealPassInverse_HEADER_INCLUDED) +#define ffft_FFTRealPassInverse_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "def.h" +#include "FFTRealFixLenParam.h" +#include "OscSinCos.h" + + + + +namespace ffft +{ + + + +template +class FFTRealPassInverse +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + typedef FFTRealFixLenParam::DataType DataType; + typedef OscSinCos OscType; + + ffft_FORCEINLINE static void + process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType f_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []); + ffft_FORCEINLINE static void + process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []); + ffft_FORCEINLINE static void + process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []); + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + FFTRealPassInverse (); + FFTRealPassInverse (const FFTRealPassInverse &other); + FFTRealPassInverse & + operator = (const FFTRealPassInverse &other); + bool operator == (const FFTRealPassInverse &other); + bool operator != (const FFTRealPassInverse &other); + +}; // class FFTRealPassInverse + + + +} // namespace ffft + + + +#include "FFTRealPassInverse.hpp" + + + +#endif // ffft_FFTRealPassInverse_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealPassInverse.hpp b/plugins/Cardinal/src/sassy/fftreal/FFTRealPassInverse.hpp new file mode 100644 index 00000000..f93ef209 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealPassInverse.hpp @@ -0,0 +1,230 @@ +/***************************************************************************** + + FFTRealPassInverse.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_FFTRealPassInverse_CURRENT_CODEHEADER) + #error Recursive inclusion of FFTRealPassInverse code header. +#endif +#define ffft_FFTRealPassInverse_CURRENT_CODEHEADER + +#if ! defined (ffft_FFTRealPassInverse_CODEHEADER_INCLUDED) +#define ffft_FFTRealPassInverse_CODEHEADER_INCLUDED + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "FFTRealUseTrigo.h" + + + +namespace ffft +{ + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +void FFTRealPassInverse ::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType f_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []) +{ + process_internal ( + len, + dest_ptr, + f_ptr, + cos_ptr, + cos_len, + br_ptr, + osc_list + ); + FFTRealPassInverse ::process_rec ( + len, + src_ptr, + dest_ptr, + cos_ptr, + cos_len, + br_ptr, + osc_list + ); +} + + + +template +void FFTRealPassInverse ::process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []) +{ + process_internal ( + len, + dest_ptr, + src_ptr, + cos_ptr, + cos_len, + br_ptr, + osc_list + ); + FFTRealPassInverse ::process_rec ( + len, + src_ptr, + dest_ptr, + cos_ptr, + cos_len, + br_ptr, + osc_list + ); +} + +template <> +inline void FFTRealPassInverse <0>::process_rec (long , DataType [], DataType [], const DataType [], long , const long [], OscType []) +{ + // Stops recursion +} + + + +template +void FFTRealPassInverse ::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []) +{ + const long dist = 1L << (PASS - 1); + const long c1_r = 0; + const long c1_i = dist; + const long c2_r = dist * 2; + const long c2_i = dist * 3; + const long cend = dist * 4; + const long table_step = cos_len >> (PASS - 1); + + enum { TRIGO_OSC = PASS - FFTRealFixLenParam::TRIGO_BD_LIMIT }; + enum { TRIGO_DIRECT = (TRIGO_OSC >= 0) ? 1 : 0 }; + + long coef_index = 0; + do + { + const DataType * const sf = src_ptr + coef_index; + DataType * const df = dest_ptr + coef_index; + + // Extreme coefficients are always real + df [c1_r] = sf [c1_r] + sf [c2_r]; + df [c2_r] = sf [c1_r] - sf [c2_r]; + df [c1_i] = sf [c1_i] * 2; + df [c2_i] = sf [c2_i] * 2; + + FFTRealUseTrigo ::prepare (osc_list [TRIGO_OSC]); + + // Others are conjugate complex numbers + for (long i = 1; i < dist; ++ i) + { + df [c1_r + i] = sf [c1_r + i] + sf [c2_r - i]; + df [c1_i + i] = sf [c2_r + i] - sf [cend - i]; + + DataType c; + DataType s; + FFTRealUseTrigo ::iterate ( + osc_list [TRIGO_OSC], + c, + s, + cos_ptr, + i * table_step, + (dist - i) * table_step + ); + + const DataType vr = sf [c1_r + i] - sf [c2_r - i]; + const DataType vi = sf [c2_r + i] + sf [cend - i]; + + df [c2_r + i] = vr * c + vi * s; + df [c2_i + i] = vi * c - vr * s; + } + + coef_index += cend; + } + while (coef_index < len); +} + +template <> +inline void FFTRealPassInverse <2>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType [], long , const long [], OscType []) +{ + // Antepenultimate pass + const DataType sqrt2_2 = DataType (SQRT2 * 0.5); + + long coef_index = 0; + do + { + dest_ptr [coef_index ] = src_ptr [coef_index] + src_ptr [coef_index + 4]; + dest_ptr [coef_index + 4] = src_ptr [coef_index] - src_ptr [coef_index + 4]; + dest_ptr [coef_index + 2] = src_ptr [coef_index + 2] * 2; + dest_ptr [coef_index + 6] = src_ptr [coef_index + 6] * 2; + + dest_ptr [coef_index + 1] = src_ptr [coef_index + 1] + src_ptr [coef_index + 3]; + dest_ptr [coef_index + 3] = src_ptr [coef_index + 5] - src_ptr [coef_index + 7]; + + const DataType vr = src_ptr [coef_index + 1] - src_ptr [coef_index + 3]; + const DataType vi = src_ptr [coef_index + 5] + src_ptr [coef_index + 7]; + + dest_ptr [coef_index + 5] = (vr + vi) * sqrt2_2; + dest_ptr [coef_index + 7] = (vi - vr) * sqrt2_2; + + coef_index += 8; + } + while (coef_index < len); +} + +template <> +inline void FFTRealPassInverse <1>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType [], long , const long br_ptr [], OscType []) +{ + // Penultimate and last pass at once + const long qlen = len >> 2; + + long coef_index = 0; + do + { + const long ri_0 = br_ptr [coef_index >> 2]; + + const DataType b_0 = src_ptr [coef_index ] + src_ptr [coef_index + 2]; + const DataType b_2 = src_ptr [coef_index ] - src_ptr [coef_index + 2]; + const DataType b_1 = src_ptr [coef_index + 1] * 2; + const DataType b_3 = src_ptr [coef_index + 3] * 2; + + dest_ptr [ri_0 ] = b_0 + b_1; + dest_ptr [ri_0 + 2 * qlen] = b_0 - b_1; + dest_ptr [ri_0 + 1 * qlen] = b_2 + b_3; + dest_ptr [ri_0 + 3 * qlen] = b_2 - b_3; + + coef_index += 4; + } + while (coef_index < len); +} + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +} // namespace ffft + + + +#endif // ffft_FFTRealPassInverse_CODEHEADER_INCLUDED + +#undef ffft_FFTRealPassInverse_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealSelect.h b/plugins/Cardinal/src/sassy/fftreal/FFTRealSelect.h new file mode 100644 index 00000000..c8bed63f --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealSelect.h @@ -0,0 +1,78 @@ +/***************************************************************************** + + FFTRealSelect.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_FFTRealSelect_HEADER_INCLUDED) +#define ffft_FFTRealSelect_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "def.h" + + + +namespace ffft +{ + + + +template +class FFTRealSelect +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + ffft_FORCEINLINE static float * + sel_bin (float *e_ptr, float *o_ptr); + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + FFTRealSelect (); + ~FFTRealSelect (); + FFTRealSelect (const FFTRealSelect &other); + FFTRealSelect& operator = (const FFTRealSelect &other); + bool operator == (const FFTRealSelect &other); + bool operator != (const FFTRealSelect &other); + +}; // class FFTRealSelect + + + +} // namespace ffft + + + +#include "FFTRealSelect.hpp" + + + +#endif // ffft_FFTRealSelect_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealSelect.hpp b/plugins/Cardinal/src/sassy/fftreal/FFTRealSelect.hpp new file mode 100644 index 00000000..a8ed9f1e --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealSelect.hpp @@ -0,0 +1,63 @@ +/***************************************************************************** + + FFTRealSelect.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_FFTRealSelect_CURRENT_CODEHEADER) + #error Recursive inclusion of FFTRealSelect code header. +#endif +#define ffft_FFTRealSelect_CURRENT_CODEHEADER + +#if ! defined (ffft_FFTRealSelect_CODEHEADER_INCLUDED) +#define ffft_FFTRealSelect_CODEHEADER_INCLUDED + + + +namespace ffft +{ + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +float * FFTRealSelect

    ::sel_bin (float *e_ptr, float *o_ptr) +{ + return (o_ptr); +} + + + +template <> +inline float * FFTRealSelect <0>::sel_bin (float *e_ptr, float *) +{ + return (e_ptr); +} + + + +} // namespace ffft + + + +#endif // ffft_FFTRealSelect_CODEHEADER_INCLUDED + +#undef ffft_FFTRealSelect_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealUseTrigo.h b/plugins/Cardinal/src/sassy/fftreal/FFTRealUseTrigo.h new file mode 100644 index 00000000..47067f04 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealUseTrigo.h @@ -0,0 +1,99 @@ +/***************************************************************************** + + FFTRealUseTrigo.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_FFTRealUseTrigo_HEADER_INCLUDED) +#define ffft_FFTRealUseTrigo_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "def.h" +#include "FFTRealFixLenParam.h" +#include "OscSinCos.h" + + + +namespace ffft +{ + + + +template +class FFTRealUseTrigo +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + typedef FFTRealFixLenParam::DataType DataType; + typedef OscSinCos OscType; + + ffft_FORCEINLINE static void + prepare (OscType &osc); + ffft_FORCEINLINE static void + iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s); + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + FFTRealUseTrigo (); + ~FFTRealUseTrigo (); + FFTRealUseTrigo (const FFTRealUseTrigo &other); + FFTRealUseTrigo & + operator = (const FFTRealUseTrigo &other); + bool operator == (const FFTRealUseTrigo &other); + bool operator != (const FFTRealUseTrigo &other); + +}; // class FFTRealUseTrigo + + + +} // namespace ffft + + + +#include "FFTRealUseTrigo.hpp" + + + +#endif // ffft_FFTRealUseTrigo_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/FFTRealUseTrigo.hpp b/plugins/Cardinal/src/sassy/fftreal/FFTRealUseTrigo.hpp new file mode 100644 index 00000000..a6d5cb12 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/FFTRealUseTrigo.hpp @@ -0,0 +1,92 @@ +/***************************************************************************** + + FFTRealUseTrigo.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_FFTRealUseTrigo_CURRENT_CODEHEADER) + #error Recursive inclusion of FFTRealUseTrigo code header. +#endif +#define ffft_FFTRealUseTrigo_CURRENT_CODEHEADER + +#if ! defined (ffft_FFTRealUseTrigo_CODEHEADER_INCLUDED) +#define ffft_FFTRealUseTrigo_CODEHEADER_INCLUDED + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "OscSinCos.h" + + + +namespace ffft +{ + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +void FFTRealUseTrigo ::prepare (OscType &osc) +{ + osc.clear_buffers (); +} + +template <> +inline void FFTRealUseTrigo <0>::prepare (OscType &) +{ + // Nothing +} + + + +template +void FFTRealUseTrigo ::iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s) +{ + osc.step (); + c = osc.get_cos (); + s = osc.get_sin (); +} + +template <> +inline void FFTRealUseTrigo <0>::iterate (OscType &, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s) +{ + c = cos_ptr [index_c]; + s = cos_ptr [index_s]; +} + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +} // namespace ffft + + + +#endif // ffft_FFTRealUseTrigo_CODEHEADER_INCLUDED + +#undef ffft_FFTRealUseTrigo_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/OscSinCos.h b/plugins/Cardinal/src/sassy/fftreal/OscSinCos.h new file mode 100644 index 00000000..c4539f93 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/OscSinCos.h @@ -0,0 +1,107 @@ +/***************************************************************************** + + OscSinCos.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_OscSinCos_HEADER_INCLUDED) +#define ffft_OscSinCos_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include "def.h" + + + +namespace ffft +{ + + + +template +class OscSinCos +{ + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +public: + + typedef T DataType; + + OscSinCos (); + + ffft_FORCEINLINE void + set_step (double angle_rad); + + ffft_FORCEINLINE DataType + get_cos () const; + ffft_FORCEINLINE DataType + get_sin () const; + ffft_FORCEINLINE void + step (); + ffft_FORCEINLINE void + clear_buffers (); + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +protected: + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + DataType _pos_cos; // Current phase expressed with sin and cos. [-1 ; 1] + DataType _pos_sin; // - + DataType _step_cos; // Phase increment per step, [-1 ; 1] + DataType _step_sin; // - + + + +/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +private: + + OscSinCos (const OscSinCos &other); + OscSinCos & operator = (const OscSinCos &other); + bool operator == (const OscSinCos &other); + bool operator != (const OscSinCos &other); + +}; // class OscSinCos + + + +} // namespace ffft + + + +#include "OscSinCos.hpp" + + + +#endif // ffft_OscSinCos_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/OscSinCos.hpp b/plugins/Cardinal/src/sassy/fftreal/OscSinCos.hpp new file mode 100644 index 00000000..b565ad12 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/OscSinCos.hpp @@ -0,0 +1,123 @@ +/***************************************************************************** + + OscSinCos.hpp + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if defined (ffft_OscSinCos_CURRENT_CODEHEADER) + #error Recursive inclusion of OscSinCos code header. +#endif +#define ffft_OscSinCos_CURRENT_CODEHEADER + +#if ! defined (ffft_OscSinCos_CODEHEADER_INCLUDED) +#define ffft_OscSinCos_CODEHEADER_INCLUDED + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + +#include + +namespace std { } + + + +namespace ffft +{ + + + +/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +template +OscSinCos ::OscSinCos () +: _pos_cos (1) +, _pos_sin (0) +, _step_cos (1) +, _step_sin (0) +{ + // Nothing +} + + + +template +void OscSinCos ::set_step (double angle_rad) +{ + using namespace std; + + _step_cos = static_cast (cos (angle_rad)); + _step_sin = static_cast (sin (angle_rad)); +} + + + +template +typename OscSinCos ::DataType OscSinCos ::get_cos () const +{ + return (_pos_cos); +} + + + +template +typename OscSinCos ::DataType OscSinCos ::get_sin () const +{ + return (_pos_sin); +} + + + +template +void OscSinCos ::step () +{ + const DataType old_cos = _pos_cos; + const DataType old_sin = _pos_sin; + + _pos_cos = old_cos * _step_cos - old_sin * _step_sin; + _pos_sin = old_cos * _step_sin + old_sin * _step_cos; +} + + + +template +void OscSinCos ::clear_buffers () +{ + _pos_cos = static_cast (1); + _pos_sin = static_cast (0); +} + + + +/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +} // namespace ffft + + + +#endif // ffft_OscSinCos_CODEHEADER_INCLUDED + +#undef ffft_OscSinCos_CURRENT_CODEHEADER + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/def.h b/plugins/Cardinal/src/sassy/fftreal/def.h new file mode 100644 index 00000000..f2269695 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/def.h @@ -0,0 +1,60 @@ +/***************************************************************************** + + def.h + By Laurent de Soras + +--- Legal stuff --- + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +*Tab=3***********************************************************************/ + + + +#if ! defined (ffft_def_HEADER_INCLUDED) +#define ffft_def_HEADER_INCLUDED + +#if defined (_MSC_VER) + #pragma once + #pragma warning (4 : 4250) // "Inherits via dominance." +#endif + + + +/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ + + + +namespace ffft +{ + + + +const double PI = 3.1415926535897932384626433832795; +const double SQRT2 = 1.41421356237309514547462185873883; + +#if defined (_MSC_VER) + + #define ffft_FORCEINLINE __forceinline + +#else + + #define ffft_FORCEINLINE inline + +#endif + + + +} // namespace ffft + + + +#endif // ffft_def_HEADER_INCLUDED + + + +/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ diff --git a/plugins/Cardinal/src/sassy/fftreal/license.txt b/plugins/Cardinal/src/sassy/fftreal/license.txt new file mode 100644 index 00000000..5a8e3325 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/license.txt @@ -0,0 +1,14 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + diff --git a/plugins/Cardinal/src/sassy/fftreal/readme.txt b/plugins/Cardinal/src/sassy/fftreal/readme.txt new file mode 100644 index 00000000..abce4e61 --- /dev/null +++ b/plugins/Cardinal/src/sassy/fftreal/readme.txt @@ -0,0 +1,293 @@ +============================================================================== + + FFTReal + Version 2.11 + + Fourier transformation (FFT, IFFT) library specialised for real data + Portable ISO C++ + + Copyright (c) 1999-2010 Laurent de Soras + Object Pascal port (c) Frederic Vanmol + +============================================================================== + + + +Contents: + +1. Legal +2. Content +3. Using FFTReal +3.1 FFTReal - Length fixed at run-time +3.2 FFTRealFixLen - Length fixed at compile-time +3.3 Data organisation +4. Compilation and testing +5. History +6. Contact + + + +1. Legal +-------- + +FFTReal is distributed under the terms of the Do What The Fuck You Want To +Public License. + +Check the file license.txt to get full information about the license. + + + +2. Content +---------- + +FFTReal is a library to compute Discrete Fourier Transforms (DFT) with the +FFT algorithm (Fast Fourier Transform) on arrays of real numbers. It can +also compute the inverse transform. + +You should find in this package a lot of files ; some of them are of +particular interest: +- readme.txt : you are reading it +- ffft/FFTReal.h : FFT, length fixed at run-time +- ffft/FFTRealFixLen.h: FFT, length fixed at compile-time +- delphi/FFTReal.pas : Pascal implementation (working but not up-to-date) + + + +3. Using FFTReal +---------------- + +Important - if you were using older versions of FFTReal (up to 1.03), some +things have changed. FFTReal is now a template. Therefore use FFTReal +or FFTReal in your code depending on the application datatype. The +flt_t typedef has been removed. And if you were previously using FFTReal 2.0, +note that all the classes have moved to the ffft namespace. + +You have two ways to use FFTReal. In the first way, the FFT has its length +fixed at run-time, when the object is instanciated. It means that you have +not to know the length when you write the code. This is the usual way of +proceeding. + + +3.1 FFTReal - Length fixed at run-time +-------------------------------------- + +Just instanciate one time a FFTReal object. Specify the data type you want +as template parameter (only floating point: float, double, long double or +custom type). The constructor precompute a lot of things, so it may be a bit +long. The parameter is the number of points used for the next FFTs. It must +be a power of 2: + + #include "ffft/FFTReal.h" + ... + long len = 1024; + ... + // 1024-point FFT object constructed. + ffft::FFTReal fft_object (len); + +Then you can use this object to compute as many FFTs and IFFTs as you want. +They will be computed very quickly because a lot of work has been done in the +object construction. + + float x [1024]; + float f [1024]; + + ... + fft_object.do_fft (f, x); // x (real) --FFT---> f (complex) + ... + fft_object.do_ifft (f, x); // f (complex) --IFFT--> x (real) + fft_object.rescale (x); // Post-scaling should be done after FFT+IFFT + ... + +x [] and f [] are floating point number arrays. x [] is the real number +sequence which we want to compute the FFT. f [] is the result, in the +"frequency" domain. f has the same number of elements as x [], but f [] +elements are complex numbers. The routine uses some FFT properties to +optimize memory and to reduce calculations: the transformaton of a real +number sequence is a conjugate complex number sequence: F [k] = F [-k]*. + + +3.2 FFTRealFixLen - Length fixed at compile-time +------------------------------------------------ + +This class is significantly faster than the previous one, giving a speed +gain between 50 and 100 %. The template parameter is the base-2 logarithm of +the FFT length. The datatype is float; it can be changed by modifying the +DataType typedef in FFTRealFixLenParam.h. As FFTReal class, it supports +only floating-point types or equivalent. + +Use is similar as the one of FFTReal. To instanciate the object, just proceed +as indicated below: + + #include "ffft/FFTRealFixLen.h" + ... + // 1024-point (2^10) FFT object constructed. + ffft::FFTRealFixLen <10> fft_object; + +Warning: long FFT objects may take a very long time to compile, depending on +the compiler and its optimisation options. If compilation time is too high, +encapsulate the FFT object in a seprate class whose header doesn't need +to include FFTRealFixLen.h, so you just have to compile the wrapper once +and only link it the other times. For example (quick, dirty and incomplete): + +ffft/FFTWrapper.h: | ffft/FFTWrapper.cpp: + | +class FFTWrapper | #include "ffft/FFTRealFixLen.h" +{ | #include "ffft/FFTWrapper.h" +public: | + FFTWrapper (); | FFTWrapper::FFTWrapper () + ~FFTWrapper (); | : _impl_ptr ((void*) new FTRealFixLen <10>) + void do_fft (...); | { + void do_ifft (...); | } +private: | + void *_impl_ptr; | ... +} | + + +3.3 Data organisation +--------------------- + +Mathematically speaking, DFT formulas below show what does FFTReal: + +do_fft() : f(k) = sum (p = 0, N-1, x(p) * exp (+j*2*pi*k*p/N)) +do_ifft(): x(k) = sum (p = 0, N-1, f(p) * exp (-j*2*pi*k*p/N)) + +Where j is the square root of -1. The formulas differ only by the sign of +the exponential. When the sign is positive, the transform is called positive. +Common formulas for Fourier transform are negative for the direct tranform and +positive for the inverse one. + +However in these formulas, f is an array of complex numbers and doesn't +correspound exactly to the f[] array taken as function parameter. The +following table shows how the f[] sequence is mapped onto the usable FFT +coefficients (called bins): + + FFTReal output | Positive FFT equiv. | Negative FFT equiv. + ---------------+-----------------------+----------------------- + f [0] | Real (bin 0) | Real (bin 0) + f [...] | Real (bin ...) | Real (bin ...) + f [length/2] | Real (bin length/2) | Real (bin length/2) + f [length/2+1] | Imag (bin 1) | -Imag (bin 1) + f [...] | Imag (bin ...) | -Imag (bin ...) + f [length-1] | Imag (bin length/2-1) | -Imag (bin length/2-1) + +And FFT bins are distributed in f [] as above: + + | | Positive FFT | Negative FFT + Bin | Real part | imaginary part | imaginary part + ------------+----------------+-----------------+--------------- + 0 | f [0] | 0 | 0 + 1 | f [1] | f [length/2+1] | -f [length/2+1] + ... | f [...], | f [...] | -f [...] + length/2-1 | f [length/2-1] | f [length-1] | -f [length-1] + length/2 | f [length/2] | 0 | 0 + length/2+1 | f [length/2-1] | -f [length-1] | f [length-1] + ... | f [...] | -f [...] | f [...] + length-1 | f [1] | -f [length/2+1] | f [length/2+1] + +f [] coefficients have the same layout for FFT and IFFT functions. You may +notice that scaling must be done if you want to retrieve x after FFT and IFFT. +Actually, IFFT (FFT (x)) = x * length(x). This is a not a problem because +most of the applications don't care about absolute values. Thus, the operation +requires less calculation. If you want to use the FFT and IFFT to transform a +signal, you have to apply post- (or pre-) processing yourself. Multiplying +or dividing floating point numbers by a power of 2 doesn't generate extra +computation noise. + + + +4. Compilation and testing +-------------------------- + +Drop the following files into your project or makefile: + +ffft/Array.* +ffft/def.h +ffft/DynArray.* +ffft/FFTReal*.h* +ffft/OscSinCos.* + +Other files are for testing purpose only, do not include them if you just need +to use the library; they are not needed to use FFTReal in your own programs. + +FFTReal may be compiled in two versions: release and debug. Debug version +has checks that could slow down the code. Define NDEBUG to set the Release +mode. For example, the command line to compile the test bench on GCC would +look like: + +Debug mode: +g++ -Wall -I. -o ./fftreal_debug.exe ffft/test/*.cpp ffft/test/stopwatch/*.cpp + +Release mode: +g++ -Wall -I. -o ./fftreal_release.exe -DNDEBUG -O3 ffft/test/*.cpp ffft/test/stopwatch/*.cpp + +It may be tricky to compile the test bench because the speed tests use the +stopwatch sub-library, which is not that cross-platform. If you encounter +any problem that you cannot easily fix while compiling it, edit the file +ffft/test/conf.h and un-define the speed test macro. Remove the stopwatch +directory from your source file list, too. + +If it's not done by default, you should activate the exception handling +of your compiler to get the class memory-leak-safe. Thus, when a memory +allocation fails (in the constructor), an exception is thrown and the entire +object is safely destructed. It reduces the permanent error checking overhead +in the client code. Also, the test bench requires Run-Time Type Information +(RTTI) to be enabled in order to display the names of the tested classes - +sometimes mangled, depending on the compiler. + +Please note: the test bench may take an insane time to compile, especially in +Release mode, because a lot of recursive templates are instanciated. + + + +5. History +---------- + +v2.11 (2010.09.12) +- The LGPL was not well suited to 100% template code, therefore I changed +the license again. Everything is released under the WTFPL. +- Removed warnings in the testcode on MSVC++ 8.0 +- Fixed the multiple definition linking error with template specialisations +on GCC 4. + +v2.10 (2008.05.28) +- Classes are now in the ffft namespace +- Changed directory structure +- Fixed compilation information in the documentation + +v2.00 (2005.10.18) +- Turned FFTReal class into template (data type as parameter) +- Added FFTRealFixLen +- Trigonometric tables are size-limited in order to preserve cache memory; +over a given size, sin/cos functions are computed on the fly. +- Better test bench for accuracy and speed +- Changed license to LGPL + +v1.03 (2001.06.15) +- Thanks to Frederic Vanmol for the Pascal port (works with Delphi). +- Documentation improvement + +v1.02 (2001.03.25) +- sqrt() is now precomputed when the object FFTReal is constructed, resulting +in speed impovement for small size FFT. + +v1.01 (2000) +- Small modifications, I don't remember what. + +v1.00 (1999.08.14) +- First version released + + + +6. Contact +---------- + +Please address any comment, bug report or flame to: + +Laurent de Soras +laurent.de.soras@free.fr +http://ldesoras.free.fr + +For the Pascal port: +Frederic Vanmol +frederic@fruityloops.com + diff --git a/plugins/Cardinal/src/sassy/sassy.hpp b/plugins/Cardinal/src/sassy/sassy.hpp new file mode 100644 index 00000000..254db7fd --- /dev/null +++ b/plugins/Cardinal/src/sassy/sassy.hpp @@ -0,0 +1,131 @@ +/* + * Sassy scope exported API + * Copyright (C) 2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +/** + * This file contains a substantial amount of code from Sassy Audio Spreadsheet + * Copyright (c) 2022 Jari Komppa. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include "fftreal/FFTReal.h" + +// int gFFTAverage = 1; +// int gSamplerate; +// float mUIScale; +// // gScope + +struct ScopeData { + int mIndex = 0; + int mSampleRate = 0; + float mScroll = 0; + float mTimeScale = 0.01f; + int mTimeScaleSlider = 0; + int mSyncMode = 0; + int mSyncChannel = 0; + int mMode = 0; + int mDisplay = 0; + int mFFTZoom = 0; + int mPot = 0; + float fft1[65536 * 2]; + float fft2[65536 * 2]; + float ffta[65536 * 2]; + unsigned int colors[4] = { + 0xffc0c0c0, + 0xffa0a0ff, + 0xffffa0a0, + 0xff30d0d0 + }; + + struct Channel { + bool mEnabled = true; + float mScale = 1.0f / 5.0f; + int mScaleSlider = 0; + float mOffset = 0; + float* mData = nullptr; + + ~Channel() + { + delete[] mData; + } + + void realloc(const int sampleRate) + { + mData = new float[sampleRate * 10]; + memset(mData, 0, sizeof(float) * sampleRate * 10); + } + } mCh[4]; + + struct { + int average; + ffft::FFTReal* obj16; + ffft::FFTReal* obj32; + ffft::FFTReal* obj64; + ffft::FFTReal* obj128; + ffft::FFTReal* obj256; + ffft::FFTReal* obj512; + ffft::FFTReal* obj1024; + ffft::FFTReal* obj2048; + ffft::FFTReal* obj4096; + ffft::FFTReal* obj8192; + ffft::FFTReal* obj16384; + ffft::FFTReal* obj32768; + ffft::FFTReal* obj65536; + } fft; + + void realloc(const int sampleRate) + { + mIndex = 0; + mSampleRate = sampleRate; + + for (int i = 0; i < 4; i++) + mCh[i].realloc(sampleRate); + } + + inline void probe(float data1, float data2, float data3, float data4) + { + // since probe has several channels, need to deal with index here + if (mMode == 0) + { + mCh[0].mData[mIndex] = data1; + mCh[1].mData[mIndex] = data2; + mCh[2].mData[mIndex] = data3; + mCh[3].mData[mIndex] = data4; + mIndex = (mIndex + 1) % (mSampleRate * 10); + } + } +}; + +void do_show_scope_window(ScopeData* scope, float uiScale); diff --git a/plugins/Cardinal/src/sassy/sassy_scope.cpp b/plugins/Cardinal/src/sassy/sassy_scope.cpp new file mode 100644 index 00000000..ad655334 --- /dev/null +++ b/plugins/Cardinal/src/sassy/sassy_scope.cpp @@ -0,0 +1,872 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +/** + * This file is copied and adapted from Sassy Audio Spreadsheet (sassy_scope.cpp) + * Copyright (c) 2022 Jari Komppa. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "sassy.hpp" + +#define POW_2_3_4TH 1.6817928305074290860622509524664297900800685247135690216264521719 + +static double catmullrom(double t, double p0, double p1, double p2, double p3) +{ + return 0.5 * ( + (2 * p1) + + (-p0 + p2) * t + + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t + + (-p0 + 3 * p1 - 3 * p2 + p3) * t * t * t + ); +} + +static const char* gNotestr[128] = +{ + "C0-1","C#-1","D-1","D#-1","E-1","F-1","F#-1","G-1","G#-1","A-1","A#-1","B-1", + "C0","C#0","D0","D#0","E0","F0","F#0","G0","G#0","A0","A#0","B0", + "C1","C#1","D1","D#1","E1","F1","F#1","G1","G#1","A1","A#1","B1", + "C2","C#2","D2","D#2","E2","F2","F#2","G2","G#2","A2","A#2","B2", + "C3","C#3","D3","D#3","E3","F3","F#3","G3","G#3","A3","A#3","B3", + "C4","C#4","D4","D#4","E4","F4","F#4","G4","G#4","A4","A#4","B4", + "C5","C#5","D5","D#5","E5","F5","F#5","G5","G#5","A5","A#5","B5", + "C6","C#6","D6","D#6","E6","F6","F#6","G6","G#6","A6","A#6","B6", + "C7","C#7","D7","D#7","E7","F7","F#7","G7","G#7","A7","A#7","B7", + "C8","C#8","D8","D#8","E8","F8","F#8","G8","G#8","A8","A#8","B8", + "C9","C#9","D9","D#9","E9","F9","F#9","G9" +}; + +static const float timescalesteps[5] = +{ + 0.0001f, + 0.001f, + 0.01f, + 0.1f, + 1.0f, +}; + +static const char* timescaletext[5] = +{ + "0.1ms", + "1ms", + "10ms", + "100ms", + "1000ms" +}; + +static const float scalesteps[9] = +{ + 1.0f / 32.0f, + 1.0f / 16.0f, + 1.0f / 10.0f, + 1.0f / 8.0f, + 1.0f / 5.0f, + 1.0f / 4.0f, + 1.0f / 2.0f, + 1.0f, + 2.0f, +}; + +static const char* scaletexts[9] = { + "x1/32", + "x1/16", + "x1/10", + "x1/8", + "x1/5", + "x1/4", + "x1/2", + "x1", + "x2", +}; + +static constexpr const int grid_size = 340; +static constexpr const int grid_half_size = grid_size / 2 + 10; +static constexpr const int grid_quarter_size = static_cast(grid_half_size / 2); +static constexpr const int grid_1_8_size = grid_quarter_size / 2; +static constexpr const int grid_3_8_size = grid_quarter_size + grid_quarter_size / 2; + +static void scope_grid(const float uiScale) +{ + ImVec2 p = ImGui::GetItemRectMin(); + + // zero + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + (grid_size / 2) * uiScale), ImVec2(p.x + (grid_size) * uiScale, p.y + (grid_size / 2) * uiScale), 0xff000000, 3.0f); + // 1.0 + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + (grid_size / 2 - grid_quarter_size) * uiScale), ImVec2(p.x + (grid_size) * uiScale, p.y + (grid_size / 2 - grid_quarter_size) * uiScale), 0xff000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + (grid_size / 2 + grid_quarter_size) * uiScale), ImVec2(p.x + (grid_size) * uiScale, p.y + (grid_size / 2 + grid_quarter_size) * uiScale), 0xff000000); + // 0.5 + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + (grid_size / 2 - grid_1_8_size) * uiScale), ImVec2(p.x + (grid_size) * uiScale, p.y + (grid_size / 2 - grid_1_8_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + (grid_size / 2 + grid_1_8_size) * uiScale), ImVec2(p.x + (grid_size) * uiScale, p.y + (grid_size / 2 + grid_1_8_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + (grid_size / 2 - grid_3_8_size) * uiScale), ImVec2(p.x + (grid_size) * uiScale, p.y + (grid_size / 2 - grid_3_8_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + (grid_size / 2 + grid_3_8_size) * uiScale), ImVec2(p.x + (grid_size) * uiScale, p.y + (grid_size / 2 + grid_3_8_size) * uiScale), 0x3f000000); + + // zero + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2) * uiScale, p.y + (grid_size) * uiScale), 0xff000000, 3.0f); + // 1.0 + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_quarter_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 - grid_quarter_size) * uiScale, p.y + (grid_size) * uiScale), 0xff000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_quarter_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 + grid_quarter_size) * uiScale, p.y + (grid_size) * uiScale), 0xff000000); + // 0.5 + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_1_8_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 - grid_1_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_1_8_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 + grid_1_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_3_8_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 - grid_3_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_3_8_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 + grid_3_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); +} + + +static int scope_sync(ScopeData* gScope, int index) +{ + const float gSamplerate = gScope->mSampleRate; + int samples = (int)(gSamplerate * gScope->mTimeScale); + int cycle = gSamplerate * 10; + int ofs = samples; + + if (gScope->mMode == 0) + { + // calculate sync + if (gScope->mSyncMode == 0) + { + float* graphdata = gScope->mCh[gScope->mSyncChannel].mData; + int over = ofs; + while (over < (cycle - ofs) && graphdata[(index - over + cycle) % cycle] < 0) over++; + int under = over; + while (under < (cycle - ofs) && graphdata[(index - under + cycle) % cycle] > 0) under++; + ofs = under; + } + else + if (gScope->mSyncMode == 1) + { + float* graphdata = gScope->mCh[gScope->mSyncChannel].mData; + int under = ofs; + while (under < (cycle - ofs) && graphdata[(index - under + cycle) % cycle] > 0) under++; + int over = under; + while (over < (cycle - ofs) && graphdata[(index - over + cycle) % cycle] < 0) over++; + ofs = over; + } + // default: ofs = samples + } + else + { + // pause mode, scroll bar is active + ofs = -(int)(gScope->mScroll * gSamplerate); + if (ofs < samples) + ofs = samples; + if (ofs > gSamplerate * 10 - samples) + ofs = gSamplerate * 10 - samples; + } + gScope->mScroll = -((float)ofs / gSamplerate); + + return ofs; +} + +#if 0 +static void scope_plot(ScopeData* gScope, const float uiScale, int index) +{ + ImVec2 p = ImGui::GetItemRectMin(); + const float gSamplerate = gScope->mSampleRate; + int cycle = gSamplerate * 10; + /* + Okay, max scale is 1 second, so.. + */ + int samples = (int)(gSamplerate * gScope->mTimeScale); + + scope_grid(uiScale); + + int ofs = scope_sync(gScope, index); + + if (gScope->mDisplay == 2) + { + for (int i = 0; i < 16384; i++) + { + for (int j = 0; j < 4; j++) + { + if (gScope->mCh[j].mEnabled) + { + float* graphdata = gScope->mCh[j].mData; + float y = graphdata[(index - ofs + i * samples / 16384 + cycle) % cycle]; + float x = graphdata[(index - ofs + i * samples / 16384 + cycle - 1) % cycle]; + x = x * gScope->mCh[j].mScale; + y = y * gScope->mCh[j].mScale - gScope->mCh[j].mOffset; + ImGui::GetWindowDrawList()->AddCircleFilled( + ImVec2(p.x + (grid_size / 2 + x * grid_quarter_size) * uiScale, p.y + (grid_size / 2 + y * grid_quarter_size) * uiScale), + 1, + (gScope->colors[j] & 0xffffff) | 0x3f000000); + } + } + } + } + else + { + for (int i = 0; i < 32768; i++) + { + for (int j = 0; j < 2; j++) + { + if (gScope->mCh[j*2].mEnabled) + { + float* graphdata = gScope->mCh[j * 2].mData; + float x = graphdata[(index - ofs + i * samples / 32768 + cycle) % cycle]; + graphdata = gScope->mCh[j * 2 + 1].mData; + float y = graphdata[(index - ofs + i * samples / 32768 + cycle) % cycle]; + x = x * gScope->mCh[j * 2].mScale - gScope->mCh[j * 2].mOffset; + y = y * gScope->mCh[j * 2 + 1].mScale - gScope->mCh[j * 2 + 1].mOffset; + ImGui::GetWindowDrawList()->AddCircleFilled( + ImVec2(p.x + (grid_size / 2 + x * grid_quarter_size) * uiScale, p.y + (grid_size / 2 + y * grid_quarter_size) * uiScale), + 1, + (gScope->colors[j*2] & 0xffffff) | 0x3f000000); + } + } + } + } + +} +#endif + +static void scope_time(ScopeData* gScope, const float uiScale, int index) +{ + ImVec2 p = ImGui::GetItemRectMin(); + const float gSamplerate = gScope->mSampleRate; + int cycle = gSamplerate * 10; + ImDrawList* dl = ImGui::GetWindowDrawList(); + /* + Okay, max scale is 1 second, so.. + */ + int samples = (int)(gSamplerate * gScope->mTimeScale); + + scope_grid(uiScale); + + int ofs = scope_sync(gScope, index); + + if (samples > grid_size) + { + for (int j = 0; j < 4; j++) + { + if (gScope->mCh[j].mEnabled) + { + float* graphdata = gScope->mCh[j].mData; + ImVec2 vert[grid_size]; + for (int i = 0; i < grid_size; i++) + { + float v0 = -graphdata[(index - ofs + i * samples / grid_size + cycle) % cycle]; + float v1 = -graphdata[(index - ofs + (i + 1) * samples / grid_size + cycle) % cycle]; + v0 = v0 * gScope->mCh[j].mScale - gScope->mCh[j].mOffset; + v1 = v1 * gScope->mCh[j].mScale - gScope->mCh[j].mOffset; + vert[i].x = p.x + i * uiScale; + vert[i].y = p.y + (grid_size / 2 + v0 * grid_quarter_size) * uiScale; + } + float v0 = p.y + (grid_size / 2 + (-gScope->mCh[j].mOffset) * grid_quarter_size) * uiScale; + dl->Flags = 0; + for (int i = 0; i < grid_size-1; i++) + { + ImVec2 quad[4]; + quad[0] = ImVec2(vert[i].x, v0); + quad[1] = ImVec2(vert[i].x, vert[i].y); + quad[2] = ImVec2(vert[i + 1].x, vert[i + 1].y); + quad[3] = ImVec2(vert[i + 1].x, v0); + dl->AddConvexPolyFilled(quad, 4, (gScope->colors[j] & 0xffffff) | 0x3f000000 ); + + } + + if (gScope->mTimeScale < 0.1) + { + dl->Flags = ImDrawListFlags_AntiAliasedLines; + dl->AddPolyline(vert, grid_size, gScope->colors[j], false, 2 * uiScale); + } + else + { + dl->Flags = ImDrawListFlags_AntiAliasedLines; + dl->AddPolyline(vert, grid_size, gScope->colors[j], false, 1); + + } + } + } + } + else + { + // less than 1 sample per pixel + for (int j = 0; j < 4; j++) + { + if (gScope->mCh[j].mEnabled) + { + float* graphdata = gScope->mCh[j].mData; + for (int i = 0; i < samples; i++) + { + float v0 = -graphdata[(index - ofs + i + cycle) % cycle]; + float v1 = 0; + v0 = v0 * gScope->mCh[j].mScale - gScope->mCh[j].mOffset; + v1 = v1 * gScope->mCh[j].mScale - gScope->mCh[j].mOffset; + float x0 = p.x + (i * grid_size / samples) * uiScale; + ImGui::GetWindowDrawList()->AddCircleFilled( + ImVec2(x0, p.y + (grid_size / 2 + v0 * grid_quarter_size) * uiScale), + 4 * uiScale, + gScope->colors[j]); + ImGui::GetWindowDrawList()->AddLine( + ImVec2(x0, p.y + (grid_size / 2 + v0 * grid_quarter_size) * uiScale), + ImVec2(x0, p.y + (grid_size / 2 + v1 * grid_quarter_size) * uiScale), + gScope->colors[j]); + } + } + } + } + + ImGui::GetWindowDrawList()->AddText(p, 0xffc0c0c0, timescaletext[gScope->mTimeScaleSlider + 2]); + ImGui::GetWindowDrawList()->AddText(ImVec2(p.x, p.y + (grid_size / 2 - grid_quarter_size - 7) * uiScale), 0xffc0c0c0, "+1"); + ImGui::GetWindowDrawList()->AddText(ImVec2(p.x, p.y + (grid_size / 2 + grid_quarter_size - 7) * uiScale), 0xffc0c0c0, "-1"); + + ImVec2 mp = ImGui::GetMousePos(); + mp.x -= p.x; + mp.y -= p.y; + if (mp.x > 0 && mp.x < grid_size * uiScale && + mp.y > 0 && mp.y < grid_size * uiScale) + { + ImGui::GetWindowDrawList()->AddLine( + ImVec2(p.x + mp.x, p.y), + ImVec2(p.x + mp.x, p.y + grid_size * uiScale), + 0xff00ff00, 1 * uiScale); + if (gScope->mCh[0].mEnabled || gScope->mCh[1].mEnabled || gScope->mCh[2].mEnabled || gScope->mCh[3].mEnabled) + { + ImGui::BeginTooltip(); + if (gScope->mCh[0].mEnabled) ImGui::Text("Ch 0: %3.3f", gScope->mCh[0].mData[(index - ofs + ((int)mp.x / (int)uiScale) * samples / grid_size + cycle) % cycle]); + if (gScope->mCh[1].mEnabled) ImGui::Text("Ch 1: %3.3f", gScope->mCh[1].mData[(index - ofs + ((int)mp.x / (int)uiScale) * samples / grid_size + cycle) % cycle]); + if (gScope->mCh[2].mEnabled) ImGui::Text("Ch 2: %3.3f", gScope->mCh[2].mData[(index - ofs + ((int)mp.x / (int)uiScale) * samples / grid_size + cycle) % cycle]); + if (gScope->mCh[3].mEnabled) ImGui::Text("Ch 3: %3.3f", gScope->mCh[3].mData[(index - ofs + ((int)mp.x / (int)uiScale) * samples / grid_size + cycle) % cycle]); + ImGui::EndTooltip(); + } + } +} + + +static void vertline(const float uiScale, const float x, const float w) +{ + ImVec2 p = ImGui::GetItemRectMin(); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + x * uiScale, p.y * uiScale), ImVec2(p.x + x * uiScale, p.y + (grid_size) * uiScale), 0xff000000, w); +} + +static void scope_freq(ScopeData* gScope, const float uiScale, int index) +{ + ImVec2 p = ImGui::GetItemRectMin(); + ImDrawList* dl = ImGui::GetWindowDrawList(); + const float gSamplerate = gScope->mSampleRate; + int cycle = gSamplerate * 10; + /* + Okay, max scale is 1 second, so.. + */ + int samples = (int)(gSamplerate * gScope->mTimeScale); + + // what's the biggest PoT < samples? + // 192000 takes 18 bits to encode. + // Fill 32 bits: + int pot = samples | (samples >> 16); + pot = pot | (pot >> 8); + pot = pot | (pot >> 4); + pot = pot | (pot >> 2); + pot = pot | (pot >> 1); + // Shift down and add one to round it up + pot = (pot >> 1) + 1; + + if (pot < 16) pot = 16; + if (pot > 65536) pot = 65536; + + gScope->mPot = pot; + + ffft::FFTReal* fft = NULL; + switch (pot) + { + case 16: fft = gScope->fft.obj16; break; + case 32: fft = gScope->fft.obj32; break; + case 64: fft = gScope->fft.obj64; break; + case 128: fft = gScope->fft.obj128; break; + case 256: fft = gScope->fft.obj256; break; + case 512: fft = gScope->fft.obj512; break; + case 1024: fft = gScope->fft.obj1024; break; + case 2048: fft = gScope->fft.obj2048; break; + case 4096: fft = gScope->fft.obj4096; break; + case 8192: fft = gScope->fft.obj8192; break; + case 16384: fft = gScope->fft.obj16384; break; + case 32768: fft = gScope->fft.obj32768; break; + case 65536: fft = gScope->fft.obj65536; break; + } + if (!fft) return; + + int average = gScope->fft.average; + int ofs = scope_sync(gScope, index); + int size = grid_size - 1; + float sizef = size; + float freqbin = gSamplerate / (float)(pot / 2); + float freqbins[size]; + float zoom = 1.0f / (1 << gScope->mFFTZoom); + + for (int i = 0; i < 10; i++) + { + vertline(uiScale, sqrt(100 / freqbin * i / (pot / 4)) / zoom * sizef, 1); + vertline(uiScale, sqrt(1000 / freqbin * i / (pot / 4)) / zoom * sizef, 1); + vertline(uiScale, sqrt(10000 / freqbin * i / (pot / 4)) / zoom * sizef, 1); + } + + for (int j = 0; j < 4; j++) + { + if (gScope->mCh[j].mEnabled) + { + + + memset(gScope->ffta, 0, sizeof(float) * 65536 * 2); + for (int k = 0; k < average; k++) + { + float* graphdata = gScope->mCh[j].mData; + + for (int i = 0; i < pot; i++) + { + gScope->fft1[i * 2] = graphdata[(index - ofs + i + cycle - k) % cycle]; + gScope->fft1[i * 2 + 1] = 0; + } + + fft->do_fft(gScope->fft2, gScope->fft1); + + for (int i = 0; i < pot / 4; i++) + gScope->ffta[i] += (1.0f / average) * sqrt(gScope->fft2[i * 2 + 0] * gScope->fft2[i * 2 + 0] + gScope->fft2[i * 2 + 1] * gScope->fft2[i * 2 + 1]); + } + + ImVec2 vert[size]; + + for (int i = 0; i < size; i++) + { + float ppos = powf(zoom * i / sizef, 2.0f) * pot / 4; + freqbins[i] = ppos * freqbin; + + float f = ppos - (int)ppos; + float a = i ? gScope->ffta[(int)ppos - 1] : 0; + float b = gScope->ffta[(int)ppos]; + float c = i < size ? gScope->ffta[(int)ppos + 1] : 0; + float d = i < (size-1) ? gScope->ffta[(int)ppos + 2] : 0; + + float v0 = (float)catmullrom(f, a, b, c, d); + + v0 = v0 * gScope->mCh[j].mScale + gScope->mCh[j].mOffset * 50; + vert[i] = ImVec2(p.x + i * uiScale, + p.y + (sizef - v0 * 4) * uiScale); + } + float v0 = p.y + (size - gScope->mCh[j].mOffset * 50 * 4) * uiScale; + dl->Flags = 0; + for (int i = 0; i < size-1; i++) + { + ImVec2 quad[4]; + quad[0] = ImVec2(vert[i].x, v0); + quad[1] = ImVec2(vert[i].x, vert[i].y); + quad[2] = ImVec2(vert[i + 1].x, vert[i + 1].y); + quad[3] = ImVec2(vert[i + 1].x, v0); + dl->AddConvexPolyFilled(quad, 4, (gScope->colors[j] & 0xffffff) | 0x3f000000); + + } + + dl->Flags = ImDrawListFlags_AntiAliasedLines; + dl->AddPolyline(vert, size, gScope->colors[j], false, 1); + + } + } + + if (!ImGui::IsPopupOpen("Freq Context",ImGuiPopupFlags_AnyPopupId)) + if (gScope->mCh[0].mEnabled || gScope->mCh[1].mEnabled || gScope->mCh[2].mEnabled || gScope->mCh[3].mEnabled) + { + ImVec2 mp = ImGui::GetMousePos(); + mp.x -= p.x; + mp.y -= p.y; + if (mp.x > 0 && mp.x < grid_size * uiScale && + mp.y > 0 && mp.y < grid_size * uiScale) + { + ImGui::GetWindowDrawList()->AddLine( + ImVec2(p.x + mp.x, p.y), + ImVec2(p.x + mp.x, p.y + grid_size * uiScale), + 0xff00ff00, 1 * uiScale); + ImGui::BeginTooltip(); + int note = (int)(12 * log(32 * POW_2_3_4TH * (freqbins[(int)mp.x] / 440)) / log(2)); + if (note < 0 || note > 127) note = -1; + ImGui::Text("%3.3fHz%s%s", freqbins[(int)mp.x], note==-1?"":"\n", note==-1?"":gNotestr[note]); + ImGui::EndTooltip(); + } + } +} + +#if 0 +static int groups(ScopeData* gScope, double h) +{ + int count = 0; + for (int i = 1; i < gScope->mPot / 4; i++) + { + if (gScope->fft1[i - 1] < h && gScope->fft1[i] > h) + count++; + } + return count; +} + +static void detect_fundamentals(ScopeData* gScope) +{ + // gScope->fft1[1..pot/4] has our mags + double maxmag = 0; + for (int i = 0; i < gScope->mPot / 4; i++) + if (maxmag < gScope->fft1[i]) + maxmag = gScope->fft1[i]; + + double minmag = 0; + int count = 0; + int iters = 0; + double h = (minmag + maxmag) / 2; + double step = h / 2; + while (iters < 100 && count != 16) + { + count = groups(gScope, h); + if (count < 16) + { + h -= step; + } + else + { + h += step; + } + step /= 2; + iters++; + } + char temp[1024]; + int ofs = 0; + temp[0] = 0; + const float gSamplerate = gScope->mSampleRate; + float freqbin = gSamplerate / (float)(gScope->mPot / 2); + + int startbin = 0; + for (int i = 2; i < gScope->mPot / 4; i++) + { + if (gScope->fft1[i - 1] < h && gScope->fft1[i] > h) + { + startbin = i; + } + if (gScope->fft1[i - 1] > h && gScope->fft1[i] < h) + { + double sum = 0; + double magsum = 0; + for (int j = startbin; j < i; j++) + { + sum += gScope->fft1[j]; + magsum += gScope->fft1[j] * j * freqbin; + } + if (sum != 0) + { + magsum /= sum; + sum /= i - startbin; + sum /= maxmag / 2; // normalize + ofs += sprintf(temp + ofs, "%3.3f\t%3.3f\n", magsum, sum); + } + } + } + + + for (int i = 0; i < count; i++) + { + } + ImGui::SetClipboardText(temp); +} +#endif + +void do_show_scope_window(ScopeData* gScope, const float uiScale) +{ + // Data is updated live, so let's take local copies of critical stuff. + int index = gScope->mIndex; + + ImGui::Begin("Scope", nullptr, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize); + + ImGui::BeginChild("Channel options", ImVec2((4 * 25)*uiScale, (2 * 152 + 32) * uiScale)); + ImGui::Checkbox("###ea", &gScope->mCh[0].mEnabled); ImGui::SameLine(); + ImGui::Checkbox("###eb", &gScope->mCh[1].mEnabled); ImGui::SameLine(); + ImGui::Checkbox("###ec", &gScope->mCh[2].mEnabled); ImGui::SameLine(); + ImGui::Checkbox("###ed", &gScope->mCh[3].mEnabled); + + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[0]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[0]); + if (ImGui::VSliderInt("###0a", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[0].mScaleSlider, -4, 4, "")) + { + if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) + { + gScope->mCh[0].mScaleSlider = 0; + gScope->mCh[0].mScale = scalesteps[4]; + } + else + { + gScope->mCh[0].mScale = scalesteps[gScope->mCh[0].mScaleSlider + 4]; + } + } + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%s", scaletexts[gScope->mCh[0].mScaleSlider + 4]); + ImGui::EndTooltip(); + } + ImGui::PopStyleColor(2); ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[1]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[1]); + if (ImGui::VSliderInt("###1a", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[1].mScaleSlider, -4, 4, "")) + { + gScope->mCh[1].mScale = scalesteps[gScope->mCh[1].mScaleSlider + 4]; + } + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%s", scaletexts[gScope->mCh[1].mScaleSlider + 4]); + ImGui::EndTooltip(); + } + ImGui::PopStyleColor(2); ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[2]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[2]); + if (ImGui::VSliderInt("###2a", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[2].mScaleSlider, -4, 4, "")) + { + gScope->mCh[2].mScale = scalesteps[gScope->mCh[2].mScaleSlider + 4]; + } + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%s", scaletexts[gScope->mCh[2].mScaleSlider + 4]); + ImGui::EndTooltip(); + } + ImGui::PopStyleColor(2); ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[3]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[3]); + if (ImGui::VSliderInt("###3a", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[3].mScaleSlider, -4, 4, "")) + { + gScope->mCh[3].mScale = scalesteps[gScope->mCh[3].mScaleSlider + 4]; + } + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%s", scaletexts[gScope->mCh[3].mScaleSlider + 4]); + ImGui::EndTooltip(); + } + ImGui::PopStyleColor(2); + + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[0]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[0]); ImGui::VSliderFloat("###0b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[0].mOffset, -2, 2, ""); ImGui::PopStyleColor(2); ImGui::SameLine(); + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%3.3f", gScope->mCh[0].mOffset); + ImGui::EndTooltip(); + } + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[1]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[1]); ImGui::VSliderFloat("###1b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[1].mOffset, -2, 2, ""); ImGui::PopStyleColor(2); ImGui::SameLine(); + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%3.3f", gScope->mCh[1].mOffset); + ImGui::EndTooltip(); + } + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[2]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[2]); ImGui::VSliderFloat("###2b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[2].mOffset, -2, 2, ""); ImGui::PopStyleColor(2); ImGui::SameLine(); + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%3.3f", gScope->mCh[2].mOffset); + ImGui::EndTooltip(); + } + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[3]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[3]); ImGui::VSliderFloat("###3b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[3].mOffset, -2, 2, ""); ImGui::PopStyleColor(2); + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%3.3f", gScope->mCh[3].mOffset); + ImGui::EndTooltip(); + } + ImGui::EndChild(); + + ImGui::SameLine(); + + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImGui::GetStyle().Colors[ImGuiCol_FrameBg]); + ImGui::BeginChild("Scope and scroll", ImVec2(grid_size * uiScale, (grid_size + 24)* uiScale)); + ImGui::BeginChild("Scope proper", ImVec2(grid_size * uiScale, grid_size * uiScale)); + + if (gScope->mDisplay == 0) + scope_time(gScope, uiScale, index); + if (gScope->mDisplay == 1) + scope_freq(gScope, uiScale, index); + /* + if (gScope->mDisplay == 2 || gScope->mDisplay == 3) + scope_plot(gScope, uiScale, index); + */ + + ImGui::EndChild(); + ImGui::PopStyleColor(1); + /* + if (gScope->mDisplay == 1) + { + if (ImGui::BeginPopupContextItem("Freq Context")) + { + if (ImGui::BeginMenu("Experimental..")) + { + if (ImGui::MenuItem("Detect and copy fundamental frequencies")) + { + detect_fundamentals(gScope); + } + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Averaging..")) + { + if (ImGui::MenuItem("1x")) + gScope->fft.average = 1; + if (ImGui::MenuItem("4x")) + gScope->fft.average = 4; + if (ImGui::MenuItem("16x")) + gScope->fft.average = 16; + if (ImGui::MenuItem("64x")) + gScope->fft.average = 64; + if (ImGui::MenuItem("256x")) + gScope->fft.average = 256; + ImGui::EndMenu(); + } + + ImGui::EndPopup(); + } + } + //context_menu(1, 1, 1); + */ + + if (gScope->mMode) + { + ImGui::SetNextItemWidth(grid_size * uiScale); + ImGui::SliderFloat("###scroll", &gScope->mScroll, -10.0f, 0.0f, "%.3f s"); + } + else + { + ImGui::PushStyleColor(ImGuiCol_FrameBg, 0xff3f3f3f); + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, 0xff3f3f3f); + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, 0xff3f3f3f); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, 0xff7f7f7f); + ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, 0xff7f7f7f); + ImGui::SetNextItemWidth(grid_size * uiScale); + float x = gScope->mScroll; + ImGui::SliderFloat("###scroll", &x, -10.0f, 0.0f, "%.3f s"); + ImGui::PopStyleColor(5); + } + ImGui::EndChild(); + + ImGui::SameLine(); + + ImGui::BeginChild("Scope options", ImVec2((4 * 21) * uiScale, 364 * uiScale)); + if (ImGui::VSliderInt("###0a", ImVec2(19 * uiScale, 155 * uiScale), &gScope->mTimeScaleSlider, -2, 2, "")) + { + gScope->mTimeScale = timescalesteps[gScope->mTimeScaleSlider + 2]; + } + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("%s", timescaletext[gScope->mTimeScaleSlider + 2]); + ImGui::EndTooltip(); + } + ImGui::SameLine(); + ImGui::BeginChild("moderadio", ImVec2(100 * uiScale, 155 * uiScale)); + if (ImGui::RadioButton("Time", gScope->mDisplay == 0)) gScope->mDisplay = 0; + if (ImGui::RadioButton("Freq", gScope->mDisplay == 1)) gScope->mDisplay = 1; + /* + if (ImGui::RadioButton("X,X'", gScope->mDisplay == 2)) gScope->mDisplay = 2; + if (ImGui::RadioButton("X,Y", gScope->mDisplay == 3)) gScope->mDisplay = 3; + */ + ImGui::Separator(); + ImGui::Text("FFT"); + if (ImGui::RadioButton("1x", gScope->mFFTZoom == 0)) gScope->mFFTZoom = 0; + if (ImGui::RadioButton("2x", gScope->mFFTZoom == 1)) gScope->mFFTZoom = 1; + if (ImGui::RadioButton("4x", gScope->mFFTZoom == 2)) gScope->mFFTZoom = 2; + if (ImGui::RadioButton("8x", gScope->mFFTZoom == 3)) gScope->mFFTZoom = 3; + ImGui::EndChild(); + char temp[64]; + sprintf(temp, "Sync ch %d###sc", gScope->mSyncChannel + 1); + if (ImGui::Button(temp, ImVec2(80 * uiScale, 20 * uiScale))) + gScope->mSyncChannel = (gScope->mSyncChannel + 1) % 4; + const char* syncmodes[3] = { "^", "v", "off" }; + sprintf(temp, "Sync %s###sm", syncmodes[gScope->mSyncMode]); + if (ImGui::Button(temp, ImVec2(80 * uiScale, 20 * uiScale))) + gScope->mSyncMode = (gScope->mSyncMode + 1) % 3; + + if (gScope->mMode == 0) + { + if (ImGui::Button("Pause", ImVec2(80 * uiScale, 20 * uiScale))) + gScope->mMode = 1; + ImGui::Text("Nudge (ms)"); + ImGui::PushStyleColor(ImGuiCol_Button, 0xff3f3f3f); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, 0xff3f3f3f); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, 0xff3f3f3f); + ImGui::Button("-0.1", ImVec2(38 * uiScale, 20 * uiScale)); + ImGui::SameLine(); + ImGui::Button("+0.1", ImVec2(38 * uiScale, 20 * uiScale)); + ImGui::Button("-1", ImVec2(38 * uiScale, 20 * uiScale)); + ImGui::SameLine(); + ImGui::Button("+1", ImVec2(38 * uiScale, 20 * uiScale)); + ImGui::Button("-10", ImVec2(38 * uiScale, 20 * uiScale)); + ImGui::SameLine(); + ImGui::Button("+10", ImVec2(38 * uiScale, 20 * uiScale)); + ImGui::Button("-100", ImVec2(38 * uiScale, 20 * uiScale)); + ImGui::SameLine(); + ImGui::Button("+100", ImVec2(38 * uiScale, 20 * uiScale)); + ImGui::PopStyleColor(3); + } + else + { + if (ImGui::Button("Capture", ImVec2(80 * uiScale, 20 * uiScale))) + gScope->mMode = 0; + ImGui::Text("Nudge (ms)"); + if (ImGui::Button("-0.1", ImVec2(38 * uiScale, 20 * uiScale))) + { + gScope->mScroll -= 0.0001f; + } + ImGui::SameLine(); + if (ImGui::Button("+0.1", ImVec2(38 * uiScale, 20 * uiScale))) + { + gScope->mScroll += 0.0001f; + } + if (ImGui::Button("-1", ImVec2(38 * uiScale, 20 * uiScale))) + { + gScope->mScroll -= 0.001f; + } + ImGui::SameLine(); + if (ImGui::Button("+1", ImVec2(38 * uiScale, 20 * uiScale))) + { + gScope->mScroll += 0.001f; + } + if (ImGui::Button("-10", ImVec2(38 * uiScale, 20 * uiScale))) + { + gScope->mScroll -= 0.01f; + } + ImGui::SameLine(); + if (ImGui::Button("+10", ImVec2(38 * uiScale, 20 * uiScale))) + { + gScope->mScroll += 0.01f; + } + if (ImGui::Button("-100", ImVec2(38 * uiScale, 20 * uiScale))) + { + gScope->mScroll -= 0.1f; + } + ImGui::SameLine(); + if (ImGui::Button("+100", ImVec2(38 * uiScale, 20 * uiScale))) + { + gScope->mScroll += 0.1f; + } + } + ImGui::EndChild(); + + ImGui::End(); + +} diff --git a/plugins/Makefile b/plugins/Makefile index 513ff687..59d98335 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -218,6 +218,8 @@ endif ifneq ($(HEADLESS),true) PLUGIN_FILES += Cardinal/src/ImGuiWidget.cpp PLUGIN_FILES += Cardinal/src/ImGuiTextEditor.cpp +PLUGIN_FILES += Cardinal/src/SassyScope.cpp +# PLUGIN_FILES += Cardinal/src/sassy/sassy_scope.cpp PLUGIN_FILES += $(wildcard Cardinal/src/DearImGui/*.cpp) PLUGIN_FILES += $(wildcard Cardinal/src/DearImGuiColorTextEditor/*.cpp) endif diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index c9c3eee0..a88eb629 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -878,6 +878,11 @@ static void initStatic__Cardinal() spl.removeModule("Carla"); spl.removeModule("Ildaeil"); #endif + #ifndef HEADLESS + p->addModel(modelSassyScope); + #else + spl.removeModule("SassyScope"); + #endif #if defined(HAVE_X11) && !defined(HEADLESS) && !defined(STATIC_BUILD) p->addModel(modelMPV); #else From 2d42ef52499815ab932f1b880b17a423512993d6 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 18 May 2022 17:14:41 +0100 Subject: [PATCH 052/283] Fix sassy scope lines Signed-off-by: falkTX --- plugins/Cardinal/src/sassy/sassy_scope.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plugins/Cardinal/src/sassy/sassy_scope.cpp b/plugins/Cardinal/src/sassy/sassy_scope.cpp index ad655334..6abba781 100644 --- a/plugins/Cardinal/src/sassy/sassy_scope.cpp +++ b/plugins/Cardinal/src/sassy/sassy_scope.cpp @@ -111,7 +111,7 @@ static const char* scaletexts[9] = { }; static constexpr const int grid_size = 340; -static constexpr const int grid_half_size = grid_size / 2 + 10; +static constexpr const int grid_half_size = grid_size / 2; static constexpr const int grid_quarter_size = static_cast(grid_half_size / 2); static constexpr const int grid_1_8_size = grid_quarter_size / 2; static constexpr const int grid_3_8_size = grid_quarter_size + grid_quarter_size / 2; @@ -132,15 +132,15 @@ static void scope_grid(const float uiScale) ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + (grid_size / 2 + grid_3_8_size) * uiScale), ImVec2(p.x + (grid_size) * uiScale, p.y + (grid_size / 2 + grid_3_8_size) * uiScale), 0x3f000000); // zero - ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2) * uiScale, p.y + (grid_size) * uiScale), 0xff000000, 3.0f); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2) * uiScale, p.y), ImVec2(p.x + (grid_size / 2) * uiScale, p.y + (grid_size) * uiScale), 0xff000000, 3.0f); // 1.0 - ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_quarter_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 - grid_quarter_size) * uiScale, p.y + (grid_size) * uiScale), 0xff000000); - ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_quarter_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 + grid_quarter_size) * uiScale, p.y + (grid_size) * uiScale), 0xff000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_quarter_size) * uiScale, p.y), ImVec2(p.x + (grid_size / 2 - grid_quarter_size) * uiScale, p.y + (grid_size) * uiScale), 0xff000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_quarter_size) * uiScale, p.y), ImVec2(p.x + (grid_size / 2 + grid_quarter_size) * uiScale, p.y + (grid_size) * uiScale), 0xff000000); // 0.5 - ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_1_8_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 - grid_1_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); - ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_1_8_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 + grid_1_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); - ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_3_8_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 - grid_3_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); - ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_3_8_size) * uiScale, p.y * uiScale), ImVec2(p.x + (grid_size / 2 + grid_3_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_1_8_size) * uiScale, p.y), ImVec2(p.x + (grid_size / 2 - grid_1_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_1_8_size) * uiScale, p.y), ImVec2(p.x + (grid_size / 2 + grid_1_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 - grid_3_8_size) * uiScale, p.y), ImVec2(p.x + (grid_size / 2 - grid_3_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + (grid_size / 2 + grid_3_8_size) * uiScale, p.y), ImVec2(p.x + (grid_size / 2 + grid_3_8_size) * uiScale, p.y + (grid_size) * uiScale), 0x3f000000); } @@ -368,7 +368,7 @@ static void scope_time(ScopeData* gScope, const float uiScale, int index) static void vertline(const float uiScale, const float x, const float w) { ImVec2 p = ImGui::GetItemRectMin(); - ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + x * uiScale, p.y * uiScale), ImVec2(p.x + x * uiScale, p.y + (grid_size) * uiScale), 0xff000000, w); + ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x + x * uiScale, p.y), ImVec2(p.x + x * uiScale, p.y + (grid_size) * uiScale), 0xff000000, w); } static void scope_freq(ScopeData* gScope, const float uiScale, int index) @@ -426,7 +426,7 @@ static void scope_freq(ScopeData* gScope, const float uiScale, int index) float zoom = 1.0f / (1 << gScope->mFFTZoom); for (int i = 0; i < 10; i++) - { + { vertline(uiScale, sqrt(100 / freqbin * i / (pot / 4)) / zoom * sizef, 1); vertline(uiScale, sqrt(1000 / freqbin * i / (pot / 4)) / zoom * sizef, 1); vertline(uiScale, sqrt(10000 / freqbin * i / (pot / 4)) / zoom * sizef, 1); From 8d68d6e10c8849ebbd40452561659f3e757393be Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 18 May 2022 18:18:14 +0100 Subject: [PATCH 053/283] Handle double-click-to-reset on Scope sliders; Cleanup Signed-off-by: falkTX --- plugins/Cardinal/src/SassyScope.cpp | 55 ++++++++++++++++++++++ plugins/Cardinal/src/sassy/sassy_scope.cpp | 33 ++++++++----- 2 files changed, 75 insertions(+), 13 deletions(-) diff --git a/plugins/Cardinal/src/SassyScope.cpp b/plugins/Cardinal/src/SassyScope.cpp index fcee4787..31dde156 100644 --- a/plugins/Cardinal/src/SassyScope.cpp +++ b/plugins/Cardinal/src/SassyScope.cpp @@ -141,6 +141,17 @@ static ScopeData* getFakeScopeInstance() struct SassyScopeWidget : ImGuiWidget { SassyScopeModule* module = nullptr; + int lastClickedSliderBox = -1; + Rect sliderBoxes[8]; + + SassyScopeWidget() + { + for (int i=0; i<8; ++i) + { + sliderBoxes[i].pos = Vec(8 + (i % 4) * 27, 32 + (i / 4) * 153); + sliderBoxes[i].size = Vec(19, 150); + } + } void drawImGui() override { @@ -172,10 +183,54 @@ struct SassyScopeWidget : ImGuiWidget { // center scope if (e.pos.x >= 110 && e.pos.x <= 452 && e.pos.y >= 0 && e.pos.y <= 350) return; + + // consume for double-click if event belongs to a slider + lastClickedSliderBox = -1; + for (int i=0; i<8; ++i) + { + if (sliderBoxes[i].contains(e.pos)) + { + lastClickedSliderBox = i; + e.consume(this); + break; + } + } } ImGuiWidget::onButton(e); } + + void onDoubleClick(const DoubleClickEvent& e) override + { + // handle double-click for slider param reset + if (lastClickedSliderBox != -1) + { + const int i = lastClickedSliderBox; + lastClickedSliderBox = -1; + + // fake a mouse release + ButtonEvent e2 = {}; + e2.button = GLFW_MOUSE_BUTTON_LEFT; + e2.action = GLFW_RELEASE; + ImGuiWidget::onButton(e2); + + // do the reset + if (i < 4) + { + module->scope.mCh[i].mScaleSlider = 0; + module->scope.mCh[i].mScale = 1.0f / 5.0f; + } + else + { + module->scope.mCh[i-4].mOffset = 0; + } + + e.consume(this); + return; + } + + ImGuiWidget::onDoubleClick(e); + } }; struct SassyScopeModuleWidget : ModuleWidget { diff --git a/plugins/Cardinal/src/sassy/sassy_scope.cpp b/plugins/Cardinal/src/sassy/sassy_scope.cpp index 6abba781..5daa95ae 100644 --- a/plugins/Cardinal/src/sassy/sassy_scope.cpp +++ b/plugins/Cardinal/src/sassy/sassy_scope.cpp @@ -610,15 +610,7 @@ void do_show_scope_window(ScopeData* gScope, const float uiScale) ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[0]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[0]); if (ImGui::VSliderInt("###0a", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[0].mScaleSlider, -4, 4, "")) { - if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) - { - gScope->mCh[0].mScaleSlider = 0; - gScope->mCh[0].mScale = scalesteps[4]; - } - else - { - gScope->mCh[0].mScale = scalesteps[gScope->mCh[0].mScaleSlider + 4]; - } + gScope->mCh[0].mScale = scalesteps[gScope->mCh[0].mScaleSlider + 4]; } if (ImGui::IsItemHovered()) { @@ -664,28 +656,43 @@ void do_show_scope_window(ScopeData* gScope, const float uiScale) } ImGui::PopStyleColor(2); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[0]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[0]); ImGui::VSliderFloat("###0b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[0].mOffset, -2, 2, ""); ImGui::PopStyleColor(2); ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[0]); + ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[0]); + ImGui::VSliderFloat("###0b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[0].mOffset, -2, 2, ""); + ImGui::PopStyleColor(2); + ImGui::SameLine(); if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text("%3.3f", gScope->mCh[0].mOffset); ImGui::EndTooltip(); } - ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[1]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[1]); ImGui::VSliderFloat("###1b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[1].mOffset, -2, 2, ""); ImGui::PopStyleColor(2); ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[1]); + ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[1]); + ImGui::VSliderFloat("###1b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[1].mOffset, -2, 2, ""); + ImGui::PopStyleColor(2); + ImGui::SameLine(); if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text("%3.3f", gScope->mCh[1].mOffset); ImGui::EndTooltip(); } - ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[2]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[2]); ImGui::VSliderFloat("###2b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[2].mOffset, -2, 2, ""); ImGui::PopStyleColor(2); ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[2]); + ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[2]); + ImGui::VSliderFloat("###2b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[2].mOffset, -2, 2, ""); + ImGui::PopStyleColor(2); + ImGui::SameLine(); if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text("%3.3f", gScope->mCh[2].mOffset); ImGui::EndTooltip(); } - ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[3]); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[3]); ImGui::VSliderFloat("###3b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[3].mOffset, -2, 2, ""); ImGui::PopStyleColor(2); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, gScope->colors[3]); + ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, gScope->colors[3]); + ImGui::VSliderFloat("###3b", ImVec2(19 * uiScale, 150 * uiScale), &gScope->mCh[3].mOffset, -2, 2, ""); + ImGui::PopStyleColor(2); if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); From fc1fb75123a7261fdba0cab73bed2555392bb311 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 18 May 2022 18:40:05 +0100 Subject: [PATCH 054/283] Save and restore sassy scope state Signed-off-by: falkTX --- plugins/Cardinal/src/SassyScope.cpp | 124 ++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/plugins/Cardinal/src/SassyScope.cpp b/plugins/Cardinal/src/SassyScope.cpp index 31dde156..4225a1f3 100644 --- a/plugins/Cardinal/src/SassyScope.cpp +++ b/plugins/Cardinal/src/SassyScope.cpp @@ -94,6 +94,130 @@ struct SassyScopeModule : Module { { scope.realloc(e.sampleRate); } + + json_t* dataToJson() override + { + json_t* const rootJ = json_object(); + DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr); + + json_object_set_new(rootJ, "mTimeScale", json_real(scope.mTimeScale)); + json_object_set_new(rootJ, "mTimeScaleSlider", json_integer(scope.mTimeScaleSlider)); + json_object_set_new(rootJ, "mSyncMode", json_integer(scope.mSyncMode)); + json_object_set_new(rootJ, "mSyncChannel", json_integer(scope.mSyncChannel)); + json_object_set_new(rootJ, "mMode", json_integer(scope.mMode)); + json_object_set_new(rootJ, "mDisplay", json_integer(scope.mDisplay)); + json_object_set_new(rootJ, "mFFTZoom", json_integer(scope.mFFTZoom)); + json_object_set_new(rootJ, "mPot", json_integer(scope.mPot)); + json_object_set_new(rootJ, "fft.average", json_integer(scope.fft.average)); + + json_object_set_new(rootJ, "mCh0.mEnabled", json_boolean(scope.mCh[0].mEnabled)); + json_object_set_new(rootJ, "mCh0.mScale", json_real(scope.mCh[0].mScale)); + json_object_set_new(rootJ, "mCh0.mScaleSlider", json_integer(scope.mCh[0].mScaleSlider)); + json_object_set_new(rootJ, "mCh0.mOffset", json_integer(scope.mCh[0].mOffset)); + + json_object_set_new(rootJ, "mCh1.mEnabled", json_boolean(scope.mCh[1].mEnabled)); + json_object_set_new(rootJ, "mCh1.mScale", json_real(scope.mCh[1].mScale)); + json_object_set_new(rootJ, "mCh1.mScaleSlider", json_integer(scope.mCh[1].mScaleSlider)); + json_object_set_new(rootJ, "mCh1.mOffset", json_integer(scope.mCh[1].mOffset)); + + json_object_set_new(rootJ, "mCh2.mEnabled", json_boolean(scope.mCh[2].mEnabled)); + json_object_set_new(rootJ, "mCh2.mScale", json_real(scope.mCh[2].mScale)); + json_object_set_new(rootJ, "mCh2.mScaleSlider", json_integer(scope.mCh[2].mScaleSlider)); + json_object_set_new(rootJ, "mCh2.mOffset", json_integer(scope.mCh[2].mOffset)); + + json_object_set_new(rootJ, "mCh3.mEnabled", json_boolean(scope.mCh[3].mEnabled)); + json_object_set_new(rootJ, "mCh3.mScale", json_real(scope.mCh[3].mScale)); + json_object_set_new(rootJ, "mCh3.mScaleSlider", json_integer(scope.mCh[3].mScaleSlider)); + json_object_set_new(rootJ, "mCh3.mOffset", json_integer(scope.mCh[3].mOffset)); + + return rootJ; + } + + void dataFromJson(json_t* const rootJ) override + { + if (json_t* const mTimeScaleJ = json_object_get(rootJ, "mTimeScale")) + scope.mTimeScale = json_real_value(mTimeScaleJ); + + if (json_t* const mTimeScaleSliderJ = json_object_get(rootJ, "mTimeScaleSlider")) + scope.mTimeScaleSlider = json_integer_value(mTimeScaleSliderJ); + + if (json_t* const mSyncModeJ = json_object_get(rootJ, "mSyncMode")) + scope.mSyncMode = json_integer_value(mSyncModeJ); + + if (json_t* const mSyncChannelJ = json_object_get(rootJ, "mSyncChannel")) + scope.mSyncChannel = json_integer_value(mSyncChannelJ); + + if (json_t* const mModeJ = json_object_get(rootJ, "mMode")) + scope.mMode = json_integer_value(mModeJ); + + if (json_t* const mDisplayJ = json_object_get(rootJ, "mDisplay")) + scope.mDisplay = json_integer_value(mDisplayJ); + + if (json_t* const mFFTZoomJ = json_object_get(rootJ, "mFFTZoom")) + scope.mFFTZoom = json_integer_value(mFFTZoomJ); + + if (json_t* const mPotJ = json_object_get(rootJ, "mPot")) + scope.mPot = json_integer_value(mPotJ); + + if (json_t* const fftAverageJ = json_object_get(rootJ, "fft.average")) + scope.fft.average = json_integer_value(fftAverageJ); + + { + if (json_t* const mCh0mEnabledJ = json_object_get(rootJ, "mCh0.mEnabled")) + scope.mCh[0].mEnabled = json_boolean_value(mCh0mEnabledJ); + + if (json_t* const mCh0mScaleJ = json_object_get(rootJ, "mCh0.mScale")) + scope.mCh[0].mScale = json_real_value(mCh0mScaleJ); + + if (json_t* const mCh0mScaleSliderJ = json_object_get(rootJ, "mCh0.mScaleSlider")) + scope.mCh[0].mScaleSlider = json_integer_value(mCh0mScaleSliderJ); + + if (json_t* const mCh0mOffsetJ = json_object_get(rootJ, "mCh0.mOffset")) + scope.mCh[0].mOffset = json_integer_value(mCh0mOffsetJ); + } + + { + if (json_t* const mCh1mEnabledJ = json_object_get(rootJ, "mCh1.mEnabled")) + scope.mCh[1].mEnabled = json_boolean_value(mCh1mEnabledJ); + + if (json_t* const mCh1mScaleJ = json_object_get(rootJ, "mCh1.mScale")) + scope.mCh[1].mScale = json_real_value(mCh1mScaleJ); + + if (json_t* const mCh1mScaleSliderJ = json_object_get(rootJ, "mCh1.mScaleSlider")) + scope.mCh[1].mScaleSlider = json_integer_value(mCh1mScaleSliderJ); + + if (json_t* const mCh1mOffsetJ = json_object_get(rootJ, "mCh1.mOffset")) + scope.mCh[1].mOffset = json_integer_value(mCh1mOffsetJ); + } + + { + if (json_t* const mCh2mEnabledJ = json_object_get(rootJ, "mCh2.mEnabled")) + scope.mCh[2].mEnabled = json_boolean_value(mCh2mEnabledJ); + + if (json_t* const mCh2mScaleJ = json_object_get(rootJ, "mCh2.mScale")) + scope.mCh[2].mScale = json_real_value(mCh2mScaleJ); + + if (json_t* const mCh2mScaleSliderJ = json_object_get(rootJ, "mCh2.mScaleSlider")) + scope.mCh[2].mScaleSlider = json_integer_value(mCh2mScaleSliderJ); + + if (json_t* const mCh2mOffsetJ = json_object_get(rootJ, "mCh2.mOffset")) + scope.mCh[2].mOffset = json_integer_value(mCh2mOffsetJ); + } + + { + if (json_t* const mCh3mEnabledJ = json_object_get(rootJ, "mCh3.mEnabled")) + scope.mCh[3].mEnabled = json_boolean_value(mCh3mEnabledJ); + + if (json_t* const mCh3mScaleJ = json_object_get(rootJ, "mCh3.mScale")) + scope.mCh[3].mScale = json_real_value(mCh3mScaleJ); + + if (json_t* const mCh3mScaleSliderJ = json_object_get(rootJ, "mCh3.mScaleSlider")) + scope.mCh[3].mScaleSlider = json_integer_value(mCh3mScaleSliderJ); + + if (json_t* const mCh3mOffsetJ = json_object_get(rootJ, "mCh3.mOffset")) + scope.mCh[3].mOffset = json_integer_value(mCh3mOffsetJ); + } + } }; // used for module browser From e0f12a9998bad94fdd0911e8749f4427021f3d04 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 18 May 2022 19:31:32 +0100 Subject: [PATCH 055/283] Fix mouse up event for imgui based widgets Signed-off-by: falkTX --- plugins/Cardinal/src/ImGuiWidget.cpp | 6 +----- plugins/Cardinal/src/ImGuiWidget.hpp | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/plugins/Cardinal/src/ImGuiWidget.cpp b/plugins/Cardinal/src/ImGuiWidget.cpp index 92330363..4ca8c074 100644 --- a/plugins/Cardinal/src/ImGuiWidget.cpp +++ b/plugins/Cardinal/src/ImGuiWidget.cpp @@ -270,16 +270,12 @@ void ImGuiWidget::onDragHover(const DragHoverEvent& e) } } -void ImGuiWidget::onDragLeave(const DragLeaveEvent& e) +void ImGuiWidget::onDragEnd(const DragEndEvent& e) { ImGui::SetCurrentContext(imData->context); - // FIXME this is not the correct event.. ImGuiIO& io(ImGui::GetIO()); io.MouseDown[0] = io.MouseDown[1] = io.MouseDown[2] = false; - - if (io.WantCaptureMouse) - e.consume(this); } void ImGuiWidget::onHoverScroll(const HoverScrollEvent& e) diff --git a/plugins/Cardinal/src/ImGuiWidget.hpp b/plugins/Cardinal/src/ImGuiWidget.hpp index a2837010..c24d5063 100644 --- a/plugins/Cardinal/src/ImGuiWidget.hpp +++ b/plugins/Cardinal/src/ImGuiWidget.hpp @@ -34,7 +34,7 @@ struct ImGuiWidget : OpenGlWidgetWithBrowserPreview { void onContextDestroy(const ContextDestroyEvent& e) override; void onHover(const HoverEvent& e) override; void onDragHover(const DragHoverEvent& e) override; - void onDragLeave(const DragLeaveEvent& e) override; + void onDragEnd(const DragEndEvent& e) override; void onHoverScroll(const HoverScrollEvent& e) override; void onButton(const ButtonEvent& e) override; void onSelectKey(const SelectKeyEvent& e) override; From 7e1da35de7a887a3d485b19552fcbb459c19a9c3 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 18 May 2022 20:08:08 +0100 Subject: [PATCH 056/283] Fix Sassy Scope freq tooltip Signed-off-by: falkTX --- plugins/Cardinal/src/sassy/sassy_scope.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/Cardinal/src/sassy/sassy_scope.cpp b/plugins/Cardinal/src/sassy/sassy_scope.cpp index 5daa95ae..2904be7c 100644 --- a/plugins/Cardinal/src/sassy/sassy_scope.cpp +++ b/plugins/Cardinal/src/sassy/sassy_scope.cpp @@ -499,17 +499,17 @@ static void scope_freq(ScopeData* gScope, const float uiScale, int index) ImVec2 mp = ImGui::GetMousePos(); mp.x -= p.x; mp.y -= p.y; - if (mp.x > 0 && mp.x < grid_size * uiScale && - mp.y > 0 && mp.y < grid_size * uiScale) + if (mp.x > 0 && mp.x < size * uiScale && + mp.y > 0 && mp.y < size * uiScale) { ImGui::GetWindowDrawList()->AddLine( ImVec2(p.x + mp.x, p.y), ImVec2(p.x + mp.x, p.y + grid_size * uiScale), 0xff00ff00, 1 * uiScale); ImGui::BeginTooltip(); - int note = (int)(12 * log(32 * POW_2_3_4TH * (freqbins[(int)mp.x] / 440)) / log(2)); + int note = (int)(12 * log(32 * POW_2_3_4TH * (freqbins[(int)(mp.x / uiScale)] / (sizef-1))) / log(2)); if (note < 0 || note > 127) note = -1; - ImGui::Text("%3.3fHz%s%s", freqbins[(int)mp.x], note==-1?"":"\n", note==-1?"":gNotestr[note]); + ImGui::Text("%3.3fHz%s%s", freqbins[(int)(mp.x / uiScale)], note==-1?"":"\n", note==-1?"":gNotestr[note]); ImGui::EndTooltip(); } } From 73af70de016bf726ff885ce72cc3604cf8d2ac73 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 21 May 2022 03:57:57 +0100 Subject: [PATCH 057/283] Reintroduce AS modules Signed-off-by: falkTX --- .gitmodules | 3 ++ README.md | 1 + docs/LICENSES.md | 6 +++- plugins/AS | 1 + plugins/Makefile | 19 ++++++++++++ plugins/plugins.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 104 insertions(+), 1 deletion(-) create mode 160000 plugins/AS diff --git a/.gitmodules b/.gitmodules index 88815aa9..fbbf66da 100644 --- a/.gitmodules +++ b/.gitmodules @@ -200,3 +200,6 @@ [submodule "plugins/WhatTheRack"] path = plugins/WhatTheRack url = https://github.com/korfuri/WhatTheRack.git +[submodule "plugins/AS"] + path = plugins/AS + url = https://github.com/AScustomWorks/AS.git diff --git a/README.md b/README.md index 8a5d28bb..324c2df3 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,7 @@ At the moment the following 3rd-party modules are provided: - Animated Circuits - Arable Instruments - Aria Salvatrice +- AS - Audible Instruments - Autinn - Axioma diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 6e00996a..9bb6d934 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -21,6 +21,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | Animated Circuits | GPL-3.0-or-later | | | Arable Instruments | GPL-3.0-or-later | | | Aria Salvatrice | GPL-3.0-or-later | | +| AS | MIT | | | Audible Instruments | GPL-3.0-or-later | | | Autinn | GPL-3.0-or-later | | | Axioma | GPL-3.0-or-later | | @@ -109,6 +110,9 @@ Below is a list of artwork licenses from plugins | AriaModules/lcd/Fixed_v01/* | Custom | See [LICENSE.txt](../plugins/AriaModules/res/lcd/Fixed_v01/LICENSE.txt) | | AriaModules/lcd/piano/* | WTFPL | | | AriaModules/signature/* | Custom | Removal required if modifying other files without author's permission | +| 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 | | | 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 | @@ -207,7 +211,7 @@ Below is a list of artwork licenses from plugins | WhatTheRack/BoomButton/* | CC-BY-3.0 | | | 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. | +| ZZC/panels/* | CC-BY-NC-SA-4.0 | 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. | | ZZC/fonts/DSEG/* | OFL-1.1-RFN | | | ZZC/fonts/Nunito/* | OFL-1.1-RFN | | diff --git a/plugins/AS b/plugins/AS new file mode 160000 index 00000000..2284e4a3 --- /dev/null +++ b/plugins/AS @@ -0,0 +1 @@ +Subproject commit 2284e4a3befb097b42ae30032147fd61226f64ff diff --git a/plugins/Makefile b/plugins/Makefile index 59d98335..4e1d92ab 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -316,6 +316,16 @@ PLUGIN_FILES += AriaModules/src/Undular.cpp # modules/types which are present in other plugins ARIA_CUSTOM = Blank +# -------------------------------------------------------------- +# AS + +PLUGIN_FILES += $(filter-out AS/src/AS.cpp,$(wildcard AS/src/*.cpp)) +PLUGIN_FILES += AS/freeverb/revmodel.cpp + +# modules/types which are present in other plugins +AS_CUSTOM = ADSR LabelDisplayWidget LedLight LowFrequencyOscillator VCA YellowRedLight allpass comb revmodel +AS_CUSTOM_PER_FILE = NumberDisplayWidget + # -------------------------------------------------------------- # AudibleInstruments @@ -1292,6 +1302,15 @@ $(BUILD_DIR)/AriaModules/%.cpp.o: AriaModules/%.cpp -DpluginInstance=pluginInstance__Aria \ -Wno-cast-function-type +$(BUILD_DIR)/AS/%.cpp.o: AS/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(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 $*))) \ + -DpluginInstance=pluginInstance__AS \ + -Wno-unused-private-field + $(BUILD_DIR)/AudibleInstruments/%.o: AudibleInstruments/% -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index a88eb629..c49d27f4 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -77,6 +77,17 @@ extern Model* modelUndular; extern Model* modelBlank; #undef modelBlank +// AS +#define modelADSR modelASADSR +#define modelVCA modelASVCA +#define LedLight ASLedLight +#define YellowRedLight ASYellowRedLight +#include "AS/src/AS.hpp" +#undef modelADSR +#undef modelVCA +#undef LedLight +#undef YellowRedLight + // AudibleInstruments #include "AudibleInstruments/src/plugin.hpp" @@ -705,6 +716,7 @@ Plugin* pluginInstance__AmalgamatedHarmonics; Plugin* pluginInstance__ArableInstruments; Plugin* pluginInstance__AnimatedCircuits; Plugin* pluginInstance__Aria; +Plugin* pluginInstance__AS; Plugin* pluginInstance__AudibleInstruments; extern Plugin* pluginInstance__Autinn; Plugin* pluginInstance__Axioma; @@ -1100,6 +1112,68 @@ static void initStatic__Aria() } } +static void initStatic__AS() +{ + Plugin* const p = new Plugin; + pluginInstance__AS = p; + const StaticPluginLoader spl(p, "AS"); + if (spl.ok()) + { +#define modelADSR modelASADSR +#define modelVCA modelASVCA + //OSCILLATORS + p->addModel(modelSineOsc); + p->addModel(modelSawOsc); + //TOOLS + p->addModel(modelADSR); + p->addModel(modelVCA); + p->addModel(modelQuadVCA); + p->addModel(modelTriLFO); + p->addModel(modelAtNuVrTr); + p->addModel(modelBPMClock); + p->addModel(modelSEQ16); + p->addModel(modelMixer2ch); + p->addModel(modelMixer4ch); + p->addModel(modelMixer8ch); + p->addModel(modelMonoVUmeter); + p->addModel(modelStereoVUmeter); + p->addModel(modelMultiple2_5); + p->addModel(modelMerge2_5); + p->addModel(modelSteps); + p->addModel(modelLaunchGate); + p->addModel(modelKillGate); + p->addModel(modelFlow); + p->addModel(modelSignalDelay); + p->addModel(modelTriggersMKI); + p->addModel(modelTriggersMKII); + p->addModel(modelTriggersMKIII); + p->addModel(modelBPMCalc); + p->addModel(modelBPMCalc2); + p->addModel(modelCv2T); + p->addModel(modelZeroCV2T); + p->addModel(modelReScale); + //EFFECTS + p->addModel(modelDelayPlusFx); + p->addModel(modelDelayPlusStereoFx); + p->addModel(modelPhaserFx); + p->addModel(modelReverbFx); + p->addModel(modelReverbStereoFx); + p->addModel(modelSuperDriveFx); + p->addModel(modelSuperDriveStereoFx); + p->addModel(modelTremoloFx); + p->addModel(modelTremoloStereoFx); + p->addModel(modelWaveShaper); + p->addModel(modelWaveShaperStereo); + //BLANK PANELS + p->addModel(modelBlankPanel4); + p->addModel(modelBlankPanel6); + p->addModel(modelBlankPanel8); + p->addModel(modelBlankPanelSpecial); +#undef modelADSR +#undef modelVCA + } +} + static void initStatic__AudibleInstruments() { Plugin* const p = new Plugin; @@ -2577,6 +2651,7 @@ void initStaticPlugins() initStatic__AnimatedCircuits(); initStatic__ArableInstruments(); initStatic__Aria(); + initStatic__AS(); initStatic__AudibleInstruments(); initStatic__Autinn(); initStatic__Axioma(); From f9e471e7fbae85b114399e8a764eee26caabb445 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 21 May 2022 10:07:02 +0100 Subject: [PATCH 058/283] Fix build Signed-off-by: falkTX --- plugins/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Makefile b/plugins/Makefile index 4e1d92ab..3fb77470 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -323,7 +323,7 @@ PLUGIN_FILES += $(filter-out AS/src/AS.cpp,$(wildcard AS/src/*.cpp)) PLUGIN_FILES += AS/freeverb/revmodel.cpp # modules/types which are present in other plugins -AS_CUSTOM = ADSR LabelDisplayWidget LedLight LowFrequencyOscillator VCA YellowRedLight allpass comb revmodel +AS_CUSTOM = ADSR BpmDisplayWidget LabelDisplayWidget LedLight LowFrequencyOscillator SigDisplayWidget VCA YellowRedLight allpass comb revmodel AS_CUSTOM_PER_FILE = NumberDisplayWidget # -------------------------------------------------------------- From b0c90b47b2356fbe4b7cbcdeec7b1b43c0b706fc Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 21 May 2022 10:45:05 +0100 Subject: [PATCH 059/283] Add forsitan modulare modules Closes #238 Signed-off-by: falkTX --- .gitmodules | 3 +++ README.md | 1 + docs/LICENSES.md | 2 ++ plugins/Makefile | 12 ++++++++++++ plugins/forsitan-modulare | 1 + plugins/plugins.cpp | 21 +++++++++++++++++++++ 6 files changed, 40 insertions(+) create mode 160000 plugins/forsitan-modulare diff --git a/.gitmodules b/.gitmodules index fbbf66da..37549d60 100644 --- a/.gitmodules +++ b/.gitmodules @@ -203,3 +203,6 @@ [submodule "plugins/AS"] path = plugins/AS url = https://github.com/AScustomWorks/AS.git +[submodule "plugins/forsitan-modulare"] + path = plugins/forsitan-modulare + url = https://github.com/gosub/forsitan-modulare.git diff --git a/README.md b/README.md index 324c2df3..61a1b4e6 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,7 @@ At the moment the following 3rd-party modules are provided: - ExpertSleepers Encoders - Extratone - Fehler Fabrik +- forsitan modulare - Fundamental - Glue the Giant - GoodSheperd diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 9bb6d934..9253946f 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -37,6 +37,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | ExpertSleepers Encoders | MIT | | | Extratone | GPL-3.0-or-later | | | Fehler Fabrik | GPL-3.0-or-later | | +| forsitan modulare | GPL-3.0-or-later | | | Fundamental | GPL-3.0-or-later | | | Glue the Giant | GPL-3.0-or-later | | | GoodSheperd | GPL-3.0-or-later | | @@ -144,6 +145,7 @@ Below is a list of artwork licenses from plugins | ExpertSleepers-Encoders/* | MIT | [Same license as source code](https://github.com/expertsleepersltd/vcvrack-encoders/issues/3) | | Extratone/* | GPL-3.0-or-later | [Same license as source code](https://github.com/EaterOfSheep/Extratone/issues/7) | | FehlerFabrik/* | GPL-3.0-or-later | No artwork specific license provided, see [FehlerFabrik#17](https://github.com/RCameron93/FehlerFabrik/issues/17) | +| forsitan-modulare/* | GPL-3.0-or-later | No artwork specific license provided | | Fundamental/* | GPL-3.0-or-later | Same license as source code | | GlueTheGiant/* | GPL-3.0-or-later | Same license as source code | | GlueTheGiant/fonts/DSEG7-* | OFL-1.1-RFN | | diff --git a/plugins/Makefile b/plugins/Makefile index 3fb77470..24cfe7cb 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -536,6 +536,11 @@ PLUGIN_FILES += $(filter-out FehlerFabrik/src/plugin.cpp,$(wildcard FehlerFabrik # modules/types which are present in other plugins FEHLERFABRIK_CUSTOM = Operator Sequencer SlewLimiter +# -------------------------------------------------------------- +# forsitan modulare + +PLUGIN_FILES += $(filter-out forsitan-modulare/src/forsitan.cpp,$(wildcard forsitan-modulare/src/*.cpp)) + # -------------------------------------------------------------- # GlueTheGiant @@ -1465,6 +1470,13 @@ $(BUILD_DIR)/Fundamental/%.c.o: Fundamental/%.c $(foreach m,$(FUNDAMENTAL_CUSTOM),$(call custom_module_names,$(m),Fundamental)) \ -DpluginInstance=pluginInstance__Fundamental +$(BUILD_DIR)/forsitan-modulare/%.cpp.o: forsitan-modulare/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(GLUETHEGIANT_CUSTOM),$(call custom_module_names,$(m),forsitan)) \ + -DpluginInstance=pluginInstance__forsitan + $(BUILD_DIR)/Fundamental/%.cpp.o: Fundamental/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/forsitan-modulare b/plugins/forsitan-modulare new file mode 160000 index 00000000..056cc2ec --- /dev/null +++ b/plugins/forsitan-modulare @@ -0,0 +1 @@ +Subproject commit 056cc2ec9186a4175d9214eee91e4ff5cc2e5fb1 diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index c49d27f4..9e27b002 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -320,6 +320,9 @@ void setupSamples(); // FehlerFabrik #include "FehlerFabrik/src/plugin.hpp" +// forsitan modulare +#include "forsitan-modulare/src/forsitan.hpp" + // GlueTheGiant #include "GlueTheGiant/src/plugin.hpp" bool audition_mixer = false; @@ -732,6 +735,7 @@ Plugin* pluginInstance__ESeries; Plugin* pluginInstance__ExpertSleepersEncoders; Plugin* pluginInstance__Extratone; Plugin* pluginInstance__FehlerFabrik; +Plugin* pluginInstance__forsitan; Plugin* pluginInstance__GlueTheGiant; Plugin* pluginInstance__GoodSheperd; Plugin* pluginInstance__GrandeModular; @@ -1722,6 +1726,22 @@ static void initStatic__FehlerFabrik() } } +static void initStatic__forsitan() +{ + Plugin* const p = new Plugin; + pluginInstance__forsitan = p; + + const StaticPluginLoader spl(p, "forsitan-modulare"); + if (spl.ok()) + { + p->addModel(alea); + p->addModel(interea); + p->addModel(cumuli); + p->addModel(deinde); + p->addModel(pavo); + } +} + static void initStatic__GlueTheGiant() { Plugin* const p = new Plugin; @@ -2667,6 +2687,7 @@ void initStaticPlugins() initStatic__ExpertSleepersEncoders(); initStatic__Extratone(); initStatic__FehlerFabrik(); + initStatic__forsitan(); initStatic__GlueTheGiant(); initStatic__GoodSheperd(); initStatic__GrandeModular(); From 5eba049074e375c60674743e0004e7f14e233788 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 21 May 2022 10:53:03 +0100 Subject: [PATCH 060/283] Another build conflict fix Signed-off-by: falkTX --- plugins/Makefile | 2 +- plugins/plugins.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/Makefile b/plugins/Makefile index 24cfe7cb..f960f950 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -323,7 +323,7 @@ PLUGIN_FILES += $(filter-out AS/src/AS.cpp,$(wildcard AS/src/*.cpp)) PLUGIN_FILES += AS/freeverb/revmodel.cpp # modules/types which are present in other plugins -AS_CUSTOM = ADSR BpmDisplayWidget LabelDisplayWidget LedLight LowFrequencyOscillator SigDisplayWidget VCA YellowRedLight allpass comb revmodel +AS_CUSTOM = ADSR BpmDisplayWidget LabelDisplayWidget LedLight LowFrequencyOscillator SigDisplayWidget VCA WaveShaper YellowRedLight allpass comb revmodel AS_CUSTOM_PER_FILE = NumberDisplayWidget # -------------------------------------------------------------- diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 9e27b002..8ed6b8f7 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -80,11 +80,13 @@ extern Model* modelBlank; // AS #define modelADSR modelASADSR #define modelVCA modelASVCA +#define modelWaveShaper modelASWaveShaper #define LedLight ASLedLight #define YellowRedLight ASYellowRedLight #include "AS/src/AS.hpp" #undef modelADSR #undef modelVCA +#undef modelWaveShaper #undef LedLight #undef YellowRedLight @@ -1125,6 +1127,7 @@ static void initStatic__AS() { #define modelADSR modelASADSR #define modelVCA modelASVCA +#define modelWaveShaper modelASWaveShaper //OSCILLATORS p->addModel(modelSineOsc); p->addModel(modelSawOsc); @@ -1175,6 +1178,7 @@ static void initStatic__AS() p->addModel(modelBlankPanelSpecial); #undef modelADSR #undef modelVCA +#undef modelWaveShaper } } From ed0a04a11c7a6508b0dc8871ff8b24f7aa733157 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 21 May 2022 22:16:12 +0100 Subject: [PATCH 061/283] Update to Rack 2.1.1 Signed-off-by: falkTX --- src/CardinalPlugin.cpp | 3 ++ src/Rack | 2 +- src/override/common.cpp | 2 +- src/override/diffs/MenuBar.cpp.diff | 2 +- src/override/diffs/Model.cpp.diff | 2 +- src/override/diffs/Window.cpp.diff | 2 +- src/override/diffs/common.cpp.diff | 4 +- src/override/diffs/plugin.cpp.diff | 79 ++++++++++++++++++++--------- src/override/plugin.cpp | 4 ++ 9 files changed, 68 insertions(+), 32 deletions(-) diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index b37aac1f..7b51812c 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -248,6 +248,9 @@ struct Initializer INFO("Destroying plugins"); plugin::destroyStaticPlugins(); + INFO("Destroying settings"); + settings::destroy(); + INFO("Destroying logger"); logger::destroy(); } diff --git a/src/Rack b/src/Rack index 30665d62..b016cacb 160000 --- a/src/Rack +++ b/src/Rack @@ -1 +1 @@ -Subproject commit 30665d62801c2ced7260a37a2d0214edfe6528a9 +Subproject commit b016cacb10c4fd66d814b924bc2774242f74c836 diff --git a/src/override/common.cpp b/src/override/common.cpp index c1c9e709..200ecadd 100644 --- a/src/override/common.cpp +++ b/src/override/common.cpp @@ -50,7 +50,7 @@ const std::string APP_NAME = "Cardinal"; const std::string APP_EDITION = getPluginFormatName(); const std::string APP_EDITION_NAME = "Audio Plugin"; const std::string APP_VERSION_MAJOR = "2"; -const std::string APP_VERSION = "2.1"; +const std::string APP_VERSION = "2.1.1"; #if defined ARCH_WIN const std::string APP_OS = "win"; #elif defined ARCH_MAC diff --git a/src/override/diffs/MenuBar.cpp.diff b/src/override/diffs/MenuBar.cpp.diff index d4b9535f..36c68683 100644 --- a/src/override/diffs/MenuBar.cpp.diff +++ b/src/override/diffs/MenuBar.cpp.diff @@ -1,5 +1,5 @@ --- ../Rack/src/app/MenuBar.cpp 2022-02-26 23:08:06.697192725 +0000 -+++ MenuBar.cpp 2022-04-27 17:30:16.653341980 +0100 ++++ MenuBar.cpp 2022-04-27 18:17:16.790097058 +0100 @@ -1,8 +1,33 @@ +/* + * DISTRHO Cardinal Plugin diff --git a/src/override/diffs/Model.cpp.diff b/src/override/diffs/Model.cpp.diff index 50c88176..fa367533 100644 --- a/src/override/diffs/Model.cpp.diff +++ b/src/override/diffs/Model.cpp.diff @@ -1,5 +1,5 @@ --- ../Rack/src/plugin/Model.cpp 2021-10-17 13:57:23.257633662 +0100 -+++ Model.cpp 2022-04-27 17:55:57.362107553 +0100 ++++ Model.cpp 2022-04-27 18:17:16.790097058 +0100 @@ -1,3 +1,30 @@ +/* + * DISTRHO Cardinal Plugin diff --git a/src/override/diffs/Window.cpp.diff b/src/override/diffs/Window.cpp.diff index 0f6d5bfc..72bab0a9 100644 --- a/src/override/diffs/Window.cpp.diff +++ b/src/override/diffs/Window.cpp.diff @@ -1,5 +1,5 @@ --- ../Rack/src/window/Window.cpp 2022-02-09 15:35:19.238863170 +0000 -+++ Window.cpp 2022-04-27 16:53:59.743671091 +0100 ++++ Window.cpp 2022-05-15 12:05:26.430956655 +0100 @@ -1,33 +1,83 @@ +/* + * DISTRHO Cardinal Plugin diff --git a/src/override/diffs/common.cpp.diff b/src/override/diffs/common.cpp.diff index ac85f16b..6ceca148 100644 --- a/src/override/diffs/common.cpp.diff +++ b/src/override/diffs/common.cpp.diff @@ -1,5 +1,5 @@ --- ../Rack/src/common.cpp 2021-11-23 19:57:23.719015894 +0000 -+++ common.cpp 2022-03-14 23:25:17.492322806 +0000 ++++ common.cpp 2022-05-21 22:13:36.682680714 +0100 @@ -1,6 +1,38 @@ +/* + * DISTRHO Cardinal Plugin @@ -52,7 +52,7 @@ +const std::string APP_EDITION_NAME = "Audio Plugin"; const std::string APP_VERSION_MAJOR = "2"; -const std::string APP_VERSION = TOSTRING(_APP_VERSION); -+const std::string APP_VERSION = "2.1"; ++const std::string APP_VERSION = "2.1.1"; #if defined ARCH_WIN const std::string APP_OS = "win"; -#elif ARCH_MAC diff --git a/src/override/diffs/plugin.cpp.diff b/src/override/diffs/plugin.cpp.diff index 73c7cb70..bbf3a710 100644 --- a/src/override/diffs/plugin.cpp.diff +++ b/src/override/diffs/plugin.cpp.diff @@ -1,6 +1,6 @@ ---- ../Rack/src/plugin.cpp 2022-02-05 22:30:09.265393248 +0000 -+++ plugin.cpp 2022-01-30 00:24:49.375329910 +0000 -@@ -1,308 +1,40 @@ +--- ../Rack/src/plugin.cpp 2022-05-21 22:03:14.887288742 +0100 ++++ plugin.cpp 2022-05-21 22:14:18.180931534 +0100 +@@ -1,336 +1,41 @@ -#include -#include -#include @@ -72,6 +72,18 @@ -// private API -//////////////////// - +- +-static void* getSymbol(void* handle, const char* name) { +- if (!handle) +- return NULL; +- +-#if defined ARCH_WIN +- return (void*) GetProcAddress((HMODULE) handle, name); +-#else +- return dlsym(handle, name); +-#endif +-} +- -/** Returns library handle */ -static void* loadLibrary(std::string libraryPath) { -#if defined ARCH_WIN @@ -131,12 +143,7 @@ - plugin->handle = loadLibrary(libraryPath); - - // Get plugin's init() function -- InitCallback initCallback; --#if defined ARCH_WIN -- initCallback = (InitCallback) GetProcAddress((HMODULE) plugin->handle, "init"); --#else -- initCallback = (InitCallback) dlsym(plugin->handle, "init"); --#endif +- InitCallback initCallback = (InitCallback) getSymbol(plugin->handle, "init"); - if (!initCallback) - throw Exception("Failed to read init() symbol in %s", libraryPath.c_str()); - @@ -183,6 +190,14 @@ - throw Exception("JSON parsing error at %s %d:%d %s", manifestFilename.c_str(), error.line, error.column, error.text); - DEFER({json_decref(rootJ);}); - +- // Load manifest +- plugin->fromJson(rootJ); +- +- // Reject plugin if slug already exists +- Plugin* existingPlugin = getPlugin(plugin->slug); +- if (existingPlugin) +- throw Exception("Plugin %s is already loaded, not attempting to load it again", plugin->slug.c_str()); +- - // Call init callback - InitCallback initCallback; - if (path == "") { @@ -193,13 +208,18 @@ - } - initCallback(plugin); - -- // Load manifest -- plugin->fromJson(rootJ); -- -- // Reject plugin if slug already exists -- Plugin* existingPlugin = getPlugin(plugin->slug); -- if (existingPlugin) -- throw Exception("Plugin %s is already loaded, not attempting to load it again", plugin->slug.c_str()); +- // Load modules manifest +- json_t* modulesJ = json_object_get(rootJ, "modules"); +- plugin->modulesFromJson(modulesJ); +- +- // Call settingsFromJson() if exists +- // Returns NULL for Core. +- auto settingsFromJson = (decltype(&::settingsFromJson)) getSymbol(plugin->handle, "settingsFromJson"); +- if (settingsFromJson) { +- json_t* settingsJ = json_object_get(settings::pluginSettingsJ, plugin->slug.c_str()); +- if (settingsJ) +- settingsFromJson(settingsJ); +- } - } - catch (Exception& e) { - WARN("Could not load plugin %s: %s", path.c_str(), e.what()); @@ -296,11 +316,7 @@ - typedef void (*DestroyCallback)(); - DestroyCallback destroyCallback = NULL; - if (handle) { --#if defined ARCH_WIN -- destroyCallback = (DestroyCallback) GetProcAddress((HMODULE) handle, "destroy"); --#else -- destroyCallback = (DestroyCallback) dlsym(handle, "destroy"); --#endif +- destroyCallback = (DestroyCallback) getSymbol(handle, "destroy"); - } - if (destroyCallback) { - try { @@ -334,10 +350,23 @@ -} - - +-void settingsMergeJson(json_t* rootJ) { +- for (Plugin* plugin : plugins) { +- auto settingsToJson = (decltype(&::settingsToJson)) getSymbol(plugin->handle, "settingsToJson"); +- if (settingsToJson) { +- json_t* settingsJ = settingsToJson(); +- json_object_set_new(rootJ, plugin->slug.c_str(), settingsJ); +- } +- else { +- json_object_del(rootJ, plugin->slug.c_str()); +- } +- } +-} ++void settingsMergeJson(json_t*) {} + + /** Given slug => fallback slug. - Correctly handles bidirectional fallbacks. - To request fallback slugs to be added to this list, open a GitHub issue. -@@ -352,8 +84,19 @@ +@@ -383,8 +88,19 @@ */ using PluginModuleSlug = std::tuple; static const std::map moduleSlugFallbacks = { @@ -358,7 +387,7 @@ // {{"", ""}, {"", ""}}, }; -@@ -441,7 +184,6 @@ +@@ -472,7 +188,6 @@ } diff --git a/src/override/plugin.cpp b/src/override/plugin.cpp index 76d10aad..a23b26cb 100644 --- a/src/override/plugin.cpp +++ b/src/override/plugin.cpp @@ -35,6 +35,9 @@ namespace rack { namespace plugin { +void settingsMergeJson(json_t*) {} + + /** Given slug => fallback slug. Correctly handles bidirectional fallbacks. To request fallback slugs to be added to this list, open a GitHub issue. @@ -43,6 +46,7 @@ static const std::map pluginSlugFallbacks = { {"VultModulesFree", "VultModules"}, {"VultModules", "VultModulesFree"}, {"AudibleInstrumentsPreview", "AudibleInstruments"}, + {"SequelSequencers", "DanielDavies"}, // {"", ""}, }; From 21004ab183b1b099074856e4a4cb788ed84af9b1 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 21 May 2022 23:05:19 +0100 Subject: [PATCH 062/283] Tweak module loading to match new Rack 2.1.1 behaviour Signed-off-by: falkTX --- plugins/plugins.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 8ed6b8f7..6b38d8c7 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -821,13 +821,23 @@ struct StaticPluginLoader { json_t* const version = json_string((APP_VERSION_MAJOR + ".0").c_str()); json_object_set(rootJ, "version", version); json_decref(version); + + // Load manifest + p->fromJson(rootJ); + + // Reject plugin if slug already exists + if (Plugin* const existingPlugin = getPlugin(p->slug)) + throw Exception("Plugin %s is already loaded, not attempting to load it again", p->slug.c_str()); } ~StaticPluginLoader() { if (rootJ != nullptr) { - plugin->fromJson(rootJ); + // Load modules manifest + json_t* const modulesJ = json_object_get(rootJ, "modules"); + plugin->modulesFromJson(modulesJ); + json_decref(rootJ); plugins.push_back(plugin); } From d8a341be9526876abaafbbdeb3d65856235b4849 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 22 May 2022 23:47:08 +0100 Subject: [PATCH 063/283] Avoid RT-unsafe allocations on HostMIDI-Map Signed-off-by: falkTX --- plugins/Cardinal/src/HostMIDI-Map.cpp | 33 +++++++++++--------------- plugins/Cardinal/src/ModuleWidgets.hpp | 1 + plugins/Cardinal/src/Widgets.hpp | 7 +++--- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/plugins/Cardinal/src/HostMIDI-Map.cpp b/plugins/Cardinal/src/HostMIDI-Map.cpp index ee6faed9..de8c123c 100644 --- a/plugins/Cardinal/src/HostMIDI-Map.cpp +++ b/plugins/Cardinal/src/HostMIDI-Map.cpp @@ -26,6 +26,7 @@ */ #include "plugincontext.hpp" +#include "ModuleWidgets.hpp" #include "Widgets.hpp" #include @@ -34,7 +35,7 @@ USE_NAMESPACE_DISTRHO; -static const int MAX_MIDI_CONTROL = 120; /* 0x77 + 1 */ +static constexpr const int MAX_MIDI_CONTROL = 120; /* 0x77 + 1 */ struct HostMIDIMap : TerminalModule { enum ParamIds { @@ -93,6 +94,7 @@ struct HostMIDIMap : TerminalModule { for (int id = 0; id < MAX_MIDI_CONTROL; ++id) { paramHandles[id].color = nvgRGBf(0.76f, 0.11f, 0.22f); + paramHandles[id].text.reserve(25); pcontext->engine->addParamHandle(¶mHandles[id]); } @@ -366,15 +368,17 @@ struct HostMIDIMap : TerminalModule { nextLearningId = learningId = -1; } - // FIXME this allocates string during RT!! + // this is called during RT!! void refreshParamHandleText(const int id) { - std::string text; + char textBuf[25]; + if (ccs[id] >= 0) - text = string::f("CC%02d", ccs[id]); + std::sprintf(textBuf, "CC%02d", ccs[id]); else - text = "MIDI-Map"; - paramHandles[id].text = text; + std::strcpy(textBuf, "MIDI-Map"); + + paramHandles[id].text.assign(textBuf); } void updateMapLen() @@ -679,7 +683,7 @@ struct HostMIDIMapDisplay : Widget { } }; -struct HostMIDIMapWidget : ModuleWidget { +struct HostMIDIMapWidget : ModuleWidgetWith11HP { HostMIDIMap* const module; HostMIDIMapWidget(HostMIDIMap* const m) @@ -687,11 +691,7 @@ struct HostMIDIMapWidget : ModuleWidget { { setModule(m); setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostMIDIMap.svg"))); - - addChild(createWidget(Vec(RACK_GRID_WIDTH, 0))); - addChild(createWidget(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(createWidget(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(createWidget(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + createAndAddScrews(); HostMIDIMapDisplay* const display = createWidget(Vec(1.0f, 71.0f)); display->box.size = Vec(box.size.x - 2.0f, box.size.y - 89.0f); @@ -701,13 +701,8 @@ struct HostMIDIMapWidget : ModuleWidget { void draw(const DrawArgs& args) override { - nvgBeginPath(args.vg); - nvgRect(args.vg, 0, 0, box.size.x, box.size.y); - nvgFillPaint(args.vg, nvgLinearGradient(args.vg, 0, 0, 0, box.size.y, - nvgRGB(0x18, 0x19, 0x19), nvgRGB(0x21, 0x22, 0x22))); - nvgFill(args.vg); - - ModuleWidget::draw(args); + drawBackground(args.vg); + ModuleWidgetWith11HP::draw(args); } void appendContextMenu(Menu* const menu) override diff --git a/plugins/Cardinal/src/ModuleWidgets.hpp b/plugins/Cardinal/src/ModuleWidgets.hpp index 7191d3a1..e97772e0 100644 --- a/plugins/Cardinal/src/ModuleWidgets.hpp +++ b/plugins/Cardinal/src/ModuleWidgets.hpp @@ -95,3 +95,4 @@ struct ModuleWidgetWithSideScrews : ModuleWidget { typedef ModuleWidgetWithSideScrews<3> ModuleWidgetWith3HP; typedef ModuleWidgetWithSideScrews<8> ModuleWidgetWith8HP; typedef ModuleWidgetWithSideScrews<9> ModuleWidgetWith9HP; +typedef ModuleWidgetWithSideScrews<11> ModuleWidgetWith11HP; diff --git a/plugins/Cardinal/src/Widgets.hpp b/plugins/Cardinal/src/Widgets.hpp index b5732461..7faff609 100644 --- a/plugins/Cardinal/src/Widgets.hpp +++ b/plugins/Cardinal/src/Widgets.hpp @@ -377,8 +377,9 @@ struct OpenGlWidgetWithBrowserPreview : OpenGlWidget { fb = nvgluCreateFramebuffer(args.vg, box.size.x * oversample, box.size.y * oversample, 0); DISTRHO_SAFE_ASSERT_RETURN(fb != nullptr,); - // draw our special framebuffer nvgluBindFramebuffer(fb); + + // draw our special framebuffer drawFramebufferForBrowserPreview(); // reset to regular framebuffer @@ -388,8 +389,8 @@ struct OpenGlWidgetWithBrowserPreview : OpenGlWidget { nvgBeginPath(args.vg); nvgRect(args.vg, 0.0f, 0.0f, box.size.x, box.size.y); NVGpaint paint = nvgImagePattern(args.vg, - 0.0f, 0.0f, box.size.x, box.size.y, - 0.0f, fb->image, 1.0f); + 0.0f, 0.0f, box.size.x, box.size.y, + 0.0f, fb->image, 1.0f); nvgFillPaint(args.vg, paint); nvgFill(args.vg); } From 952304999d88d9261a6155cefc75f3870b3f790a Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 23 May 2022 00:18:05 +0100 Subject: [PATCH 064/283] Optimize HostParameters module and also those without audio Signed-off-by: falkTX --- plugins/Cardinal/src/Blank.cpp | 3 ++ plugins/Cardinal/src/HostParameters.cpp | 37 +++++++++++++++---------- plugins/Cardinal/src/MPV.cpp | 3 ++ plugins/Cardinal/src/TextEditor.cpp | 3 ++ 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/plugins/Cardinal/src/Blank.cpp b/plugins/Cardinal/src/Blank.cpp index 1b49cf0f..0e13c70e 100644 --- a/plugins/Cardinal/src/Blank.cpp +++ b/plugins/Cardinal/src/Blank.cpp @@ -34,6 +34,9 @@ struct CardinalBlankModule : Module { CardinalBlankModule() { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); } + + void process(const ProcessArgs&) override + {} }; struct CardinalBlankImage : Widget { diff --git a/plugins/Cardinal/src/HostParameters.cpp b/plugins/Cardinal/src/HostParameters.cpp index 0bea835d..ac03d82b 100644 --- a/plugins/Cardinal/src/HostParameters.cpp +++ b/plugins/Cardinal/src/HostParameters.cpp @@ -37,6 +37,8 @@ struct HostParameters : TerminalModule { CardinalPluginContext* const pcontext; rack::dsp::SlewLimiter parameters[kModuleParameters]; bool parametersConnected[kModuleParameters] = {}; + bool bypassed = false; + uint32_t lastProcessCounter = 0; HostParameters() : pcontext(static_cast(APP)) @@ -45,31 +47,36 @@ struct HostParameters : TerminalModule { throw rack::Exception("Plugin context is null."); config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); - - const float fsampleRate = static_cast(pcontext->sampleRate); - SampleRateChangeEvent e = { - fsampleRate, - 1.0f / fsampleRate - }; - onSampleRateChange(e); } void processTerminalInput(const ProcessArgs& args) override { - if (isBypassed()) - return; + const uint32_t processCounter = pcontext->processCounter; - for (uint32_t i=0; iparameters[i])); } } diff --git a/plugins/Cardinal/src/MPV.cpp b/plugins/Cardinal/src/MPV.cpp index 1992ddc7..f0a4b72a 100644 --- a/plugins/Cardinal/src/MPV.cpp +++ b/plugins/Cardinal/src/MPV.cpp @@ -49,6 +49,9 @@ struct CardinalEmbedModule : Module { configOutput(0, "Audio Left"); configOutput(1, "Audio Right"); } + + void process(const ProcessArgs&) override + {} }; // -------------------------------------------------------------------------------------------------------------------- diff --git a/plugins/Cardinal/src/TextEditor.cpp b/plugins/Cardinal/src/TextEditor.cpp index cbcda030..7905e8c1 100644 --- a/plugins/Cardinal/src/TextEditor.cpp +++ b/plugins/Cardinal/src/TextEditor.cpp @@ -79,6 +79,9 @@ struct TextEditorModule : Module { return rootJ; } + void process(const ProcessArgs&) override + {} + void dataFromJson(json_t* const rootJ) override { file.clear(); From e861389537446e8bb249033ce599f9b8f082dd72 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 23 May 2022 03:56:01 +0100 Subject: [PATCH 065/283] Add Host Parameters Map module, functional but still WIP Signed-off-by: falkTX --- plugins/Cardinal/plugin.json | 9 + plugins/Cardinal/src/HostMIDI-Map.cpp | 74 +-- plugins/Cardinal/src/HostParameters-Map.cpp | 589 ++++++++++++++++++++ plugins/Cardinal/src/HostParameters.cpp | 1 - plugins/Cardinal/src/plugin.hpp | 1 + plugins/Makefile | 2 +- plugins/plugins.cpp | 2 + 7 files changed, 639 insertions(+), 39 deletions(-) create mode 100644 plugins/Cardinal/src/HostParameters-Map.cpp diff --git a/plugins/Cardinal/plugin.json b/plugins/Cardinal/plugin.json index dfeed6e0..ff96849d 100644 --- a/plugins/Cardinal/plugin.json +++ b/plugins/Cardinal/plugin.json @@ -90,6 +90,15 @@ "External" ] }, + { + "slug": "HostParametersMap", + "name": "Host Parameters Map", + "description": "Allows host-controlled plugin parameters to control other module parameters", + "manualUrl": "https://github.com/DISTRHO/Cardinal/blob/main/docs/CARDINAL-MODULES.md#host-parameters-map", + "tags": [ + "External" + ] + }, { "slug": "HostTime", "name": "Host Time", diff --git a/plugins/Cardinal/src/HostMIDI-Map.cpp b/plugins/Cardinal/src/HostMIDI-Map.cpp index de8c123c..46bb16e7 100644 --- a/plugins/Cardinal/src/HostMIDI-Map.cpp +++ b/plugins/Cardinal/src/HostMIDI-Map.cpp @@ -59,6 +59,7 @@ struct HostMIDIMap : TerminalModule { uint32_t lastProcessCounter; int nextLearningId; uint8_t channel; + bool bypassed = false; // from Rack bool smooth; @@ -95,12 +96,10 @@ struct HostMIDIMap : TerminalModule { { paramHandles[id].color = nvgRGBf(0.76f, 0.11f, 0.22f); paramHandles[id].text.reserve(25); + valueFilters[id].setTau(1 / 30.f); pcontext->engine->addParamHandle(¶mHandles[id]); } - for (int i = 0; i < MAX_MIDI_CONTROL; i++) - valueFilters[i].setTau(1 / 30.f); - divider.setDivision(32); onReset(); } @@ -141,13 +140,14 @@ struct HostMIDIMap : TerminalModule { if (processCounterChanged) { + bypassed = isBypassed(); lastProcessCounter = processCounter; midiEvents = pcontext->midiEvents; midiEventsLeft = pcontext->midiEventCount; midiEventFrame = 0; } - if (isBypassed() || !divider.process()) + if (bypassed || !divider.process()) { ++midiEventFrame; return; @@ -262,21 +262,6 @@ struct HostMIDIMap : TerminalModule { void processTerminalOutput(const ProcessArgs&) override {} - void clearMap(int id) - { - nextLearningId = -1; - learningId = -1; - learnedCc = false; - learnedParam = false; - - ccs[id] = -1; - values[id] = -1; - pcontext->engine->updateParamHandle(¶mHandles[id], -1, 0, true); - valueFilters[id].reset(); - refreshParamHandleText(id); - updateMapLen(); - } - // ---------------------------------------------------------------------------------------------------------------- // stuff for resetting state @@ -308,7 +293,21 @@ struct HostMIDIMap : TerminalModule { // ---------------------------------------------------------------------------------------------------------------- // stuff called from panel side, must lock engine - // called from onSelect + void clearMap(int id) + { + nextLearningId = -1; + learningId = -1; + learnedCc = false; + learnedParam = false; + + ccs[id] = -1; + values[id] = -1; + pcontext->engine->updateParamHandle(¶mHandles[id], -1, 0, true); + valueFilters[id].reset(); + refreshParamHandleText(id); + updateMapLen(); + } + void enableLearn(const int id) { if (learningId == id) @@ -321,16 +320,6 @@ struct HostMIDIMap : TerminalModule { learnedParam = false; } - // called from onDeselect - void disableLearn(const int id) - { - nextLearningId = -1; - - if (learningId == id) - learningId = -1; - } - - // called from onDeselect void learnParam(const int id, const int64_t moduleId, const int paramId) { pcontext->engine->updateParamHandle(¶mHandles[id], moduleId, paramId, true); @@ -339,6 +328,16 @@ struct HostMIDIMap : TerminalModule { updateMapLen(); } + /* + void disableLearn(const int id) + { + nextLearningId = -1; + + if (learningId == id) + learningId = -1; + } + */ + // ---------------------------------------------------------------------------------------------------------------- // common utils @@ -371,14 +370,16 @@ struct HostMIDIMap : TerminalModule { // this is called during RT!! void refreshParamHandleText(const int id) { - char textBuf[25]; - if (ccs[id] >= 0) + { + char textBuf[25]; std::sprintf(textBuf, "CC%02d", ccs[id]); + paramHandles[id].text.assign(textBuf); + } else - std::strcpy(textBuf, "MIDI-Map"); - - paramHandles[id].text.assign(textBuf); + { + paramHandles[id].text.clear(); + } } void updateMapLen() @@ -471,7 +472,6 @@ struct HostMIDIMap : TerminalModule { struct CardinalMIDIMapChoice : CardinalLedDisplayChoice { HostMIDIMap* const module; const int id; - int disableLearnFrames = -1; ParamWidget* lastTouchedParam = nullptr; CardinalMIDIMapChoice(HostMIDIMap* const m, const int i) @@ -576,10 +576,10 @@ struct CardinalMIDIMapChoice : CardinalLedDisplayChoice { switch (e.button) { case GLFW_MOUSE_BUTTON_RIGHT: + APP->scene->rack->touchedParam = lastTouchedParam = nullptr; module->clearMap(id); e.consume(this); break; - // fall-through case GLFW_MOUSE_BUTTON_LEFT: APP->scene->rack->touchedParam = lastTouchedParam = nullptr; module->enableLearn(id); diff --git a/plugins/Cardinal/src/HostParameters-Map.cpp b/plugins/Cardinal/src/HostParameters-Map.cpp new file mode 100644 index 00000000..fd1763db --- /dev/null +++ b/plugins/Cardinal/src/HostParameters-Map.cpp @@ -0,0 +1,589 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +/** + * This file contains portions from VCVRack's core/MIDIMap.cpp + * Copyright (C) 2016-2021 VCV. + * + * 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 (at your option) any later version. + */ + +#include "plugincontext.hpp" +#include "ModuleWidgets.hpp" +#include "Widgets.hpp" + +// ----------------------------------------------------------------------------------------------------------- + +static constexpr const uint8_t MAX_MAPPED_PARAMS = 64; + +struct HostParametersMap : TerminalModule { + enum ParamIds { + NUM_PARAMS + }; + enum InputIds { + NUM_INPUTS + }; + enum OutputIds { + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + + struct Mapping { + uint8_t hostParamId = UINT8_MAX; + bool inverted = false; + bool smooth = false; + ParamHandle paramHandle; + }; + + Mapping mappings[MAX_MAPPED_PARAMS]; + dsp::ExponentialFilter valueFilters[MAX_MAPPED_PARAMS]; + bool filterInitialized[MAX_MAPPED_PARAMS] = {}; + bool valueReached[MAX_MAPPED_PARAMS] = {}; + + uint8_t numMappedParmeters = 1; + uint8_t learningId = UINT8_MAX; + + CardinalPluginContext* const pcontext; + bool parametersChanged[kModuleParameters] = {}; + float parameterValues[kModuleParameters]; + bool bypassed = false; + bool firstRun = true; + uint32_t lastProcessCounter = 0; + + HostParametersMap() + : pcontext(static_cast(APP)) + { + if (pcontext == nullptr) + throw rack::Exception("Plugin context is null."); + + config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); + + for (uint8_t id = 0; id < MAX_MAPPED_PARAMS; ++id) + { + mappings[id].paramHandle.color = nvgRGBf(0.76f, 0.11f, 0.22f); + valueFilters[id].setTau(1 / 30.f); + pcontext->engine->addParamHandle(&mappings[id].paramHandle); + } + + std::memcpy(parameterValues, pcontext->parameters, sizeof(parameterValues)); + } + + ~HostParametersMap() + { + if (pcontext == nullptr) + return; + + for (uint8_t id = 0; id < MAX_MAPPED_PARAMS; ++id) + pcontext->engine->removeParamHandle(&mappings[id].paramHandle); + } + + void onReset() override + { + lastProcessCounter = 0; + + // Use NoLock because we're already in an Engine write-lock if Engine::resetModule(). + // We also might be in the MIDIMap() constructor, which could cause problems, but when constructing, all ParamHandles will point to no Modules anyway. + clearMaps_NoLock(); + numMappedParmeters = 1; + } + + void clearMaps_NoLock() + { + learningId = UINT8_MAX; + + for (uint8_t id = 0; id < MAX_MAPPED_PARAMS; ++id) + { + pcontext->engine->updateParamHandle_NoLock(&mappings[id].paramHandle, -1, 0, true); + valueReached[id] = false; + valueFilters[id].reset(); + mappings[id].hostParamId = UINT8_MAX; + } + + firstRun = true; + std::memcpy(parameterValues, pcontext->parameters, sizeof(parameterValues)); + std::memset(parametersChanged, 0, sizeof(parametersChanged)); + } + + void processTerminalInput(const ProcessArgs& args) override + { + const uint32_t processCounter = pcontext->processCounter; + + if (lastProcessCounter == processCounter) + return; + + lastProcessCounter = processCounter; + + if (isBypassed()) + return; + + for (uint32_t i = 0; i < kModuleParameters; ++i) + { + if (d_isEqual(pcontext->parameters[i], parameterValues[i])) + continue; + + parameterValues[i] = pcontext->parameters[i]; + parametersChanged[i] = true; + } + + for (uint id = 0; id < numMappedParmeters; ++id) + { + ParamHandle& paramHandle(mappings[id].paramHandle); + + if (paramHandle.module == nullptr) + continue; + + // Get ParamQuantity from ParamHandle + const int paramId = paramHandle.paramId; + ParamQuantity* const paramQuantity = paramHandle.module->paramQuantities[paramId]; + if (!paramQuantity) + continue; + if (!paramQuantity->isBounded()) + continue; + + // Validate hostParamId + const uint8_t hostParamId = mappings[id].hostParamId; + if (hostParamId >= kModuleParameters) + continue; + + // Set filter from param value if filter is uninitialized + if (!filterInitialized[id]) + { + valueFilters[id].out = paramQuantity->getScaledValue(); + filterInitialized[id] = true; + continue; + } + + // Check if parameter was changed by the host + if (parametersChanged[hostParamId] && !firstRun) + valueReached[id] = false; + else if (valueReached[id]) + continue; + + // Apply value, smooth as needed. + const float value = 0.1f * (mappings[id].inverted ? 10.f - parameterValues[hostParamId] + : parameterValues[hostParamId]); + + if (mappings[id].smooth && std::fabs(valueFilters[id].out - value) < 1.f) + { + // Smooth value with filter + if (d_isEqual(valueFilters[id].process(args.sampleTime * pcontext->bufferSize, value), value)) + { + valueReached[id] = true; + continue; + } + } + else + { + // Jump value + if (d_isEqual(valueFilters[id].out, value)) + { + valueReached[id] = true; + continue; + } + + valueFilters[id].out = value; + } + + paramQuantity->setScaledValue(valueFilters[id].out); + } + + firstRun = false; + std::memset(parametersChanged, 0, sizeof(parametersChanged)); + } + + void processTerminalOutput(const ProcessArgs&) override + {} + + // ---------------------------------------------------------------------------------------------------------------- + // save and load json stuff + + json_t* dataToJson() override + { + json_t* const rootJ = json_object(); + DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr); + + if (json_t* const mapsJ = json_array()) + { + for (uint id = 0; id < numMappedParmeters; ++id) + { + json_t* const mapJ = json_object(); + DISTRHO_SAFE_ASSERT_CONTINUE(mapJ != nullptr); + json_object_set_new(mapJ, "hostParamId", json_integer(mappings[id].hostParamId)); + json_object_set_new(mapJ, "inverted", json_boolean(mappings[id].inverted)); + json_object_set_new(mapJ, "smooth", json_boolean(mappings[id].smooth)); + json_object_set_new(mapJ, "moduleId", json_integer(mappings[id].paramHandle.moduleId)); + json_object_set_new(mapJ, "paramId", json_integer(mappings[id].paramHandle.paramId)); + json_array_append_new(mapsJ, mapJ); + } + json_object_set_new(rootJ, "maps", mapsJ); + } + + return rootJ; + } + + void dataFromJson(json_t* const rootJ) override + { + // Use NoLock because we're already in an Engine write-lock. + clearMaps_NoLock(); + + if (json_t* const mapsJ = json_object_get(rootJ, "maps")) + { + json_t* mapJ; + size_t id; + json_array_foreach(mapsJ, id, mapJ) + { + if (id >= MAX_MAPPED_PARAMS) + break; + json_t* const hostParamIdJ = json_object_get(mapJ, "hostParamId"); + json_t* const invertedJ = json_object_get(mapJ, "inverted"); + json_t* const smoothJ = json_object_get(mapJ, "smooth"); + json_t* const moduleIdJ = json_object_get(mapJ, "moduleId"); + json_t* const paramIdJ = json_object_get(mapJ, "paramId"); + if (hostParamIdJ == nullptr) + continue; + if (invertedJ == nullptr) + continue; + if (smoothJ == nullptr) + continue; + if (moduleIdJ == nullptr) + continue; + if (paramIdJ == nullptr) + continue; + + filterInitialized[id] = false; + valueReached[id] = true; + valueFilters[id].reset(); + mappings[id].hostParamId = json_integer_value(hostParamIdJ); + mappings[id].inverted = json_boolean_value(invertedJ); + mappings[id].smooth = json_boolean_value(smoothJ); + pcontext->engine->updateParamHandle_NoLock(&mappings[id].paramHandle, + json_integer_value(moduleIdJ), + json_integer_value(paramIdJ), + false); + } + } + + updateMapLen(); + } + + // ---------------------------------------------------------------------------------------------------------------- + // stuff called from panel side + + void clearMap(const uint8_t id) + { + learningId = UINT8_MAX; + + mappings[id].hostParamId = UINT8_MAX; + pcontext->engine->updateParamHandle(&mappings[id].paramHandle, -1, 0, true); + updateMapLen(); + } + + void learnParam(const uint8_t hostParamId, const bool inverted, const bool smooth, + const int64_t moduleId, const int paramId) + { + const uint8_t id = learningId; + learningId = UINT8_MAX; + DISTRHO_SAFE_ASSERT_RETURN(id < MAX_MAPPED_PARAMS,); + + filterInitialized[id] = false; + valueFilters[id].reset(); + valueReached[id] = true; + mappings[id].inverted = inverted; + mappings[id].smooth = smooth; + mappings[id].hostParamId = hostParamId; + + if (mappings[id].paramHandle.moduleId != moduleId || mappings[id].paramHandle.paramId != paramId) + pcontext->engine->updateParamHandle(&mappings[id].paramHandle, moduleId, paramId, true); + + updateMapLen(); + } + + void updateMapLen() + { + // Find last nonempty map + int16_t id; + for (id = MAX_MAPPED_PARAMS; --id >= 0;) + { + if (mappings[id].paramHandle.moduleId >= 0) + break; + } + + numMappedParmeters = static_cast(id + 1); + + // Add an empty "Mapping..." slot + if (numMappedParmeters < MAX_MAPPED_PARAMS) + ++numMappedParmeters; + } +}; + +// -------------------------------------------------------------------------------------------------------------------- + +#ifndef HEADLESS +struct HostParametersMapChoice : CardinalLedDisplayChoice { + HostParametersMap* const module; + const uint8_t id; + uint8_t hostParamId = UINT8_MAX; + bool inverted = false; + bool smooth = true; + + HostParametersMapChoice(HostParametersMap* const m, const uint8_t i) + : CardinalLedDisplayChoice(), + module(m), + id(i) + { + alignTextCenter = false; + + // Module browser setup + if (m == nullptr) + { + bgColor = nvgRGB(0, 0, 0); + color.a = 0.75f; + text = "Click here to map"; + } + } + + void draw(const DrawArgs& args) override + { + if (bgColor.a > 0.0f) + { + nvgBeginPath(args.vg); + nvgRoundedRect(args.vg, 0, 0, box.size.x, box.size.y, 4); + nvgFillColor(args.vg, bgColor); + nvgFill(args.vg); + } + + Widget::draw(args); + } + + void step() override + { + if (module == nullptr) + return; + + // Set bgColor and selected state + if (module->learningId == id) + { + bgColor = color; + bgColor.a = 0.125f; + + if (ParamWidget* const touchedParam = APP->scene->rack->touchedParam) + { + APP->scene->rack->touchedParam = nullptr; + DISTRHO_SAFE_ASSERT_RETURN(hostParamId < kModuleParameters,); + + const int64_t moduleId = touchedParam->module->id; + const int paramId = touchedParam->paramId; + module->learnParam(hostParamId, inverted, smooth, moduleId, paramId); + } + } + else + { + bgColor = nvgRGB(0, 0, 0); + } + + // Set text + text.clear(); + + // mapped + if (module->mappings[id].hostParamId < kModuleParameters) + text += string::f("P%02d: ", module->mappings[id].hostParamId + 1); + if (module->mappings[id].paramHandle.moduleId >= 0) + text += getParamName(); + + // Set text color + if (text.empty() && module->learningId != id) + color.a = 0.75f; + else + color.a = 1.0f; + + // unmapped + if (text.empty()) + { + if (module->learningId == id) + text = "Mapping..."; + else + text = module->numMappedParmeters == 1 ? "Click here to map" : "Unmapped"; + } + } + + void onButton(const ButtonEvent& e) override + { + DISTRHO_SAFE_ASSERT_RETURN(module != nullptr,); + + e.stopPropagating(); + + if (e.action != GLFW_PRESS) + return; + + switch (e.button) + { + case GLFW_MOUSE_BUTTON_RIGHT: + APP->scene->rack->touchedParam = nullptr; + module->clearMap(id); + e.consume(this); + break; + case GLFW_MOUSE_BUTTON_LEFT: + APP->scene->rack->touchedParam = nullptr; + e.consume(this); + // reset before dialog + module->learningId = hostParamId = UINT8_MAX; + inverted = smooth = false; + HostParametersMapChoice* const self = this; + // open dialog + async_dialog_text_input("Plugin-exposed parameter index to map to", "1", [self](char* newText){ + if (self == nullptr || newText == nullptr) + return; + // FIXME use a proper dialog + const int hostParamIdTry = std::atoi(newText); + if (hostParamIdTry > 0 && hostParamIdTry < (int)kModuleParameters) + { + self->module->learningId = self->id; + self->hostParamId = static_cast(hostParamIdTry - 1); + self->inverted = false; + self->smooth = false; + } + std::free(newText); + }); + break; + } + } + + std::string getParamName() const + { + DISTRHO_SAFE_ASSERT_RETURN(module != nullptr, "error"); + DISTRHO_SAFE_ASSERT_RETURN(id < module->numMappedParmeters, "error"); + + ParamHandle paramHandle(module->mappings[id].paramHandle); + + Module* const paramModule = paramHandle.module; + DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN("paramModule is null", paramModule != nullptr, "error"); + + const int paramId = paramHandle.paramId; + DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN("paramId is out of bounds", paramId < (int) paramModule->params.size(), "error"); + + ParamQuantity* const paramQuantity = paramModule->paramQuantities[paramId]; + std::string s = paramQuantity->name; + if (s.empty()) + s = "Unnamed"; + s += " ("; + s += paramModule->model->name; + s += ")"; + return s; + } +}; + +struct HostParametersMapDisplay : Widget { + HostParametersMap* module; + ScrollWidget* scroll; + HostParametersMapChoice* choices[MAX_MAPPED_PARAMS]; + LedDisplaySeparator* separators[MAX_MAPPED_PARAMS]; + + void drawLayer(const DrawArgs& args, int layer) override + { + nvgScissor(args.vg, RECT_ARGS(args.clipBox)); + Widget::drawLayer(args, layer); + nvgResetScissor(args.vg); + } + + void setModule(HostParametersMap* const module) + { + this->module = module; + + scroll = new ScrollWidget; + scroll->box.size = box.size; + addChild(scroll); + + float posY = 0.0f; + for (uint8_t id = 0; id < MAX_MAPPED_PARAMS; ++id) + { + if (id != 0) + { + LedDisplaySeparator* separator = createWidget(Vec(0.0f, posY)); + separator->box.size = Vec(box.size.x, 1.0f); + separator->visible = false; + scroll->container->addChild(separator); + separators[id] = separator; + } + + HostParametersMapChoice* const choice = new HostParametersMapChoice(module, id); + choice->box.pos = Vec(0.0f, posY); + choice->box.size = Vec(box.size.x, 20.0f); + choice->visible = id == 0; + scroll->container->addChild(choice); + choices[id] = choice; + + posY += choice->box.size.y; + } + } + + void step() override + { + if (module != nullptr) + { + const uint8_t numMappedParmeters = module->numMappedParmeters; + + for (uint8_t id = 1; id < MAX_MAPPED_PARAMS; ++id) + { + separators[id]->visible = (id < numMappedParmeters); + choices[id]->visible = (id < numMappedParmeters); + } + } + + Widget::step(); + } +}; + +struct HostParametersMapWidget : ModuleWidgetWith11HP { + HostParametersMap* const module; + + HostParametersMapWidget(HostParametersMap* const m) + : module(m) + { + setModule(module); + setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostParamsMap.svg"))); + createAndAddScrews(); + + HostParametersMapDisplay* const display = createWidget(Vec(1.0f, 71.0f)); + display->box.size = Vec(box.size.x - 2.0f, box.size.y - 89.0f); + display->setModule(m); + addChild(display); + } + + void draw(const DrawArgs& args) override + { + drawBackground(args.vg); + ModuleWidgetWith11HP::draw(args); + } +}; +#else +struct HostParametersMapWidget : ModuleWidget { + HostParametersMapWidget(HostParametersMap* const module) { + setModule(module); + } +}; +#endif + +// -------------------------------------------------------------------------------------------------------------------- + +Model* modelHostParametersMap = createModel("HostParametersMap"); + +// -------------------------------------------------------------------------------------------------------------------- diff --git a/plugins/Cardinal/src/HostParameters.cpp b/plugins/Cardinal/src/HostParameters.cpp index ac03d82b..5ae63cce 100644 --- a/plugins/Cardinal/src/HostParameters.cpp +++ b/plugins/Cardinal/src/HostParameters.cpp @@ -53,7 +53,6 @@ struct HostParameters : TerminalModule { { const uint32_t processCounter = pcontext->processCounter; - // only checked on input if (lastProcessCounter != processCounter) { bypassed = isBypassed(); diff --git a/plugins/Cardinal/src/plugin.hpp b/plugins/Cardinal/src/plugin.hpp index d87d648a..204e8224 100644 --- a/plugins/Cardinal/src/plugin.hpp +++ b/plugins/Cardinal/src/plugin.hpp @@ -43,6 +43,7 @@ extern Model* modelHostMIDICC; extern Model* modelHostMIDIGate; extern Model* modelHostMIDIMap; extern Model* modelHostParameters; +extern Model* modelHostParametersMap; extern Model* modelHostTime; extern Model* modelIldaeil; extern Model* modelMPV; diff --git a/plugins/Makefile b/plugins/Makefile index f960f950..a32b9108 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -200,6 +200,7 @@ PLUGIN_FILES += Cardinal/src/HostMIDI-CC.cpp PLUGIN_FILES += Cardinal/src/HostMIDI-Gate.cpp PLUGIN_FILES += Cardinal/src/HostMIDI-Map.cpp PLUGIN_FILES += Cardinal/src/HostParameters.cpp +PLUGIN_FILES += Cardinal/src/HostParameters-Map.cpp PLUGIN_FILES += Cardinal/src/HostTime.cpp PLUGIN_FILES += Cardinal/src/TextEditor.cpp @@ -219,7 +220,6 @@ ifneq ($(HEADLESS),true) PLUGIN_FILES += Cardinal/src/ImGuiWidget.cpp PLUGIN_FILES += Cardinal/src/ImGuiTextEditor.cpp PLUGIN_FILES += Cardinal/src/SassyScope.cpp -# PLUGIN_FILES += Cardinal/src/sassy/sassy_scope.cpp PLUGIN_FILES += $(wildcard Cardinal/src/DearImGui/*.cpp) PLUGIN_FILES += $(wildcard Cardinal/src/DearImGuiColorTextEditor/*.cpp) endif diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 6b38d8c7..b27014f7 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -895,6 +895,7 @@ static void initStatic__Cardinal() p->addModel(modelHostMIDIGate); p->addModel(modelHostMIDIMap); p->addModel(modelHostParameters); + p->addModel(modelHostParametersMap); p->addModel(modelHostTime); p->addModel(modelTextEditor); #ifndef STATIC_BUILD @@ -931,6 +932,7 @@ static void initStatic__Cardinal() modelHostMIDIGate, modelHostMIDIMap, modelHostParameters, + modelHostParametersMap, modelHostTime, }; } From 70d73741ee705818149ac6e649486c566eb45889 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 23 May 2022 22:01:43 +0100 Subject: [PATCH 066/283] Add valleyaudio-plateau lv2 export, WIP Signed-off-by: falkTX --- lv2export/includes/rack.hpp | 181 ++++++++++++++++++---- lv2export/plugins/valleyaudio-plateau.cpp | 29 ++++ 2 files changed, 181 insertions(+), 29 deletions(-) create mode 100644 lv2export/plugins/valleyaudio-plateau.cpp diff --git a/lv2export/includes/rack.hpp b/lv2export/includes/rack.hpp index ab7dd73c..e3813de4 100644 --- a/lv2export/includes/rack.hpp +++ b/lv2export/includes/rack.hpp @@ -37,6 +37,7 @@ #include #include +enum NVGalign {}; struct NVGcolor { float a; }; struct NVGpaint {}; @@ -56,9 +57,11 @@ inline void nvgImageSize(void*, int, void*, void*) {} inline NVGpaint nvgImagePattern(void*, float, float, float, float, float, int handle, float) { return {}; } struct json_t {}; +json_t* json_boolean(bool) { return NULL; } json_t* json_integer(int) { return NULL; } json_t* json_object() { return NULL; } json_t* json_object_get(json_t*, const char*) { return NULL; } +bool json_boolean_value(json_t*) { return false; } int json_integer_value(json_t*) { return 0; } void json_object_set_new(json_t*, const char*, json_t*) {} @@ -110,6 +113,10 @@ inline float clamp(float x, float a = 0.f, float b = 1.f) { return std::fmax(std::fmin(x, b), a); } +inline float rescale(float x, float xMin, float xMax, float yMin, float yMax) { + return yMin + (x - xMin) / (xMax - xMin) * (yMax - yMin); +} + struct Vec { float x = 0.f; float y = 0.f; @@ -547,12 +554,12 @@ struct Module { float sampleRate; float sampleTime; }; - virtual void onSampleRateChange(const SampleRateChangeEvent& e) { + virtual void onSampleRateChange(const SampleRateChangeEvent&) { onSampleRateChange(); } struct ResetEvent {}; - virtual void onReset(const ResetEvent& e) {} // TODO + virtual void onReset(const ResetEvent&) {} // TODO virtual void onAdd() {} virtual void onRemove() {} @@ -595,11 +602,119 @@ struct Widget { using BaseEvent = widget::BaseEvent; + struct PositionBaseEvent { + math::Vec pos; + }; + + struct HoverEvent : BaseEvent, PositionBaseEvent { + math::Vec mouseDelta; + }; + virtual void onHover(const HoverEvent&) { + } + + struct ButtonEvent : BaseEvent, PositionBaseEvent { + int button; + int action; + int mods; + }; + virtual void onButton(const ButtonEvent&) { + } + + struct DoubleClickEvent : BaseEvent {}; + virtual void onDoubleClick(const DoubleClickEvent&) {} + + struct KeyBaseEvent { + int key; + int scancode; + std::string keyName; + int action; + int mods; + }; + + struct HoverKeyEvent : BaseEvent, PositionBaseEvent, KeyBaseEvent {}; + virtual void onHoverKey(const HoverKeyEvent&) { + } + + struct TextBaseEvent { + int codepoint; + }; + struct HoverTextEvent : BaseEvent, PositionBaseEvent, TextBaseEvent {}; + virtual void onHoverText(const HoverTextEvent&) { + } + + struct HoverScrollEvent : BaseEvent, PositionBaseEvent { + math::Vec scrollDelta; + }; + virtual void onHoverScroll(const HoverScrollEvent&) { + } + + struct EnterEvent : BaseEvent {}; + virtual void onEnter(const EnterEvent&) {} + + struct LeaveEvent : BaseEvent {}; + virtual void onLeave(const LeaveEvent&) {} + + struct SelectEvent : BaseEvent {}; + virtual void onSelect(const SelectEvent&) {} + + struct DeselectEvent : BaseEvent {}; + virtual void onDeselect(const DeselectEvent&) {} + + struct SelectKeyEvent : BaseEvent, KeyBaseEvent {}; + virtual void onSelectKey(const SelectKeyEvent&) {} + + struct SelectTextEvent : BaseEvent, TextBaseEvent {}; + virtual void onSelectText(const SelectTextEvent&) {} + + struct DragBaseEvent : BaseEvent { + int button; + }; + + struct DragStartEvent : DragBaseEvent {}; + virtual void onDragStart(const DragStartEvent&) {} + + struct DragEndEvent : DragBaseEvent {}; + virtual void onDragEnd(const DragEndEvent&) {} + + struct DragMoveEvent : DragBaseEvent { + math::Vec mouseDelta; + }; + virtual void onDragMove(const DragMoveEvent&) {} + + struct DragHoverEvent : DragBaseEvent, PositionBaseEvent { + Widget* origin = NULL; + math::Vec mouseDelta; + }; + virtual void onDragHover(const DragHoverEvent&) { + } + + struct DragEnterEvent : DragBaseEvent { + Widget* origin = NULL; + }; + virtual void onDragEnter(const DragEnterEvent&) {} + + struct DragLeaveEvent : DragBaseEvent { + Widget* origin = NULL; + }; + virtual void onDragLeave(const DragLeaveEvent&) {} + + struct DragDropEvent : DragBaseEvent { + Widget* origin = NULL; + }; + virtual void onDragDrop(const DragDropEvent&) {} + + struct PathDropEvent : BaseEvent, PositionBaseEvent { + PathDropEvent(const std::vector& paths) : paths(paths) {} + const std::vector& paths; + }; + virtual void onPathDrop(const PathDropEvent&) { + } + struct ActionEvent : BaseEvent {}; - virtual void onAction(const ActionEvent& e) {} + virtual void onAction(const ActionEvent&) {} struct ChangeEvent : BaseEvent {}; - virtual void onChange(const ChangeEvent& e) {} + virtual void onChange(const ChangeEvent&) {} bool hasChild(Widget* child) { return false; } void addChild(Widget* child) {} @@ -923,31 +1038,31 @@ struct PulseGenerator { } // namespace dsp namespace event { -// using Base = widget::BaseEvent; -// using PositionBase = widget::Widget::PositionBaseEvent; -// using KeyBase = widget::Widget::KeyBaseEvent; -// using TextBase = widget::Widget::TextBaseEvent; -// using Hover = widget::Widget::HoverEvent; -// using Button = widget::Widget::ButtonEvent; -// using DoubleClick = widget::Widget::DoubleClickEvent; -// using HoverKey = widget::Widget::HoverKeyEvent; -// using HoverText = widget::Widget::HoverTextEvent; -// using HoverScroll = widget::Widget::HoverScrollEvent; -// using Enter = widget::Widget::EnterEvent; -// using Leave = widget::Widget::LeaveEvent; -// using Select = widget::Widget::SelectEvent; -// using Deselect = widget::Widget::DeselectEvent; -// using SelectKey = widget::Widget::SelectKeyEvent; -// using SelectText = widget::Widget::SelectTextEvent; -// using DragBase = widget::Widget::DragBaseEvent; -// using DragStart = widget::Widget::DragStartEvent; -// using DragEnd = widget::Widget::DragEndEvent; -// using DragMove = widget::Widget::DragMoveEvent; -// using DragHover = widget::Widget::DragHoverEvent; -// using DragEnter = widget::Widget::DragEnterEvent; -// using DragLeave = widget::Widget::DragLeaveEvent; -// using DragDrop = widget::Widget::DragDropEvent; -// using PathDrop = widget::Widget::PathDropEvent; +using Base = widget::BaseEvent; +using PositionBase = widget::Widget::PositionBaseEvent; +using KeyBase = widget::Widget::KeyBaseEvent; +using TextBase = widget::Widget::TextBaseEvent; +using Hover = widget::Widget::HoverEvent; +using Button = widget::Widget::ButtonEvent; +using DoubleClick = widget::Widget::DoubleClickEvent; +using HoverKey = widget::Widget::HoverKeyEvent; +using HoverText = widget::Widget::HoverTextEvent; +using HoverScroll = widget::Widget::HoverScrollEvent; +using Enter = widget::Widget::EnterEvent; +using Leave = widget::Widget::LeaveEvent; +using Select = widget::Widget::SelectEvent; +using Deselect = widget::Widget::DeselectEvent; +using SelectKey = widget::Widget::SelectKeyEvent; +using SelectText = widget::Widget::SelectTextEvent; +using DragBase = widget::Widget::DragBaseEvent; +using DragStart = widget::Widget::DragStartEvent; +using DragEnd = widget::Widget::DragEndEvent; +using DragMove = widget::Widget::DragMoveEvent; +using DragHover = widget::Widget::DragHoverEvent; +using DragEnter = widget::Widget::DragEnterEvent; +using DragLeave = widget::Widget::DragLeaveEvent; +using DragDrop = widget::Widget::DragDropEvent; +using PathDrop = widget::Widget::PathDropEvent; using Action = widget::Widget::ActionEvent; using Change = widget::Widget::ChangeEvent; // using Dirty = widget::Widget::DirtyEvent; @@ -973,6 +1088,14 @@ struct Plugin { namespace ui { +struct Button : widget::OpaqueWidget { + std::string text; + Quantity* quantity = NULL; +}; + +struct ChoiceButton : Button { +}; + struct Menu : widget::OpaqueWidget { // Menu* parentMenu = NULL; // Menu* childMenu = NULL; diff --git a/lv2export/plugins/valleyaudio-plateau.cpp b/lv2export/plugins/valleyaudio-plateau.cpp new file mode 100644 index 00000000..52b59e33 --- /dev/null +++ b/lv2export/plugins/valleyaudio-plateau.cpp @@ -0,0 +1,29 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "ValleyAudio/src/Common/DSP/OnePoleFilters.cpp" +#include "ValleyAudio/src/Common/DSP/LinearEnvelope.cpp" +#include "ValleyAudio/src/Plateau/Dattorro.cpp" +#include "ValleyAudio/src/Plateau/Plateau.cpp" + + +#define PLUGIN_MODEL modelPlateau +#define PLUGIN_CV_INPUTS {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} +#define PLUGIN_CV_OUTPUTS {0,0} + +#include "lv2plugin.cpp" +#include "export.cpp" From 20e6f30bcc6fe6aa0889a6c4d51daaee1ef955ee Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 25 May 2022 14:19:05 +0100 Subject: [PATCH 067/283] Enable JSFX plugin support in Ildaeil Signed-off-by: falkTX --- carla | 2 +- plugins/Cardinal/src/Ildaeil.cpp | 53 ++++++++++++++++++++++++++++++-- src/CardinalCommon.cpp | 31 +++++++++++-------- src/CardinalCommon.hpp | 1 + src/Makefile.cardinal.mk | 1 + 5 files changed, 71 insertions(+), 17 deletions(-) diff --git a/carla b/carla index 54effcd9..0972c333 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 54effcd901f4540aff9ff933880941d9153bd50a +Subproject commit 0972c333b4de0a53a5bfb9731d558965e0010f7d diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 60d86a68..6574f421 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -52,6 +52,19 @@ json_t *jsonp_stringn_nocheck_own(const char* value, size_t len); } #endif +// defined elsewhere +namespace rack { +#ifdef ARCH_WIN +enum SpecialPath { + kSpecialPathUserProfile, + kSpecialPathCommonProgramFiles, + kSpecialPathAppData, +}; +std::string getSpecialPath(const SpecialPath type) +#endif +std::string homeDir(); +} + #define BUFFER_SIZE 128 // generates a warning if this is defined as anything else @@ -97,6 +110,28 @@ static void projectLoadedFromDSP(void* ui); static Mutex sPluginInfoLoadMutex; +static const char* getPathForJSFX() +{ + static std::string path; + + if (path.empty()) + { + #if defined(CARLA_OS_MAC) + path = homeDir() + "/Library/Application Support/REAPER/Effects"; + #elif defined(CARLA_OS_WIN) + path = getSpecialPath() + "\\REAPER\\Effects" + #else + if (const char* const configHome = std::getenv("XDG_CONFIG_HOME")) + path = configHome; + else + path = homeDir() + "/.config"; + path += "/REAPER/Effects"; + #endif + } + + return path.c_str(); +} + /* #ifndef HEADLESS struct JuceInitializer { @@ -249,6 +284,8 @@ struct IldaeilModule : Module { if (const char* const path = std::getenv("LV2_PATH")) carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, PLUGIN_LV2, path); + carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, PLUGIN_JSFX, getPathForJSFX()); + #ifdef CARLA_OS_MAC carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PREFER_UI_BRIDGES, 0, nullptr); #endif @@ -1068,7 +1105,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { { case PLUGIN_INTERNAL: case PLUGIN_AU: - // case PLUGIN_JSFX: + case PLUGIN_JSFX: case PLUGIN_SFZ: label = info.label; break; @@ -1096,6 +1133,9 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { case PLUGIN_LV2: path = std::getenv("LV2_PATH"); break; + case PLUGIN_JSFX: + path = getPathForJSFX(); + break; default: path = nullptr; break; @@ -1386,6 +1426,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { static const char* pluginTypes[] = { getPluginTypeAsString(PLUGIN_INTERNAL), getPluginTypeAsString(PLUGIN_LV2), + getPluginTypeAsString(PLUGIN_JSFX), }; setupMainWindowPos(); @@ -1431,6 +1472,9 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { int current; switch (fPluginType) { + case PLUGIN_JSFX: + current = 2; + break; case PLUGIN_LV2: current = 1; break; @@ -1450,6 +1494,9 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { case 1: fNextPluginType = PLUGIN_LV2; break; + case 2: + fNextPluginType = PLUGIN_JSFX; + break; } } @@ -1485,7 +1532,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { case PLUGIN_INTERNAL: case PLUGIN_AU: case PLUGIN_SFZ: - // case PLUGIN_JSFX: + case PLUGIN_JSFX: ImGui::TableSetupColumn("Name"); ImGui::TableSetupColumn("Label"); ImGui::TableHeadersRow(); @@ -1512,7 +1559,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { { case PLUGIN_INTERNAL: case PLUGIN_AU: - // case PLUGIN_JSFX: + case PLUGIN_JSFX: case PLUGIN_SFZ: ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index 185174fc..4ce501fe 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -55,6 +55,7 @@ const std::string CARDINAL_VERSION = "22.05"; namespace rack { + namespace settings { int rateLimit = 0; } @@ -76,6 +77,9 @@ std::string getSpecialPath(const SpecialPath type) case kSpecialPathCommonProgramFiles: csidl = CSIDL_PROGRAM_FILES_COMMON; break; + case kSpecialPathAppData: + csidl = CSIDL_COMMON_APPDATA; + break; default: return {}; } @@ -88,8 +92,22 @@ std::string getSpecialPath(const SpecialPath type) return {}; } #endif + +std::string homeDir() +{ +# ifdef ARCH_WIN + return getSpecialPath(kSpecialPathUserProfile); +# else + if (const char* const home = getenv("HOME")) + return home; + if (struct passwd* const pwd = getpwuid(getuid())) + return pwd->pw_dir; +# endif + return {}; } +} // namespace rack + namespace patchUtils { @@ -103,19 +121,6 @@ static void promptClear(const char* const message, const std::function a asyncDialog::create(message, action); } - -static std::string homeDir() -{ -# ifdef ARCH_WIN - return getSpecialPath(kSpecialPathUserProfile); -# else - if (const char* const home = getenv("HOME")) - return home; - if (struct passwd* const pwd = getpwuid(getuid())) - return pwd->pw_dir; -# endif - return {}; -} #endif void loadDialog() diff --git a/src/CardinalCommon.hpp b/src/CardinalCommon.hpp index e7584c85..132155b7 100644 --- a/src/CardinalCommon.hpp +++ b/src/CardinalCommon.hpp @@ -47,6 +47,7 @@ bool isStandalone(); enum SpecialPath { kSpecialPathUserProfile, kSpecialPathCommonProgramFiles, + kSpecialPathAppData, }; std::string getSpecialPath(SpecialPath type); #endif diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index f83d3c05..a647e19d 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -43,6 +43,7 @@ CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/sfzero.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/water.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/ysfx.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/zita-resampler.a endif # STATIC_BUILD From 9c9276ac684a8f9d1ba28844d8302edf1fd139be Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 25 May 2022 14:35:43 +0100 Subject: [PATCH 068/283] Fix windows build Signed-off-by: falkTX --- plugins/Cardinal/src/Ildaeil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 6574f421..59809b9d 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -119,7 +119,7 @@ static const char* getPathForJSFX() #if defined(CARLA_OS_MAC) path = homeDir() + "/Library/Application Support/REAPER/Effects"; #elif defined(CARLA_OS_WIN) - path = getSpecialPath() + "\\REAPER\\Effects" + path = getSpecialPath(kSpecialPathAppData) + "\\REAPER\\Effects" #else if (const char* const configHome = std::getenv("XDG_CONFIG_HOME")) path = configHome; From 06c1d62dd9316a295cb6729682557f5e377082bc Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 25 May 2022 16:17:46 +0100 Subject: [PATCH 069/283] Fix build, set vst3 speaker arrangements on fx and synth variants Signed-off-by: falkTX --- carla | 2 +- dpf | 2 +- src/CardinalPlugin.cpp | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/carla b/carla index 0972c333..0f94a10f 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 0972c333b4de0a53a5bfb9731d558965e0010f7d +Subproject commit 0f94a10f471263929ba19df780a76083f14cffdf diff --git a/dpf b/dpf index dba284c2..c21bc7da 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit dba284c267c74b12338a576c609885553c19552e +Subproject commit c21bc7da9d52beab7d9eea540a03320b32e7e499 diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 7b51812c..0511cb74 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -635,6 +635,11 @@ class CardinalPlugin : public CardinalBasePlugin void initAudioPort(const bool input, uint32_t index, AudioPort& port) override { + #if CARDINAL_VARIANT_FX || CARDINAL_VARIANT_SYNTH + if (index < 2) + port.groupId = kPortGroupStereo; + #endif + if (index >= 8) { port.hints = kAudioPortIsCV | kCVPortHasPositiveUnipolarRange | kCVPortHasScaledRange; From 9267d8736cb3e692ad4bebb5fc3368fd66f505e7 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 25 May 2022 17:03:52 +0100 Subject: [PATCH 070/283] Some more build fixing Signed-off-by: falkTX --- dpf | 2 +- plugins/Cardinal/src/Ildaeil.cpp | 2 ++ plugins/Makefile | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dpf b/dpf index c21bc7da..f9e6b101 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit c21bc7da9d52beab7d9eea540a03320b32e7e499 +Subproject commit f9e6b101a1b0da27bcfd873c10ed395ba41d8c46 diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 59809b9d..89d19ab2 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -45,6 +45,8 @@ #include "water/streams/MemoryOutputStream.h" #include "water/xml/XmlDocument.h" +#include + #ifndef CARDINAL_SYSDEPS // private method that takes ownership, we can use it to avoid superfulous allocations extern "C" { diff --git a/plugins/Makefile b/plugins/Makefile index a32b9108..7514f93a 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -500,6 +500,9 @@ CATROMODULO_CUSTOM = LowFrequencyOscillator NumDisplayWidget PLUGIN_FILES += $(filter-out cf/src/plugin.cpp,$(wildcard cf/src/*.cpp)) +# modules/types which are present in other plugins +CF_CUSTOM = $(DRWAV) + # -------------------------------------------------------------- # DrumKit From 6414bdfa7cc93cd66818c48bb0b8265da186cfeb Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 25 May 2022 17:14:20 +0100 Subject: [PATCH 071/283] Fix a typo Signed-off-by: falkTX --- plugins/Cardinal/src/Ildaeil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 89d19ab2..a5b29704 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -62,7 +62,7 @@ enum SpecialPath { kSpecialPathCommonProgramFiles, kSpecialPathAppData, }; -std::string getSpecialPath(const SpecialPath type) +std::string getSpecialPath(const SpecialPath type); #endif std::string homeDir(); } From e002a1891526af2c036cffd7b44a1957e3493276 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 25 May 2022 17:25:15 +0100 Subject: [PATCH 072/283] Fix another typo Signed-off-by: falkTX --- plugins/Cardinal/src/Ildaeil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index a5b29704..ff682e87 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -121,7 +121,7 @@ static const char* getPathForJSFX() #if defined(CARLA_OS_MAC) path = homeDir() + "/Library/Application Support/REAPER/Effects"; #elif defined(CARLA_OS_WIN) - path = getSpecialPath(kSpecialPathAppData) + "\\REAPER\\Effects" + path = getSpecialPath(kSpecialPathAppData) + "\\REAPER\\Effects"; #else if (const char* const configHome = std::getenv("XDG_CONFIG_HOME")) path = configHome; From d7f8575782f9ded8ff41d1d74afa041c4e70e526 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 25 May 2022 19:27:52 +0100 Subject: [PATCH 073/283] Do not use -faligned-new on macOS Signed-off-by: falkTX --- plugins/Makefile | 6 +++++- src/Makefile | 6 +++++- src/Makefile.cardinal.mk | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/plugins/Makefile b/plugins/Makefile index 7514f93a..24ec9651 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -1003,7 +1003,11 @@ endif BUILD_C_FLAGS += -std=gnu11 BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing -BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing -faligned-new +BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing + +ifneq ($(MACOS),true) +BUILD_CXX_FLAGS += -faligned-new +endif # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS diff --git a/src/Makefile b/src/Makefile index 03f3d4aa..a88335a7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -95,7 +95,11 @@ endif BUILD_C_FLAGS += -std=gnu11 BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing -BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing -faligned-new +BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing + +ifneq ($(MACOS),true) +BUILD_CXX_FLAGS += -faligned-new +endif # use our custom function to invert some colors BUILD_CXX_FLAGS += -DnsvgParseFromFile=nsvgParseFromFileCardinal diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index a647e19d..81bfcaa3 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -181,7 +181,11 @@ endif BUILD_C_FLAGS += -std=gnu11 BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing -BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing -faligned-new +BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing + +ifneq ($(MACOS),true) +BUILD_CXX_FLAGS += -faligned-new +endif # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS From f268919db412a378e8eba624850bbdef3c491c57 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 25 May 2022 19:30:10 +0100 Subject: [PATCH 074/283] Do not use -fno-gnu-unique on BSD Signed-off-by: falkTX --- carla | 2 +- dpf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/carla b/carla index 0f94a10f..f2c60477 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 0f94a10f471263929ba19df780a76083f14cffdf +Subproject commit f2c60477ee1ffb7d653af04697b991ee19f51320 diff --git a/dpf b/dpf index f9e6b101..01fc1622 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit f9e6b101a1b0da27bcfd873c10ed395ba41d8c46 +Subproject commit 01fc1622154ed931ccb4e15ebf3dbb9625747c63 From 5e5b22e96fd59a8301e7c67ea95aba03844e4efa Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 26 May 2022 13:18:20 +0100 Subject: [PATCH 075/283] Add ysfx as static lib for jucewrapper Signed-off-by: falkTX --- jucewrapper/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index d84f442e..4462fd05 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -43,6 +43,9 @@ set_property(TARGET sfzero PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../ add_library(water STATIC IMPORTED) set_property(TARGET water PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/water.a") +add_library(ysfx STATIC IMPORTED) +set_property(TARGET ysfx PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/ysfx.a") + add_library(zita_resampler STATIC IMPORTED) set_property(TARGET zita_resampler PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/zita-resampler.a") @@ -172,6 +175,7 @@ target_link_libraries(Cardinal rtmempool sfzero water + ysfx zita_resampler dgl libaubio @@ -261,6 +265,7 @@ target_link_libraries(CardinalFX rtmempool sfzero water + ysfx zita_resampler dgl libaubio @@ -350,6 +355,7 @@ target_link_libraries(CardinalSynth rtmempool sfzero water + ysfx zita_resampler dgl libaubio From b3d68d9e9f8aa90843b97db91612f98d1ff26d7f Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 26 May 2022 13:57:38 +0100 Subject: [PATCH 076/283] Silence gcc warning about alignment ABI changes Signed-off-by: falkTX --- plugins/Makefile | 2 +- src/Makefile | 2 +- src/Makefile.cardinal.mk | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/Makefile b/plugins/Makefile index 24ec9651..7ffdbdd3 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -1006,7 +1006,7 @@ BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing ifneq ($(MACOS),true) -BUILD_CXX_FLAGS += -faligned-new +BUILD_CXX_FLAGS += -faligned-new -Wno-abi endif # Rack code is not tested for this flag, unset it diff --git a/src/Makefile b/src/Makefile index a88335a7..2e2bfab2 100644 --- a/src/Makefile +++ b/src/Makefile @@ -98,7 +98,7 @@ BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing ifneq ($(MACOS),true) -BUILD_CXX_FLAGS += -faligned-new +BUILD_CXX_FLAGS += -faligned-new -Wno-abi endif # use our custom function to invert some colors diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 81bfcaa3..d140023d 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -184,7 +184,7 @@ BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing ifneq ($(MACOS),true) -BUILD_CXX_FLAGS += -faligned-new +BUILD_CXX_FLAGS += -faligned-new -Wno-abi endif # Rack code is not tested for this flag, unset it From dfc59c94cc48f6f2b157cb2a172e260dada27b79 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 26 May 2022 14:00:20 +0100 Subject: [PATCH 077/283] Do not use alignas on macOS Signed-off-by: falkTX --- include/engine/Port.hpp | 9 ++++++++- include/simd/Vector.hpp | 13 +++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/include/engine/Port.hpp b/include/engine/Port.hpp index b5188703..12eb1364 100644 --- a/include/engine/Port.hpp +++ b/include/engine/Port.hpp @@ -32,6 +32,13 @@ #include +/** NOTE alignas is required in some systems in order to allow SSE usage. */ +#ifndef ARCH_MAC +#define SIMD_ALIGN alignas(32) +#else +#define SIMD_ALIGN +#endif + namespace rack { namespace engine { @@ -48,7 +55,7 @@ struct Port { /** Voltage of the port. */ /** NOTE alignas is required in order to allow SSE usage. Consecutive data (like in a vector) would otherwise pack Ports in a way that breaks SSE. */ - union alignas(32) { + union SIMD_ALIGN { /** Unstable API. Use getVoltage() and setVoltage() instead. */ float voltages[PORT_MAX_CHANNELS] = {}; /** DEPRECATED. Unstable API. Use getVoltage() and setVoltage() instead. */ diff --git a/include/simd/Vector.hpp b/include/simd/Vector.hpp index b1640cd1..7dd77ada 100644 --- a/include/simd/Vector.hpp +++ b/include/simd/Vector.hpp @@ -30,6 +30,13 @@ #include #include +/** NOTE alignas is required in some systems in order to allow SSE usage. */ +#ifndef ARCH_MAC +#define SIMD_ALIGN alignas(32) +#else +#define SIMD_ALIGN +#endif + namespace rack { @@ -62,8 +69,7 @@ struct Vector { using type = float; constexpr static int size = 4; - /** NOTE alignas is required in order to allow SSE usage. */ - union alignas(32) { + union SIMD_ALIGN { __m128 v; /** Accessing this array of scalars is slow and defeats the purpose of vectorizing. */ @@ -137,8 +143,7 @@ struct Vector { using type = int32_t; constexpr static int size = 4; - /** NOTE alignas is required in order to allow SSE usage. */ - union alignas(32) { + union SIMD_ALIGN { __m128i v; int32_t s[4]; }; From 11d9d6a0beeda061fc52e1fa91ff6ab7485b6bfd Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 26 May 2022 14:43:51 +0100 Subject: [PATCH 078/283] Update carla, enable GUIs for its internal plugins Signed-off-by: falkTX --- Makefile | 3 --- carla | 2 +- jucewrapper/CMakeLists.txt | 6 ++++++ src/Makefile.cardinal.mk | 3 +++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index a54098b0..375919cb 100644 --- a/Makefile +++ b/Makefile @@ -54,9 +54,6 @@ ifneq ($(DEBUG),true) CARLA_EXTRA_ARGS += EXTERNAL_PLUGINS=true endif -CARLA_EXTRA_ARGS += USING_JUCE=false -CARLA_EXTRA_ARGS += USING_JUCE_GUI_EXTRA=false - # -------------------------------------------------------------- # DGL config diff --git a/carla b/carla index f2c60477..8371c3c3 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit f2c60477ee1ffb7d653af04697b991ee19f51320 +Subproject commit 8371c3c395e6e4d9d34ea2b0f7e5557eb0171a7a diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 4462fd05..85688e3f 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -28,6 +28,9 @@ set_property(TARGET native_plugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_ add_library(audio_decoder STATIC IMPORTED) set_property(TARGET audio_decoder PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/audio_decoder.a") +add_library(carla_dgl STATIC IMPORTED) +set_property(TARGET carla_dgl PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/dgl.a") + add_library(jackbridge STATIC IMPORTED) set_property(TARGET jackbridge PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/jackbridge.min.a") @@ -170,6 +173,7 @@ target_link_libraries(Cardinal carla_plugin native_plugins audio_decoder + carla_dgl jackbridge lilv rtmempool @@ -260,6 +264,7 @@ target_link_libraries(CardinalFX carla_plugin native_plugins audio_decoder + carla_dgl jackbridge lilv rtmempool @@ -350,6 +355,7 @@ target_link_libraries(CardinalSynth carla_plugin native_plugins audio_decoder + carla_dgl jackbridge lilv rtmempool diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index d140023d..9d0e6ec6 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -38,6 +38,9 @@ CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_engine_ CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_plugin.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/native-plugins.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/audio_decoder.a +ifneq ($(HEADLESS),true) +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/dgl.a +endif CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a From bcd1b9e2733d6a0b2e5392b8e4bd9616a5a2bec3 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 28 May 2022 03:06:41 +0100 Subject: [PATCH 079/283] Update to latest carla, dpf, and pugl, needs testing Signed-off-by: falkTX --- Makefile | 4 +++- carla | 2 +- dpf | 2 +- jucewrapper/CMakeLists.txt | 6 ------ plugins/Cardinal/src/plugincontext.hpp | 2 +- src/CardinalUI.cpp | 30 +++++++++++--------------- src/Makefile.cardinal.mk | 3 --- 7 files changed, 19 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 375919cb..bb869826 100644 --- a/Makefile +++ b/Makefile @@ -199,7 +199,9 @@ carla: ifneq ($(STATIC_BUILD),true) $(MAKE) static-plugin -C carla $(CARLA_EXTRA_ARGS) \ CAN_GENERATE_LV2_TTL=false \ - STATIC_PLUGIN_TARGET=true + CUSTOM_DPF_PATH=$(CURDIR)/dpf \ + STATIC_PLUGIN_TARGET=true \ + USING_CUSTOM_DPF=true endif deps: diff --git a/carla b/carla index 8371c3c3..36beab5b 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 8371c3c395e6e4d9d34ea2b0f7e5557eb0171a7a +Subproject commit 36beab5b13b39744b7dc23a2bef57b02756b39ec diff --git a/dpf b/dpf index 01fc1622..114031ee 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 01fc1622154ed931ccb4e15ebf3dbb9625747c63 +Subproject commit 114031ee99257b7c02cfc66cf01d56bef3c6d315 diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 85688e3f..4462fd05 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -28,9 +28,6 @@ set_property(TARGET native_plugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_ add_library(audio_decoder STATIC IMPORTED) set_property(TARGET audio_decoder PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/audio_decoder.a") -add_library(carla_dgl STATIC IMPORTED) -set_property(TARGET carla_dgl PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/dgl.a") - add_library(jackbridge STATIC IMPORTED) set_property(TARGET jackbridge PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/jackbridge.min.a") @@ -173,7 +170,6 @@ target_link_libraries(Cardinal carla_plugin native_plugins audio_decoder - carla_dgl jackbridge lilv rtmempool @@ -264,7 +260,6 @@ target_link_libraries(CardinalFX carla_plugin native_plugins audio_decoder - carla_dgl jackbridge lilv rtmempool @@ -355,7 +350,6 @@ target_link_libraries(CardinalSynth carla_plugin native_plugins audio_decoder - carla_dgl jackbridge lilv rtmempool diff --git a/plugins/Cardinal/src/plugincontext.hpp b/plugins/Cardinal/src/plugincontext.hpp index 1d25256a..b0f1f799 100644 --- a/plugins/Cardinal/src/plugincontext.hpp +++ b/plugins/Cardinal/src/plugincontext.hpp @@ -21,7 +21,7 @@ #include "DistrhoUtils.hpp" #ifndef HEADLESS -# include "dgl/Base.hpp" +# include "../dgl/Base.hpp" #else # include "extra/LeakDetector.hpp" #endif diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index dec24af1..25830e00 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -47,17 +47,8 @@ GLFWAPI const char* glfwGetClipboardString(GLFWwindow*) DISTRHO_SAFE_ASSERT_RETURN(context != nullptr, nullptr); DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr, nullptr); - const char* mimeType = nullptr; - size_t dataSize = 0; - - if (const void* const clipboard = context->ui->getClipboard(mimeType, dataSize)) - { - if (mimeType == nullptr || std::strcmp(mimeType, "text/plain") != 0) - return nullptr; - return static_cast(clipboard); - } - - return nullptr; + size_t dataSize; + return static_cast(context->ui->getClipboard(dataSize)); } GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char* const text) @@ -268,7 +259,6 @@ class CardinalUI : public CardinalBaseUI, { if (context->window != nullptr) WindowParametersSave(context->window); - rack::contextSet(nullptr); } }; @@ -619,13 +609,8 @@ class CardinalUI : public CardinalBaseUI, switch (ev.button) { case 1: button = GLFW_MOUSE_BUTTON_LEFT; break; - #ifdef DISTRHO_OS_MAC case 2: button = GLFW_MOUSE_BUTTON_RIGHT; break; case 3: button = GLFW_MOUSE_BUTTON_MIDDLE; break; - #else - case 2: button = GLFW_MOUSE_BUTTON_MIDDLE; break; - case 3: button = GLFW_MOUSE_BUTTON_RIGHT; break; - #endif default: button = ev.button; break; @@ -778,6 +763,17 @@ class CardinalUI : public CardinalBaseUI, setState("windowSize", sizeString); } + uint32_t uiClipboardDataOffer() override + { + const std::vector offers(getClipboardDataOfferTypes()); + + for (const ClipboardDataOffer offer : offers) + if (std::strcmp(offer.type, "text/plain") == 0) + return offer.id; + + return 0; + } + void uiFocus(const bool focus, const CrossingMode mode) override { if (focus) diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 9d0e6ec6..d140023d 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -38,9 +38,6 @@ CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_engine_ CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_plugin.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/native-plugins.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/audio_decoder.a -ifneq ($(HEADLESS),true) -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/dgl.a -endif CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a From ebb768b713029b114733459091a5d318508cad54 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 28 May 2022 15:17:31 +0100 Subject: [PATCH 080/283] Cleanup build after last couple of changes Signed-off-by: falkTX --- carla | 2 +- dpf | 2 +- src/CardinalCommon.cpp | 6 +++--- src/PluginContext.hpp | 1 - 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/carla b/carla index 36beab5b..acc785f9 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 36beab5b13b39744b7dc23a2bef57b02756b39ec +Subproject commit acc785f9f1103ca7062e2ef7c5f5b1dd5d15a801 diff --git a/dpf b/dpf index 114031ee..7f65db5d 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 114031ee99257b7c02cfc66cf01d56bef3c6d315 +Subproject commit 7f65db5dd30ffd11525c5e1e15d6b3bb3e72f85c diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index 4ce501fe..5e75473f 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -139,7 +139,7 @@ void loadDialog() CardinalBaseUI* const ui = static_cast(pcontext->ui); DISTRHO_SAFE_ASSERT_RETURN(ui != nullptr,); - FileBrowserOptions opts; + DISTRHO_NAMESPACE::FileBrowserOptions opts; opts.startDir = dir.c_str(); opts.saving = ui->saving = false; opts.title = "Open patch"; @@ -236,7 +236,7 @@ static void saveAsDialog(const bool uncompressed) CardinalBaseUI* const ui = static_cast(pcontext->ui); DISTRHO_SAFE_ASSERT_RETURN(ui != nullptr,); - FileBrowserOptions opts; + DISTRHO_NAMESPACE::FileBrowserOptions opts; opts.startDir = dir.c_str(); opts.saving = ui->saving = true; opts.title = "Save patch"; @@ -276,7 +276,7 @@ void async_dialog_filebrowser(const bool saving, // only 1 dialog possible at a time DISTRHO_SAFE_ASSERT_RETURN(ui->filebrowserhandle == nullptr,); - FileBrowserOptions opts; + DISTRHO_NAMESPACE::FileBrowserOptions opts; opts.saving = saving; opts.startDir = startDir; opts.title = title; diff --git a/src/PluginContext.hpp b/src/PluginContext.hpp index 0aa9edc9..27897f4a 100644 --- a/src/PluginContext.hpp +++ b/src/PluginContext.hpp @@ -30,7 +30,6 @@ #ifndef HEADLESS # include "DistrhoUI.hpp" -# include "extra/FileBrowserDialog.hpp" #endif START_NAMESPACE_DISTRHO From d9c9c5d19cdbfd7733120144909d543adb4eeb4f Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 1 Jun 2022 15:14:49 +0100 Subject: [PATCH 081/283] Continue work on LV2 export, add a few plugins Signed-off-by: falkTX --- lv2export/Makefile | 42 +- lv2export/includes/rack.hpp | 1392 ++++++++++++++--- lv2export/lv2plugin.cpp | 27 + .../plugins/aubileinstruments-macro-osc-2.cpp | 60 + .../plugins/aubileinstruments-macro-osc.cpp | 40 + lv2export/plugins/fundamental-quantizer.cpp | 25 + lv2export/plugins/fundamental-seq3.cpp | 25 + plugins/AudibleInstruments | 2 +- plugins/Fundamental | 2 +- 9 files changed, 1401 insertions(+), 214 deletions(-) create mode 100644 lv2export/plugins/aubileinstruments-macro-osc-2.cpp create mode 100644 lv2export/plugins/aubileinstruments-macro-osc.cpp create mode 100644 lv2export/plugins/fundamental-quantizer.cpp create mode 100644 lv2export/plugins/fundamental-seq3.cpp diff --git a/lv2export/Makefile b/lv2export/Makefile index c5b8ce2b..0946d456 100644 --- a/lv2export/Makefile +++ b/lv2export/Makefile @@ -34,16 +34,12 @@ ifeq ($(DEBUG),true) BASE_FLAGS += -UDEBUG endif -# BASE_FLAGS += -DHEADLESS -# BASE_FLAGS += -DPRIVATE= -# -# BASE_FLAGS += -fno-finite-math-only -# # BASE_FLAGS += -I../dpf/dgl -# BASE_FLAGS += -I../dpf/dgl/src/nanovg -# BASE_FLAGS += -I../dpf/distrho -# BASE_FLAGS += -I../include +BASE_FLAGS += -DHEADLESS +BASE_FLAGS += -fno-finite-math-only +BASE_FLAGS += -pthread + +# might be needed later # BASE_FLAGS += -I../include/neon-compat -# BASE_FLAGS += -I../src/Rack/include # ifeq ($(SYSDEPS),true) # BASE_FLAGS += -DCARDINAL_SYSDEPS # BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp) @@ -58,14 +54,13 @@ endif # # BASE_FLAGS += -IRack/dep/osdialog # BASE_FLAGS += -I../src/Rack/dep/oui-blendish # BASE_FLAGS += -I../src/Rack/dep/pffft -# BASE_FLAGS += -pthread -# -# ifeq ($(WINDOWS),true) -# BASE_FLAGS += -D_USE_MATH_DEFINES -# BASE_FLAGS += -DWIN32_LEAN_AND_MEAN -# BASE_FLAGS += -I../include/mingw-compat -# BASE_FLAGS += -I../include/mingw-std-threads -# endif + +ifeq ($(WINDOWS),true) +BASE_FLAGS += -D_USE_MATH_DEFINES +BASE_FLAGS += -DWIN32_LEAN_AND_MEAN +BASE_FLAGS += -I../include/mingw-compat +BASE_FLAGS += -I../include/mingw-std-threads +endif # -------------------------------------------------------------- # lots of warnings from VCV side @@ -121,10 +116,15 @@ clean: # -------------------------------------------------------------- -# $(BUILD_DIR)/valleyaudio-plateau.cpp.o: plugins/valleyaudio-plateau.cpp -# -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" -# @echo "Compiling $<" -# $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -DSLUG='"$*"' -c -o $@ +$(BUILD_DIR)/aubileinstruments-%.cpp.o: plugins/aubileinstruments-%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -DSLUG='"aubileinstruments-$*"' \ + -DTEST \ + -I../plugins/AudibleInstruments/eurorack \ + -Wno-class-memaccess \ + -Wno-unused-local-typedefs \ + -c -o $@ $(BUILD_DIR)/%.cpp.o: plugins/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" diff --git a/lv2export/includes/rack.hpp b/lv2export/includes/rack.hpp index e3813de4..84d993d1 100644 --- a/lv2export/includes/rack.hpp +++ b/lv2export/includes/rack.hpp @@ -27,43 +27,78 @@ #pragma once +#include #include +#include #include #include #include +#include +#include #include #include #include #include -enum NVGalign {}; +#define assert(x) + +#define ENUMS(name, count) name, name ## _LAST = name + (count) - 1 + +#define VEC_ARGS(v) (v).x, (v).y +#define RECT_ARGS(r) (r).pos.x, (r).pos.y, (r).size.x, (r).size.y + +#define GLFW_MOUSE_BUTTON_LEFT 0 +#define GLFW_MOUSE_BUTTON_RIGHT 0 + +enum NVGalign { + NVG_ALIGN_LEFT, + NVG_ALIGN_RIGHT +}; struct NVGcolor { float a; }; struct NVGpaint {}; +struct NVGcontext {}; +struct NSVGimage {}; inline NVGcolor nvgRGB(int r, int g, int b) { return {}; } inline NVGcolor nvgRGBA(int r, int g, int b, int a) { return {}; } inline NVGcolor nvgRGBf(float r, float g, float b) { return {}; } inline NVGcolor nvgRGBAf(float r, float g, float b, float a) { return {}; } -inline void nvgBeginPath(void* vg) {} -inline void nvgFillColor(void* vg, NVGcolor) {} -inline void nvgFillPaint(void* vg, NVGpaint) {} -inline void nvgFill(void* vg) {} -inline void nvgStrokeColor(void* vg, NVGcolor) {} -inline void nvgStrokeWidth(void* vg, float) {} -inline void nvgStroke(void* vg) {} -inline void nvgRect(void* vg, float a, float b, float c, float d) {} -inline void nvgImageSize(void*, int, void*, void*) {} -inline NVGpaint nvgImagePattern(void*, float, float, float, float, float, int handle, float) { return {}; } +inline NVGcolor nvgTransRGBA(NVGcolor, int) { return {}; } +inline NVGcolor nvgTransRGBAf(NVGcolor, float) { return {}; } +inline void nvgBeginPath(NVGcontext* vg) {} +inline void nvgFillColor(NVGcontext* vg, NVGcolor) {} +inline void nvgFillPaint(NVGcontext* vg, NVGpaint) {} +inline void nvgFill(NVGcontext* vg) {} +inline void nvgStrokeColor(NVGcontext* vg, NVGcolor) {} +inline void nvgStrokeWidth(NVGcontext* vg, float) {} +inline void nvgStroke(NVGcontext* vg) {} +inline void nvgRect(NVGcontext* vg, float a, float b, float c, float d) {} +inline void nvgImageSize(NVGcontext*, int, void*, void*) {} +inline NVGpaint nvgImagePattern(NVGcontext*, float, float, float, float, float, int handle, float) { return {}; } +inline void nvgRoundedRect(NVGcontext* vg, float, float, float, float, float) {} +inline void nvgFontSize(NVGcontext*, int) {} +inline void nvgFontFaceId(NVGcontext*, int) {} +inline void nvgTextLetterSpacing(NVGcontext*, float) {} +inline void nvgText(NVGcontext*, float, float, const char*, const char*) {} +inline void nvgTextAlign(NVGcontext*, NVGalign) {} +inline void nvgSave(NVGcontext*) {} +inline void nvgRestore(NVGcontext*) {} +inline void nvgScale(NVGcontext*, float, float) {} struct json_t {}; -json_t* json_boolean(bool) { return NULL; } -json_t* json_integer(int) { return NULL; } -json_t* json_object() { return NULL; } -json_t* json_object_get(json_t*, const char*) { return NULL; } -bool json_boolean_value(json_t*) { return false; } -int json_integer_value(json_t*) { return 0; } -void json_object_set_new(json_t*, const char*, json_t*) {} +inline json_t* json_boolean(bool) { return NULL; } +inline json_t* json_integer(int) { return NULL; } +inline json_t* json_object(void) { return NULL; } +inline json_t* json_object_get(json_t*, const char*) { return NULL; } +inline bool json_is_true(json_t*) { return false; } +inline bool json_boolean_value(json_t*) { return false; } +inline int json_integer_value(json_t*) { return 0; } +inline float json_number_value(json_t*) { return 0.f; } +inline void json_object_set_new(json_t*, const char*, json_t*) {} +inline json_t* json_array(void) { return NULL; } +inline json_t* json_array_get(json_t*, int) { return NULL; } +inline void json_array_insert_new(json_t*, int, json_t*) {} namespace rack { @@ -103,38 +138,261 @@ namespace ui { struct Menu; } +namespace window { +struct Svg; +} + namespace math { -inline int clamp(int x, int a, int b) { - return std::max(std::min(x, b), a); +template +inline bool isEven(T x) { return x % 2 == 0; } + +template +inline bool isOdd(T x) { return x % 2 != 0; } + +inline int clamp(int x, int a, int b) { return std::max(std::min(x, b), a); } +inline int clampSafe(int x, int a, int b) { return (a <= b) ? clamp(x, a, b) : clamp(x, b, a); } + +inline float clamp(float x, float a = 0.f, float b = 1.f) { return std::fmax(std::fmin(x, b), a); } +inline float clampSafe(float x, float a = 0.f, float b = 1.f) { return (a <= b) ? clamp(x, a, b) : clamp(x, b, a); } + +inline int eucMod(int a, int b) { + int mod = a % b; + if (mod < 0) { + mod += b; + } + return mod; } -inline float clamp(float x, float a = 0.f, float b = 1.f) { - return std::fmax(std::fmin(x, b), a); +inline int eucDiv(int a, int b) { + int div = a / b; + int mod = a % b; + if (mod < 0) { + div -= 1; + } + return div; +} + +inline void eucDivMod(int a, int b, int* div, int* mod) { + *div = a / b; + *mod = a % b; + if (*mod < 0) { + *div -= 1; + *mod += b; + } +} + +inline int log2(int n) { + int i = 0; + while (n >>= 1) { + i++; + } + return i; +} + +template +bool isPow2(T n) { return n > 0 && (n & (n - 1)) == 0; } + +template +T sgn(T x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); } + +#if defined __clang__ +__attribute__((optnone)) +#else +__attribute__((optimize("signed-zeros"))) +#endif +inline float normalizeZero(float x) { return x + 0.f; } + +inline float eucMod(float a, float b) { + float mod = std::fmod(a, b); + if (mod < 0.f) { + mod += b; + } + return mod; } +inline bool isNear(float a, float b, float epsilon = 1e-6f) { return std::fabs(a - b) <= epsilon; } + +inline float chop(float x, float epsilon = 1e-6f) { return std::fabs(x) <= epsilon ? 0.f : x; } + inline float rescale(float x, float xMin, float xMax, float yMin, float yMax) { return yMin + (x - xMin) / (xMax - xMin) * (yMax - yMin); } +inline float crossfade(float a, float b, float p) { return a + (b - a) * p; } + +inline float interpolateLinear(const float* p, float x) { + const int xi = x; + const float xf = x - xi; + return crossfade(p[xi], p[xi + 1], xf); +} + +inline void complexMult(float ar, float ai, float br, float bi, float* cr, float* ci) { + *cr = ar * br - ai * bi; + *ci = ar * bi + ai * br; +} + +struct Rect; + struct Vec { float x = 0.f; float y = 0.f; Vec() {} Vec(float xy) : x(xy), y(xy) {} Vec(float x, float y) : x(x), y(y) {} + float& operator[](int i) { return (i == 0) ? x : y; } + const float& operator[](int i) const { return (i == 0) ? x : y; } Vec neg() const { return Vec(-x, -y); } Vec plus(Vec b) const { return Vec(x + b.x, y + b.y); } Vec minus(Vec b) const { return Vec(x - b.x, y - b.y); } Vec mult(float s) const { return Vec(x * s, y * s); } Vec mult(Vec b) const { return Vec(x * b.x, y * b.y); } + Vec div(float s) const { return Vec(x / s, y / s); } + Vec div(Vec b) const { return Vec(x / b.x, y / b.y); } + float dot(Vec b) const { return x * b.x + y * b.y; } + float arg() const { return std::atan2(y, x); } + float norm() const { return std::hypot(x, y); } + Vec normalize() const { return div(norm()); } + float square() const { return x * x + y * y; } + float area() const { return x * y; } + Vec rotate(float angle) { + float sin = std::sin(angle); + float cos = std::cos(angle); + return Vec(x * cos - y * sin, x * sin + y * cos); + } + Vec flip() const { return Vec(y, x); } + Vec min(Vec b) const { return Vec(std::fmin(x, b.x), std::fmin(y, b.y)); } + Vec max(Vec b) const { return Vec(std::fmax(x, b.x), std::fmax(y, b.y)); } + Vec abs() const { return Vec(std::fabs(x), std::fabs(y)); } + Vec round() const { return Vec(std::round(x), std::round(y)); } + Vec floor() const { return Vec(std::floor(x), std::floor(y)); } + Vec ceil() const { return Vec(std::ceil(x), std::ceil(y)); } + bool equals(Vec b) const { return x == b.x && y == b.y; } + bool isZero() const { return x == 0.f && y == 0.f; } + bool isFinite() const { return std::isfinite(x) && std::isfinite(y); } + Vec clamp(Rect bound) const; + Vec clampSafe(Rect bound) const; + Vec crossfade(Vec b, float p) { return this->plus(b.minus(*this).mult(p)); } + bool isEqual(Vec b) const { return equals(b); } }; struct Rect { Vec pos; Vec size; + Rect() {} + Rect(Vec pos, Vec size) : pos(pos), size(size) {} + Rect(float posX, float posY, float sizeX, float sizeY) : pos(Vec(posX, posY)), size(Vec(sizeX, sizeY)) {} + static Rect fromMinMax(Vec a, Vec b) { return Rect(a, b.minus(a)); } + static Rect fromCorners(Vec a, Vec b) { return fromMinMax(a.min(b), a.max(b)); } + static Rect inf() { return Rect(Vec(-INFINITY, -INFINITY), Vec(INFINITY, INFINITY)); } + bool contains(Vec v) const { + return (pos.x <= v.x) && (size.x == INFINITY || v.x < pos.x + size.x) + && (pos.y <= v.y) && (size.y == INFINITY || v.y < pos.y + size.y); + } + bool contains(Rect r) const { + return (pos.x <= r.pos.x) && (r.pos.x - size.x <= pos.x - r.size.x) + && (pos.y <= r.pos.y) && (r.pos.y - size.y <= pos.y - r.size.y); + } + bool intersects(Rect r) const { + return (r.size.x == INFINITY || pos.x < r.pos.x + r.size.x) && (size.x == INFINITY || r.pos.x < pos.x + size.x) + && (r.size.y == INFINITY || pos.y < r.pos.y + r.size.y) && (size.y == INFINITY || r.pos.y < pos.y + size.y); + } + bool equals(Rect r) const { return pos.equals(r.pos) && size.equals(r.size); } + float getLeft() const { return pos.x; } + float getRight() const { return (size.x == INFINITY) ? INFINITY : (pos.x + size.x); } + float getTop() const { return pos.y; } + float getBottom() const { return (size.y == INFINITY) ? INFINITY : (pos.y + size.y); } + float getWidth() const { return size.x; } + float getHeight() const { return size.y; } + Vec getCenter() const { return pos.plus(size.mult(0.5f)); } + Vec getTopLeft() const { return pos; } + Vec getTopRight() const { return Vec(getRight(), getTop()); } + Vec getBottomLeft() const { return Vec(getLeft(), getBottom()); } + Vec getBottomRight() const { return Vec(getRight(), getBottom()); } + Rect clamp(Rect bound) const { + Rect r; + r.pos.x = math::clampSafe(pos.x, bound.pos.x, bound.pos.x + bound.size.x); + r.pos.y = math::clampSafe(pos.y, bound.pos.y, bound.pos.y + bound.size.y); + r.size.x = math::clamp(pos.x + size.x, bound.pos.x, bound.pos.x + bound.size.x) - r.pos.x; + r.size.y = math::clamp(pos.y + size.y, bound.pos.y, bound.pos.y + bound.size.y) - r.pos.y; + return r; + } + Rect nudge(Rect bound) const { + Rect r; + r.size = size; + r.pos.x = math::clampSafe(pos.x, bound.pos.x, bound.pos.x + bound.size.x - size.x); + r.pos.y = math::clampSafe(pos.y, bound.pos.y, bound.pos.y + bound.size.y - size.y); + return r; + } + Rect expand(Rect b) const { + Rect r; + r.pos.x = std::fmin(pos.x, b.pos.x); + r.pos.y = std::fmin(pos.y, b.pos.y); + r.size.x = std::fmax(pos.x + size.x, b.pos.x + b.size.x) - r.pos.x; + r.size.y = std::fmax(pos.y + size.y, b.pos.y + b.size.y) - r.pos.y; + return r; + } + Rect intersect(Rect b) const { + Rect r; + r.pos.x = std::fmax(pos.x, b.pos.x); + r.pos.y = std::fmax(pos.y, b.pos.y); + r.size.x = std::fmin(pos.x + size.x, b.pos.x + b.size.x) - r.pos.x; + r.size.y = std::fmin(pos.y + size.y, b.pos.y + b.size.y) - r.pos.y; + return r; + } + Rect zeroPos() const { + return Rect(Vec(), size); + } + Rect grow(Vec delta) const { + Rect r; + r.pos = pos.minus(delta); + r.size = size.plus(delta.mult(2.f)); + return r; + } + Rect shrink(Vec delta) const { + Rect r; + r.pos = pos.plus(delta); + r.size = size.minus(delta.mult(2.f)); + return r; + } + Vec interpolate(Vec p) { + return pos.plus(size.mult(p)); + } + bool isContaining(Vec v) const { return contains(v); } + bool isIntersecting(Rect r) const { return intersects(r); } + bool isEqual(Rect r) const { return equals(r); } }; +inline Vec Vec::clamp(Rect bound) const { + return Vec(math::clamp(x, bound.pos.x, bound.pos.x + bound.size.x), + math::clamp(y, bound.pos.y, bound.pos.y + bound.size.y)); +} + +inline Vec Vec::clampSafe(Rect bound) const { + return Vec(math::clampSafe(x, bound.pos.x, bound.pos.x + bound.size.x), + math::clampSafe(y, bound.pos.y, bound.pos.y + bound.size.y)); +} +inline Vec operator+(const Vec& a) { return a; } +inline Vec operator-(const Vec& a) { return a.neg(); } +inline Vec operator+(const Vec& a, const Vec& b) { return a.plus(b); } +inline Vec operator-(const Vec& a, const Vec& b) { return a.minus(b); } +inline Vec operator*(const Vec& a, const Vec& b) { return a.mult(b); } +inline Vec operator*(const Vec& a, const float& b) { return a.mult(b); } +inline Vec operator*(const float& a, const Vec& b) { return b.mult(a); } +inline Vec operator/(const Vec& a, const Vec& b) { return a.div(b); } +inline Vec operator/(const Vec& a, const float& b) { return a.div(b); } +inline Vec operator+=(Vec& a, const Vec& b) { return a = a.plus(b); } +inline Vec operator-=(Vec& a, const Vec& b) { return a = a.minus(b); } +inline Vec operator*=(Vec& a, const Vec& b) { return a = a.mult(b); } +inline Vec operator*=(Vec& a, const float& b) { return a = a.mult(b); } +inline Vec operator/=(Vec& a, const Vec& b) { return a = a.div(b); } +inline Vec operator/=(Vec& a, const float& b) { return a = a.div(b); } +inline bool operator==(const Vec& a, const Vec& b) { return a.equals(b); } +inline bool operator!=(const Vec& a, const Vec& b) { return !a.equals(b); } + +inline bool operator==(const Rect& a, const Rect& b) { return a.equals(b); } +inline bool operator!=(const Rect& a, const Rect& b) { return !a.equals(b); } + } // namespace math namespace engine { @@ -175,6 +433,16 @@ struct Light { } }; +struct LightInfo { + Module* module = NULL; + int lightId = -1; + std::string name; + std::string description; + virtual ~LightInfo() {} + virtual std::string getName() { return name; } + virtual std::string getDescription() { return description; } +}; + struct Param { float value = 0.f; float getValue() { return value; } @@ -195,35 +463,31 @@ struct Port { INPUT, OUTPUT, }; - void setVoltage(float voltage, int channel = 0) { voltages[channel] = voltage; } float getVoltage(int channel = 0) { return voltages[channel]; } float getPolyVoltage(int channel) { return isMonophonic() ? getVoltage(0) : getVoltage(channel); } - - float getNormalVoltage(float normalVoltage, int channel = 0) { return isConnected() ? getVoltage(channel) : normalVoltage; } - - float getNormalPolyVoltage(float normalVoltage, int channel) { return isConnected() ? getPolyVoltage(channel) : normalVoltage; } - + float getNormalVoltage(float normalVoltage, int channel = 0) { + return isConnected() ? getVoltage(channel) : normalVoltage; + } + float getNormalPolyVoltage(float normalVoltage, int channel) { + return isConnected() ? getPolyVoltage(channel) : normalVoltage; + } float* getVoltages(int firstChannel = 0) { return &voltages[firstChannel]; } - void readVoltages(float* v) { for (int c = 0; c < channels; c++) { v[c] = voltages[c]; } } - void writeVoltages(const float* v) { for (int c = 0; c < channels; c++) { voltages[c] = v[c]; } } - void clearVoltages() { for (int c = 0; c < channels; c++) { voltages[c] = 0.f; } } - float getVoltageSum() { float sum = 0.f; for (int c = 0; c < channels; c++) { @@ -231,7 +495,6 @@ struct Port { } return sum; } - float getVoltageRMS() { if (channels == 0) { return 0.f; @@ -247,7 +510,6 @@ struct Port { return std::sqrt(sum); } } - // template // T getVoltageSimd(int firstChannel) { // return T::load(&voltages[firstChannel]); @@ -272,7 +534,6 @@ struct Port { // void setVoltageSimd(T voltage, int firstChannel) { // voltage.store(&voltages[firstChannel]); // } - void setChannels(int channels) { if (this->channels == 0) { return; @@ -285,7 +546,6 @@ struct Port { } this->channels = channels; } - int getChannels() { return channels; } bool isConnected() { return channels > 0; } bool isMonophonic() { return channels == 1; } @@ -335,12 +595,10 @@ struct ParamQuantity : Quantity { bool randomizeEnabled = true; bool smoothEnabled = false; bool snapEnabled = false; - // Param* getParam(); // /** If smoothEnabled is true, requests to the engine to smoothly move to a target value each sample. */ // void setSmoothValue(float value); // float getSmoothValue(); - // void setValue(float value) override; // float getValue() override; float getMinValue() override { return minValue; } @@ -355,9 +613,7 @@ struct ParamQuantity : Quantity { // std::string getUnit() override; // void reset() override; // void randomize() override; - virtual std::string getDescription() { return description; } - // virtual json_t* toJson(); // virtual void fromJson(json_t* rootJ); }; @@ -376,8 +632,7 @@ struct Module { std::vector paramQuantities; std::vector inputInfos; std::vector outputInfos; -// std::vector lightInfos; - + std::vector lightInfos; virtual ~Module() { for (ParamQuantity* paramQuantity : paramQuantities) { if (paramQuantity) @@ -391,15 +646,12 @@ struct Module { if (outputInfo) delete outputInfo; } -// for (LightInfo* lightInfo : lightInfos) { -// if (lightInfo) -// delete lightInfo; -// } + for (LightInfo* lightInfo : lightInfos) { + if (lightInfo) + delete lightInfo; + } } - void config(int numParams, int numInputs, int numOutputs, int numLights = 0) { -// // This method should only be called once. -// assert(params.empty() && inputs.empty() && outputs.empty() && lights.empty() && paramQuantities.empty()); params.resize(numParams); inputs.resize(numInputs); outputs.resize(numOutputs); @@ -416,12 +668,10 @@ struct Module { for (int i = 0; i < numOutputs; i++) { configOutput(i); } -// lightInfos.resize(numLights); + lightInfos.resize(numLights); } - template TParamQuantity* configParam(int paramId, float minValue, float maxValue, float defaultValue, std::string name = "", std::string unit = "", float displayBase = 0.f, float displayMultiplier = 1.f, float displayOffset = 0.f) { -// assert(paramId < (int) params.size() && paramId < (int) paramQuantities.size()); if (paramQuantities[paramId]) delete paramQuantities[paramId]; @@ -442,24 +692,20 @@ struct Module { p->value = q->getDefaultValue(); return q; } - template TSwitchQuantity* configSwitch(int paramId, float minValue, float maxValue, float defaultValue, std::string name = "", std::vector labels = {}) { TSwitchQuantity* sq = configParam(paramId, minValue, maxValue, defaultValue, name); sq->labels = labels; return sq; } - template TSwitchQuantity* configButton(int paramId, std::string name = "") { TSwitchQuantity* sq = configParam(paramId, 0.f, 1.f, 0.f, name); sq->randomizeEnabled = false; return sq; } - template TPortInfo* configInput(int portId, std::string name = "") { -// assert(portId < (int) inputs.size() && portId < (int) inputInfos.size()); if (inputInfos[portId]) delete inputInfos[portId]; @@ -471,10 +717,8 @@ struct Module { inputInfos[portId] = info; return info; } - template TPortInfo* configOutput(int portId, std::string name = "") { -// assert(portId < (int) outputs.size() && portId < (int) outputInfos.size()); if (outputInfos[portId]) delete outputInfos[portId]; @@ -486,35 +730,28 @@ struct Module { outputInfos[portId] = info; return info; } - -// template -// TLightInfo* configLight(int lightId, std::string name = "") { -// assert(lightId < (int) lights.size() && lightId < (int) lightInfos.size()); -// if (lightInfos[lightId]) -// delete lightInfos[lightId]; -// -// TLightInfo* info = new TLightInfo; -// info->LightInfo::module = this; -// info->LightInfo::lightId = lightId; -// info->LightInfo::name = name; -// lightInfos[lightId] = info; -// return info; -// } - + template + TLightInfo* configLight(int lightId, std::string name = "") { + if (lightInfos[lightId]) + delete lightInfos[lightId]; + + TLightInfo* info = new TLightInfo; + info->LightInfo::module = this; + info->LightInfo::lightId = lightId; + info->LightInfo::name = name; + lightInfos[lightId] = info; + return info; + } void configBypass(int inputId, int outputId) { -// assert(inputId < (int) inputs.size()); -// assert(outputId < (int) outputs.size()); // // Check that output is not yet routed // for (BypassRoute& br : bypassRoutes) { // assert(br.outputId != outputId); // } -// // BypassRoute br; // br.inputId = inputId; // br.outputId = outputId; // bypassRoutes.push_back(br); } - int getNumParams() { return params.size(); } Param& getParam(int index) { return params[index]; } int getNumInputs() { return inputs.size(); } @@ -526,8 +763,7 @@ struct Module { ParamQuantity* getParamQuantity(int index) { return paramQuantities[index]; } PortInfo* getInputInfo(int index) { return inputInfos[index]; } PortInfo* getOutputInfo(int index) { return outputInfos[index]; } -// LightInfo* getLightInfo(int index) { return lightInfos[index]; } - + LightInfo* getLightInfo(int index) { return lightInfos[index]; } struct ProcessArgs { float sampleRate; float sampleTime; @@ -537,19 +773,13 @@ struct Module { step(); } virtual void step() {} - // virtual void processBypass(const ProcessArgs& args); - // virtual json_t* toJson(); // virtual void fromJson(json_t* rootJ); - - /** Serializes the "params" object. */ // virtual json_t* paramsToJson(); // virtual void paramsFromJson(json_t* rootJ); - virtual json_t* dataToJson() { return NULL; } virtual void dataFromJson(json_t* rootJ) {} - struct SampleRateChangeEvent { float sampleRate; float sampleTime; @@ -557,16 +787,13 @@ struct Module { virtual void onSampleRateChange(const SampleRateChangeEvent&) { onSampleRateChange(); } - struct ResetEvent {}; virtual void onReset(const ResetEvent&) {} // TODO - virtual void onAdd() {} virtual void onRemove() {} virtual void onReset() {} virtual void onRandomize() {} virtual void onSampleRateChange() {} - // private void doProcess(const ProcessArgs& args) { // if (!internal->bypassed) @@ -597,9 +824,54 @@ struct Widget { math::Rect box; Widget* parent = NULL; std::list children; - bool visible = true; + bool visible = false; bool requestedDelete = false; + virtual ~Widget() {} + math::Rect getBox() { return {}; } + void setBox(math::Rect box) {} + math::Vec getPosition() { return {}; } + void setPosition(math::Vec pos) {} + math::Vec getSize() { return {}; } + void setSize(math::Vec size) {} + widget::Widget* getParent() { return NULL; } + bool isVisible() { return false; } + void setVisible(bool visible) {} + void show() {} + void hide() {} + void requestDelete() {} + + virtual math::Rect getChildrenBoundingBox() { return {}; } + virtual math::Rect getVisibleChildrenBoundingBox() { return {}; } + bool isDescendantOf(Widget* ancestor) { return false; } + virtual math::Vec getRelativeOffset(math::Vec v, Widget* ancestor) { return {}; } + math::Vec getAbsoluteOffset(math::Vec v) { return {}; } + virtual float getRelativeZoom(Widget* ancestor) { return 0.f; } + float getAbsoluteZoom() { return 0.f; } + virtual math::Rect getViewport(math::Rect r) { return {}; } + + template T* getAncestorOfType() { return NULL; } + template T* getFirstDescendantOfType() { return NULL; } + + bool hasChild(Widget* child) { return false; } + void addChild(Widget* child) {} + void addChildBottom(Widget* child) {} + void addChildBelow(Widget* child, Widget* sibling) {} + void addChildAbove(Widget* child, Widget* sibling) {} + void removeChild(Widget* child) {} + void clearChildren() {} + + virtual void step() {} + struct DrawArgs { + NVGcontext* vg = NULL; + math::Rect clipBox; + void* fb = NULL; + }; + virtual void draw(const DrawArgs&) {} + // DEPRECATED virtual void draw(NVGcontext* vg) {} + virtual void drawLayer(const DrawArgs& args, int layer) {} + void drawChild(Widget* child, const DrawArgs& args, int layer = 0) {} + using BaseEvent = widget::BaseEvent; struct PositionBaseEvent { @@ -609,16 +881,14 @@ struct Widget { struct HoverEvent : BaseEvent, PositionBaseEvent { math::Vec mouseDelta; }; - virtual void onHover(const HoverEvent&) { - } + virtual void onHover(const HoverEvent&) {} struct ButtonEvent : BaseEvent, PositionBaseEvent { int button; int action; int mods; }; - virtual void onButton(const ButtonEvent&) { - } + virtual void onButton(const ButtonEvent&) {} struct DoubleClickEvent : BaseEvent {}; virtual void onDoubleClick(const DoubleClickEvent&) {} @@ -632,21 +902,18 @@ struct Widget { }; struct HoverKeyEvent : BaseEvent, PositionBaseEvent, KeyBaseEvent {}; - virtual void onHoverKey(const HoverKeyEvent&) { - } + virtual void onHoverKey(const HoverKeyEvent&) {} struct TextBaseEvent { int codepoint; }; struct HoverTextEvent : BaseEvent, PositionBaseEvent, TextBaseEvent {}; - virtual void onHoverText(const HoverTextEvent&) { - } + virtual void onHoverText(const HoverTextEvent&) {} struct HoverScrollEvent : BaseEvent, PositionBaseEvent { math::Vec scrollDelta; }; - virtual void onHoverScroll(const HoverScrollEvent&) { - } + virtual void onHoverScroll(const HoverScrollEvent&) {} struct EnterEvent : BaseEvent {}; virtual void onEnter(const EnterEvent&) {} @@ -707,8 +974,7 @@ struct Widget { PathDropEvent(const std::vector& paths) : paths(paths) {} const std::vector& paths; }; - virtual void onPathDrop(const PathDropEvent&) { - } + virtual void onPathDrop(const PathDropEvent&) {} struct ActionEvent : BaseEvent {}; virtual void onAction(const ActionEvent&) {} @@ -716,28 +982,45 @@ struct Widget { struct ChangeEvent : BaseEvent {}; virtual void onChange(const ChangeEvent&) {} - bool hasChild(Widget* child) { return false; } - void addChild(Widget* child) {} - void addChildBottom(Widget* child) {} - void addChildBelow(Widget* child, Widget* sibling) {} - void addChildAbove(Widget* child, Widget* sibling) {} - void removeChild(Widget* child) {} - void clearChildren() {} - virtual void step() {} - struct DrawArgs { - void* vg = NULL; - math::Rect clipBox; - void* fb = NULL; + struct DirtyEvent : BaseEvent {}; + virtual void onDirty(const DirtyEvent&) {} + + struct RepositionEvent : BaseEvent {}; + virtual void onReposition(const RepositionEvent&) {} + + struct ResizeEvent : BaseEvent {}; + virtual void onResize(const ResizeEvent&) {} + + struct AddEvent : BaseEvent {}; + virtual void onAdd(const AddEvent&) {} + + struct RemoveEvent : BaseEvent {}; + virtual void onRemove(const RemoveEvent&) {} + + struct ShowEvent : BaseEvent {}; + virtual void onShow(const ShowEvent&) {} + + struct HideEvent : BaseEvent {}; + virtual void onHide(const HideEvent&) {} + + struct ContextCreateEvent : BaseEvent { + NVGcontext* vg; + }; + virtual void onContextCreate(const ContextCreateEvent&) {} + + struct ContextDestroyEvent : BaseEvent { + NVGcontext* vg; }; - virtual void draw(const DrawArgs& args); + virtual void onContextDestroy(const ContextDestroyEvent&) {} }; struct OpaqueWidget : Widget { }; struct SvgWidget : Widget { + std::shared_ptr svg; void wrap() {} - void setSvg(void* svg) {} + void setSvg(std::shared_ptr) {} }; struct TransparentWidget : Widget { @@ -749,8 +1032,11 @@ namespace app { static constexpr const float RACK_GRID_WIDTH = 15; static constexpr const float RACK_GRID_HEIGHT = 380; -// static constexpr const math::Vec RACK_GRID_SIZE = math::Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT); -// static constexpr const math::Vec RACK_OFFSET = RACK_GRID_SIZE.mult(math::Vec(2000, 100)); +static const math::Vec RACK_GRID_SIZE = math::Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT); +static const math::Vec RACK_OFFSET = RACK_GRID_SIZE.mult(math::Vec(2000, 100)); + +struct ParamWidget; +struct PortWidget; struct CircularShadow : widget::TransparentWidget { float blurRadius; @@ -762,15 +1048,57 @@ struct LightWidget : widget::TransparentWidget { }; struct ModuleWidget : widget::OpaqueWidget { -// plugin::Model* model = NULL; + // plugin::Model* model = NULL; engine::Module* module = NULL; - void setModel(void*) {} - void setModule(void*) {} - void setPanel(void*) {} - void addParam(void*) {} - void addInput(void*) {} - void addOutput(void*) {} - virtual void appendContextMenu(ui::Menu* menu) {} + + // plugin::Model* getModel() { return NULL; } + // void setModel(plugin::Model*) {} + + engine::Module* getModule() { return NULL; } + void setModule(engine::Module*) {} + + widget::Widget* getPanel() { return NULL; } + void setPanel(widget::Widget*) {} + void setPanel(std::shared_ptr) {} + + void addParam(ParamWidget*) {} + void addInput(PortWidget*) {} + void addOutput(PortWidget*) {} + ParamWidget* getParam(int paramId) { return NULL; } + PortWidget* getInput(int portId) { return NULL; } + PortWidget* getOutput(int portId) { return NULL; } + std::vector getParams() { return {}; } + std::vector getPorts() { return {}; } + std::vector getInputs() { return {}; } + std::vector getOutputs() { return {}; } + + virtual void appendContextMenu(ui::Menu*) {} + + json_t* toJson() { return NULL; } + void fromJson(json_t*) {} + bool pasteJsonAction(json_t*) { return false; } + void copyClipboard() {} + bool pasteClipboardAction() { return false; } + void load(std::string) {} + void loadAction(std::string) {} + void loadTemplate() {} + void loadDialog() {} + void save(std::string) {} + void saveTemplate() {} + void saveTemplateDialog() {} + bool hasTemplate() { return false; } + void clearTemplate() {} + void clearTemplateDialog() {} + void saveDialog() {} + void disconnect() {} + void resetAction() {} + void randomizeAction() {} + void appendDisconnectActions(/*history::ComplexAction*/void*) {} + void disconnectAction() {} + void cloneAction(bool cc = true) {} + void bypassAction(bool) {} + void removeAction() {} + void createContextMenu() {} }; struct MultiLightWidget : LightWidget { @@ -824,37 +1152,40 @@ struct Switch : ParamWidget { }; struct SvgKnob : Knob { +// widget::FramebufferWidget* fb; CircularShadow* shadow; - void setSvg(void* svg) {} +// widget::TransformWidget* tw; + widget::SvgWidget* sw; + void setSvg(std::shared_ptr) {} }; struct SvgPanel : widget::Widget { // widget::FramebufferWidget* fb; // widget::SvgWidget* sw; // PanelBorder* panelBorder; - void setBackground(void* svg) {} + void setBackground(std::shared_ptr) {} }; struct SvgPort : PortWidget { // widget::FramebufferWidget* fb; CircularShadow* shadow; // widget::SvgWidget* sw; - void setSvg(void* svg) {} + void setSvg(std::shared_ptr) {} }; struct SvgScrew : widget::Widget { // widget::FramebufferWidget* fb; widget::SvgWidget* sw; - void setSvg(void* svg) {} + void setSvg(std::shared_ptr) {} }; struct SvgSlider : app::SliderKnob { // widget::FramebufferWidget* fb; widget::SvgWidget* background; -// widget::SvgWidget* handle; + widget::SvgWidget* handle; math::Vec minHandlePos, maxHandlePos; - void setBackgroundSvg(void* svg) {} - void setHandleSvg(void* svg) {} + void setBackgroundSvg(std::shared_ptr) {} + void setHandleSvg(std::shared_ptr) {} void setHandlePos(math::Vec minHandlePos, math::Vec maxHandlePos) {} void setHandlePosCentered(math::Vec minHandlePosCentered, math::Vec maxHandlePosCentered) {} }; @@ -865,94 +1196,271 @@ struct SvgSwitch : Switch { // widget::SvgWidget* sw; // std::vector> frames; bool latch = false; - void addFrame(void* svg) {} + void addFrame(std::shared_ptr) {} +}; + +struct Scene : widget::OpaqueWidget { +// RackScrollWidget* rackScroll; +// RackWidget* rack; + widget::Widget* menuBar; + widget::Widget* browser; + math::Vec getMousePos() { return {}; } }; } // namespace app namespace asset { -const char* plugin(void* instance, const char* path) { - return NULL; -} +inline std::string plugin(void* instance, const char* path) { return {}; } +inline std::string system(const char* path) { return {}; } } // namespace asset namespace componentlibrary { +static constexpr const NVGcolor SCHEME_BLACK_TRANSPARENT = {}; +static constexpr const NVGcolor SCHEME_BLACK = {}; +static constexpr const NVGcolor SCHEME_WHITE = {}; +static constexpr const NVGcolor SCHEME_RED = {}; +static constexpr const NVGcolor SCHEME_ORANGE = {}; +static constexpr const NVGcolor SCHEME_YELLOW = {}; +static constexpr const NVGcolor SCHEME_GREEN = {}; +static constexpr const NVGcolor SCHEME_CYAN = {}; +static constexpr const NVGcolor SCHEME_BLUE = {}; +static constexpr const NVGcolor SCHEME_PURPLE = {}; static constexpr const NVGcolor SCHEME_LIGHT_GRAY = {}; +static constexpr const NVGcolor SCHEME_DARK_GRAY = {}; template struct TSvgLight : TBase { // widget::FramebufferWidget* fb; // widget::SvgWidget* sw; - void setSvg(void* svg) {} + void setSvg(std::shared_ptr) {} }; using SvgLight = TSvgLight<>; template -struct TGrayModuleLightWidget : TBase { -}; +struct TGrayModuleLightWidget : TBase {}; using GrayModuleLightWidget = TGrayModuleLightWidget<>; template -struct TWhiteLight : TBase { -}; +struct TWhiteLight : TBase {}; using WhiteLight = TWhiteLight<>; template -struct TRedLight : TBase { -}; +struct TRedLight : TBase {}; using RedLight = TRedLight<>; template -struct TGreenLight : TBase { -}; +struct TGreenLight : TBase {}; using GreenLight = TGreenLight<>; template -struct TBlueLight : TBase { -}; +struct TBlueLight : TBase {}; using BlueLight = TBlueLight<>; template -struct TYellowLight : TBase { -}; +struct TYellowLight : TBase {}; using YellowLight = TYellowLight<>; template -struct TGreenRedLight : TBase { -}; +struct TGreenRedLight : TBase {}; using GreenRedLight = TGreenRedLight<>; template -struct TRedGreenBlueLight : TBase { -}; +struct TRedGreenBlueLight : TBase {}; using RedGreenBlueLight = TRedGreenBlueLight<>; template -struct LargeLight : TSvgLight { -}; +struct LargeLight : TSvgLight {}; template -struct MediumLight : TSvgLight { -}; +struct MediumLight : TSvgLight {}; + +template +struct SmallLight : TSvgLight {}; + +template +struct TinyLight : TSvgLight {}; + +template +struct LargeSimpleLight : TBase {}; + +template +struct MediumSimpleLight : TBase {}; +template +struct SmallSimpleLight : TBase {}; + +template +struct TinySimpleLight : TBase {}; + +template +struct RectangleLight : TBase {}; + +template +struct VCVBezelLight : TBase {}; template -struct SmallLight : TSvgLight { +using LEDBezelLight = VCVBezelLight; + +template +struct PB61303Light : TBase {}; + +struct RoundKnob : app::SvgKnob { + widget::SvgWidget* bg; +}; +struct RoundBlackKnob : RoundKnob {}; +struct RoundSmallBlackKnob : RoundKnob {}; +struct RoundLargeBlackKnob : RoundKnob {}; +struct RoundBigBlackKnob : RoundKnob {}; +struct RoundHugeBlackKnob : RoundKnob {}; +struct RoundBlackSnapKnob : RoundBlackKnob {}; +struct Davies1900hKnob : app::SvgKnob {}; +struct Davies1900hWhiteKnob : Davies1900hKnob {}; +struct Davies1900hBlackKnob : Davies1900hKnob {}; +struct Davies1900hRedKnob : Davies1900hKnob {}; +struct Davies1900hLargeWhiteKnob : Davies1900hKnob {}; +struct Davies1900hLargeBlackKnob : Davies1900hKnob {}; +struct Davies1900hLargeRedKnob : Davies1900hKnob {}; +struct Rogan : app::SvgKnob { + widget::SvgWidget* bg; + widget::SvgWidget* fg; +}; +struct Rogan6PSWhite : Rogan {}; +struct Rogan5PSGray : Rogan {}; +struct Rogan3PSBlue : Rogan {}; +struct Rogan3PSRed : Rogan {}; +struct Rogan3PSGreen : Rogan {}; +struct Rogan3PSWhite : Rogan {}; +struct Rogan3PBlue : Rogan {}; +struct Rogan3PRed : Rogan {}; +struct Rogan3PGreen : Rogan {}; +struct Rogan3PWhite : Rogan {}; +struct Rogan2SGray : Rogan {}; +struct Rogan2PSBlue : Rogan {}; +struct Rogan2PSRed : Rogan {}; +struct Rogan2PSGreen : Rogan {}; +struct Rogan2PSWhite : Rogan {}; +struct Rogan2PBlue : Rogan {}; +struct Rogan2PRed : Rogan {}; +struct Rogan2PGreen : Rogan {}; +struct Rogan2PWhite : Rogan {}; +struct Rogan1PSBlue : Rogan {}; +struct Rogan1PSRed : Rogan {}; +struct Rogan1PSGreen : Rogan {}; +struct Rogan1PSWhite : Rogan {}; +struct Rogan1PBlue : Rogan {}; +struct Rogan1PRed : Rogan {}; +struct Rogan1PGreen : Rogan {}; +struct Rogan1PWhite : Rogan {}; +struct SynthTechAlco : app::SvgKnob { + widget::SvgWidget* bg; +}; +struct Trimpot : app::SvgKnob { + widget::SvgWidget* bg; }; +struct BefacoBigKnob : app::SvgKnob { + widget::SvgWidget* bg; +}; +struct BefacoTinyKnob : app::SvgKnob { + widget::SvgWidget* bg; +}; +struct BefacoSlidePot : app::SvgSlider {}; + +struct VCVSlider : app::SvgSlider {}; +using LEDSlider = VCVSlider; + +struct VCVSliderHorizontal : app::SvgSlider {}; +using LEDSliderHorizontal = VCVSliderHorizontal; +template +struct LightSlider : TBase { + app::ModuleLightWidget* light = NULL; + app::ModuleLightWidget* getLight() { return light; } +}; + +template +struct VCVSliderLight : RectangleLight> {}; template -struct TinyLight : TSvgLight { +using LEDSliderLight = VCVSliderLight; + +template +struct VCVLightSlider : LightSlider> {}; +template +using LEDLightSlider = VCVLightSlider; + +struct LEDSliderGreen : VCVLightSlider {}; +struct LEDSliderRed : VCVLightSlider {}; +struct LEDSliderYellow : VCVLightSlider {}; +struct LEDSliderBlue : VCVLightSlider {}; +struct LEDSliderWhite : VCVLightSlider {}; + +template +struct VCVLightSliderHorizontal : LightSlider {}; +template +using LEDLightSliderHorizontal = VCVLightSliderHorizontal; + +struct PJ301MPort : app::SvgPort {}; +struct PJ3410Port : app::SvgPort {}; +struct CL1362Port : app::SvgPort {}; + +template +struct MomentarySwitch : TSwitch {}; + +struct NKK : app::SvgSwitch {}; +struct CKSS : app::SvgSwitch {}; +struct CKSSThree : app::SvgSwitch {}; +struct CKSSThreeHorizontal : app::SvgSwitch {}; +struct CKD6 : app::SvgSwitch {}; +struct TL1105 : app::SvgSwitch {}; +struct VCVButton : app::SvgSwitch {}; +using LEDButton = VCVButton; +struct VCVLatch : VCVButton {}; + +template +struct VCVLightButton : VCVButton { + app::ModuleLightWidget* light = NULL; + app::ModuleLightWidget* getLight() { return light; } }; +template +using LEDLightButton = VCVLightButton; -struct ScrewBlack : app::SvgScrew { +template +struct VCVLightLatch : VCVLightButton {}; + +struct BefacoSwitch : app::SvgSwitch {}; + +struct BefacoPush : app::SvgSwitch {}; + +struct VCVBezel : app::SvgSwitch {}; +using LEDBezel = VCVBezel; + +struct VCVBezelLatch : VCVBezel {}; + +template +struct VCVLightBezel : VCVBezel { + app::ModuleLightWidget* light = NULL; + app::ModuleLightWidget* getLight() { return light; } }; +template +using LEDLightBezel = VCVLightBezel; + +template +struct VCVLightBezelLatch : VCVLightBezel {}; + +struct PB61303 : app::SvgSwitch {}; + +struct ScrewSilver : app::SvgScrew {}; +struct ScrewBlack : app::SvgScrew {}; } // namespace componentlibrary namespace dsp { - + +static constexpr const float FREQ_C4 = 261.6256f; +static constexpr const float FREQ_A4 = 440.0000f; +static constexpr const float FREQ_SEMITONE = 1.0594630943592953f; + inline float sinc(float x) { if (x == 0.f) return 1.f; @@ -968,6 +1476,43 @@ inline float sinc(float x) { // return simd::ifelse(zeromask, 1.f, x); // } +// template +// T amplitudeToDb(T amp) { +// return simd::log10(amp) * 20; +// } + +template +T dbToAmplitude(T db) { return std::pow(10, db / 20); } + +// template +// T quadraticBipolar(T x) { +// return simd::sgn(x) * (x * x); +// } + +template +T cubic(T x) { return x * x * x; } + +// template +// T quarticBipolar(T x) { +// return simd::sgn(x) * (x * x * x * x); +// } + +template +T quintic(T x) { return x * x * x * x * x; } + +// template +// T sqrtBipolar(T x) { +// return simd::sgn(x) * simd::sqrt(x); +// } + +// template +// T exponentialBipolar(T b, T x) { +// return (simd::pow(b, x) - simd::pow(b, -x)) / (b - 1.f / b); +// } + +template +struct Frame { T samples[CHANNELS]; }; + template inline T blackmanHarris(T p) { return @@ -990,6 +1535,118 @@ inline void boxcarLowpassIR(float* out, int len, float cutoff = 0.5f) { } } +struct BooleanTrigger { + bool state = true; + void reset() { + state = true; + } + bool process(bool state) { + bool triggered = (state && !this->state); + this->state = state; + return triggered; + } +}; + +template +struct TSchmittTrigger { + T state; + TSchmittTrigger() { + reset(); + } + void reset() { + state = T::mask(); + } + T process(T in, T offThreshold = 0.f, T onThreshold = 1.f) { + T on = (in >= onThreshold); + T off = (in <= offThreshold); + T triggered = ~state & on; + state = on | (state & ~off); + return triggered; + } + T isHigh() { + return state; + } +}; + + +template <> +struct TSchmittTrigger { + bool state = true; + void reset() { + state = true; + } + bool process(float in, float offThreshold = 0.f, float onThreshold = 1.f) { + if (state) { + if (in <= offThreshold) { + state = false; + } + } + else { + if (in >= onThreshold) { + state = true; + return true; + } + } + return false; + } + bool isHigh() { + return state; + } +}; + +typedef TSchmittTrigger<> SchmittTrigger; + +struct PulseGenerator { + float remaining = 0.f; + void reset() { remaining = 0.f; } + bool process(float deltaTime) { + if (remaining > 0.f) { + remaining -= deltaTime; + return true; + } + return false; + } + void trigger(float duration = 1e-3f) { + if (duration > remaining) { + remaining = duration; + } + } +}; + +template +struct TTimer { + T time = 0.f; + void reset() { + time = 0.f; + } + T process(T deltaTime) { + time += deltaTime; + return time; + } + T getTime() { + return time; + } +}; + +typedef TTimer<> Timer; + +struct ClockDivider { + uint32_t clock = 0; + uint32_t division = 1; + void reset() { clock = 0; } + void setDivision(uint32_t division) { this->division = division; } + uint32_t getDivision() { return division; } + uint32_t getClock() { return clock; } + bool process() { + clock++; + if (clock >= division) { + clock = 0; + return true; + } + return false; + } +}; + template struct Decimator { T inBuffer[OVERSAMPLE * QUALITY]; @@ -1018,20 +1675,160 @@ struct Decimator { } }; -struct PulseGenerator { - float remaining = 0.f; - void reset() { remaining = 0.f; } - bool process(float deltaTime) { - if (remaining > 0.f) { - remaining -= deltaTime; - return true; +template +struct RingBuffer { + std::atomic start{0}; + std::atomic end{0}; + T data[S]; + void push(T t) { + size_t i = end % S; + data[i] = t; + end++; + } + void pushBuffer(const T* t, int n) { + size_t i = end % S; + size_t e1 = i + n; + size_t e2 = (e1 < S) ? e1 : S; + std::memcpy(&data[i], t, sizeof(T) * (e2 - i)); + if (e1 > S) { + std::memcpy(data, &t[S - i], sizeof(T) * (e1 - S)); } - return false; + end += n; } - void trigger(float duration = 1e-3f) { - if (duration > remaining) { - remaining = duration; + T shift() { + size_t i = start % S; + T t = data[i]; + start++; + return t; + } + void shiftBuffer(T* t, size_t n) { + size_t i = start % S; + size_t s1 = i + n; + size_t s2 = (s1 < S) ? s1 : S; + std::memcpy(t, &data[i], sizeof(T) * (s2 - i)); + if (s1 > S) { + std::memcpy(&t[S - i], data, sizeof(T) * (s1 - S)); + } + start += n; + } + void clear() { + start = end.load(); + } + bool empty() const { + return start >= end; + } + bool full() const { + return end - start >= S; + } + size_t size() const { + return end - start; + } + size_t capacity() const { + return S - size(); + } +}; + +template +struct DoubleRingBuffer { + std::atomic start{0}; + std::atomic end{0}; + T data[2 * S]; + void push(T t) { + size_t i = end % S; + data[i] = t; + data[i + S] = t; + end++; + } + T shift() { + size_t i = start % S; + T t = data[i]; + start++; + return t; + } + void clear() { + start = end.load(); + } + bool empty() const { + return start >= end; + } + bool full() const { + return end - start >= S; + } + size_t size() const { + return end - start; + } + size_t capacity() const { + return S - size(); + } + T* endData() { + size_t i = end % S; + return &data[i]; + } + void endIncr(size_t n) { + size_t i = end % S; + size_t e1 = i + n; + size_t e2 = (e1 < S) ? e1 : S; + std::memcpy(&data[S + i], &data[i], sizeof(T) * (e2 - i)); + if (e1 > S) { + std::memcpy(data, &data[S], sizeof(T) * (e1 - S)); } + end += n; + } + const T* startData() const { + size_t i = start % S; + return &data[i]; + } + void startIncr(size_t n) { + start += n; + } +}; + +template +struct AppleRingBuffer { + size_t start = 0; + size_t end = 0; + T data[N]; + void returnBuffer() { + size_t s = size(); + std::memmove(data, &data[start], sizeof(T) * s); + start = 0; + end = s; + } + void push(T t) { + if (end + 1 > N) { + returnBuffer(); + } + data[end++] = t; + } + T shift() { + return data[start++]; + } + bool empty() const { + return start == end; + } + bool full() const { + return end - start == S; + } + size_t size() const { + return end - start; + } + size_t capacity() const { + return S - size(); + } + T* endData(size_t n) { + if (end + n > N) { + returnBuffer(); + } + return &data[end]; + } + void endIncr(size_t n) { + end += n; + } + const T* startData() const { + return &data[start]; + } + void startIncr(size_t n) { + start += n; } }; @@ -1065,13 +1862,13 @@ using DragDrop = widget::Widget::DragDropEvent; using PathDrop = widget::Widget::PathDropEvent; using Action = widget::Widget::ActionEvent; using Change = widget::Widget::ChangeEvent; -// using Dirty = widget::Widget::DirtyEvent; -// using Reposition = widget::Widget::RepositionEvent; -// using Resize = widget::Widget::ResizeEvent; -// using Add = widget::Widget::AddEvent; -// using Remove = widget::Widget::RemoveEvent; -// using Show = widget::Widget::ShowEvent; -// using Hide = widget::Widget::HideEvent; +using Dirty = widget::Widget::DirtyEvent; +using Reposition = widget::Widget::RepositionEvent; +using Resize = widget::Widget::ResizeEvent; +using Add = widget::Widget::AddEvent; +using Remove = widget::Widget::RemoveEvent; +using Show = widget::Widget::ShowEvent; +using Hide = widget::Widget::HideEvent; } // namespace event namespace plugin { @@ -1086,6 +1883,119 @@ struct Plugin { } // namespace plugin +namespace random { + +struct Xoroshiro128Plus { + uint64_t state[2] = {}; + void seed(uint64_t s0, uint64_t s1) { + state[0] = s0; + state[1] = s1; + operator()(); + } + bool isSeeded() { return state[0] || state[1]; } + static uint64_t rotl(uint64_t x, int k) { return (x << k) | (x >> (64 - k)); } + uint64_t operator()() { + uint64_t s0 = state[0]; + uint64_t s1 = state[1]; + uint64_t result = s0 + s1; + s1 ^= s0; + state[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14); + state[1] = rotl(s1, 36); + return result; + } + constexpr uint64_t min() const { return 0; } + constexpr uint64_t max() const { return UINT64_MAX; } +}; + +Xoroshiro128Plus& local(); + +template +T get() { return local()(); } + +template <> +inline uint32_t get() { return get() >> 32; } + +template <> +inline uint16_t get() { return get() >> 48; } + +template <> +inline uint8_t get() { return get() >> 56; } + +template <> +inline bool get() { return get() >> 63; } + +template <> +inline float get() { return get() * 2.32830629e-10f; } + +template <> +inline double get() { return get() * 5.421010862427522e-20; } + +inline uint64_t u64() { return get(); } +inline uint32_t u32() { return get(); } +inline float uniform() { return get(); } + +inline float normal() { + const float radius = std::sqrt(-2.f * std::log(1.f - get())); + const float theta = 2.f * M_PI * get(); + return radius * std::sin(theta); +} + +inline void buffer(uint8_t* out, size_t len) { + Xoroshiro128Plus& rng = local(); + for (size_t i = 0; i < len; i += 4) { + uint64_t r = rng(); + out[i] = r; + if (i + 1 < len) + out[i + 1] = r >> 8; + if (i + 2 < len) + out[i + 2] = r >> 16; + if (i + 3 < len) + out[i + 3] = r >> 24; + } +} + +inline std::vector vector(size_t len) { + std::vector v(len); + buffer(v.data(), len); + return v; +} + +} // namespace random + +namespace settings { + +const bool tooltips = false; + +} // namespace settings + +namespace string { + +inline std::string fV(const char* format, va_list args) { + // va_lists cannot be reused but we need it twice, so clone args. + va_list args2; + va_copy(args2, args); + // Compute size of required buffer + int size = vsnprintf(NULL, 0, format, args); + if (size < 0) + return ""; + // Create buffer + std::string s; + s.resize(size); + vsnprintf(&s[0], size + 1, format, args2); + return s; +} + +__attribute__((format(printf, 1, 2))) +inline std::string f(const char* format, ...) { + va_list args; + va_start(args, format); + std::string s = fV(format, args); + va_end(args); + return s; +} + +} // namespace string + namespace ui { struct Button : widget::OpaqueWidget { @@ -1111,12 +2021,20 @@ struct MenuItem : MenuEntry { std::string text; std::string rightText; bool disabled = false; + virtual Menu* createChildMenu() { return NULL; } }; struct MenuLabel : MenuEntry { std::string text; }; +struct MenuSeparator : MenuEntry { +}; + +struct Tooltip : widget::Widget { + std::string text; +}; + } // namespace ui namespace window { @@ -1129,13 +2047,34 @@ inline math::Vec in2px(math::Vec in) { return in.mult(SVG_DPI); } inline float mm2px(float mm) { return mm * (SVG_DPI / MM_PER_IN); } inline math::Vec mm2px(math::Vec mm) { return mm.mult(SVG_DPI / MM_PER_IN); } +struct Svg { +// NSVGimage* handle = NULL; +// ~Svg(); +// /** Don't call this directly. Use `Svg::load()` for caching. */ +// void loadFile(const std::string& filename); +// void loadString(const std::string& str); +// math::Vec getSize(); +// int getNumShapes(); +// int getNumPaths(); +// int getNumPoints(); +// void draw(NVGcontext* vg); + static std::shared_ptr load(const std::string&) { return {}; } +}; + +inline void svgDraw(NVGcontext*, NSVGimage*) {} + +struct Font { + int handle; +}; + struct Image { int handle; }; struct Window { - std::shared_ptr loadImage(const std::string&) { return {}; } - void* loadSvg(const void*) { return NULL; } + inline std::shared_ptr loadFont(const std::string&) { return {}; } + inline std::shared_ptr loadImage(const std::string&) { return {}; } + inline std::shared_ptr loadSvg(const std::string&) { return {}; } }; }; @@ -1151,7 +2090,7 @@ using plugin::Plugin; using plugin::Model; template -plugin::Model* createModel(std::string slug) { +plugin::Model* createModel(std::string) { struct TModel : plugin::Model { engine::Module* createModule() override { return new TModule; @@ -1167,54 +2106,125 @@ template T* construct(F f, V v, Args... args) { return NULL; } template -TWidget* createWidget(math::Vec pos) { +inline TWidget* createWidget(math::Vec pos) { + return NULL; +} + +template +inline TWidget* createWidgetCentered(math::Vec) { + return NULL; +} + +inline app::SvgPanel* createPanel(std::string) { return NULL; } template -TParamWidget* createParam(math::Vec pos, engine::Module* module, int paramId) { +inline TParamWidget* createParam(math::Vec, engine::Module*, int) { return NULL; } template -TParamWidget* createParamCentered(math::Vec pos, engine::Module* module, int paramId) { +inline TParamWidget* createParamCentered(math::Vec, engine::Module*, int) { return NULL; } template -TPortWidget* createInput(math::Vec pos, engine::Module* module, int inputId) { +inline TPortWidget* createInput(math::Vec, engine::Module*, int) { return NULL; } template -TPortWidget* createInputCentered(math::Vec pos, engine::Module* module, int inputId) { +inline TPortWidget* createInputCentered(math::Vec, engine::Module*, int) { return NULL; } template -TPortWidget* createOutput(math::Vec pos, engine::Module* module, int outputId) { +inline TPortWidget* createOutput(math::Vec pos, engine::Module*, int) { return NULL; } template -TPortWidget* createOutputCentered(math::Vec pos, engine::Module* module, int outputId) { +inline TPortWidget* createOutputCentered(math::Vec pos, engine::Module*, int) { return NULL; } template -TModuleLightWidget* createLight(math::Vec pos, engine::Module* module, int firstLightId) { +inline TModuleLightWidget* createLight(math::Vec, engine::Module*, int) { return NULL; } template -TModuleLightWidget* createLightCentered(math::Vec pos, engine::Module* module, int firstLightId) { +inline TModuleLightWidget* createLightCentered(math::Vec, engine::Module*, int) { + return NULL; +} + +template +inline TParamWidget* createLightParam(math::Vec, engine::Module*, int, int) { + return NULL; +} + +template +inline TParamWidget* createLightParamCentered(math::Vec, engine::Module*, int, int) { + return NULL; +} + +template +inline TMenu* createMenu() { + return NULL; +} + +template +inline TMenuLabel* createMenuLabel(std::string) { + return NULL; +} + +template +inline TMenuItem* createMenuItem(std::string, std::string rt = "") { + return NULL; +} + +template +inline TMenuItem* createMenuItem(std::string, std::string rightText, std::function, bool d = false, bool ac = false) { + return NULL; +} + +template +inline ui::MenuItem* createCheckMenuItem(std::string, std::string, std::function, std::function, bool d = false, bool ac = false) { + return NULL; +} + +template +inline ui::MenuItem* createBoolMenuItem(std::string, std::string, std::function, std::function, bool d = false, bool ac = false) { + return NULL; +} + +template +inline ui::MenuItem* createBoolPtrMenuItem(std::string, std::string, T*) { + return NULL; +} + +template +inline ui::MenuItem* createSubmenuItem(std::string, std::string, std::function, bool d = false) { + return NULL; +} + +template +inline ui::MenuItem* createIndexSubmenuItem(std::string, std::vector, std::function, std::function, bool d = false, bool ac = false) { + return NULL; +} + +template +inline ui::MenuItem* createIndexPtrSubmenuItem(std::string, std::vector, T*) { return NULL; } struct Context { + app::Scene _scene; engine::Engine _engine; window::Window _window; engine::Engine* engine = &_engine; + app::Scene* scene = &_scene; window::Window* window = &_window; }; diff --git a/lv2export/lv2plugin.cpp b/lv2export/lv2plugin.cpp index 45e56765..102d9f4e 100644 --- a/lv2export/lv2plugin.cpp +++ b/lv2export/lv2plugin.cpp @@ -35,6 +35,9 @@ static constexpr const bool kCvOutputs[] = PLUGIN_CV_OUTPUTS; #include "DistrhoUtils.hpp" +#include +#include + namespace rack { static thread_local Context* threadContext = nullptr; @@ -51,6 +54,15 @@ void contextSet(Context* context) { threadContext = context; } +namespace random { + +Xoroshiro128Plus& local() { + static Xoroshiro128Plus rng; + return rng; +} + +} // namespace random + } struct PluginLv2 { @@ -62,6 +74,21 @@ struct PluginLv2 { PluginLv2(double sr) { + rack::random::Xoroshiro128Plus& rng(rack::random::local()); + + if (! rng.isSeeded()) + { + struct timeval tv; + gettimeofday(&tv, NULL); + uint64_t usec = uint64_t(tv.tv_sec) * 1000 * 1000 + tv.tv_usec; + + static uint64_t globalCounter = 1; + rng.seed(usec, globalCounter++); + + for (int i = 0; i < 4; i++) + rng(); + } + context._engine.sampleRate = sr; contextSet(&context); module = PLUGIN_MODEL->createModule(); diff --git a/lv2export/plugins/aubileinstruments-macro-osc-2.cpp b/lv2export/plugins/aubileinstruments-macro-osc-2.cpp new file mode 100644 index 00000000..b626f40f --- /dev/null +++ b/lv2export/plugins/aubileinstruments-macro-osc-2.cpp @@ -0,0 +1,60 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#define PLAITS_ALWAYS_LOW_CPU_MODE +#include "AudibleInstruments/src/Plaits.cpp" +#include "AudibleInstruments/eurorack/stmlib/utils/random.cc" +#include "AudibleInstruments/eurorack/stmlib/dsp/units.cc" + +#include "AudibleInstruments/eurorack/plaits/dsp/voice.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/additive_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/bass_drum_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/chord_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/fm_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/grain_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/hi_hat_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/modal_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/noise_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/particle_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/snare_drum_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/speech_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/string_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/swarm_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/virtual_analog_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/waveshaping_engine.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/engine/wavetable_engine.cc" + +#include "AudibleInstruments/eurorack/plaits/dsp/physical_modelling/modal_voice.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/physical_modelling/resonator.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string_voice.cc" + +#include "AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_controller.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_phonemes.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_words.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/speech/naive_speech_synth.cc" +#include "AudibleInstruments/eurorack/plaits/dsp/speech/sam_speech_synth.cc" + +#include "AudibleInstruments/eurorack/plaits/resources.cc" + +#define PLUGIN_MODEL modelPlaits +#define PLUGIN_CV_INPUTS {1,1,1,1,1,1,1,1} +#define PLUGIN_CV_OUTPUTS {0,0} + +#include "lv2plugin.cpp" +#include "export.cpp" diff --git a/lv2export/plugins/aubileinstruments-macro-osc.cpp b/lv2export/plugins/aubileinstruments-macro-osc.cpp new file mode 100644 index 00000000..d9c4db78 --- /dev/null +++ b/lv2export/plugins/aubileinstruments-macro-osc.cpp @@ -0,0 +1,40 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#define BRAIDS_ALWAYS_LOW_CPU_MODE +#include "AudibleInstruments/src/Braids.cpp" +#include "AudibleInstruments/eurorack/stmlib/utils/random.cc" + +#define kHighestNote kHighestNoteAnalog +#define kPitchTableStart kPitchTableStartAnalog +#define kOctave kOctaveAnalog +#include "AudibleInstruments/eurorack/braids/analog_oscillator.cc" +#undef kHighestNote +#undef kPitchTableStart +#undef kOctave + +#include "AudibleInstruments/eurorack/braids/digital_oscillator.cc" +#include "AudibleInstruments/eurorack/braids/macro_oscillator.cc" +// #include "AudibleInstruments/eurorack/braids/quantizer.cc" +#include "AudibleInstruments/eurorack/braids/resources.cc" + +#define PLUGIN_MODEL modelBraids +#define PLUGIN_CV_INPUTS {1,1,1,1,1} +#define PLUGIN_CV_OUTPUTS {0} + +#include "lv2plugin.cpp" +#include "export.cpp" diff --git a/lv2export/plugins/fundamental-quantizer.cpp b/lv2export/plugins/fundamental-quantizer.cpp new file mode 100644 index 00000000..e2131bfe --- /dev/null +++ b/lv2export/plugins/fundamental-quantizer.cpp @@ -0,0 +1,25 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "Fundamental/src/Quantizer.cpp" + +#define PLUGIN_MODEL modelQuantizer +#define PLUGIN_CV_INPUTS {1} +#define PLUGIN_CV_OUTPUTS {1} + +#include "lv2plugin.cpp" +#include "export.cpp" diff --git a/lv2export/plugins/fundamental-seq3.cpp b/lv2export/plugins/fundamental-seq3.cpp new file mode 100644 index 00000000..e2dde555 --- /dev/null +++ b/lv2export/plugins/fundamental-seq3.cpp @@ -0,0 +1,25 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "Fundamental/src/SEQ3.cpp" + +#define PLUGIN_MODEL modelSEQ3 +#define PLUGIN_CV_INPUTS {1,1,1,1,1} +#define PLUGIN_CV_OUTPUTS {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} + +#include "lv2plugin.cpp" +#include "export.cpp" diff --git a/plugins/AudibleInstruments b/plugins/AudibleInstruments index 6833adeb..2a19bb25 160000 --- a/plugins/AudibleInstruments +++ b/plugins/AudibleInstruments @@ -1 +1 @@ -Subproject commit 6833adeb7141a06151c9ee7059cc43d3c854c96d +Subproject commit 2a19bb25c0da725756390ad96dca55632800c74d diff --git a/plugins/Fundamental b/plugins/Fundamental index 612b0dba..5ad6f48a 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 612b0dba4634c365b98f96da2459ba58124bbcf0 +Subproject commit 5ad6f48a006beedda1465208aab8f9296d39c48a From 848237c9c5038e84735bec958f4955cb6d0c65e8 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 1 Jun 2022 15:15:42 +0100 Subject: [PATCH 082/283] Fix missing svg resource for host params map Signed-off-by: falkTX --- plugins/Cardinal/orig/HostParamsMap.svg | 157 +++++++++++++++++ plugins/Cardinal/res/HostParamsMap.svg | 216 ++++++++++++++++++++++++ 2 files changed, 373 insertions(+) create mode 100644 plugins/Cardinal/orig/HostParamsMap.svg create mode 100644 plugins/Cardinal/res/HostParamsMap.svg diff --git a/plugins/Cardinal/orig/HostParamsMap.svg b/plugins/Cardinal/orig/HostParamsMap.svg new file mode 100644 index 00000000..895b9564 --- /dev/null +++ b/plugins/Cardinal/orig/HostParamsMap.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + Host Params Map + + diff --git a/plugins/Cardinal/res/HostParamsMap.svg b/plugins/Cardinal/res/HostParamsMap.svg new file mode 100644 index 00000000..d0aeebfb --- /dev/null +++ b/plugins/Cardinal/res/HostParamsMap.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From becfa5d39df8f7b169e744ae6eb8763b99dbaedd Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 1 Jun 2022 16:17:15 +0100 Subject: [PATCH 083/283] lv2export: expose lights as control output ports, always connect cv Signed-off-by: falkTX --- lv2export/export.cpp | 25 +++++++++++++++- lv2export/includes/rack.hpp | 57 +++++++++++++++++++------------------ lv2export/lv2plugin.cpp | 24 ++++++---------- plugins/Fundamental | 2 +- 4 files changed, 63 insertions(+), 45 deletions(-) diff --git a/lv2export/export.cpp b/lv2export/export.cpp index cf8210d2..1f775f40 100644 --- a/lv2export/export.cpp +++ b/lv2export/export.cpp @@ -92,7 +92,7 @@ void lv2_generate_ttl() for (int i=0; igetNumParams(); ++i) { - ParamQuantity* q = module->getParamQuantity(i); + ParamQuantity* const q = module->getParamQuantity(i); d_stdout(" lv2:port ["); d_stdout(" a lv2:InputPort, lv2:ControlPort ;"); d_stdout(" lv2:index %d ;", index++); @@ -107,6 +107,29 @@ void lv2_generate_ttl() // q->unit.c_str() } + for (int i=0; igetNumLights(); ++i) + { + LightInfo* const li = module->getLightInfo(i); + d_stdout(" lv2:port ["); + d_stdout(" a lv2:OutputPort, lv2:ControlPort ;"); + d_stdout(" lv2:index %d ;", index++); + d_stdout(" lv2:symbol \"lv2_light_%d\" ;", i + 1); + if (!li->name.empty()) + { + d_stdout(" lv2:name \"%s\" ;", li->name.c_str()); + if (!li->description.empty()) + d_stdout(" lv2:comment \"%s\" ;", li->description.c_str()); + } + else + { + d_stdout(" lv2:name \"Light %d\" ;", i + 1); + } + d_stdout(" ] ;"); + d_stdout(""); + // q->getDescription().c_str() + // q->unit.c_str() + } + d_stdout(" ."); delete module; diff --git a/lv2export/includes/rack.hpp b/lv2export/includes/rack.hpp index 84d993d1..e1707ab3 100644 --- a/lv2export/includes/rack.hpp +++ b/lv2export/includes/rack.hpp @@ -409,13 +409,13 @@ struct Engine { struct Light { float value = 0.f; - void setBrightness(float brightness) { + inline void setBrightness(float brightness) { value = brightness; } - float getBrightness() { + inline float getBrightness() { return value; } - void setBrightnessSmooth(float brightness, float deltaTime, float lambda = 30.f) { + inline void setBrightnessSmooth(float brightness, float deltaTime, float lambda = 30.f) { if (brightness < value) { // Fade out light value += (brightness - value) * lambda * deltaTime; @@ -425,10 +425,10 @@ struct Light { value = brightness; } } - void setSmoothBrightness(float brightness, float deltaTime) { + inline void setSmoothBrightness(float brightness, float deltaTime) { setBrightnessSmooth(brightness, deltaTime); } - void setBrightnessSmooth(float brightness, int frames = 1) { + inline void setBrightnessSmooth(float brightness, int frames = 1) { setBrightnessSmooth(brightness, frames / 44100.f); } }; @@ -445,8 +445,8 @@ struct LightInfo { struct Param { float value = 0.f; - float getValue() { return value; } - void setValue(float value) { this->value = value; } + inline float getValue() { return value; } + inline void setValue(float value) { this->value = value; } }; struct Port { @@ -463,39 +463,39 @@ struct Port { INPUT, OUTPUT, }; - void setVoltage(float voltage, int channel = 0) { voltages[channel] = voltage; } - float getVoltage(int channel = 0) { return voltages[channel]; } - float getPolyVoltage(int channel) { return isMonophonic() ? getVoltage(0) : getVoltage(channel); } - float getNormalVoltage(float normalVoltage, int channel = 0) { + inline void setVoltage(float voltage, int channel = 0) { voltages[channel] = voltage; } + inline float getVoltage(int channel = 0) { return voltages[channel]; } + inline float getPolyVoltage(int channel) { return isMonophonic() ? getVoltage(0) : getVoltage(channel); } + inline float getNormalVoltage(float normalVoltage, int channel = 0) { return isConnected() ? getVoltage(channel) : normalVoltage; } - float getNormalPolyVoltage(float normalVoltage, int channel) { + inline float getNormalPolyVoltage(float normalVoltage, int channel) { return isConnected() ? getPolyVoltage(channel) : normalVoltage; } - float* getVoltages(int firstChannel = 0) { return &voltages[firstChannel]; } - void readVoltages(float* v) { + inline float* getVoltages(int firstChannel = 0) { return &voltages[firstChannel]; } + inline void readVoltages(float* v) { for (int c = 0; c < channels; c++) { v[c] = voltages[c]; } } - void writeVoltages(const float* v) { + inline void writeVoltages(const float* v) { for (int c = 0; c < channels; c++) { voltages[c] = v[c]; } } - void clearVoltages() { + inline void clearVoltages() { for (int c = 0; c < channels; c++) { voltages[c] = 0.f; } } - float getVoltageSum() { + inline float getVoltageSum() { float sum = 0.f; for (int c = 0; c < channels; c++) { sum += voltages[c]; } return sum; } - float getVoltageRMS() { + inline float getVoltageRMS() { if (channels == 0) { return 0.f; } @@ -534,7 +534,7 @@ struct Port { // void setVoltageSimd(T voltage, int firstChannel) { // voltage.store(&voltages[firstChannel]); // } - void setChannels(int channels) { + inline void setChannels(int channels) { if (this->channels == 0) { return; } @@ -546,11 +546,11 @@ struct Port { } this->channels = channels; } - int getChannels() { return channels; } - bool isConnected() { return channels > 0; } - bool isMonophonic() { return channels == 1; } - bool isPolyphonic() { return channels > 1; } - float normalize(float normalVoltage) { return getNormalVoltage(normalVoltage); } + inline int getChannels() { return channels; } + inline bool isConnected() { return channels > 0; } + inline bool isMonophonic() { return channels == 1; } + inline bool isPolyphonic() { return channels > 1; } + inline float normalize(float normalVoltage) { return getNormalVoltage(normalVoltage); } }; struct Output : Port {}; @@ -601,9 +601,9 @@ struct ParamQuantity : Quantity { // float getSmoothValue(); // void setValue(float value) override; // float getValue() override; - float getMinValue() override { return minValue; } - float getMaxValue() override { return maxValue; } - float getDefaultValue() override { return defaultValue; } + inline float getMinValue() override { return minValue; } + inline float getMaxValue() override { return maxValue; } + inline float getDefaultValue() override { return defaultValue; } // float getDisplayValue() override; // void setDisplayValue(float displayValue) override; // std::string getDisplayValueString() override; @@ -669,6 +669,9 @@ struct Module { configOutput(i); } lightInfos.resize(numLights); + for (int i = 0; i < numLights; i++) { + configLight(i); + } } template TParamQuantity* configParam(int paramId, float minValue, float maxValue, float defaultValue, std::string name = "", std::string unit = "", float displayBase = 0.f, float displayMultiplier = 1.f, float displayOffset = 0.f) { diff --git a/lv2export/lv2plugin.cpp b/lv2export/lv2plugin.cpp index 102d9f4e..e86eb820 100644 --- a/lv2export/lv2plugin.cpp +++ b/lv2export/lv2plugin.cpp @@ -105,13 +105,13 @@ struct PluginLv2 { // FIXME for CV ports we need to detect if something is connected for (int i=numInputs; --i >=0;) { - if (!kCvInputs[i]) - module->inputs[i].channels = 1; + // if (!kCvInputs[i]) + module->inputs[i].channels = 1; } for (int i=numOutputs; --i >=0;) { - if (!kCvOutputs[i]) - module->outputs[i].channels = 1; + // if (!kCvOutputs[i]) + module->outputs[i].channels = 1; } d_stdout("Loaded " SLUG " :: %i inputs, %i outputs, %i params and %i lights", @@ -130,12 +130,6 @@ struct PluginLv2 { ports[port] = dataLocation; } - void lv2_activate() - { - contextSet(&context); - module->onReset(); - } - void lv2_run(const uint32_t sampleCount) { if (sampleCount == 0) @@ -171,6 +165,9 @@ struct PluginLv2 { ++args.frame; } + for (int i=numLights; --i >=0;) + *static_cast(ports[numInputs+numOutputs+numParams+i]) = module->lights[i].getBrightness(); + frameCount += sampleCount; } }; @@ -189,11 +186,6 @@ static void lv2_connect_port(LV2_Handle instance, uint32_t port, void* dataLocat instancePtr->lv2_connect_port(port, dataLocation); } -static void lv2_activate(LV2_Handle instance) -{ - instancePtr->lv2_activate(); -} - static void lv2_run(LV2_Handle instance, uint32_t sampleCount) { instancePtr->lv2_run(sampleCount); @@ -219,7 +211,7 @@ static const LV2_Descriptor sLv2Descriptor = { "urn:cardinal:" SLUG, lv2_instantiate, lv2_connect_port, - lv2_activate, + NULL, // activate lv2_run, NULL, // deactivate lv2_cleanup, diff --git a/plugins/Fundamental b/plugins/Fundamental index 5ad6f48a..224c46f5 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 5ad6f48a006beedda1465208aab8f9296d39c48a +Subproject commit 224c46f5f1ee2a4137e31054da6edc87b9d6f47d From 65000023368bb1f6e631521f32a98124a76b3679 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 2 Jun 2022 02:03:04 +0100 Subject: [PATCH 084/283] Update Carla and DPF for build fixes Signed-off-by: falkTX --- carla | 2 +- dpf | 2 +- src/Cardinal/DistrhoPluginInfo.h | 3 ++- src/CardinalFX/DistrhoPluginInfo.h | 1 + src/CardinalSynth/DistrhoPluginInfo.h | 3 ++- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/carla b/carla index acc785f9..155ea744 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit acc785f9f1103ca7062e2ef7c5f5b1dd5d15a801 +Subproject commit 155ea744e5180fea38a44394445afee64ab7fa55 diff --git a/dpf b/dpf index 7f65db5d..1f3fb013 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 7f65db5dd30ffd11525c5e1e15d6b3bb3e72f85c +Subproject commit 1f3fb01339a80c9dbfaa642c0c58121a57d923dc diff --git a/src/Cardinal/DistrhoPluginInfo.h b/src/Cardinal/DistrhoPluginInfo.h index a107e366..ed73c577 100644 --- a/src/Cardinal/DistrhoPluginInfo.h +++ b/src/Cardinal/DistrhoPluginInfo.h @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 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 @@ -35,6 +35,7 @@ #else #define DISTRHO_PLUGIN_HAS_UI 1 #define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1 +#define DISTRHO_UI_FILE_BROWSER 1 #define DISTRHO_UI_USE_NANOVG 1 #define DISTRHO_UI_USER_RESIZABLE 1 #endif diff --git a/src/CardinalFX/DistrhoPluginInfo.h b/src/CardinalFX/DistrhoPluginInfo.h index d9a9b903..4d8922c3 100644 --- a/src/CardinalFX/DistrhoPluginInfo.h +++ b/src/CardinalFX/DistrhoPluginInfo.h @@ -41,6 +41,7 @@ #else #define DISTRHO_PLUGIN_HAS_UI 1 #define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1 +#define DISTRHO_UI_FILE_BROWSER 1 #define DISTRHO_UI_USE_NANOVG 1 #define DISTRHO_UI_USER_RESIZABLE 1 #endif diff --git a/src/CardinalSynth/DistrhoPluginInfo.h b/src/CardinalSynth/DistrhoPluginInfo.h index 6d4aee12..c11268af 100644 --- a/src/CardinalSynth/DistrhoPluginInfo.h +++ b/src/CardinalSynth/DistrhoPluginInfo.h @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 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 @@ -35,6 +35,7 @@ #else #define DISTRHO_PLUGIN_HAS_UI 1 #define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1 +#define DISTRHO_UI_FILE_BROWSER 1 #define DISTRHO_UI_USE_NANOVG 1 #define DISTRHO_UI_USER_RESIZABLE 1 #endif From 5d40a9dbf8742e22914bbdc53e15b3205026dbf9 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 2 Jun 2022 11:36:55 +0100 Subject: [PATCH 085/283] Fix linux arm builds Signed-off-by: falkTX --- carla | 2 +- dpf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/carla b/carla index 155ea744..b38917a3 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 155ea744e5180fea38a44394445afee64ab7fa55 +Subproject commit b38917a3f323baa6ab31d35bb340505dff475724 diff --git a/dpf b/dpf index 1f3fb013..bad716bc 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 1f3fb01339a80c9dbfaa642c0c58121a57d923dc +Subproject commit bad716bc14e56c3a7c276b1a77bfdcefc4e8df37 From 6171cca627e00554ec2ecd1ce6284388ec0c616f Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 2 Jun 2022 12:59:42 +0100 Subject: [PATCH 086/283] More makefile tweaks, to help fix build Signed-off-by: falkTX --- Makefile | 4 ++++ carla | 2 +- dpf | 2 +- src/Makefile.cardinal.mk | 5 +---- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index bb869826..e89029e1 100644 --- a/Makefile +++ b/Makefile @@ -104,6 +104,9 @@ endif ifneq ($(HAVE_X11),true) $(error X11 dependency not installed/available) endif +ifneq ($(HAVE_XCURSOR),true) +$(warning Xcursor dependency not installed/available) +endif ifneq ($(HAVE_XEXT),true) $(warning Xext dependency not installed/available) endif @@ -115,6 +118,7 @@ else CARLA_EXTRA_ARGS += HAVE_OPENGL=false CARLA_EXTRA_ARGS += HAVE_X11=false +CARLA_EXTRA_ARGS += HAVE_XCURSOR=false CARLA_EXTRA_ARGS += HAVE_XEXT=false CARLA_EXTRA_ARGS += HAVE_XRANDR=false diff --git a/carla b/carla index b38917a3..0a291408 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit b38917a3f323baa6ab31d35bb340505dff475724 +Subproject commit 0a2914088e6dc74d136bc3227d907606b872c22e diff --git a/dpf b/dpf index bad716bc..cac66463 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit bad716bc14e56c3a7c276b1a77bfdcefc4e8df37 +Subproject commit cac6646370b6f83366c8289789f078733a14753a diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index d140023d..56900588 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -19,11 +19,8 @@ endif ifneq ($(STATIC_BUILD),true) -ifneq ($(DEBUG),true) -EXTERNAL_PLUGINS = true -endif - CWD = ../../carla/source +STATIC_PLUGIN_TARGET = true include $(CWD)/Makefile.deps.mk CARLA_BUILD_DIR = ../../carla/build From bfa74de20f4981e20b1a2c5d5760fad5c52ab72b Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 2 Jun 2022 13:49:57 +0100 Subject: [PATCH 087/283] Fix macOS build Signed-off-by: falkTX --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index cac66463..42c1387a 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit cac6646370b6f83366c8289789f078733a14753a +Subproject commit 42c1387a1281a4846c2bec6d6b5df3f9259190c5 From 586b3ae320df5b4b44afd357fb3c9310f71ea973 Mon Sep 17 00:00:00 2001 From: Yevhenii Matviienko Date: Thu, 2 Jun 2022 16:26:21 +0300 Subject: [PATCH 088/283] Remove scroll multiplication for macOS --- src/CardinalUI.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index 25830e00..2602b671 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -647,9 +647,7 @@ class CardinalUI : public CardinalBaseUI, bool onScroll(const ScrollEvent& ev) override { rack::math::Vec scrollDelta = rack::math::Vec(ev.delta.getX(), ev.delta.getY()); -#ifdef DISTRHO_OS_MAC - scrollDelta = scrollDelta.mult(10.0); -#else +#ifndef DISTRHO_OS_MAC scrollDelta = scrollDelta.mult(50.0); #endif From e3bdc61c18a3d0554614387e447c64aecb301c12 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 2 Jun 2022 19:34:24 +0100 Subject: [PATCH 089/283] Try to fix windows builds Signed-off-by: falkTX --- .github/workflows/build.yml | 4 ++-- carla | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3f5f0951..567ffb79 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -745,7 +745,7 @@ jobs: - name: Build win64 cross-compiled (carla) run: | pushd deps/PawPaw; source local.env win32; popd - make -C carla CARLA_BACKEND_NAMESPACE=Cardinal EXTERNAL_PLUGINS=true HAVE_FLUIDSYNTH=false HAVE_ZYN_DEPS=false HAVE_ZYN_UI_DEPS=false HAVE_PYQT=true HAVE_QT5=true HAVE_QT5PKG=true STATIC_PLUGIN_TARGET=true USING_JUCE=false USING_JUCE_GUI_EXTRA=false -j $(nproc) + make -C carla CARLA_BACKEND_NAMESPACE=Cardinal EXTERNAL_PLUGINS=true HAVE_FLUIDSYNTH=false HAVE_ZYN_DEPS=false HAVE_ZYN_UI_DEPS=false HAVE_PYQT=true HAVE_QT5=true HAVE_QT5PKG=true STATIC_PLUGIN_TARGET=true USING_CUSTOM_DPF=true CUSTOM_DPF_PATH=$(pwd)/dpf -j $(nproc) make -C carla EMBED_TARGET=true TESTING=true dist make -C carla EMBED_TARGET=true TESTING=true dist - name: Build win64 cross-compiled (packaging) @@ -837,7 +837,7 @@ jobs: - name: Build win64 cross-compiled (carla) run: | pushd deps/PawPaw; source local.env win64; popd - make -C carla CARLA_BACKEND_NAMESPACE=Cardinal EXTERNAL_PLUGINS=true HAVE_FLUIDSYNTH=false HAVE_ZYN_DEPS=false HAVE_ZYN_UI_DEPS=false HAVE_PYQT=true HAVE_QT5=true HAVE_QT5PKG=true STATIC_PLUGIN_TARGET=true USING_JUCE=false USING_JUCE_GUI_EXTRA=false all win32r -j $(nproc) + make -C carla CARLA_BACKEND_NAMESPACE=Cardinal EXTERNAL_PLUGINS=true HAVE_FLUIDSYNTH=false HAVE_ZYN_DEPS=false HAVE_ZYN_UI_DEPS=false HAVE_PYQT=true HAVE_QT5=true HAVE_QT5PKG=true STATIC_PLUGIN_TARGET=true USING_CUSTOM_DPF=true CUSTOM_DPF_PATH=$(pwd)/dpf all win32r -j $(nproc) make -C carla EMBED_TARGET=true TESTING=true dist make -C carla EMBED_TARGET=true TESTING=true dist - name: Build win64 cross-compiled (packaging) diff --git a/carla b/carla index 0a291408..22cef6ba 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 0a2914088e6dc74d136bc3227d907606b872c22e +Subproject commit 22cef6ba4d5577dd727da26b15ff4b98c9867f4f From 20cb3b08d3f1356f8cf542c16bfae74cd3d740a0 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 3 Jun 2022 12:11:43 +0100 Subject: [PATCH 090/283] Fix armhf builds Signed-off-by: falkTX --- carla | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/carla b/carla index 22cef6ba..1cf51b15 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 22cef6ba4d5577dd727da26b15ff4b98c9867f4f +Subproject commit 1cf51b15b5af46c550ff1f854f125aa9a180beb6 From 62181c104704f457eb8cad83673a83f3986de82e Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 3 Jun 2022 18:12:34 +0100 Subject: [PATCH 091/283] Another armhf fix Signed-off-by: falkTX --- carla | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/carla b/carla index 1cf51b15..67c69916 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 1cf51b15b5af46c550ff1f854f125aa9a180beb6 +Subproject commit 67c699162d3b16526684560af55bc0e6f30f075d From 9378b66966c75508546b20f0638fc163ed789c85 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 14 Jun 2022 19:40:34 +0100 Subject: [PATCH 092/283] Cleanup Signed-off-by: falkTX --- src/CardinalUI.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index 2602b671..19d8a2aa 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -761,17 +761,6 @@ class CardinalUI : public CardinalBaseUI, setState("windowSize", sizeString); } - uint32_t uiClipboardDataOffer() override - { - const std::vector offers(getClipboardDataOfferTypes()); - - for (const ClipboardDataOffer offer : offers) - if (std::strcmp(offer.type, "text/plain") == 0) - return offer.id; - - return 0; - } - void uiFocus(const bool focus, const CrossingMode mode) override { if (focus) From fdb3a2185c877e032f50421a7c516936155e6019 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 17 Jun 2022 21:03:55 +0100 Subject: [PATCH 093/283] Skip building main AU variant, needs juce buses related work Signed-off-by: falkTX --- jucewrapper/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 4462fd05..1854ac73 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -115,6 +115,7 @@ endif (APPLE) # Main variant +#[[ juce_add_plugin(Cardinal AU_MAIN_TYPE kAudioUnitType_MusicEffect COMPANY_COPYRIGHT "GPL-3.0-or-later" @@ -202,6 +203,7 @@ target_link_libraries(Cardinal juce::juce_recommended_config_flags juce::juce_recommended_lto_flags juce::juce_recommended_warning_flags) +#]] # FX variant From 2c98fe7388d53b6ea7238dcec02cbcfd459b4b0f Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 17 Jun 2022 22:11:23 +0100 Subject: [PATCH 094/283] Update dpf for a few internal fixes Signed-off-by: falkTX --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index 42c1387a..9efc5ff6 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 42c1387a1281a4846c2bec6d6b5df3f9259190c5 +Subproject commit 9efc5ff6e3eb866e6ea893891f3fe3d5a7712d6e From 9f3bc9f11f5e9b5a88fc3ee537aa039e6fa998f0 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 17 Jun 2022 22:18:04 +0100 Subject: [PATCH 095/283] Do not trigger host time reset when tick == 0 Signed-off-by: falkTX --- plugins/Cardinal/src/HostTime.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/Cardinal/src/HostTime.cpp b/plugins/Cardinal/src/HostTime.cpp index ec9b8b49..418c5297 100644 --- a/plugins/Cardinal/src/HostTime.cpp +++ b/plugins/Cardinal/src/HostTime.cpp @@ -92,7 +92,6 @@ struct HostTime : TerminalModule { { if (d_isZero(tick)) { - pulseReset.trigger(); pulseClock.trigger(); pulseBeat.trigger(); if (timeInfo.beat == 1) From d4e1ae6a45e2687a428b5a9d14275a21fb0d730c Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 17 Jun 2022 22:31:14 +0100 Subject: [PATCH 096/283] Fix flipped Fundamental noise outputs Closes #246 Signed-off-by: falkTX --- plugins/Fundamental | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Fundamental b/plugins/Fundamental index 224c46f5..3ceb5621 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 224c46f5f1ee2a4137e31054da6edc87b9d6f47d +Subproject commit 3ceb5621c77ef69bda02fe62d702eae354a7af6f From 31f843649491d881bdf20948748f6ccfae7ab4e1 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 17 Jun 2022 22:39:35 +0100 Subject: [PATCH 097/283] Fix macOS installer for systems without rosetta2 Signed-off-by: falkTX --- .github/workflows/build.yml | 4 ++++ utils/create-macos-installer.sh | 4 +++- utils/macOS/package.xml.in | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 567ffb79..e455d2ca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -454,6 +454,8 @@ jobs: pushd jucewrapper/build; cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8 -DCMAKE_BUILD_TYPE=Release .. && make VERBOSE=1 -j $(sysctl -n hw.logicalcpu); popd mv jucewrapper/build/*_artefacts/Release/AU/*.component bin/ - name: Build macOS intel (packaging) + env: + MACOS_ARCHS: 'x86_64' run: | pushd deps/PawPaw; source local.env macos; popd ./utils/create-macos-installer.sh @@ -542,6 +544,8 @@ jobs: pushd jucewrapper/build; cmake -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64' -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12 -DCMAKE_BUILD_TYPE=Release .. && make VERBOSE=1 -j $(sysctl -n hw.logicalcpu); popd mv jucewrapper/build/*_artefacts/Release/AU/*.component bin/ - name: Build macOS universal (packaging) + env: + MACOS_ARCHS: 'arm64,x86_64' run: | pushd deps/PawPaw; source local.env macos-universal; popd ./utils/create-macos-installer.sh diff --git a/utils/create-macos-installer.sh b/utils/create-macos-installer.sh index 4ab84dd1..4530f9d9 100755 --- a/utils/create-macos-installer.sh +++ b/utils/create-macos-installer.sh @@ -57,7 +57,9 @@ pkgbuild \ cd .. -sed -e "s|@builddir@|${PWD}/build|" utils/macOS/package.xml.in > build/package.xml +sed -e "s|@builddir@|${PWD}/build|" \ + -e "s|@buildarchs@|${MACOS_ARCHS}|" \ + utils/macOS/package.xml.in > build/package.xml productbuild \ --distribution build/package.xml \ diff --git a/utils/macOS/package.xml.in b/utils/macOS/package.xml.in index b2c8d9cb..ccd08bc0 100644 --- a/utils/macOS/package.xml.in +++ b/utils/macOS/package.xml.in @@ -3,7 +3,7 @@ Cardinal - + From 83ba2ca09101505b253be31a9898aba46b42a6dd Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 17 Jun 2022 23:41:37 +0100 Subject: [PATCH 098/283] Make sure plugins do not use osdialog, add Lilac implementation Signed-off-by: falkTX --- include/osdialog-stub/osdialog.h | 51 ++++++++++++++++++++++++++++++++ plugins/LilacLoop | 2 +- plugins/Makefile | 8 ++--- src/custom/osdialog.cpp | 7 ++++- 4 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 include/osdialog-stub/osdialog.h diff --git a/include/osdialog-stub/osdialog.h b/include/osdialog-stub/osdialog.h new file mode 100644 index 00000000..10a75bcf --- /dev/null +++ b/include/osdialog-stub/osdialog.h @@ -0,0 +1,51 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +/** + * This file is an edited version of osdialog.h + * Originally licensed under CC0 1.0 Universal. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/** Linked list of patterns. */ +typedef struct osdialog_filter_patterns { + char* pattern; + struct osdialog_filter_patterns* next; +} osdialog_filter_patterns; + +/** Linked list of file filters. */ +typedef struct osdialog_filters { + char* name; + osdialog_filter_patterns* patterns; + struct osdialog_filters* next; +} osdialog_filters; + +/** Parses a filter string. */ +static inline osdialog_filters* osdialog_filters_parse(const char* str) { return NULL; } +static inline void osdialog_filters_free(osdialog_filters* filters) {} + +#ifdef __cplusplus +} +#endif diff --git a/plugins/LilacLoop b/plugins/LilacLoop index 69d8d665..bc9d468c 160000 --- a/plugins/LilacLoop +++ b/plugins/LilacLoop @@ -1 +1 @@ -Subproject commit 69d8d66521175cd561d53e65728d460b398950c9 +Subproject commit bc9d468cccb0031e74166a5fc53479fcdc1c9f95 diff --git a/plugins/Makefile b/plugins/Makefile index 7ffdbdd3..a18bb6b3 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -908,9 +908,9 @@ PLUGIN_FILES += $(filter-out ZetaCarinaeModules/src/plugin.cpp,$(wildcard ZetaCa # -------------------------------------------------------------- # ZZC -PLUGIN_FILES += $(filter-out ZZC/src/ZZC.cpp,$(wildcard ZZC/src/*.cpp)) -PLUGIN_FILES += ZZC/src/dsp/Wavetable.cpp -PLUGIN_FILES += ZZC/src/filetypes/WavSupport.cpp +PLUGIN_FILES += $(filter-out ZZC/src/ZZC.cpp ZZC/src/WavetablePlayer.cpp,$(wildcard ZZC/src/*.cpp)) +# PLUGIN_FILES += ZZC/src/dsp/Wavetable.cpp +# PLUGIN_FILES += ZZC/src/filetypes/WavSupport.cpp # modules/types which are present in other plugins ZZC_CUSTOM = Clock LowFrequencyOscillator @@ -938,6 +938,7 @@ BASE_FLAGS += -I../dpf/distrho BASE_FLAGS += -I../include BASE_FLAGS += -I../include/neon-compat +BASE_FLAGS += -I../include/osdialog-stub ifeq ($(HAVE_X11),true) BASE_FLAGS += -DHAVE_X11 @@ -959,7 +960,6 @@ BASE_FLAGS += -I../src/Rack/dep/filesystem/include # # BASE_FLAGS += -I../src/Rack/dep/fuzzysearchdatabase/src BASE_FLAGS += -I../src/Rack/dep/glfw/include BASE_FLAGS += -I../src/Rack/dep/nanosvg/src -BASE_FLAGS += -I../src/Rack/dep/osdialog BASE_FLAGS += -I../src/Rack/dep/oui-blendish BASE_FLAGS += -I../src/Rack/dep/pffft diff --git a/src/custom/osdialog.cpp b/src/custom/osdialog.cpp index 39d7452d..f881ad8d 100644 --- a/src/custom/osdialog.cpp +++ b/src/custom/osdialog.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 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 @@ -17,17 +17,22 @@ #include +#include "DistrhoUtils.hpp" + char* osdialog_file(osdialog_file_action action, const char* path, const char* filename, osdialog_filters* filters) { + d_stderr2("[Cardinal] osdialog_file called %d %s %s", action, path, filename); return nullptr; } int osdialog_message(osdialog_message_level level, osdialog_message_buttons buttons, const char* message) { + d_stderr2("[Cardinal] osdialog_message called %d %d %s", level, buttons, message); return 0; } char* osdialog_prompt(osdialog_message_level level, const char* message, const char* text) { + d_stderr2("[Cardinal] osdialog_prompt called %d %s %s", level, message, text); return nullptr; } From 383bc41da82c9686b360a0295a875f5ffcfe014c Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 18 Jun 2022 21:55:07 +0100 Subject: [PATCH 099/283] Fix incorrect offset of embed ui on windows and macOS --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index 9efc5ff6..ac9b574f 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 9efc5ff6e3eb866e6ea893891f3fe3d5a7712d6e +Subproject commit ac9b574f6f8294fbfaf0aab1c943ab33de7afce2 From 8492fc70fa216ba22e4ca4b99e8bd48af69c6cab Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 19 Jun 2022 10:18:17 +0100 Subject: [PATCH 100/283] Move glfw convert code into its own file Signed-off-by: falkTX --- carla | 2 +- deps/PawPaw | 2 +- dpf | 2 +- src/Cardinal/glfw.cpp | 1 + src/CardinalFX/glfw.cpp | 1 + src/CardinalSynth/glfw.cpp | 1 + src/CardinalUI.cpp | 142 -------------------------------- src/Makefile.cardinal.mk | 6 +- src/custom/glfw.cpp | 163 +++++++++++++++++++++++++++++++++++++ 9 files changed, 172 insertions(+), 148 deletions(-) create mode 120000 src/Cardinal/glfw.cpp create mode 120000 src/CardinalFX/glfw.cpp create mode 120000 src/CardinalSynth/glfw.cpp create mode 100644 src/custom/glfw.cpp diff --git a/carla b/carla index 67c69916..e78faac2 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 67c699162d3b16526684560af55bc0e6f30f075d +Subproject commit e78faac205539ea0e240a096ca7da7cfdfd3211d diff --git a/deps/PawPaw b/deps/PawPaw index 6c11b17d..df80ab80 160000 --- a/deps/PawPaw +++ b/deps/PawPaw @@ -1 +1 @@ -Subproject commit 6c11b17d5f794c224fd0ee8aa872c54e36279123 +Subproject commit df80ab802d7e758eeead02e3ad7d80e4ff332b14 diff --git a/dpf b/dpf index ac9b574f..0c04a07e 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit ac9b574f6f8294fbfaf0aab1c943ab33de7afce2 +Subproject commit 0c04a07e562f502324bb417fb56dbaab7911b010 diff --git a/src/Cardinal/glfw.cpp b/src/Cardinal/glfw.cpp new file mode 120000 index 00000000..8c6a6e44 --- /dev/null +++ b/src/Cardinal/glfw.cpp @@ -0,0 +1 @@ +../custom/glfw.cpp \ No newline at end of file diff --git a/src/CardinalFX/glfw.cpp b/src/CardinalFX/glfw.cpp new file mode 120000 index 00000000..8c6a6e44 --- /dev/null +++ b/src/CardinalFX/glfw.cpp @@ -0,0 +1 @@ +../custom/glfw.cpp \ No newline at end of file diff --git a/src/CardinalSynth/glfw.cpp b/src/CardinalSynth/glfw.cpp new file mode 120000 index 00000000..8c6a6e44 --- /dev/null +++ b/src/CardinalSynth/glfw.cpp @@ -0,0 +1 @@ +../custom/glfw.cpp \ No newline at end of file diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index 19d8a2aa..0c453e99 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -39,148 +39,6 @@ #include "PluginContext.hpp" #include "WindowParameters.hpp" -GLFWAPI int glfwGetKeyScancode(int) { return 0; } - -GLFWAPI const char* glfwGetClipboardString(GLFWwindow*) -{ - CardinalPluginContext* const context = static_cast(APP); - DISTRHO_SAFE_ASSERT_RETURN(context != nullptr, nullptr); - DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr, nullptr); - - size_t dataSize; - return static_cast(context->ui->getClipboard(dataSize)); -} - -GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char* const text) -{ - DISTRHO_SAFE_ASSERT_RETURN(text != nullptr,); - - CardinalPluginContext* const context = static_cast(APP); - DISTRHO_SAFE_ASSERT_RETURN(context != nullptr,); - DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr,); - - context->ui->setClipboard(nullptr, text, std::strlen(text)+1); -} - -GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor* const cursor) -{ - CardinalPluginContext* const context = static_cast(APP); - DISTRHO_SAFE_ASSERT_RETURN(context != nullptr,); - DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr,); - - context->ui->setCursor(cursor != nullptr ? kMouseCursorDiagonal : kMouseCursorArrow); -} - -GLFWAPI double glfwGetTime(void) -{ - CardinalPluginContext* const context = static_cast(APP); - DISTRHO_SAFE_ASSERT_RETURN(context != nullptr, 0.0); - DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr, 0.0); - - return context->ui->getApp().getTime(); -} - -GLFWAPI const char* glfwGetKeyName(const int key, int) -{ - switch (key) - { - case '\"': return "\""; - case '\'': return "\'"; - case '\\': return "\\"; - case ' ': return " "; - case '!': return "!"; - case '#': return "#"; - case '$': return "$"; - case '%': return "%"; - case '&': return "&"; - case '(': return "("; - case ')': return ")"; - case '*': return "*"; - case '+': return "+"; - case ',': return ","; - case '-': return "-"; - case '.': return "."; - case '/': return "/"; - case '0': return "0"; - case '1': return "1"; - case '2': return "2"; - case '3': return "3"; - case '4': return "4"; - case '5': return "5"; - case '6': return "6"; - case '7': return "7"; - case '8': return "8"; - case '9': return "9"; - case ':': return ":"; - case ';': return ";"; - case '<': return "<"; - case '=': return "="; - case '>': return ">"; - case '?': return "?"; - case '@': return "@"; - /* Rack expects lowercase, forced below - case 'A': return "A"; - case 'B': return "B"; - case 'C': return "C"; - case 'D': return "D"; - case 'E': return "E"; - case 'F': return "F"; - case 'G': return "G"; - case 'H': return "H"; - case 'I': return "I"; - case 'J': return "J"; - case 'K': return "K"; - case 'L': return "L"; - case 'M': return "M"; - case 'N': return "N"; - case 'O': return "O"; - case 'P': return "P"; - case 'Q': return "Q"; - case 'R': return "R"; - case 'S': return "S"; - case 'T': return "T"; - case 'U': return "U"; - case 'V': return "V"; - case 'W': return "W"; - case 'X': return "X"; - case 'Y': return "Y"; - case 'Z': return "Z"; - */ - case '[': return "["; - case ']': return "]"; - case '^': return "^"; - case '_': return "_"; - case '`': return "`"; - case 'a': case 'A': return "a"; - case 'b': case 'B': return "b"; - case 'c': case 'C': return "c"; - case 'd': case 'D': return "d"; - case 'e': case 'E': return "e"; - case 'f': case 'F': return "f"; - case 'g': case 'G': return "g"; - case 'h': case 'H': return "h"; - case 'i': case 'I': return "i"; - case 'j': case 'J': return "j"; - case 'k': case 'K': return "k"; - case 'l': case 'L': return "l"; - case 'm': case 'M': return "m"; - case 'n': case 'N': return "n"; - case 'o': case 'O': return "o"; - case 'p': case 'P': return "p"; - case 'q': case 'Q': return "q"; - case 'r': case 'R': return "r"; - case 's': case 'S': return "s"; - case 't': case 'T': return "t"; - case 'u': case 'U': return "u"; - case 'v': case 'V': return "v"; - case 'w': case 'W': return "w"; - case 'x': case 'X': return "x"; - case 'y': case 'Y': return "y"; - case 'z': case 'Z': return "z"; - default: return nullptr; - } -} - namespace rack { namespace app { widget::Widget* createMenuBar(bool isStandalone); diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 56900588..71e397e9 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -48,6 +48,8 @@ endif # STATIC_BUILD # -------------------------------------------------------------- # Import base definitions +NVG_DISABLE_SKIPPING_WHITESPACE = true +NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST USE_NANOVG_FBO = true include ../../dpf/Makefile.base.mk @@ -80,6 +82,7 @@ FILES_DSP += RemoteNanoVG.cpp FILES_DSP += RemoteWindow.cpp else FILES_UI = CardinalUI.cpp +FILES_UI += glfw.cpp FILES_UI += Window.cpp endif @@ -120,9 +123,6 @@ endif # -------------------------------------------------------------- # Do some magic -NVG_DISABLE_SKIPPING_WHITESPACE = true -NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST -USE_NANOVG_FBO = true USE_VST2_BUNDLE = true include ../../dpf/Makefile.plugins.mk diff --git a/src/custom/glfw.cpp b/src/custom/glfw.cpp new file mode 100644 index 00000000..9e422969 --- /dev/null +++ b/src/custom/glfw.cpp @@ -0,0 +1,163 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "Application.hpp" +#include "PluginContext.hpp" + +#include + +GLFWAPI int glfwGetKeyScancode(int) { return 0; } + +GLFWAPI const char* glfwGetClipboardString(GLFWwindow*) +{ + CardinalPluginContext* const context = static_cast(APP); + DISTRHO_SAFE_ASSERT_RETURN(context != nullptr, nullptr); + DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr, nullptr); + + size_t dataSize; + return static_cast(context->ui->getClipboard(dataSize)); +} + +GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char* const text) +{ + DISTRHO_SAFE_ASSERT_RETURN(text != nullptr,); + + CardinalPluginContext* const context = static_cast(APP); + DISTRHO_SAFE_ASSERT_RETURN(context != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr,); + + context->ui->setClipboard(nullptr, text, std::strlen(text)+1); +} + +GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor* const cursor) +{ + CardinalPluginContext* const context = static_cast(APP); + DISTRHO_SAFE_ASSERT_RETURN(context != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr,); + + context->ui->setCursor(cursor != nullptr ? kMouseCursorDiagonal : kMouseCursorArrow); +} + +GLFWAPI double glfwGetTime(void) +{ + CardinalPluginContext* const context = static_cast(APP); + DISTRHO_SAFE_ASSERT_RETURN(context != nullptr, 0.0); + DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr, 0.0); + + return context->ui->getApp().getTime(); +} + +GLFWAPI const char* glfwGetKeyName(const int key, int) +{ + switch (key) + { + case '\"': return "\""; + case '\'': return "\'"; + case '\\': return "\\"; + case ' ': return " "; + case '!': return "!"; + case '#': return "#"; + case '$': return "$"; + case '%': return "%"; + case '&': return "&"; + case '(': return "("; + case ')': return ")"; + case '*': return "*"; + case '+': return "+"; + case ',': return ","; + case '-': return "-"; + case '.': return "."; + case '/': return "/"; + case '0': return "0"; + case '1': return "1"; + case '2': return "2"; + case '3': return "3"; + case '4': return "4"; + case '5': return "5"; + case '6': return "6"; + case '7': return "7"; + case '8': return "8"; + case '9': return "9"; + case ':': return ":"; + case ';': return ";"; + case '<': return "<"; + case '=': return "="; + case '>': return ">"; + case '?': return "?"; + case '@': return "@"; + /* Rack expects lowercase, forced below + case 'A': return "A"; + case 'B': return "B"; + case 'C': return "C"; + case 'D': return "D"; + case 'E': return "E"; + case 'F': return "F"; + case 'G': return "G"; + case 'H': return "H"; + case 'I': return "I"; + case 'J': return "J"; + case 'K': return "K"; + case 'L': return "L"; + case 'M': return "M"; + case 'N': return "N"; + case 'O': return "O"; + case 'P': return "P"; + case 'Q': return "Q"; + case 'R': return "R"; + case 'S': return "S"; + case 'T': return "T"; + case 'U': return "U"; + case 'V': return "V"; + case 'W': return "W"; + case 'X': return "X"; + case 'Y': return "Y"; + case 'Z': return "Z"; + */ + case '[': return "["; + case ']': return "]"; + case '^': return "^"; + case '_': return "_"; + case '`': return "`"; + case 'a': case 'A': return "a"; + case 'b': case 'B': return "b"; + case 'c': case 'C': return "c"; + case 'd': case 'D': return "d"; + case 'e': case 'E': return "e"; + case 'f': case 'F': return "f"; + case 'g': case 'G': return "g"; + case 'h': case 'H': return "h"; + case 'i': case 'I': return "i"; + case 'j': case 'J': return "j"; + case 'k': case 'K': return "k"; + case 'l': case 'L': return "l"; + case 'm': case 'M': return "m"; + case 'n': case 'N': return "n"; + case 'o': case 'O': return "o"; + case 'p': case 'P': return "p"; + case 'q': case 'Q': return "q"; + case 'r': case 'R': return "r"; + case 's': case 'S': return "s"; + case 't': case 'T': return "t"; + case 'u': case 'U': return "u"; + case 'v': case 'V': return "v"; + case 'w': case 'W': return "w"; + case 'x': case 'X': return "x"; + case 'y': case 'Y': return "y"; + case 'z': case 'Z': return "z"; + default: return nullptr; + } +} From e768dbd0e666c9c561b07508ba57acc330a8dda5 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 19 Jun 2022 10:18:51 +0100 Subject: [PATCH 101/283] Start work on CardinalRemote, WIP Signed-off-by: falkTX --- src/CardinalRemote/CardinalCommon.cpp | 1 + src/CardinalRemote/DistrhoPluginInfo.h | 1 + src/CardinalRemote/Makefile | 292 +++++++++++++++++++++++++ src/CardinalRemote/RemoteUI.cpp | 91 ++++++++ src/CardinalRemote/RemoteUI.hpp | 36 +++ src/CardinalRemote/Window.cpp | 1 + src/CardinalRemote/common.cpp | 1 + src/CardinalRemote/glfw.cpp | 1 + src/CardinalRemote/main.cpp | 160 ++++++++++++++ 9 files changed, 584 insertions(+) create mode 120000 src/CardinalRemote/CardinalCommon.cpp create mode 120000 src/CardinalRemote/DistrhoPluginInfo.h create mode 100644 src/CardinalRemote/Makefile create mode 100644 src/CardinalRemote/RemoteUI.cpp create mode 100644 src/CardinalRemote/RemoteUI.hpp create mode 120000 src/CardinalRemote/Window.cpp create mode 120000 src/CardinalRemote/common.cpp create mode 120000 src/CardinalRemote/glfw.cpp create mode 100644 src/CardinalRemote/main.cpp diff --git a/src/CardinalRemote/CardinalCommon.cpp b/src/CardinalRemote/CardinalCommon.cpp new file mode 120000 index 00000000..76b4b5f3 --- /dev/null +++ b/src/CardinalRemote/CardinalCommon.cpp @@ -0,0 +1 @@ +../CardinalCommon.cpp \ No newline at end of file diff --git a/src/CardinalRemote/DistrhoPluginInfo.h b/src/CardinalRemote/DistrhoPluginInfo.h new file mode 120000 index 00000000..8c390222 --- /dev/null +++ b/src/CardinalRemote/DistrhoPluginInfo.h @@ -0,0 +1 @@ +../Cardinal/DistrhoPluginInfo.h \ No newline at end of file diff --git a/src/CardinalRemote/Makefile b/src/CardinalRemote/Makefile new file mode 100644 index 00000000..8c0666f1 --- /dev/null +++ b/src/CardinalRemote/Makefile @@ -0,0 +1,292 @@ +#!/usr/bin/make -f +# Makefile for DISTRHO Plugins # +# ---------------------------- # +# Created by falkTX +# + +# -------------------------------------------------------------- +# Carla stuff + +CWD = ../../carla/source +STATIC_PLUGIN_TARGET = true +include $(CWD)/Makefile.deps.mk + +CARLA_BUILD_DIR = ../../carla/build +ifeq ($(DEBUG),true) +CARLA_BUILD_TYPE = Debug +else +CARLA_BUILD_TYPE = Release +endif + +CARLA_EXTRA_LIBS = $(CARLA_BUILD_DIR)/plugin/$(CARLA_BUILD_TYPE)/carla-host-plugin.cpp.o +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_engine_plugin.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_plugin.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/native-plugins.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/audio_decoder.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/sfzero.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/water.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/ysfx.a +CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/zita-resampler.a + +# -------------------------------------------------------------- +# Import base definitions + +USE_NANOVG_FBO = true +include ../../dpf/Makefile.base.mk + +# -------------------------------------------------------------- +# Build config + +PREFIX ?= /usr/local + +ifeq ($(BSD),true) +SYSDEPS ?= true +else +SYSDEPS ?= false +endif + +ifeq ($(SYSDEPS),true) +DEP_LIB_PATH = $(abspath ../../deps/sysroot/lib) +else +DEP_LIB_PATH = $(abspath ../Rack/dep/lib) +endif + +# -------------------------------------------------------------- +# Extra libraries to link against + +RACK_EXTRA_LIBS = ../../plugins/plugins.a +RACK_EXTRA_LIBS += ../rack.a +RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libquickjs.a + +ifneq ($(SYSDEPS),true) +RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libjansson.a +RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libsamplerate.a +RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libspeexdsp.a +ifeq ($(WINDOWS),true) +RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive_static.a +else +RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive.a +endif +RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libzstd.a +endif + +# -------------------------------------------------------------- + +EXTRA_DEPENDENCIES = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) +EXTRA_LIBS = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) $(STATIC_CARLA_PLUGIN_LIBS) + +ifeq ($(shell pkg-config --exists fftw3f && echo true),true) +EXTRA_DEPENDENCIES += ../../deps/aubio/libaubio.a +EXTRA_LIBS += ../../deps/aubio/libaubio.a +EXTRA_LIBS += $(shell $(PKG_CONFIG) --libs fftw3f) +endif + +# -------------------------------------------------------------- +# Extra flags for liblo + +BASE_FLAGS += -DHAVE_LIBLO +BASE_FLAGS += $(LIBLO_FLAGS) +LINK_FLAGS += $(LIBLO_LIBS) + +# -------------------------------------------------------------- +# Extra flags for VCV stuff + +ifeq ($(MACOS),true) +BASE_FLAGS += -DARCH_MAC +else ifeq ($(WINDOWS),true) +BASE_FLAGS += -DARCH_WIN +else +BASE_FLAGS += -DARCH_LIN +endif + +BASE_FLAGS += -DPRIVATE= +BASE_FLAGS += -I.. +BASE_FLAGS += -I../../dpf/dgl/src/nanovg +BASE_FLAGS += -I../../include +BASE_FLAGS += -I../../include/neon-compat +BASE_FLAGS += -I../Rack/include +ifeq ($(SYSDEPS),true) +BASE_FLAGS += -DCARDINAL_SYSDEPS +BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp) +else +BASE_FLAGS += -DZSTDLIB_VISIBILITY= +BASE_FLAGS += -I../Rack/dep/include +endif +BASE_FLAGS += -I../Rack/dep/glfw/include +BASE_FLAGS += -I../Rack/dep/nanosvg/src +BASE_FLAGS += -I../Rack/dep/oui-blendish + +ifeq ($(WASM),true) +BASE_FLAGS += -DNANOVG_GLES2=1 +BASE_FLAGS += -msse -msse2 -msse3 -msimd128 +else ifneq ($(HAIKU),true) +BASE_FLAGS += -pthread +endif + +ifeq ($(WINDOWS),true) +BASE_FLAGS += -D_USE_MATH_DEFINES +BASE_FLAGS += -DWIN32_LEAN_AND_MEAN +BASE_FLAGS += -I../../include/mingw-compat +BASE_FLAGS += -I../../include/mingw-std-threads +endif + +BUILD_C_FLAGS += -std=gnu11 +BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing +BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing + +ifneq ($(MACOS),true) +BUILD_CXX_FLAGS += -faligned-new -Wno-abi +endif + +# Rack code is not tested for this flag, unset it +BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS + +# -------------------------------------------------------------- +# FIXME lots of warnings from VCV side + +BASE_FLAGS += -Wno-unused-parameter +BASE_FLAGS += -Wno-unused-variable + +# -------------------------------------------------------------- +# extra linker flags + +ifeq ($(HAIKU),true) +LINK_FLAGS += -lpthread +else +LINK_FLAGS += -pthread +endif + +ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS),true) +ifneq ($(STATIC_BUILD),true) +LINK_FLAGS += -ldl +endif +endif + +ifeq ($(BSD),true) +ifeq ($(DEBUG),true) +LINK_FLAGS += -lexecinfo +endif +endif + +ifeq ($(MACOS),true) +LINK_FLAGS += -framework IOKit +else ifeq ($(WINDOWS),true) +# needed by VCVRack +EXTRA_LIBS += -ldbghelp -lshlwapi -Wl,--stack,0x100000 +# needed by JW-Modules +EXTRA_LIBS += -lws2_32 -lwinmm +endif + +ifeq ($(SYSDEPS),true) +EXTRA_LIBS += $(shell pkg-config --libs jansson libarchive samplerate speexdsp) +endif + +ifeq ($(WITH_LTO),true) +# false positive +LINK_FLAGS += -Wno-alloc-size-larger-than +ifneq ($(SYSDEPS),true) +# triggered by jansson +LINK_FLAGS += -Wno-stringop-overflow +endif +endif + +# -------------------------------------------------------------- +# fallback path to resource files + +ifneq ($(CIBUILD),true) +ifneq ($(SYSDEPS),true) + +ifeq ($(EXE_WRAPPER),wine) +SOURCE_DIR = Z:$(subst /,\\,$(abspath $(CURDIR)/..)) +else +SOURCE_DIR = $(abspath $(CURDIR)/..) +endif + +BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"' + +endif +endif + +# -------------------------------------------------------------- +# install path prefix for resource files + +BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' + +# -------------------------------------------------------------- +# Files to build + +FILES = main.cpp +FILES += RemoteUI.cpp +FILES += CardinalCommon.cpp +FILES += common.cpp +FILES += glfw.cpp +FILES += Window.cpp + +ifeq ($(WINDOWS),true) +FILES += distrho.rc +endif + +# -------------------------------------------------------------- +# Build setup + +TARGET_DIR = ../../bin +BUILD_DIR = ../../build/CardinalRemote +DPF_PATH = ../../dpf + +DGL_FLAGS += -DDGL_OPENGL -DHAVE_DGL +DGL_FLAGS += $(OPENGL_FLAGS) +DGL_LIBS += $(OPENGL_LIBS) +DGL_LIBS += $(DGL_SYSTEM_LIBS) -lm +DGL_LIB = $(DPF_PATH)/build/libdgl-opengl.a + +BUILD_C_FLAGS += -I. +BUILD_CXX_FLAGS += -I. -I$(DPF_PATH)/distrho -I$(DPF_PATH)/dgl + +OBJS = $(FILES:%=$(BUILD_DIR)/%.o) + +all: $(TARGET_DIR)/CardinalRemote$(APP_EXT) + +# --------------------------------------------------------------------------------------------------------------------- + +$(TARGET_DIR)/CardinalRemote$(APP_EXT): $(OBJS) $(DGL_LIB) + -@mkdir -p $(shell dirname $@) + @echo "Linking CardinalRemote" + $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(DGL_LIBS) $(JACK_LIBS) -o $@ + +# --------------------------------------------------------------------------------------------------------------------- +# Common + +$(BUILD_DIR)/%.S.o: %.S + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + @$(CC) $< $(BUILD_C_FLAGS) -c -o $@ + +$(BUILD_DIR)/%.c.o: %.c + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CC) $< $(BUILD_C_FLAGS) -c -o $@ + +$(BUILD_DIR)/%.cc.o: %.cc + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ + +$(BUILD_DIR)/%.cpp.o: %.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ + +# -------------------------------------------------------------- +# Extra rules for Windows icon + +ifeq ($(WINDOWS),true) +JACK_LIBS += -Wl,-subsystem,windows + +$(BUILD_DIR)/distrho.rc.o: ../../utils/distrho.rc ../../utils/distrho.ico + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling distrho.rc" + $(SILENT)$(WINDRES) $< -O coff -o $@ +endif diff --git a/src/CardinalRemote/RemoteUI.cpp b/src/CardinalRemote/RemoteUI.cpp new file mode 100644 index 00000000..1295f13c --- /dev/null +++ b/src/CardinalRemote/RemoteUI.cpp @@ -0,0 +1,91 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "RemoteUI.hpp" + +// #include +// #include +#include +#include +#include + +#include +#include + +CardinalRemoteUI::CardinalRemoteUI(Window& window, const std::string& templatePath) + : NanoTopLevelWidget(window), + context(nullptr) +{ + // create unique temporary path for this instance + try { + char uidBuf[24]; + const std::string tmp = rack::system::getTempDirectory(); + + for (int i=1;; ++i) + { + std::snprintf(uidBuf, sizeof(uidBuf), "CardinalRemote.%04d", i); + const std::string trypath = rack::system::join(tmp, uidBuf); + + if (! rack::system::exists(trypath)) + { + if (rack::system::createDirectories(trypath)) + autosavePath = trypath; + break; + } + } + } DISTRHO_SAFE_EXCEPTION("create unique temporary path"); + + rack::contextSet(&context); + + context.bufferSize = 512; + rack::settings::sampleRate = context.sampleRate = 48000; + + context.engine = new rack::engine::Engine; + context.engine->setSampleRate(context.sampleRate); + + context.history = new rack::history::State; + context.patch = new rack::patch::Manager; + context.patch->autosavePath = autosavePath; + context.patch->templatePath = templatePath; + + context.event = new rack::widget::EventState; + context.scene = new rack::app::Scene; + context.event->rootWidget = context.scene; + context.window = new rack::window::Window; + + context.patch->loadTemplate(); + context.scene->rackScroll->reset(); + + context.nativeWindowId = getWindow().getNativeWindowHandle(); +} + +CardinalRemoteUI::~CardinalRemoteUI() +{ + rack::contextSet(&context); + + context.nativeWindowId = 0; + context.patch->clear(); + + if (! autosavePath.empty()) + rack::system::removeRecursively(autosavePath); +} + +void CardinalRemoteUI::onNanoDisplay() +{ + rack::contextSet(&context); + context.window->step(); +} diff --git a/src/CardinalRemote/RemoteUI.hpp b/src/CardinalRemote/RemoteUI.hpp new file mode 100644 index 00000000..1ed46965 --- /dev/null +++ b/src/CardinalRemote/RemoteUI.hpp @@ -0,0 +1,36 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#pragma once + +#include "NanoVG.hpp" +#include "PluginContext.hpp" + +class CardinalRemoteUI : public NanoTopLevelWidget +{ + CardinalPluginContext context; + std::string autosavePath; + +public: + explicit CardinalRemoteUI(Window& window, const std::string& templatePath); + ~CardinalRemoteUI() override; + +protected: + void onNanoDisplay() override; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CardinalRemoteUI) +}; diff --git a/src/CardinalRemote/Window.cpp b/src/CardinalRemote/Window.cpp new file mode 120000 index 00000000..759f2728 --- /dev/null +++ b/src/CardinalRemote/Window.cpp @@ -0,0 +1 @@ +../override/Window.cpp \ No newline at end of file diff --git a/src/CardinalRemote/common.cpp b/src/CardinalRemote/common.cpp new file mode 120000 index 00000000..915948e3 --- /dev/null +++ b/src/CardinalRemote/common.cpp @@ -0,0 +1 @@ +../override/common.cpp \ No newline at end of file diff --git a/src/CardinalRemote/glfw.cpp b/src/CardinalRemote/glfw.cpp new file mode 120000 index 00000000..8c6a6e44 --- /dev/null +++ b/src/CardinalRemote/glfw.cpp @@ -0,0 +1 @@ +../custom/glfw.cpp \ No newline at end of file diff --git a/src/CardinalRemote/main.cpp b/src/CardinalRemote/main.cpp new file mode 100644 index 00000000..4ac0be22 --- /dev/null +++ b/src/CardinalRemote/main.cpp @@ -0,0 +1,160 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "Application.hpp" +#include "Window.hpp" +#include "RemoteUI.hpp" + +#include +#include +#include +#include + +#include +#include + +namespace rack { +namespace plugin { + void initStaticPlugins(); + void destroyStaticPlugins(); +} +} + +int main(const int argc, const char* argv[]) +{ + using namespace rack; + + settings::allowCursorLock = false; + settings::autoCheckUpdates = false; + settings::autosaveInterval = 0; + settings::devMode = true; + settings::discordUpdateActivity = false; + settings::isPlugin = true; + settings::skipLoadOnLaunch = true; + settings::showTipsOnLaunch = false; + settings::windowPos = math::Vec(0, 0); + + // copied from https://community.vcvrack.com/t/16-colour-cable-palette/15951 + settings::cableColors = { + color::fromHexString("#ff5252"), + color::fromHexString("#ff9352"), + color::fromHexString("#ffd452"), + color::fromHexString("#e8ff52"), + color::fromHexString("#a8ff52"), + color::fromHexString("#67ff52"), + color::fromHexString("#52ff7d"), + color::fromHexString("#52ffbe"), + color::fromHexString("#52ffff"), + color::fromHexString("#52beff"), + color::fromHexString("#527dff"), + color::fromHexString("#6752ff"), + color::fromHexString("#a852ff"), + color::fromHexString("#e952ff"), + color::fromHexString("#ff52d4"), + color::fromHexString("#ff5293"), + }; + + system::init(); + logger::init(); + random::init(); + ui::init(); + + std::string templatePath; + #ifdef CARDINAL_PLUGIN_SOURCE_DIR + // Make system dir point to source code location as fallback + asset::systemDir = CARDINAL_PLUGIN_SOURCE_DIR DISTRHO_OS_SEP_STR "Rack"; + + if (system::exists(system::join(asset::systemDir, "res"))) + { + templatePath = CARDINAL_PLUGIN_SOURCE_DIR DISTRHO_OS_SEP_STR "template.vcv"; + } + // If source code dir does not exist use install target prefix as system dir + else + #endif + { + #if defined(ARCH_MAC) + asset::systemDir = "/Library/Application Support/Cardinal"; + #elif defined(ARCH_WIN) + const std::string commonprogfiles = getSpecialPath(kSpecialPathCommonProgramFiles); + if (! commonprogfiles.empty()) + asset::systemDir = system::join(commonprogfiles, "Cardinal"); + #else + asset::systemDir = CARDINAL_PLUGIN_PREFIX "/share/cardinal"; + #endif + + if (! asset::systemDir.empty()) + { + asset::bundlePath = system::join(asset::systemDir, "PluginManifests"); + templatePath = system::join(asset::systemDir, "template.vcv"); + } + } + + asset::userDir = asset::systemDir; + + // Log environment + INFO("%s %s v%s", APP_NAME.c_str(), APP_EDITION.c_str(), APP_VERSION.c_str()); + INFO("%s", system::getOperatingSystemInfo().c_str()); +// INFO("Binary filename: %s", getBinaryFilename()); + INFO("System directory: %s", asset::systemDir.c_str()); + INFO("User directory: %s", asset::userDir.c_str()); + INFO("Template patch: %s", templatePath.c_str()); + + // Report to user if something is wrong with the installation + if (asset::systemDir.empty()) + { + d_stderr2("Failed to locate Cardinal plugin bundle.\n" + "Install Cardinal with its bundle folder intact and try again."); + } + else if (! system::exists(asset::systemDir)) + { + d_stderr2("System directory \"%s\" does not exist.\n" + "Make sure Cardinal was downloaded and installed correctly.", asset::systemDir.c_str()); + } + + INFO("Initializing plugins"); + plugin::initStaticPlugins(); + + INFO("Initializing plugin browser DB"); + app::browserInit(); + + Application app; + Window win(app); + win.setTitle("CardinalRemote"); + ScopedPointer remoteUI; + + { + remoteUI = new CardinalRemoteUI(win, templatePath); + } + + app.exec(); + + INFO("Clearing asset paths"); + asset::bundlePath.clear(); + asset::systemDir.clear(); + asset::userDir.clear(); + + INFO("Destroying plugins"); + plugin::destroyStaticPlugins(); + + INFO("Destroying settings"); + settings::destroy(); + + INFO("Destroying logger"); + logger::destroy(); + + return 0; +} From 8d1138f926720444a47dab201a2d1e824af9548e Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 19 Jun 2022 11:47:49 +0100 Subject: [PATCH 102/283] Make Host Parameters smoothing optional Signed-off-by: falkTX --- plugins/Cardinal/src/HostParameters.cpp | 38 ++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/plugins/Cardinal/src/HostParameters.cpp b/plugins/Cardinal/src/HostParameters.cpp index 5ae63cce..a2e57ae6 100644 --- a/plugins/Cardinal/src/HostParameters.cpp +++ b/plugins/Cardinal/src/HostParameters.cpp @@ -38,6 +38,7 @@ struct HostParameters : TerminalModule { rack::dsp::SlewLimiter parameters[kModuleParameters]; bool parametersConnected[kModuleParameters] = {}; bool bypassed = false; + bool smooth = true; uint32_t lastProcessCounter = 0; HostParameters() @@ -76,7 +77,8 @@ struct HostParameters : TerminalModule { for (uint32_t i=0; iparameters[i])); + outputs[i].setVoltage(smooth ? parameters[i].process(args.sampleTime, pcontext->parameters[i]) + : pcontext->parameters[i]); } } @@ -93,6 +95,25 @@ struct HostParameters : TerminalModule { parameters[i].setRiseFall(fall, fall); } } + + // ---------------------------------------------------------------------------------------------------------------- + // save and load json stuff + + json_t* dataToJson() override + { + json_t* const rootJ = json_object(); + DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr); + + json_object_set_new(rootJ, "smooth", json_boolean(smooth)); + + return rootJ; + } + + void dataFromJson(json_t* const rootJ) override + { + if (json_t* const smoothJ = json_object_get(rootJ, "smooth")) + smooth = json_boolean_value(smoothJ); + } }; // -------------------------------------------------------------------------------------------------------------------- @@ -117,9 +138,12 @@ struct HostParametersWidget : ModuleWidgetWith9HP { static constexpr const float paddingH = 30.0f; static constexpr const float paddingV = 49.0f; - HostParametersWidget(HostParameters* const module) + HostParameters* const module; + + HostParametersWidget(HostParameters* const m) + : module(m) { - setModule(module); + setModule(m); setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostParameters.svg"))); createAndAddScrews(); @@ -127,7 +151,7 @@ struct HostParametersWidget : ModuleWidgetWith9HP { { const float x = startX + int(i / 6) * paddingH; const float y = startY + int(i % 6) * paddingV; - addOutput(createOutput(Vec(x, y), module, i)); + addOutput(createOutput(Vec(x, y), m, i)); } } @@ -160,6 +184,12 @@ struct HostParametersWidget : ModuleWidgetWith9HP { ModuleWidgetWith9HP::draw(args); } + + void appendContextMenu(Menu* const menu) override + { + menu->addChild(new MenuSeparator); + menu->addChild(createBoolPtrMenuItem("Smooth", "", &module->smooth)); + } }; #else struct HostParametersWidget : ModuleWidget { From 1575f605a97a1be5f60a4a943382753ae8ba66c6 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 19 Jun 2022 13:21:52 +0100 Subject: [PATCH 103/283] Rework how host parameters map does its thing, now using a menu Signed-off-by: falkTX --- plugins/Cardinal/src/HostParameters-Map.cpp | 133 ++++++++++++++------ 1 file changed, 92 insertions(+), 41 deletions(-) diff --git a/plugins/Cardinal/src/HostParameters-Map.cpp b/plugins/Cardinal/src/HostParameters-Map.cpp index fd1763db..edfa93c7 100644 --- a/plugins/Cardinal/src/HostParameters-Map.cpp +++ b/plugins/Cardinal/src/HostParameters-Map.cpp @@ -33,6 +33,13 @@ static constexpr const uint8_t MAX_MAPPED_PARAMS = 64; +struct HostParameterMapping { + uint8_t hostParamId = UINT8_MAX; + bool inverted = false; + bool smooth = true; + ParamHandle paramHandle; +}; + struct HostParametersMap : TerminalModule { enum ParamIds { NUM_PARAMS @@ -47,14 +54,7 @@ struct HostParametersMap : TerminalModule { NUM_LIGHTS }; - struct Mapping { - uint8_t hostParamId = UINT8_MAX; - bool inverted = false; - bool smooth = false; - ParamHandle paramHandle; - }; - - Mapping mappings[MAX_MAPPED_PARAMS]; + HostParameterMapping mappings[MAX_MAPPED_PARAMS]; dsp::ExponentialFilter valueFilters[MAX_MAPPED_PARAMS]; bool filterInitialized[MAX_MAPPED_PARAMS] = {}; bool valueReached[MAX_MAPPED_PARAMS] = {}; @@ -297,20 +297,20 @@ struct HostParametersMap : TerminalModule { updateMapLen(); } - void learnParam(const uint8_t hostParamId, const bool inverted, const bool smooth, - const int64_t moduleId, const int paramId) + void learnParam(const uint8_t id, const int64_t moduleId, const int paramId) { - const uint8_t id = learningId; - learningId = UINT8_MAX; + DISTRHO_SAFE_ASSERT_UINT2_RETURN(id == learningId, id, learningId,); DISTRHO_SAFE_ASSERT_RETURN(id < MAX_MAPPED_PARAMS,); + // reset for next time + learningId = UINT8_MAX; + + // reset smoothing filters filterInitialized[id] = false; valueFilters[id].reset(); valueReached[id] = true; - mappings[id].inverted = inverted; - mappings[id].smooth = smooth; - mappings[id].hostParamId = hostParamId; + // report mapping change to engine if needed if (mappings[id].paramHandle.moduleId != moduleId || mappings[id].paramHandle.paramId != paramId) pcontext->engine->updateParamHandle(&mappings[id].paramHandle, moduleId, paramId, true); @@ -338,17 +338,66 @@ struct HostParametersMap : TerminalModule { // -------------------------------------------------------------------------------------------------------------------- #ifndef HEADLESS +struct ParameterIndexQuantity : Quantity { + HostParameterMapping& mapping; + float v; + + ParameterIndexQuantity(HostParameterMapping& m) + : mapping(m), + v(mapping.hostParamId) {} + + float getMinValue() override { + return 0; + } + float getMaxValue() override { + return kModuleParameters - 1; + } + float getDefaultValue() override { + return 0; + } + float getValue() override { + return v; + } + void setValue(float value) override { + v = math::clamp(value, getMinValue(), getMaxValue()); + mapping.hostParamId = math::clamp(static_cast(v + 0.5f), 0, kModuleParameters - 1); + } + float getDisplayValue() override { + return mapping.hostParamId + 1; + } + void setDisplayValue(float displayValue) override { + setValue(displayValue - 1); + } + std::string getLabel() override { + return "Host Parameter"; + } +}; + +struct ParameterIndexSlider : ui::Slider { + ParameterIndexSlider(HostParameterMapping& m) { + quantity = new ParameterIndexQuantity(m); + } + ~ParameterIndexSlider() { + delete quantity; + } +}; + +static HostParameterMapping& getDummyHostParameterMapping() +{ + static HostParameterMapping mapping; + return mapping; +} + struct HostParametersMapChoice : CardinalLedDisplayChoice { HostParametersMap* const module; const uint8_t id; - uint8_t hostParamId = UINT8_MAX; - bool inverted = false; - bool smooth = true; + HostParameterMapping& mapping; HostParametersMapChoice(HostParametersMap* const m, const uint8_t i) : CardinalLedDisplayChoice(), module(m), - id(i) + id(i), + mapping(m != nullptr ? m->mappings[i] : getDummyHostParameterMapping()) { alignTextCenter = false; @@ -388,11 +437,11 @@ struct HostParametersMapChoice : CardinalLedDisplayChoice { if (ParamWidget* const touchedParam = APP->scene->rack->touchedParam) { APP->scene->rack->touchedParam = nullptr; - DISTRHO_SAFE_ASSERT_RETURN(hostParamId < kModuleParameters,); + DISTRHO_SAFE_ASSERT_RETURN(mapping.hostParamId < kModuleParameters,); const int64_t moduleId = touchedParam->module->id; const int paramId = touchedParam->paramId; - module->learnParam(hostParamId, inverted, smooth, moduleId, paramId); + module->learnParam(id, moduleId, paramId); } } else @@ -444,25 +493,7 @@ struct HostParametersMapChoice : CardinalLedDisplayChoice { case GLFW_MOUSE_BUTTON_LEFT: APP->scene->rack->touchedParam = nullptr; e.consume(this); - // reset before dialog - module->learningId = hostParamId = UINT8_MAX; - inverted = smooth = false; - HostParametersMapChoice* const self = this; - // open dialog - async_dialog_text_input("Plugin-exposed parameter index to map to", "1", [self](char* newText){ - if (self == nullptr || newText == nullptr) - return; - // FIXME use a proper dialog - const int hostParamIdTry = std::atoi(newText); - if (hostParamIdTry > 0 && hostParamIdTry < (int)kModuleParameters) - { - self->module->learningId = self->id; - self->hostParamId = static_cast(hostParamIdTry - 1); - self->inverted = false; - self->smooth = false; - } - std::free(newText); - }); + createMappingMenu(); break; } } @@ -472,7 +503,7 @@ struct HostParametersMapChoice : CardinalLedDisplayChoice { DISTRHO_SAFE_ASSERT_RETURN(module != nullptr, "error"); DISTRHO_SAFE_ASSERT_RETURN(id < module->numMappedParmeters, "error"); - ParamHandle paramHandle(module->mappings[id].paramHandle); + const ParamHandle& paramHandle(module->mappings[id].paramHandle); Module* const paramModule = paramHandle.module; DISTRHO_CUSTOM_SAFE_ASSERT_ONCE_RETURN("paramModule is null", paramModule != nullptr, "error"); @@ -489,6 +520,26 @@ struct HostParametersMapChoice : CardinalLedDisplayChoice { s += ")"; return s; } + + void createMappingMenu() + { + ui::Menu* const menu = createMenu(); + menu->cornerFlags = BND_CORNER_TOP; + menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); + + if (mapping.hostParamId == UINT8_MAX) + { + mapping.hostParamId = 0; + module->learningId = id; + } + + ParameterIndexSlider* const paramIndexSlider = new ParameterIndexSlider(mapping); + paramIndexSlider->box.size.x = RACK_GRID_WIDTH * 11; + menu->addChild(paramIndexSlider); + + menu->addChild(createBoolPtrMenuItem("Inverted", "", &mapping.inverted)); + menu->addChild(createBoolPtrMenuItem("Smooth", "", &mapping.smooth)); + } }; struct HostParametersMapDisplay : Widget { From 9cd35290114c9c57dc3e971190de6118aabc333b Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 20 Jun 2022 11:12:28 +0100 Subject: [PATCH 104/283] Update Carla and PawPaw for build fixes Signed-off-by: falkTX --- carla | 2 +- deps/PawPaw | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/carla b/carla index e78faac2..04d53634 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit e78faac205539ea0e240a096ca7da7cfdfd3211d +Subproject commit 04d53634c8b70f7cc7cbb64f3dbe943feeaad6cf diff --git a/deps/PawPaw b/deps/PawPaw index df80ab80..93ea5f8e 160000 --- a/deps/PawPaw +++ b/deps/PawPaw @@ -1 +1 @@ -Subproject commit df80ab802d7e758eeead02e3ad7d80e4ff332b14 +Subproject commit 93ea5f8e9be365859c0a717ed1dd9fc005574c7b From da61999de5cd23cc5480b7f0f604981131ddfaa4 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 20 Jun 2022 11:33:22 +0100 Subject: [PATCH 105/283] Implement glfwCreateStandardCursor Signed-off-by: falkTX --- src/custom/RemoteNanoVG.cpp | 1 + src/custom/glfw.cpp | 46 ++++++++++++++++++++++++++++++++++++- src/override/Scene.cpp | 4 ++-- 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/custom/RemoteNanoVG.cpp b/src/custom/RemoteNanoVG.cpp index 70910977..a299cf05 100644 --- a/src/custom/RemoteNanoVG.cpp +++ b/src/custom/RemoteNanoVG.cpp @@ -54,6 +54,7 @@ typedef struct GLFWwindow GLFWwindow; GLFWAPI const char* glfwGetClipboardString(GLFWwindow*) { return nullptr; } GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char*) {} +GLFWAPI GLFWcursor* glfwCreateStandardCursor(int) { return nullptr; } GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor*) {} GLFWAPI const char* glfwGetKeyName(int, int) { return nullptr; } GLFWAPI int glfwGetKeyScancode(int) { return 0; } diff --git a/src/custom/glfw.cpp b/src/custom/glfw.cpp index 9e422969..250586e9 100644 --- a/src/custom/glfw.cpp +++ b/src/custom/glfw.cpp @@ -20,6 +20,10 @@ #include +typedef struct GLFWcursor { + DGL_NAMESPACE::MouseCursor cursorId; +} GLFWcursor; + GLFWAPI int glfwGetKeyScancode(int) { return 0; } GLFWAPI const char* glfwGetClipboardString(GLFWwindow*) @@ -43,13 +47,53 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char* const text) context->ui->setClipboard(nullptr, text, std::strlen(text)+1); } +GLFWAPI GLFWcursor* glfwCreateStandardCursor(const int shape) +{ + static GLFWcursor cursors[] = { + { kMouseCursorArrow }, // GLFW_ARROW_CURSOR + { kMouseCursorCaret }, // GLFW_IBEAM_CURSOR + { kMouseCursorCrosshair }, // GLFW_CROSSHAIR_CURSOR + { kMouseCursorHand }, // GLFW_POINTING_HAND_CURSOR + { kMouseCursorNotAllowed }, // GLFW_NOT_ALLOWED_CURSOR + { kMouseCursorLeftRight }, // GLFW_RESIZE_EW_CURSOR + { kMouseCursorUpDown }, // GLFW_RESIZE_NS_CURSOR + { kMouseCursorDiagonal }, // GLFW_RESIZE_NWSE_CURSOR + { kMouseCursorAntiDiagonal }, // GLFW_RESIZE_NESW_CURSOR + // NOTE GLFW_RESIZE_ALL_CURSOR is unsupported in pugl + }; + + switch (shape) + { + case GLFW_ARROW_CURSOR: + return &cursors[kMouseCursorArrow]; + case GLFW_IBEAM_CURSOR: + return &cursors[kMouseCursorCaret]; + case GLFW_CROSSHAIR_CURSOR: + return &cursors[kMouseCursorCrosshair]; + case GLFW_POINTING_HAND_CURSOR: + return &cursors[kMouseCursorHand]; + case GLFW_NOT_ALLOWED_CURSOR: + return &cursors[kMouseCursorNotAllowed]; + case GLFW_RESIZE_EW_CURSOR: + return &cursors[kMouseCursorLeftRight]; + case GLFW_RESIZE_NS_CURSOR: + return &cursors[kMouseCursorUpDown]; + case GLFW_RESIZE_NWSE_CURSOR: + return &cursors[kMouseCursorDiagonal]; + case GLFW_RESIZE_NESW_CURSOR: + return &cursors[kMouseCursorAntiDiagonal]; + default: + return nullptr; + } +} + GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor* const cursor) { CardinalPluginContext* const context = static_cast(APP); DISTRHO_SAFE_ASSERT_RETURN(context != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr,); - context->ui->setCursor(cursor != nullptr ? kMouseCursorDiagonal : kMouseCursorArrow); + context->ui->setCursor(cursor != nullptr ? cursor->cursorId : kMouseCursorArrow); } GLFWAPI double glfwGetTime(void) diff --git a/src/override/Scene.cpp b/src/override/Scene.cpp index 03c4354e..b69bc80d 100644 --- a/src/override/Scene.cpp +++ b/src/override/Scene.cpp @@ -108,11 +108,11 @@ struct ResizeHandle : widget::OpaqueWidget { } void onEnter(const EnterEvent& e) override { - glfwSetCursor(nullptr, (GLFWcursor*)0x1); + glfwSetCursor(APP->window->win, glfwCreateStandardCursor(GLFW_RESIZE_NWSE_CURSOR)); } void onLeave(const LeaveEvent& e) override { - glfwSetCursor(nullptr, nullptr); + glfwSetCursor(APP->window->win, nullptr); } void onDragStart(const DragStartEvent&) override { From 7860e6e539c5e77261c8a03bbccc6fe3c13dd0ad Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 20 Jun 2022 11:34:07 +0100 Subject: [PATCH 106/283] Fix resize recursion when triggered via host Signed-off-by: falkTX --- src/CardinalUI.cpp | 3 ++- src/override/Window.cpp | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index 0c453e99..f278746f 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -46,6 +46,7 @@ namespace app { namespace window { void WindowSetPluginUI(Window* window, DISTRHO_NAMESPACE::UI* ui); void WindowSetMods(Window* window, int mods); + void WindowSetInternalSize(rack::window::Window* window, math::Vec size); } } @@ -610,7 +611,7 @@ class CardinalUI : public CardinalBaseUI, UI::onResize(ev); if (context->window != nullptr) - context->window->setSize(rack::math::Vec(ev.size.getWidth(), ev.size.getHeight())); + WindowSetInternalSize(context->window, rack::math::Vec(ev.size.getWidth(), ev.size.getHeight())); const double scaleFactor = getScaleFactor(); char sizeString[64]; diff --git a/src/override/Window.cpp b/src/override/Window.cpp index ff8f969d..a49efdf3 100644 --- a/src/override/Window.cpp +++ b/src/override/Window.cpp @@ -355,6 +355,11 @@ void Window::setSize(math::Vec size) { ui->setSize(internal->size.x, internal->size.y); } +void WindowSetInternalSize(rack::window::Window* const window, math::Vec size) { + size = size.max(WINDOW_SIZE_MIN); + window->internal->size = size; +} + void Window::run() { internal->frame = 0; From 7b0504c16bafd79a7db58daa6e8430cd1824b7f9 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 20 Jun 2022 11:34:27 +0100 Subject: [PATCH 107/283] Update voxglitch Signed-off-by: falkTX --- plugins/plugins.cpp | 1 + plugins/voxglitch | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index b27014f7..32e94a22 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -2611,6 +2611,7 @@ static void initStatic__Voxglitch() p->addModel(modelSamplerX8); p->addModel(modelSatanonaut); p->addModel(modelGrooveBox); + p->addModel(modelGrooveBoxExpander); p->addModel(modelWavBank); p->addModel(modelWavBankMC); p->addModel(modelXY); diff --git a/plugins/voxglitch b/plugins/voxglitch index 10a0716e..49b6b3cc 160000 --- a/plugins/voxglitch +++ b/plugins/voxglitch @@ -1 +1 @@ -Subproject commit 10a0716ec105669d561121affdde63591671429b +Subproject commit 49b6b3cc688fd6a5a6be2f73c4841a543234e21c From 2b1ee87a132b6aba68ddd542a4a3510ab7614e53 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 20 Jun 2022 13:33:39 +0100 Subject: [PATCH 108/283] Fix new conflicts when updated voxglitch Signed-off-by: falkTX --- plugins/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/Makefile b/plugins/Makefile index a18bb6b3..b87b8f86 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -537,7 +537,7 @@ PLUGIN_FILES += $(filter-out Extratone/src/plugin.cpp,$(wildcard Extratone/src/* PLUGIN_FILES += $(filter-out FehlerFabrik/src/plugin.cpp,$(wildcard FehlerFabrik/src/*.cpp)) # modules/types which are present in other plugins -FEHLERFABRIK_CUSTOM = Operator Sequencer SlewLimiter +FEHLERFABRIK_CUSTOM = Operator Sequencer SlewLimiter SimpleDelay # -------------------------------------------------------------- # forsitan modulare @@ -891,15 +891,15 @@ VALLEYAUDIO_CUSTOM_PER_FILE = TempoKnob PLUGIN_FILES += $(filter-out voxglitch/src/plugin.cpp,$(wildcard voxglitch/src/*.cpp)) +# modules/types which are present in other plugins +VOXGLITCH_CUSTOM = $(DRWAV) ADSR AudioFile Looper Readout +VOXGLITCH_CUSTOM_PER_FILE = AudioBuffer GateSequencer Grain SamplePlayer Sequencer SequencerDisplay VoltageSequencer + # -------------------------------------------------------------- # WhatTheRack PLUGIN_FILES += $(filter-out WhatTheRack/src/WhatTheRack.cpp,$(wildcard WhatTheRack/src/*.cpp)) -# modules/types which are present in other plugins -VOXGLITCH_CUSTOM = $(DRWAV) AudioFile Looper Readout -VOXGLITCH_CUSTOM_PER_FILE = AudioBuffer GateSequencer Grain SamplePlayer Sequencer SequencerDisplay VoltageSequencer - # -------------------------------------------------------------- # ZetaCarinaeModules From 480b1f1ac9fa50bbe8f6579bddbdc3d8f3ef34ab Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 20 Jun 2022 13:39:09 +0100 Subject: [PATCH 109/283] Fixes for VST3 UI resizing Signed-off-by: falkTX --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index 0c04a07e..314c814c 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 0c04a07e562f502324bb417fb56dbaab7911b010 +Subproject commit 314c814ce16fc44b420c546c184755c57b61b52f From efa1eb8a6aa8ec4b0c4ed9f235f024b5945227e6 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 20 Jun 2022 23:48:42 +0100 Subject: [PATCH 110/283] Implement VST3 MIDI CC input Signed-off-by: falkTX --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index 314c814c..93abcc86 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 314c814ce16fc44b420c546c184755c57b61b52f +Subproject commit 93abcc869bb9e839d4c49db3585155af177d36c6 From 68855c10d267afde0641eb772838a098d7c8acf8 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 23 Jun 2022 19:18:52 +0100 Subject: [PATCH 111/283] Fix ARM build Signed-off-by: falkTX --- carla | 2 +- dpf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/carla b/carla index 04d53634..9b5a23c5 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 04d53634c8b70f7cc7cbb64f3dbe943feeaad6cf +Subproject commit 9b5a23c56a67f8cddcd8734eca5f427fbc536e98 diff --git a/dpf b/dpf index 93abcc86..e3635524 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 93abcc869bb9e839d4c49db3585155af177d36c6 +Subproject commit e36355245414223d499421a87d88d8aef0b1078b From ec2222be8514140d8a935022d8e1bb00e17df340 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 25 Jun 2022 23:37:49 +0100 Subject: [PATCH 112/283] Tolerate max 2 frames of deviation for frame position skips Signed-off-by: falkTX --- dpf | 2 +- src/CardinalPlugin.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/dpf b/dpf index e3635524..f0c16920 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit e36355245414223d499421a87d88d8aef0b1078b +Subproject commit f0c16920f5a62300f5197b6a339dbc5fec12a882 diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 0511cb74..5cb06994 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -81,6 +81,13 @@ namespace window { START_NAMESPACE_DISTRHO +template +static inline +bool d_isDiffHigherThanLimit(const T& v1, const T& v2, const T& limit) +{ + return v1 != v2 ? (v1 > v2 ? v1 - v2 : v2 - v1) > limit : false; +} + // ----------------------------------------------------------------------------------------------------------- struct Initializer @@ -1117,7 +1124,7 @@ class CardinalPlugin : public CardinalBasePlugin { const TimePosition& timePos(getTimePosition()); - const bool reset = timePos.playing && (timePos.frame == 0 || fNextExpectedFrame != timePos.frame); + const bool reset = timePos.playing && (timePos.frame == 0 || d_isDiffHigherThanLimit(fNextExpectedFrame, timePos.frame, (uint64_t)2)); context->playing = timePos.playing; context->bbtValid = timePos.bbt.valid; From 929a395d050262ecae6a642ef213f2f5db408999 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 25 Jun 2022 23:46:34 +0100 Subject: [PATCH 113/283] Bump version to 22.06 Signed-off-by: falkTX --- Makefile | 2 +- src/CardinalCommon.cpp | 2 +- src/CardinalPlugin.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index e89029e1..03386518 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ # also set in: # src/CardinalCommon.cpp `CARDINAL_VERSION` # src/CardinalPlugin.cpp `getVersion` -VERSION = 22.05 +VERSION = 22.06 # -------------------------------------------------------------- # Import base definitions diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index 5e75473f..b0682e74 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -52,7 +52,7 @@ # include #endif -const std::string CARDINAL_VERSION = "22.05"; +const std::string CARDINAL_VERSION = "22.06"; namespace rack { diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 5cb06994..2bed292b 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -621,7 +621,7 @@ class CardinalPlugin : public CardinalBasePlugin uint32_t getVersion() const override { - return d_version(0, 22, 5); + return d_version(0, 22, 6); } int64_t getUniqueId() const override From 7e699c29061c6a042dbc4c9e54b6f9f297721783 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 25 Jun 2022 23:57:17 +0100 Subject: [PATCH 114/283] Add quick doc entry for sassy scope Signed-off-by: falkTX --- docs/CARDINAL-MODULES.md | 9 +++++++++ docs/Module_SassyScope.png | Bin 0 -> 53992 bytes 2 files changed, 9 insertions(+) create mode 100644 docs/Module_SassyScope.png diff --git a/docs/CARDINAL-MODULES.md b/docs/CARDINAL-MODULES.md index 497bae80..ad7b6a17 100644 --- a/docs/CARDINAL-MODULES.md +++ b/docs/CARDINAL-MODULES.md @@ -163,6 +163,15 @@ If you find other content we can use, under clear license terms, maybe it could Sometimes we just need to have fun. :) +### Sassy Scope + +![screenshot](Module_SassyScope.png) + +The virtual oscilloscope from the [Sassy Spreadsheet](https://github.com/jarikomppa/sassy) project. +Features time and frequency analysis, input-based trigger sync and allows to pause the analysis for careful inspection. + +Line colors follow the color of the cable connected to its respective input. + ### Expanders MIDI ![screenshot](Module_ExpandersMIDI.png) diff --git a/docs/Module_SassyScope.png b/docs/Module_SassyScope.png new file mode 100644 index 0000000000000000000000000000000000000000..b629c35ba749a9286436673b48a0723ab12326ee GIT binary patch literal 53992 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�P4skK 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 Date: Sun, 26 Jun 2022 10:01:02 +0100 Subject: [PATCH 115/283] Improve VST3 UI handling for special hosts like Live --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index f0c16920..144ec075 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit f0c16920f5a62300f5197b6a339dbc5fec12a882 +Subproject commit 144ec075cc4feed77bc8ca08d0d16901f04a3806 From 971f187377e881270d416cc6f1338b6992dd1783 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 26 Jun 2022 18:30:31 +0100 Subject: [PATCH 116/283] Write some small documentation for Host Parameters Map Signed-off-by: falkTX --- docs/CARDINAL-MODULES.md | 25 ++++++++++++++++++++++++- docs/Module_HostParametersMap.png | Bin 0 -> 50642 bytes 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 docs/Module_HostParametersMap.png diff --git a/docs/CARDINAL-MODULES.md b/docs/CARDINAL-MODULES.md index ad7b6a17..704a0052 100644 --- a/docs/CARDINAL-MODULES.md +++ b/docs/CARDINAL-MODULES.md @@ -132,7 +132,30 @@ It has pretty much the same options and functionality as the Rack MIDI-Map. For automating CV sources from the host side, this module directly converts the 24 Cardinal host-exposed parameters into CV signals inside Cardinal. The parameters have an internal slew limiter in order to smooth out the changes over time. -The fall time of the smoothing filter is based on the current host block size and sample rate. +The fall time of the smoothing filter is based on the current host block size and sample rate. +You can disable this smoothing filter using right-click menu options. + +Clicking on an input jack from this module will send a "touch"/"edit" event to the plugin host / DAW, +required for allowing to create parameter automation lines in some hosts. + +### Host Parameters Map + +![screenshot](Module_HostParametersMap.png) + +For automating modules loaded inside Cardinal from within host side, using the 24 Cardinal host-exposed parameters. + +This is similar to Host MIDI CC Map, but instead of having MIDI CC from the host as source of events, it uses host-exposed parameters. + +Simply click on the last item on the list of mappings (which will say "click here to map" or "unmapped" depending if you have already any mappings or not), +and then move a Cardinal-side module knob or controllable widget. + +Anytime you click to either do a new mapping or edit an existing one, a few options appear for setting host parameter, smooth on/off and invert on/off. +It is not possible to reassign an existing mapping to a different knob. +Right-clicking an item on the mapping list will remove it. + +Changing module knobs from Cardinal side will not send a parameter change event to the host. +This module works more in a "one to many" control scheme, where 1 single host parameter can control many cardinal modules, but never the other way around. +If you need to send a "parameter change" signal from Cardinal, use the "Host Parameters" module. ### Host Time diff --git a/docs/Module_HostParametersMap.png b/docs/Module_HostParametersMap.png new file mode 100644 index 0000000000000000000000000000000000000000..548f7b8fa4fba8e0187afe732126511cc5d3587e GIT binary patch literal 50642 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 literal 0 HcmV?d00001 From 3eaa9787390794ec8892b63c3daf3aca41e63309 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 26 Jun 2022 18:57:51 +0100 Subject: [PATCH 117/283] Update documentation Signed-off-by: falkTX --- docs/CARDINAL-MODULES.md | 7 ++++--- docs/Module_HostMIDI.png | Bin 88627 -> 98354 bytes 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/CARDINAL-MODULES.md b/docs/CARDINAL-MODULES.md index 704a0052..04a0b5c9 100644 --- a/docs/CARDINAL-MODULES.md +++ b/docs/CARDINAL-MODULES.md @@ -47,8 +47,9 @@ And finally, the Tolerance parameter influences how quickly you can change pitch This is a Cardinal/Rack module of Carla with 2 audio and 8 CV IO. Double-click on the panel to show the Carla's own window. -Note it is required for Carla to be installed on your system in order to show its GUI. -This is currently not supported under Windows. +Note that it is required for Carla to be installed on your system in order to show its GUI. +Cardinal Windows installers ship with their own Carla version, for convenience. +On Linux and macOS you will need Carla to be installed in their typical locations. MIDI input and output are possible with the use of expander modules. @@ -63,7 +64,7 @@ You can change this with right-click menu options, in case you want no offset to [Ildaeil](https://github.com/DISTRHO/Ildaeil) is a mini-plugin host based on [Carla](https://kx.studio/Applications:Carla). This is a Cardinal/Rack module of Ildaeil with 2 audio IO. -Currently Ildaeil supports (Carla) internal and LV2 plugins. +Currently Ildaeil supports (Carla) internal, LV2 and JSFX plugins. More plugin support will be added in future releases. There is no way to automate hosted plugin parameters yet. diff --git a/docs/Module_HostMIDI.png b/docs/Module_HostMIDI.png index a4e25787cae759c4165f736af8b0a04461058c4d..14a64c2450b8dafcc87cc3defd7162f0ca2f0f50 100644 GIT binary patch literal 98354 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

    +ELvt+BM;5DOB8Dt#$ce$&4s; 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 literal 88627 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

    ;Gb&z@ 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 a70J(KOD>h;=Z4wvZ|`mk;|e2}sQ&?3f0#D_ From eb49a45d8249f83117ae76732b9c842ad8b14355 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 26 Jun 2022 18:58:13 +0100 Subject: [PATCH 118/283] Update template projects for fx and synth variant Signed-off-by: falkTX --- src/template-fx.vcv | 36 ++++++-- src/template-synth.vcv | 196 +++++++++++++++++++++++++---------------- 2 files changed, 152 insertions(+), 80 deletions(-) diff --git a/src/template-fx.vcv b/src/template-fx.vcv index ee13a7ac..567f352e 100644 --- a/src/template-fx.vcv +++ b/src/template-fx.vcv @@ -1,6 +1,5 @@ { - "version": "2.1", - "path": "/Shared/Personal/FOSS/GIT/DISTRHO/DISTRHO_Cardinal/src/template-fx.vcv", + "version": "2.1.1", "unsaved": true, "zoom": 1.0, "modules": [ @@ -10,7 +9,7 @@ "model": "TextEditor", "version": "2.0", "params": [], - "leftModuleId": 4, + "leftModuleId": 1299757500751091, "data": { "filepath": "", "lang": "None", @@ -18,7 +17,7 @@ "width": 19 }, "pos": [ - 34, + 45, 0 ] }, @@ -85,11 +84,38 @@ "version": "2.0", "params": [], "leftModuleId": 3, - "rightModuleId": 8712245256622475, + "rightModuleId": 1299757500751091, + "data": { + "smooth": true + }, "pos": [ 25, 0 ] + }, + { + "id": 1299757500751091, + "plugin": "Cardinal", + "model": "HostParametersMap", + "version": "2.0", + "params": [], + "leftModuleId": 4, + "rightModuleId": 8712245256622475, + "data": { + "maps": [ + { + "hostParamId": 255, + "inverted": false, + "smooth": true, + "moduleId": -1, + "paramId": 0 + } + ] + }, + "pos": [ + 34, + 0 + ] } ], "cables": [ diff --git a/src/template-synth.vcv b/src/template-synth.vcv index a83399ca..dc9a1b6b 100644 --- a/src/template-synth.vcv +++ b/src/template-synth.vcv @@ -1,6 +1,5 @@ { - "version": "2.1", - "path": "/Shared/Personal/FOSS/GIT/DISTRHO/DISTRHO_Cardinal/src/template-fx.vcv", + "version": "2.1.1", "unsaved": true, "zoom": 1.0, "modules": [ @@ -10,7 +9,7 @@ "model": "TextEditor", "version": "2.0", "params": [], - "leftModuleId": 4, + "leftModuleId": 1202678850202654, "data": { "filepath": "", "lang": "None", @@ -18,70 +17,86 @@ "width": 19 }, "pos": [ - 43, + 56, 0 ] }, { - "id": 674529428127255, - "plugin": "Bogaudio", - "model": "Bogaudio-ADSR", + "id": 5726895899473528, + "plugin": "Fundamental", + "model": "ADSR", "version": "2.0", "params": [ { - "value": 0.069131895899772644, + "value": 0.5, "id": 0 }, { - "value": 0.31622999906539917, + "value": 0.5, "id": 1 }, { - "value": 1.0, + "value": 0.5, "id": 2 }, { - "value": 0.31622999906539917, + "value": 0.5, "id": 3 }, { "value": 0.0, "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 } ], - "leftModuleId": 331777374771466, - "rightModuleId": 3281475959768191, - "data": { - "invert": 1.0 - }, + "leftModuleId": 5710707540593233, + "rightModuleId": 4828178296911509, "pos": [ - 12, + 16, 0 ] }, { - "id": 3281475959768191, - "plugin": "Bogaudio", - "model": "Bogaudio-VCAmp", + "id": 4828178296911509, + "plugin": "Fundamental", + "model": "VCA-1", "version": "2.0", "params": [ { - "value": 0.83333331346511841, + "value": 1.0, "id": 0 + }, + { + "value": 1.0, + "id": 1 } ], - "leftModuleId": 674529428127255, + "leftModuleId": 5726895899473528, "rightModuleId": 1, - "data": {}, "pos": [ - 15, + 25, 0 ] }, { - "id": 331777374771466, - "plugin": "Bogaudio", - "model": "Bogaudio-LVCO", + "id": 5710707540593233, + "plugin": "Fundamental", + "model": "VCO2", "version": "2.0", "params": [ { @@ -97,18 +112,27 @@ "id": 2 }, { - "value": 0.02500000037252903, + "value": 0.0024096386041492224, "id": 3 + }, + { + "value": 0.091566227376461029, + "id": 4 + }, + { + "value": 0.10000000149011612, + "id": 5 + }, + { + "value": 0.0, + "id": 6 } ], "leftModuleId": 2, - "rightModuleId": 674529428127255, + "rightModuleId": 5726895899473528, "data": { - "poly_input": 0, - "dc_correction": true, - "fm_mode": false, - "linear_mode": false, - "reset_on_wave_change": false + "waveLen": 1024, + "filename": "Basic.wav" }, "pos": [ 9, @@ -126,13 +150,13 @@ "id": 0 } ], - "leftModuleId": 3281475959768191, - "rightModuleId": 3, + "leftModuleId": 4828178296911509, + "rightModuleId": 4, "data": { "dcFilter": true }, "pos": [ - 18, + 28, 0 ] }, @@ -142,7 +166,7 @@ "model": "HostMIDI", "version": "2.0", "params": [], - "rightModuleId": 331777374771466, + "rightModuleId": 5710707540593233, "data": { "pwRange": 0.0, "smooth": false, @@ -159,80 +183,102 @@ ] }, { - "id": 3, + "id": 4, "plugin": "Cardinal", - "model": "HostTime", + "model": "HostParameters", "version": "2.0", "params": [], "leftModuleId": 1, - "rightModuleId": 4, + "rightModuleId": 1202678850202654, + "data": { + "smooth": true + }, "pos": [ - 26, + 36, 0 ] }, { - "id": 4, + "id": 1202678850202654, "plugin": "Cardinal", - "model": "HostParameters", + "model": "HostParametersMap", "version": "2.0", "params": [], - "leftModuleId": 3, + "leftModuleId": 4, "rightModuleId": 8712245256622475, + "data": { + "maps": [ + { + "hostParamId": 255, + "inverted": false, + "smooth": true, + "moduleId": -1, + "paramId": 0 + } + ] + }, "pos": [ - 34, + 45, 0 ] } ], "cables": [ { - "id": 4819926075235968, + "id": 5155876120487880, + "outputModuleId": 2, + "outputId": 1, + "inputModuleId": 5726895899473528, + "inputId": 4, + "color": "#ff9352" + }, + { + "id": 781753834216137, + "outputModuleId": 2, + "outputId": 6, + "inputModuleId": 5726895899473528, + "inputId": 5, + "color": "#ffd452" + }, + { + "id": 87267791249004, "outputModuleId": 2, "outputId": 0, - "inputModuleId": 331777374771466, - "inputId": 0, + "inputModuleId": 5710707540593233, + "inputId": 3, "color": "#ff5252" }, { - "id": 2420818759782995, - "outputModuleId": 331777374771466, - "outputId": 0, - "inputModuleId": 3281475959768191, - "inputId": 1, - "color": "#67ff52" + "id": 6583214392943641, + "outputModuleId": 2, + "outputId": 2, + "inputModuleId": 5710707540593233, + "inputId": 2, + "color": "#52ff7d" }, { - "id": 5329555665685235, - "outputModuleId": 674529428127255, + "id": 3464471860196875, + "outputModuleId": 5726895899473528, "outputId": 0, - "inputModuleId": 3281475959768191, + "inputModuleId": 4828178296911509, "inputId": 0, - "color": "#52ffff" + "color": "#e8ff52" }, { - "id": 4079786865533706, - "outputModuleId": 2, - "outputId": 1, - "inputModuleId": 674529428127255, - "inputId": 0, - "color": "#ff9352" + "id": 8319430808488113, + "outputModuleId": 5710707540593233, + "outputId": 0, + "inputModuleId": 4828178296911509, + "inputId": 1, + "color": "#a8ff52" }, { - "id": 3101737648049587, - "outputModuleId": 3281475959768191, + "id": 739552540616113, + "outputModuleId": 4828178296911509, "outputId": 0, "inputModuleId": 1, "inputId": 0, "color": "#52beff" - }, - { - "id": 537659689081948, - "outputModuleId": 2, - "outputId": 2, - "inputModuleId": 331777374771466, - "inputId": 1, - "color": "#ffd452" } ] } From 10330964ead2343e33855ce73e487890f350fc04 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 13:51:08 +0100 Subject: [PATCH 119/283] Use xvfb-run during windows builds Signed-off-by: falkTX --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e455d2ca..1a674051 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -745,7 +745,7 @@ jobs: run: | pushd deps/PawPaw; source local.env win32; popd make features - make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) + xvfb-run make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) - name: Build win64 cross-compiled (carla) run: | pushd deps/PawPaw; source local.env win32; popd @@ -837,7 +837,7 @@ jobs: run: | pushd deps/PawPaw; source local.env win64; popd make features - make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) + xvfb-run make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) - name: Build win64 cross-compiled (carla) run: | pushd deps/PawPaw; source local.env win64; popd From 3046133883e9aafb50ff42533326209162d9e474 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 17:32:10 +0100 Subject: [PATCH 120/283] Cleanup related fixes Signed-off-by: falkTX --- .github/workflows/build.yml | 4 +- dpf | 2 +- src/CardinalPlugin.cpp | 10 ++++ src/extra/ScopedValueSetter.hpp | 90 +++++++++++++++++++++++++++++++++ src/override/Engine.cpp | 8 +++ 5 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 src/extra/ScopedValueSetter.hpp diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1a674051..e455d2ca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -745,7 +745,7 @@ jobs: run: | pushd deps/PawPaw; source local.env win32; popd make features - xvfb-run make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) + make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) - name: Build win64 cross-compiled (carla) run: | pushd deps/PawPaw; source local.env win32; popd @@ -837,7 +837,7 @@ jobs: run: | pushd deps/PawPaw; source local.env win64; popd make features - xvfb-run make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) + make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) - name: Build win64 cross-compiled (carla) run: | pushd deps/PawPaw; source local.env win64; popd diff --git a/dpf b/dpf index 144ec075..a4eed81b 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 144ec075cc4feed77bc8ca08d0d16901f04a3806 +Subproject commit a4eed81b7311c32284883f265d7634c5354f17d7 diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 2bed292b..5e206506 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -52,6 +52,7 @@ static const constexpr uint kCardinalStateBaseCount = 3; // patch, screenshot, comment #ifndef HEADLESS +# include "extra/ScopedValueSetter.hpp" # include "WindowParameters.hpp" static const constexpr uint kCardinalStateCount = kCardinalStateBaseCount + 2; // moduleInfos, windowSize #else @@ -68,6 +69,9 @@ static const constexpr uint kCardinalStateCount = kCardinalStateBaseCount; #endif namespace rack { +namespace engine { + void Engine_setAboutToClose(Engine*); +} namespace plugin { void initStaticPlugins(); void destroyStaticPlugins(); @@ -572,6 +576,12 @@ class CardinalPlugin : public CardinalBasePlugin { const ScopedContext sc(this); context->patch->clear(); + + // do a little dance to prevent context scene deletion from saving to temp dir +#ifndef HEADLESS + const ScopedValueSetter svs(rack::settings::headless, true); +#endif + Engine_setAboutToClose(context->engine); delete context; } diff --git a/src/extra/ScopedValueSetter.hpp b/src/extra/ScopedValueSetter.hpp new file mode 100644 index 00000000..93472410 --- /dev/null +++ b/src/extra/ScopedValueSetter.hpp @@ -0,0 +1,90 @@ +/* + * Scope value setter, taken from JUCE v4 + * Copyright (C) 2013 Raw Material Software Ltd. + * Copyright (c) 2016 ROLI Ltd. + * Copyright (C) 2013-2020 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 2 of + * the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the doc/GPL.txt file. + */ + +#pragma once + +#include "DistrhoUtils.hpp" + +START_NAMESPACE_DISTRHO + +//===================================================================================================================== +/** + Helper class providing an RAII-based mechanism for temporarily setting and + then re-setting a value. + + E.g. @code + int x = 1; + + { + ScopedValueSetter setter (x, 2); + + // x is now 2 + } + + // x is now 1 again + + { + ScopedValueSetter setter (x, 3, 4); + + // x is now 3 + } + + // x is now 4 + @endcode +*/ +template +class ScopedValueSetter +{ +public: + /** Creates a ScopedValueSetter that will immediately change the specified value to the + given new value, and will then reset it to its original value when this object is deleted. + Must be used only for 'noexcept' compatible types. + */ + ScopedValueSetter(ValueType& valueToSet, ValueType newValue) noexcept + : value(valueToSet), + originalValue(valueToSet) + { + valueToSet = newValue; + } + + /** Creates a ScopedValueSetter that will immediately change the specified value to the + given new value, and will then reset it to be valueWhenDeleted when this object is deleted. + */ + ScopedValueSetter(ValueType& valueToSet, ValueType newValue, ValueType valueWhenDeleted) noexcept + : value(valueToSet), + originalValue(valueWhenDeleted) + { + valueToSet = newValue; + } + + ~ScopedValueSetter() noexcept + { + value = originalValue; + } + +private: + //================================================================================================================= + ValueType& value; + const ValueType originalValue; + + DISTRHO_DECLARE_NON_COPYABLE(ScopedValueSetter) + DISTRHO_PREVENT_HEAP_ALLOCATION +}; + +END_NAMESPACE_DISTRHO diff --git a/src/override/Engine.cpp b/src/override/Engine.cpp index 2cdf7562..2a31fe87 100644 --- a/src/override/Engine.cpp +++ b/src/override/Engine.cpp @@ -79,6 +79,7 @@ struct Engine::Internal { int64_t blockFrame = 0; double blockTime = 0.0; int blockFrames = 0; + bool aboutToClose = false; #ifndef HEADLESS // Meter @@ -776,6 +777,8 @@ void Engine::prepareSaveModule(Module* module) { void Engine::prepareSave() { + if (internal->aboutToClose) + return; SharedLock lock(internal->mutex); for (Module* module : internal->modules) { Module::SaveEvent e; @@ -1175,5 +1178,10 @@ void Engine::startFallbackThread() { } +void Engine_setAboutToClose(Engine* const engine) { + engine->internal->aboutToClose = true; +} + + } // namespace engine } // namespace rack From 697e5ea6771d6bb3800827d0600241882daf87da Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 17:51:32 +0100 Subject: [PATCH 121/283] Add a little hack for running under wine, used in testing Signed-off-by: falkTX --- .github/workflows/build.yml | 1 + src/override/common.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e455d2ca..09f990a7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,6 +5,7 @@ on: env: CACHE_VERSION: 24 + CARDINAL_UNDER_WINE: 1 DEBIAN_FRONTEND: noninteractive HOMEBREW_NO_AUTO_UPDATE: 1 LIBGL_ALWAYS_SOFTWARE: 'true' diff --git a/src/override/common.cpp b/src/override/common.cpp index 200ecadd..c6f5ae63 100644 --- a/src/override/common.cpp +++ b/src/override/common.cpp @@ -38,6 +38,8 @@ #include FILE* fopen_u8(const char* filename, const char* mode) { + if (std::strncmp(filename, "\\\\?\\", 4) == 0 && std::getenv("CARDINAL_UNDER_WINE") != nullptr) + filename = "Z:\\dev\\null"; return _wfopen(rack::string::UTF8toUTF16(filename).c_str(), rack::string::UTF8toUTF16(mode).c_str()); } From 5f558c0d845466ed5fdbb2f790e6221e94e3fb9b Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 18:22:22 +0100 Subject: [PATCH 122/283] Fix finding jsfx on Windows Closes #265 Signed-off-by: falkTX --- plugins/Cardinal/src/Ildaeil.cpp | 3 +++ src/CardinalCommon.cpp | 5 ++++- src/CardinalCommon.hpp | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index ff682e87..5d1b4eef 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -60,6 +60,7 @@ namespace rack { enum SpecialPath { kSpecialPathUserProfile, kSpecialPathCommonProgramFiles, + kSpecialPathProgramFiles, kSpecialPathAppData, }; std::string getSpecialPath(const SpecialPath type); @@ -122,6 +123,8 @@ static const char* getPathForJSFX() path = homeDir() + "/Library/Application Support/REAPER/Effects"; #elif defined(CARLA_OS_WIN) path = getSpecialPath(kSpecialPathAppData) + "\\REAPER\\Effects"; + if (! system::exists(path)) + path = getSpecialPath(kSpecialPathProgramFiles) + "\\REAPER\\InstallData\\Effects"; #else if (const char* const configHome = std::getenv("XDG_CONFIG_HOME")) path = configHome; diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index b0682e74..b96557b8 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -77,8 +77,11 @@ std::string getSpecialPath(const SpecialPath type) case kSpecialPathCommonProgramFiles: csidl = CSIDL_PROGRAM_FILES_COMMON; break; + case kSpecialPathProgramFiles: + csidl = CSIDL_PROGRAM_FILES; + break; case kSpecialPathAppData: - csidl = CSIDL_COMMON_APPDATA; + csidl = CSIDL_APPDATA; break; default: return {}; diff --git a/src/CardinalCommon.hpp b/src/CardinalCommon.hpp index 132155b7..25ad8553 100644 --- a/src/CardinalCommon.hpp +++ b/src/CardinalCommon.hpp @@ -47,6 +47,7 @@ bool isStandalone(); enum SpecialPath { kSpecialPathUserProfile, kSpecialPathCommonProgramFiles, + kSpecialPathProgramFiles, kSpecialPathAppData, }; std::string getSpecialPath(SpecialPath type); From 27599a3ce1a7fdce56fa5e9be63e9702f18cca89 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 19:07:56 +0100 Subject: [PATCH 123/283] Fix Carla's directory finding on Windows Signed-off-by: falkTX --- carla | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/carla b/carla index 9b5a23c5..a80680f5 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 9b5a23c56a67f8cddcd8734eca5f427fbc536e98 +Subproject commit a80680f5a1c86dee7a096244fa3dffdc273a43f2 From 8c4a4aa7763b43535f4aec0b97cf20c1e9ec0fd1 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 19:25:28 +0100 Subject: [PATCH 124/283] Fix Fundamental wavetable modules crashing on windows 32bit Related to #80 Signed-off-by: falkTX --- plugins/Fundamental | 2 +- plugins/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Fundamental b/plugins/Fundamental index 3ceb5621..634350a8 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 3ceb5621c77ef69bda02fe62d702eae354a7af6f +Subproject commit 634350a8f066467b24b70f745a9c4a2a921a0f22 diff --git a/plugins/Makefile b/plugins/Makefile index b87b8f86..5249cc79 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -1041,7 +1041,7 @@ clean: # -------------------------------------------------------------- ifeq ($(NOPLUGINS),true) -PLUGIN_LIST = Cardinal +PLUGIN_LIST = Cardinal Fundamental else PLUGIN_LIST = $(subst /plugin.json,,$(wildcard */plugin.json)) endif From 75b0d16fcba7c0544efa2e91864b94339be8423a Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 19:44:34 +0100 Subject: [PATCH 125/283] Update template-synth.vcv (replace WTVCO with regular VCO) Signed-off-by: falkTX --- src/template-synth.vcv | 90 +++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/src/template-synth.vcv b/src/template-synth.vcv index dc9a1b6b..561b85e5 100644 --- a/src/template-synth.vcv +++ b/src/template-synth.vcv @@ -17,7 +17,7 @@ "width": 19 }, "pos": [ - 56, + 50, 0 ] }, @@ -64,10 +64,10 @@ "id": 8 } ], - "leftModuleId": 5710707540593233, + "leftModuleId": 8601159184541723, "rightModuleId": 4828178296911509, "pos": [ - 16, + 10, 0 ] }, @@ -89,14 +89,14 @@ "leftModuleId": 5726895899473528, "rightModuleId": 1, "pos": [ - 25, + 19, 0 ] }, { - "id": 5710707540593233, + "id": 8601159184541723, "plugin": "Fundamental", - "model": "VCO2", + "model": "VCO", "version": "2.0", "params": [ { @@ -104,7 +104,7 @@ "id": 0 }, { - "value": 0.0, + "value": 1.0, "id": 1 }, { @@ -112,30 +112,30 @@ "id": 2 }, { - "value": 0.0024096386041492224, + "value": 0.0, "id": 3 }, { - "value": 0.091566227376461029, + "value": 0.0, "id": 4 }, { - "value": 0.10000000149011612, + "value": 0.5, "id": 5 }, { "value": 0.0, "id": 6 + }, + { + "value": 0.0, + "id": 7 } ], "leftModuleId": 2, "rightModuleId": 5726895899473528, - "data": { - "waveLen": 1024, - "filename": "Basic.wav" - }, "pos": [ - 9, + 1, 0 ] }, @@ -146,7 +146,7 @@ "version": "2.0", "params": [ { - "value": 1.0, + "value": 0.79432821273803711, "id": 0 } ], @@ -156,7 +156,7 @@ "dcFilter": true }, "pos": [ - 28, + 22, 0 ] }, @@ -166,7 +166,7 @@ "model": "HostMIDI", "version": "2.0", "params": [], - "rightModuleId": 5710707540593233, + "rightModuleId": 8601159184541723, "data": { "pwRange": 0.0, "smooth": false, @@ -178,7 +178,7 @@ "outputChannel": 0 }, "pos": [ - 0, + -8, 0 ] }, @@ -194,7 +194,7 @@ "smooth": true }, "pos": [ - 36, + 30, 0 ] }, @@ -218,7 +218,7 @@ ] }, "pos": [ - 45, + 39, 0 ] } @@ -240,22 +240,6 @@ "inputId": 5, "color": "#ffd452" }, - { - "id": 87267791249004, - "outputModuleId": 2, - "outputId": 0, - "inputModuleId": 5710707540593233, - "inputId": 3, - "color": "#ff5252" - }, - { - "id": 6583214392943641, - "outputModuleId": 2, - "outputId": 2, - "inputModuleId": 5710707540593233, - "inputId": 2, - "color": "#52ff7d" - }, { "id": 3464471860196875, "outputModuleId": 5726895899473528, @@ -264,14 +248,6 @@ "inputId": 0, "color": "#e8ff52" }, - { - "id": 8319430808488113, - "outputModuleId": 5710707540593233, - "outputId": 0, - "inputModuleId": 4828178296911509, - "inputId": 1, - "color": "#a8ff52" - }, { "id": 739552540616113, "outputModuleId": 4828178296911509, @@ -279,6 +255,30 @@ "inputModuleId": 1, "inputId": 0, "color": "#52beff" + }, + { + "id": 6701970185765111, + "outputModuleId": 2, + "outputId": 0, + "inputModuleId": 8601159184541723, + "inputId": 0, + "color": "#ff5252" + }, + { + "id": 6959800657121782, + "outputModuleId": 2, + "outputId": 2, + "inputModuleId": 8601159184541723, + "inputId": 1, + "color": "#52ff7d" + }, + { + "id": 1598271319373837, + "outputModuleId": 8601159184541723, + "outputId": 0, + "inputModuleId": 4828178296911509, + "inputId": 1, + "color": "#a8ff52" } ] } From d423ac94b5a7a8c3f7b7e4395a41496569f318d4 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 23:43:53 +0100 Subject: [PATCH 126/283] Decode file URLs provided by DBus portals Closes #223 Signed-off-by: falkTX --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index a4eed81b..db893e72 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit a4eed81b7311c32284883f265d7634c5354f17d7 +Subproject commit db893e72df9932005f1c40a55691d7ae13952a56 From b29c079266f8a3545d17ca5b750ea3e59001f198 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 27 Jun 2022 23:44:13 +0100 Subject: [PATCH 127/283] Fix fundamental wavetable garbage reads, and windows builds Signed-off-by: falkTX --- plugins/Fundamental | 2 +- utils/create-windows-installer.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Fundamental b/plugins/Fundamental index 634350a8..19c706bd 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 634350a8f066467b24b70f745a9c4a2a921a0f22 +Subproject commit 19c706bded88a79ad348bf5abe837ec56d4c0e5a diff --git a/utils/create-windows-installer.sh b/utils/create-windows-installer.sh index a8b9c587..a6f2a213 100755 --- a/utils/create-windows-installer.sh +++ b/utils/create-windows-installer.sh @@ -19,7 +19,7 @@ iscc="${innodir}/drive_c/InnoSetup/ISCC.exe" # download it if [ ! -f "${dlfile}" ]; then # FIXME proper dl version - curl -L https://jrsoftware.org/download.php/is.exe?site=2 -o "${dlfile}" + curl -L https://jrsoftware.org/download.php/is.exe -o "${dlfile}" fi # initialize wine From fde7b97fcc18f6f6e2b3d476e9f35696ac8eeb7c Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 28 Jun 2022 00:46:53 +0100 Subject: [PATCH 128/283] Attempts at allowing unicode in imgui based widgets Signed-off-by: falkTX --- plugins/Cardinal/src/ImGuiWidget.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/plugins/Cardinal/src/ImGuiWidget.cpp b/plugins/Cardinal/src/ImGuiWidget.cpp index 4ca8c074..3e86b005 100644 --- a/plugins/Cardinal/src/ImGuiWidget.cpp +++ b/plugins/Cardinal/src/ImGuiWidget.cpp @@ -122,15 +122,35 @@ struct ImGuiWidget::PrivateData { { #ifndef DGL_NO_SHARED_RESOURCES using namespace dpf_resources; - static const ImWchar ranges[] = { 0x20, 0xFF, 0 }; /* FIXME unicode range not working.. */ ImFontConfig fc; fc.FontDataOwnedByAtlas = false; fc.OversampleH = 1; fc.OversampleV = 1; fc.PixelSnapH = true; - io.Fonts->AddFontFromMemoryTTF((void*)dejavusans_ttf, - dejavusans_ttf_size, - 13.0f * scaleFactor, &fc, ranges); + io.Fonts->AddFontFromMemoryTTF((void*)dejavusans_ttf, dejavusans_ttf_size, 13.0f * scaleFactor, &fc); + + // extra fonts we can try loading for unicode support + static const char* extraFontPathsToTry[] = { + #if defined(ARCH_WIN) + // TODO + // "Meiryo.ttc", + #elif defined(ARCH_MAC) + // TODO + #elif defined(ARCH_LIN) + "/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc", + #endif + }; + + fc.FontDataOwnedByAtlas = true; + fc.MergeMode = true; + + for (size_t i=0; iAddFontFromFileTTF(extraFontPathsToTry[i], 13.0f * scaleFactor, &fc, + io.Fonts->GetGlyphRangesJapanese()); + } + io.Fonts->Build(); #endif } From ed6d9b05bd236f1efd543b6c531eaa3e260c08fe Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 28 Jun 2022 18:57:57 +0100 Subject: [PATCH 129/283] Update carla and dpf for a few small fixes Signed-off-by: falkTX --- carla | 2 +- dpf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/carla b/carla index a80680f5..f428af38 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit a80680f5a1c86dee7a096244fa3dffdc273a43f2 +Subproject commit f428af3894a5916aee281fa682f4a938f8e67f0b diff --git a/dpf b/dpf index db893e72..e22b971a 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit db893e72df9932005f1c40a55691d7ae13952a56 +Subproject commit e22b971a123e46f18189aaef9d3584a670c32cd7 From 4081474bb12a94fd56a76ee223e20651a3e96fb9 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 29 Jun 2022 01:07:07 +0100 Subject: [PATCH 130/283] Fix VST3 UI under FLStudio macOS --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index e22b971a..90b8d2d2 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit e22b971a123e46f18189aaef9d3584a670c32cd7 +Subproject commit 90b8d2d2710d7aeb9f8f097dc3b4baed11c1073f From aabd9f9342a296ab4d31bcb5a7075c34ce427d23 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 29 Jun 2022 01:33:05 +0100 Subject: [PATCH 131/283] Fix start position of template-synth.vcv Signed-off-by: falkTX --- src/template-synth.vcv | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/template-synth.vcv b/src/template-synth.vcv index 561b85e5..d15f2d0a 100644 --- a/src/template-synth.vcv +++ b/src/template-synth.vcv @@ -17,7 +17,7 @@ "width": 19 }, "pos": [ - 50, + 58, 0 ] }, @@ -67,7 +67,7 @@ "leftModuleId": 8601159184541723, "rightModuleId": 4828178296911509, "pos": [ - 10, + 18, 0 ] }, @@ -89,7 +89,7 @@ "leftModuleId": 5726895899473528, "rightModuleId": 1, "pos": [ - 19, + 27, 0 ] }, @@ -135,7 +135,7 @@ "leftModuleId": 2, "rightModuleId": 5726895899473528, "pos": [ - 1, + 9, 0 ] }, @@ -156,7 +156,7 @@ "dcFilter": true }, "pos": [ - 22, + 30, 0 ] }, @@ -178,7 +178,7 @@ "outputChannel": 0 }, "pos": [ - -8, + 0, 0 ] }, @@ -194,7 +194,7 @@ "smooth": true }, "pos": [ - 30, + 38, 0 ] }, @@ -218,7 +218,7 @@ ] }, "pos": [ - 39, + 47, 0 ] } From dd5344d2b8ebc57110f3755481965ff9245a1d80 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 29 Jun 2022 14:14:14 +0100 Subject: [PATCH 132/283] More details for lv2 export (category, CV type, label/brand) Signed-off-by: falkTX --- lv2export/export.cpp | 37 +++++++++++++++++-- lv2export/lv2plugin.cpp | 10 ++++- .../plugins/aubileinstruments-macro-osc-2.cpp | 3 ++ .../plugins/aubileinstruments-macro-osc.cpp | 3 ++ lv2export/plugins/fundamental-quantizer.cpp | 7 +++- lv2export/plugins/fundamental-seq3.cpp | 16 +++++++- lv2export/plugins/msm-phaser.cpp | 3 ++ lv2export/plugins/rackwindows-mv.cpp | 3 ++ lv2export/plugins/rackwindows-vibrato.cpp | 3 ++ lv2export/plugins/valleyaudio-plateau.cpp | 4 +- 10 files changed, 79 insertions(+), 10 deletions(-) diff --git a/lv2export/export.cpp b/lv2export/export.cpp index 1f775f40..c058ea9c 100644 --- a/lv2export/export.cpp +++ b/lv2export/export.cpp @@ -15,6 +15,14 @@ * For a full copy of the GNU General Public License see the LICENSE file. */ +#ifndef PLUGIN_BRAND +# error PLUGIN_BRAND undefined +#endif + +#ifndef PLUGIN_LABEL +# error PLUGIN_LABEL undefined +#endif + #ifndef PLUGIN_MODEL # error PLUGIN_MODEL undefined #endif @@ -43,11 +51,14 @@ void lv2_generate_ttl() d_stdout("@prefix doap: ."); d_stdout("@prefix foaf: ."); d_stdout("@prefix lv2: ."); + d_stdout("@prefix mod: ."); d_stdout(""); d_stdout(""); - d_stdout(" a lv2:Plugin, doap:Project ;"); + d_stdout(" a \"" PLUGIN_LV2_CATEGORY "\", doap:Project ;"); d_stdout(" doap:name \"" SLUG "\" ;"); + d_stdout(" mod:brand \"" PLUGIN_BRAND "\" ;"); + d_stdout(" mod:label \"" PLUGIN_LABEL "\" ;"); d_stdout(""); int index = 0; @@ -57,8 +68,18 @@ void lv2_generate_ttl() d_stdout(" lv2:port ["); if (kCvInputs[i]) { - d_stdout(" a lv2:InputPort, lv2:CVPort ;"); + d_stdout(" a lv2:InputPort, lv2:CVPort, mod:CVPort ;"); d_stdout(" lv2:symbol \"lv2_cv_in_%d\" ;", ++numCV); + if (kCvOutputs[i] == Bi) + { + d_stdout(" lv2:minimum -5.0 ;"); + d_stdout(" lv2:maximum 5.0 ;"); + } + else + { + d_stdout(" lv2:minimum 0.0 ;"); + d_stdout(" lv2:maximum 10.0 ;"); + } } else { @@ -76,8 +97,18 @@ void lv2_generate_ttl() d_stdout(" lv2:port ["); if (kCvOutputs[i]) { - d_stdout(" a lv2:OutputPort, lv2:CVPort ;"); + d_stdout(" a lv2:OutputPort, lv2:CVPort, mod:CVPort ;"); d_stdout(" lv2:symbol \"lv2_cv_out_%d\" ;", ++numCV); + if (kCvOutputs[i] == Bi) + { + d_stdout(" lv2:minimum -5.0 ;"); + d_stdout(" lv2:maximum 5.0 ;"); + } + else + { + d_stdout(" lv2:minimum 0.0 ;"); + d_stdout(" lv2:maximum 10.0 ;"); + } } else { diff --git a/lv2export/lv2plugin.cpp b/lv2export/lv2plugin.cpp index e86eb820..e15e4b64 100644 --- a/lv2export/lv2plugin.cpp +++ b/lv2export/lv2plugin.cpp @@ -27,8 +27,14 @@ # error PLUGIN_CV_OUTPUTS undefined #endif -static constexpr const bool kCvInputs[] = PLUGIN_CV_INPUTS; -static constexpr const bool kCvOutputs[] = PLUGIN_CV_OUTPUTS; +enum PortType { + Audio = 0, + Bi = 1, + Uni = 2, +}; + +static constexpr const int kCvInputs[] = PLUGIN_CV_INPUTS; +static constexpr const int kCvOutputs[] = PLUGIN_CV_OUTPUTS; #include "src/lv2/buf-size.h" #include "src/lv2/options.h" diff --git a/lv2export/plugins/aubileinstruments-macro-osc-2.cpp b/lv2export/plugins/aubileinstruments-macro-osc-2.cpp index b626f40f..5e6d73ea 100644 --- a/lv2export/plugins/aubileinstruments-macro-osc-2.cpp +++ b/lv2export/plugins/aubileinstruments-macro-osc-2.cpp @@ -52,9 +52,12 @@ #include "AudibleInstruments/eurorack/plaits/resources.cc" +#define PLUGIN_BRAND "AudibleInstruments" +#define PLUGIN_LABEL "Macro Osc 2" #define PLUGIN_MODEL modelPlaits #define PLUGIN_CV_INPUTS {1,1,1,1,1,1,1,1} #define PLUGIN_CV_OUTPUTS {0,0} +#define PLUGIN_LV2_CATEGORY "lv2:GeneratorPlugin" #include "lv2plugin.cpp" #include "export.cpp" diff --git a/lv2export/plugins/aubileinstruments-macro-osc.cpp b/lv2export/plugins/aubileinstruments-macro-osc.cpp index d9c4db78..ed913e04 100644 --- a/lv2export/plugins/aubileinstruments-macro-osc.cpp +++ b/lv2export/plugins/aubileinstruments-macro-osc.cpp @@ -32,9 +32,12 @@ // #include "AudibleInstruments/eurorack/braids/quantizer.cc" #include "AudibleInstruments/eurorack/braids/resources.cc" +#define PLUGIN_BRAND "AudibleInstruments" +#define PLUGIN_LABEL "Macro Osc" #define PLUGIN_MODEL modelBraids #define PLUGIN_CV_INPUTS {1,1,1,1,1} #define PLUGIN_CV_OUTPUTS {0} +#define PLUGIN_LV2_CATEGORY "lv2:GeneratorPlugin" #include "lv2plugin.cpp" #include "export.cpp" diff --git a/lv2export/plugins/fundamental-quantizer.cpp b/lv2export/plugins/fundamental-quantizer.cpp index e2131bfe..bfc6d940 100644 --- a/lv2export/plugins/fundamental-quantizer.cpp +++ b/lv2export/plugins/fundamental-quantizer.cpp @@ -17,9 +17,12 @@ #include "Fundamental/src/Quantizer.cpp" +#define PLUGIN_BRAND "VCV Fundamental" +#define PLUGIN_LABEL "Quantizer" #define PLUGIN_MODEL modelQuantizer -#define PLUGIN_CV_INPUTS {1} -#define PLUGIN_CV_OUTPUTS {1} +#define PLUGIN_CV_INPUTS {Bi} +#define PLUGIN_CV_OUTPUTS {Bi} +#define PLUGIN_LV2_CATEGORY "mod:CVPlugin" #include "lv2plugin.cpp" #include "export.cpp" diff --git a/lv2export/plugins/fundamental-seq3.cpp b/lv2export/plugins/fundamental-seq3.cpp index e2dde555..98d6efbc 100644 --- a/lv2export/plugins/fundamental-seq3.cpp +++ b/lv2export/plugins/fundamental-seq3.cpp @@ -17,9 +17,21 @@ #include "Fundamental/src/SEQ3.cpp" +#define PLUGIN_BRAND "VCV Fundamental" +#define PLUGIN_LABEL "SEQ3" #define PLUGIN_MODEL modelSEQ3 -#define PLUGIN_CV_INPUTS {1,1,1,1,1} -#define PLUGIN_CV_OUTPUTS {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} +#define PLUGIN_CV_INPUTS {Bi,Uni,Uni,Uni,Uni} +#define PLUGIN_CV_OUTPUTS { \ + /* trigger */ \ + Uni, \ + /* 3 cv outs */ \ + Bi,Bi,Bi, \ + /* 8 steps */ \ + Uni,Uni,Uni,Uni,Uni,Uni,Uni,Uni, \ + /* steps, clk, run, reset */ \ + Uni,Uni,Uni,Uni \ +} +#define PLUGIN_LV2_CATEGORY "mod:CVPlugin" #include "lv2plugin.cpp" #include "export.cpp" diff --git a/lv2export/plugins/msm-phaser.cpp b/lv2export/plugins/msm-phaser.cpp index 6e0eedec..8e93f863 100644 --- a/lv2export/plugins/msm-phaser.cpp +++ b/lv2export/plugins/msm-phaser.cpp @@ -17,9 +17,12 @@ #include "MSM/src/Phaser.cpp" +#define PLUGIN_BRAND "MSM" +#define PLUGIN_LABEL "Phaser" #define PLUGIN_MODEL modelPhaserModule #define PLUGIN_CV_INPUTS {1,1,1,0} #define PLUGIN_CV_OUTPUTS {0} +#define PLUGIN_LV2_CATEGORY "lv2:DistortionPlugin" #include "lv2plugin.cpp" #include "export.cpp" diff --git a/lv2export/plugins/rackwindows-mv.cpp b/lv2export/plugins/rackwindows-mv.cpp index 25c85e6d..a7991cef 100644 --- a/lv2export/plugins/rackwindows-mv.cpp +++ b/lv2export/plugins/rackwindows-mv.cpp @@ -17,9 +17,12 @@ #include "rackwindows/src/mv.cpp" +#define PLUGIN_BRAND "Rackwindows" +#define PLUGIN_LABEL "MV" #define PLUGIN_MODEL modelMv #define PLUGIN_CV_INPUTS {1,1,1,1,0,0} #define PLUGIN_CV_OUTPUTS {0,0} +#define PLUGIN_LV2_CATEGORY "lv2:ReverbPlugin" #include "lv2plugin.cpp" #include "export.cpp" diff --git a/lv2export/plugins/rackwindows-vibrato.cpp b/lv2export/plugins/rackwindows-vibrato.cpp index 25a218e5..a4bdd9ee 100644 --- a/lv2export/plugins/rackwindows-vibrato.cpp +++ b/lv2export/plugins/rackwindows-vibrato.cpp @@ -17,9 +17,12 @@ #include "rackwindows/src/vibrato.cpp" +#define PLUGIN_BRAND "Rackwindows" +#define PLUGIN_LABEL "Vibrato" #define PLUGIN_MODEL modelVibrato #define PLUGIN_CV_INPUTS {1,1,1,1,1,0} #define PLUGIN_CV_OUTPUTS {1,0,1} +#define PLUGIN_LV2_CATEGORY "lv2:DynamicsPlugin" #include "lv2plugin.cpp" #include "export.cpp" diff --git a/lv2export/plugins/valleyaudio-plateau.cpp b/lv2export/plugins/valleyaudio-plateau.cpp index 52b59e33..9f4cc03d 100644 --- a/lv2export/plugins/valleyaudio-plateau.cpp +++ b/lv2export/plugins/valleyaudio-plateau.cpp @@ -20,10 +20,12 @@ #include "ValleyAudio/src/Plateau/Dattorro.cpp" #include "ValleyAudio/src/Plateau/Plateau.cpp" - +#define PLUGIN_BRAND "Valley Audio" +#define PLUGIN_LABEL "Plateau" #define PLUGIN_MODEL modelPlateau #define PLUGIN_CV_INPUTS {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} #define PLUGIN_CV_OUTPUTS {0,0} +#define PLUGIN_LV2_CATEGORY "lv2:ReverbPlugin" #include "lv2plugin.cpp" #include "export.cpp" From 0397948a4161ef1610dee642e3e95c14eebd7226 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 29 Jun 2022 15:35:16 +0100 Subject: [PATCH 133/283] Add VT_-_Jupiter_Ascent.vcv demo patch, show in file menu Signed-off-by: falkTX --- patches/VT_-_Jupiter_Ascent.vcv | 633 ++++++++++++++++++++++++++++++++ src/Makefile.cardinal.mk | 7 +- src/custom/asset.cpp | 9 + src/override/MenuBar.cpp | 54 ++- 4 files changed, 694 insertions(+), 9 deletions(-) create mode 100644 patches/VT_-_Jupiter_Ascent.vcv diff --git a/patches/VT_-_Jupiter_Ascent.vcv b/patches/VT_-_Jupiter_Ascent.vcv new file mode 100644 index 00000000..ab335698 --- /dev/null +++ b/patches/VT_-_Jupiter_Ascent.vcv @@ -0,0 +1,633 @@ +{ + "version": "2.1.1", + "path": "/home/falktx/Source/DISTRHO/Cardinal/src/Rack/../../patches/VT_-_Jupiter_Ascent.vcv", + "unsaved": true, + "zoom": 1.0, + "gridOffset": [ + -1.0, + -0.03684210404753685 + ], + "modules": [ + { + "id": 674529428127255, + "plugin": "Bogaudio", + "model": "Bogaudio-ADSR", + "version": "2.0", + "params": [ + { + "value": 0.39563772082328796, + "id": 0 + }, + { + "value": 0.31622999906539917, + "id": 1 + }, + { + "value": 1.0, + "id": 2 + }, + { + "value": 0.31622999906539917, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + } + ], + "data": { + "invert": 1.0 + }, + "pos": [ + 26, + 0 + ] + }, + { + "id": 3281475959768191, + "plugin": "Bogaudio", + "model": "Bogaudio-VCAmp", + "version": "2.0", + "params": [ + { + "value": 0.83633327484130859, + "id": 0 + } + ], + "data": {}, + "pos": [ + 34, + 0 + ] + }, + { + "id": 331777374771466, + "plugin": "Bogaudio", + "model": "Bogaudio-LVCO", + "version": "2.0", + "params": [ + { + "value": -2.4686794281005859, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.02500000037252903, + "id": 3 + } + ], + "data": { + "poly_input": 0, + "dc_correction": true, + "fm_mode": false, + "linear_mode": false, + "reset_on_wave_change": false + }, + "pos": [ + 22, + 0 + ] + }, + { + "id": 3016826773070784, + "plugin": "AudibleInstruments", + "model": "Braids", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": -1.0, + "id": 1 + }, + { + "value": 0.27710890769958496, + "id": 2 + }, + { + "value": 0.79518294334411621, + "id": 3 + }, + { + "value": 0.21204811334609985, + "id": 4 + }, + { + "value": 0.28433749079704285, + "id": 5 + }, + { + "value": 0.80603110790252686, + "id": 6 + } + ], + "data": { + "settings": [ + 37, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "lowCpu": false + }, + "pos": [ + 1, + 1 + ] + }, + { + "id": 6705683264150796, + "plugin": "AudibleInstruments", + "model": "Clouds", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.78072905540466309, + "id": 3 + }, + { + "value": 0.7012094259262085, + "id": 4 + }, + { + "value": 1.0024091005325317, + "id": 5 + }, + { + "value": 0.66144955158233643, + "id": 6 + }, + { + "value": 0.69638985395431519, + "id": 7 + }, + { + "value": 0.80482602119445801, + "id": 8 + }, + { + "value": 0.39879524707794189, + "id": 9 + }, + { + "value": 0.74940258264541626, + "id": 10 + }, + { + "value": 0.52048206329345703, + "id": 11 + }, + { + "value": 0.87711626291275024, + "id": 12 + } + ], + "leftModuleId": 2799668542620335, + "rightModuleId": 1248991428573357, + "data": { + "playback": 0, + "quality": 0, + "blendMode": 0 + }, + "pos": [ + 29, + 1 + ] + }, + { + "id": 1655718328487476, + "plugin": "Bogaudio", + "model": "Bogaudio-VCAmp", + "version": "2.0", + "params": [ + { + "value": 0.83333331346511841, + "id": 0 + } + ], + "data": {}, + "pos": [ + 30, + 0 + ] + }, + { + "id": 2799668542620335, + "plugin": "Valley", + "model": "Feline", + "version": "2.0", + "params": [ + { + "value": 6.5399541854858398, + "id": 0 + }, + { + "value": 7.0799946784973145, + "id": 1 + }, + { + "value": 1.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.32399994134902954, + "id": 4 + }, + { + "value": 0.4400005042552948, + "id": 5 + }, + { + "value": 0.67349755764007568, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + }, + { + "value": 0.0, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 0.45542141795158386, + "id": 12 + }, + { + "value": 0.0, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + } + ], + "leftModuleId": 8518489263490539, + "rightModuleId": 6705683264150796, + "data": { + "panelStyle": 0 + }, + "pos": [ + 21, + 1 + ] + }, + { + "id": 8518489263490539, + "plugin": "Bogaudio", + "model": "Bogaudio-LVCO", + "version": "2.0", + "params": [ + { + "value": -1.6590381860733032, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + } + ], + "rightModuleId": 2799668542620335, + "data": { + "poly_input": 0, + "dc_correction": true, + "fm_mode": false, + "linear_mode": false, + "reset_on_wave_change": false + }, + "pos": [ + 18, + 1 + ] + }, + { + "id": 1248991428573357, + "plugin": "MSM", + "model": "DualDelay", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.67479997873306274, + "id": 2 + }, + { + "value": 0.76326054334640503, + "id": 3 + }, + { + "value": -0.20256407558917999, + "id": 4 + }, + { + "value": -0.1974358856678009, + "id": 5 + }, + { + "value": 0.82564276456832886, + "id": 6 + }, + { + "value": 0.20512820780277252, + "id": 7 + }, + { + "value": 0.76794975996017456, + "id": 8 + }, + { + "value": 0.22692307829856873, + "id": 9 + }, + { + "value": 0.55897319316864014, + "id": 10 + }, + { + "value": 0.47179412841796875, + "id": 11 + }, + { + "value": 0.82820242643356323, + "id": 12 + }, + { + "value": 0.84358739852905273, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + } + ], + "leftModuleId": 6705683264150796, + "data": { + "Theme": 1, + "DISPLAYA": 0, + "DISPLAYB": 0 + }, + "pos": [ + 47, + 1 + ] + }, + { + "id": 1, + "plugin": "Cardinal", + "model": "HostAudio2", + "version": "2.0", + "params": [ + { + "value": 1.6788040399551392, + "id": 0 + } + ], + "data": { + "dcFilter": true + }, + "pos": [ + 56, + 0 + ] + }, + { + "id": 2, + "plugin": "Cardinal", + "model": "HostMIDI", + "version": "2.0", + "params": [], + "data": { + "pwRange": 0.0, + "smooth": false, + "channels": 1, + "polyMode": 0, + "lastPitch": 8192, + "lastMod": 0, + "inputChannel": 0, + "outputChannel": 0 + }, + "pos": [ + 12, + 0 + ] + } + ], + "cables": [ + { + "id": 5329555665685235, + "outputModuleId": 674529428127255, + "outputId": 0, + "inputModuleId": 3281475959768191, + "inputId": 0, + "color": "#52ffff" + }, + { + "id": 4079786865533706, + "outputModuleId": 2, + "outputId": 1, + "inputModuleId": 674529428127255, + "inputId": 0, + "color": "#ff9352" + }, + { + "id": 2542519858049967, + "outputModuleId": 2, + "outputId": 0, + "inputModuleId": 3016826773070784, + "inputId": 1, + "color": "#ff5252" + }, + { + "id": 7274031052069226, + "outputModuleId": 331777374771466, + "outputId": 0, + "inputModuleId": 3016826773070784, + "inputId": 3, + "color": "#ff9352" + }, + { + "id": 288612718039840, + "outputModuleId": 674529428127255, + "outputId": 0, + "inputModuleId": 1655718328487476, + "inputId": 0, + "color": "#6752ff" + }, + { + "id": 2184411845033116, + "outputModuleId": 3016826773070784, + "outputId": 0, + "inputModuleId": 2799668542620335, + "inputId": 0, + "color": "#527dff" + }, + { + "id": 1426661612649196, + "outputModuleId": 2799668542620335, + "outputId": 0, + "inputModuleId": 6705683264150796, + "inputId": 6, + "color": "#ff52d4" + }, + { + "id": 1316481817929903, + "outputModuleId": 8518489263490539, + "outputId": 0, + "inputModuleId": 2799668542620335, + "inputId": 7, + "color": "#ff5293" + }, + { + "id": 8860832807275497, + "outputModuleId": 2799668542620335, + "outputId": 1, + "inputModuleId": 6705683264150796, + "inputId": 7, + "color": "#ff5252" + }, + { + "id": 2348241717086824, + "outputModuleId": 1248991428573357, + "outputId": 0, + "inputModuleId": 1, + "inputId": 0, + "color": "#ff5252" + }, + { + "id": 2744931335876012, + "outputModuleId": 1248991428573357, + "outputId": 1, + "inputModuleId": 1, + "inputId": 1, + "color": "#ff9352" + }, + { + "id": 8176059278891256, + "outputModuleId": 6705683264150796, + "outputId": 0, + "inputModuleId": 1655718328487476, + "inputId": 1, + "color": "#52ffbe" + }, + { + "id": 6839192509423912, + "outputModuleId": 6705683264150796, + "outputId": 1, + "inputModuleId": 3281475959768191, + "inputId": 1, + "color": "#52ff7d" + }, + { + "id": 7402404986729595, + "outputModuleId": 3281475959768191, + "outputId": 0, + "inputModuleId": 1248991428573357, + "inputId": 12, + "color": "#ffd452" + }, + { + "id": 5252418928165945, + "outputModuleId": 1655718328487476, + "outputId": 0, + "inputModuleId": 1248991428573357, + "inputId": 11, + "color": "#e8ff52" + }, + { + "id": 3031391596484213, + "outputModuleId": 2, + "outputId": 6, + "inputModuleId": 3016826773070784, + "inputId": 0, + "color": "#ff5252" + } + ] +} \ No newline at end of file diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 71e397e9..5a36fd6d 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -279,7 +279,8 @@ else all: lv2 vst2 vst3 static endif -CORE_RESOURCES = $(subst ../Rack/res/,,$(wildcard ../Rack/res/ComponentLibrary/*.svg ../Rack/res/fonts/*.ttf)) +CORE_RESOURCES = patches +CORE_RESOURCES += $(subst ../Rack/res/,,$(wildcard ../Rack/res/ComponentLibrary/*.svg ../Rack/res/fonts/*.ttf)) CORE_RESOURCES += $(subst ../,,$(wildcard ../template*.vcv)) LV2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).lv2/resources/%) @@ -325,6 +326,10 @@ endif # -------------------------------------------------------------- +$(TARGET_DIR)/%/patches: ../../patches + -@mkdir -p "$(shell dirname $@)" + $(SILENT)ln -sf $(abspath $<) $@ + $(TARGET_DIR)/%/template.vcv: ../template.vcv -@mkdir -p "$(shell dirname $@)" $(SILENT)ln -sf $(abspath $<) $@ diff --git a/src/custom/asset.cpp b/src/custom/asset.cpp index ef110212..846af5bc 100644 --- a/src/custom/asset.cpp +++ b/src/custom/asset.cpp @@ -78,6 +78,15 @@ std::string plugin(plugin::Plugin* plugin, std::string filename) { return system::join(plugin->path, filename); } +// path to demo patch files +std::string patchesPath() { + // no bundlePath set, assume local source build + if (bundlePath.empty()) + return system::join(systemDir, "..", "..", "patches"); + // bundlePath is present, use resources from bundle + return system::join(systemDir, "patches"); +} + // path to plugin manifest std::string pluginManifest(const std::string& dirname) { // no bundlePath set, assume local source build diff --git a/src/override/MenuBar.cpp b/src/override/MenuBar.cpp index ae98ddfe..096c192c 100644 --- a/src/override/MenuBar.cpp +++ b/src/override/MenuBar.cpp @@ -57,6 +57,10 @@ #include "../CardinalCommon.hpp" namespace rack { +namespace asset { +std::string patchesPath(); +} + namespace app { namespace menuBar { @@ -85,9 +89,21 @@ struct MenuButton : ui::Button { struct FileButton : MenuButton { const bool isStandalone; + std::vector demoPatches; FileButton(const bool standalone) - : MenuButton(), isStandalone(standalone) {} + : MenuButton(), isStandalone(standalone) + { + const std::string patchesDir = asset::patchesPath(); + + if (system::isDirectory(patchesDir)) + { + demoPatches = system::getEntries(patchesDir); + std::sort(demoPatches.begin(), demoPatches.end(), [](const std::string& a, const std::string& b){ + return string::lowercase(a) < string::lowercase(b); + }); + } + } void onAction(const ActionEvent& e) override { ui::Menu* menu = createMenu(); @@ -111,11 +127,13 @@ struct FileButton : MenuButton { patchUtils::saveAsDialog(); })); - menu->addChild(createMenuItem("Export uncompressed json...", "", []() { - patchUtils::saveAsDialogUncompressed(); - })); + menu->addChild(createMenuItem("Revert", RACK_MOD_CTRL_NAME "+" RACK_MOD_SHIFT_NAME "+O", []() { + patchUtils::revertDialog(); + }, APP->patch->path.empty())); #ifdef HAVE_LIBLO + menu->addChild(new ui::MenuSeparator); + if (patchUtils::isRemoteConnected()) { menu->addChild(createMenuItem("Deploy to MOD", "F7", []() { patchUtils::deployToRemote(); @@ -133,10 +151,6 @@ struct FileButton : MenuButton { } #endif - menu->addChild(createMenuItem("Revert", RACK_MOD_CTRL_NAME "+" RACK_MOD_SHIFT_NAME "+O", []() { - patchUtils::revertDialog(); - }, APP->patch->path.empty())); - menu->addChild(new ui::MenuSeparator); // Load selection @@ -144,6 +158,30 @@ struct FileButton : MenuButton { patchUtils::loadSelectionDialog(); }, false, true)); + menu->addChild(createMenuItem("Export uncompressed json...", "", []() { + patchUtils::saveAsDialogUncompressed(); + })); + + if (!demoPatches.empty()) + { + menu->addChild(new ui::MenuSeparator); + + menu->addChild(createSubmenuItem("Open Demo / Example project", "", [=](ui::Menu* const menu) { + for (std::string path : demoPatches) { + std::string label = system::getStem(path); + + for (size_t i=0, len=label.size(); iaddChild(createMenuItem(label, "", [path]() { + patchUtils::loadPathDialog(path); + })); + } + })); + } + if (isStandalone) { menu->addChild(new ui::MenuSeparator); From 952df617e838a0d862678adef2a1dd170e56b222 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 29 Jun 2022 16:22:47 +0100 Subject: [PATCH 134/283] Add Myth modules Signed-off-by: falkTX --- .gitmodules | 3 +++ README.md | 1 + docs/LICENSES.md | 2 ++ plugins/Makefile | 12 ++++++++++++ plugins/myth-modules | 1 + plugins/plugins.cpp | 18 ++++++++++++++++++ src/custom/dep.cpp | 6 +++++- 7 files changed, 42 insertions(+), 1 deletion(-) create mode 160000 plugins/myth-modules diff --git a/.gitmodules b/.gitmodules index 37549d60..8ed60c2e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -206,3 +206,6 @@ [submodule "plugins/forsitan-modulare"] path = plugins/forsitan-modulare url = https://github.com/gosub/forsitan-modulare.git +[submodule "plugins/myth-modules"] + path = plugins/myth-modules + url = https://github.com/Ahineya/vcv-myth-plugin.git diff --git a/README.md b/README.md index 61a1b4e6..9a3accea 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ At the moment the following 3rd-party modules are provided: - Mog - mscHack - MSM +- Myth - Nonlinear Circuits - Orbits - Parable Instruments diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 9253946f..89fe81b2 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -60,6 +60,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | Mog | CC0-1.0 | | | mscHack | BSD-3-Clause | | | MSM | MIT | Repo's [LICENSE-dist.md](https://github.com/netboy3/MSM-vcvrack-plugin/issues/10) includes wrong information | +| Myth | GPL-3.0-or-later | | | Nonlinear Circuits | CC0-1.0 | | | Orbits | GPL-3.0-or-later | | | Parable Instruments | GPL-3.0-or-later | | @@ -187,6 +188,7 @@ Below is a list of artwork licenses from plugins | MSM/Fonts/DejaVuSansMono.ttf | Bitstream-Vera | | | MSM/Fonts/Segment7Standard.ttf | OFL-1.1-RFN | | | MSM/Fonts/Sudo.ttf | OFL-1.1-no-RFN | | +| Myth/* | GPL-3.0-or-later | No artwork specific license provided | | nonlinearcircuits/* | CC0-1.0 | No artwork specific license provided | | nonlinearcircuits/Audiowide-Regular.ttf | OFL-1.1-RFN | | | Orbits/* | CC-BY-NC-ND-4.0 | | diff --git a/plugins/Makefile b/plugins/Makefile index 5249cc79..d46d6344 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -727,6 +727,11 @@ PLUGIN_FILES += $(filter-out MSM/src/MSM.cpp,$(wildcard MSM/src/*.cpp)) # modules/types which are present in other plugins MSM_CUSTOM = ADSR BlankPanel Delay LFO LowFrequencyOscillator Mult Noise OP VCA VCO sawTable triTable +# -------------------------------------------------------------- +# myth-modules + +PLUGIN_FILES += $(filter-out myth-modules/src/plugin.cpp,$(wildcard myth-modules/src/*.cpp)) + # -------------------------------------------------------------- # Nonlinear Circuits @@ -1709,6 +1714,13 @@ $(BUILD_DIR)/MSM/%.cpp.o: MSM/%.cpp -DpluginInstance=pluginInstance__MSM \ -DDARKTHEME +$(BUILD_DIR)/myth-modules/%.cpp.o: myth-modules/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(MYTH_MODULES_CUSTOM),$(call custom_module_names,$(m),myth_modules)) \ + -DpluginInstance=pluginInstance__myth_modules + $(BUILD_DIR)/nonlinearcircuits/%.cpp.o: nonlinearcircuits/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/myth-modules b/plugins/myth-modules new file mode 160000 index 00000000..e511dd95 --- /dev/null +++ b/plugins/myth-modules @@ -0,0 +1 @@ +Subproject commit e511dd95eca830ee74fef23bddc195696603125f diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 32e94a22..712fa889 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -631,6 +631,9 @@ extern Model* modelBlankPanel; #undef modelVCA #undef modelVCO +// myth-modules +#include "myth-modules/src/plugin.hpp" + // Nonlinear Circuits #include "nonlinearcircuits/src/NLC.hpp" @@ -759,6 +762,7 @@ Plugin* pluginInstance__MockbaModular; Plugin* pluginInstance__Mog; extern Plugin* pluginInstance__mscHack; Plugin* pluginInstance__MSM; +Plugin* pluginInstance__myth_modules; Plugin* pluginInstance__nonlinearcircuits; Plugin* pluginInstance__Orbits; Plugin* pluginInstance__ParableInstruments; @@ -2343,6 +2347,19 @@ static void initStatic__MSM() } } +static void initStatic__myth_modules() +{ + Plugin* const p = new Plugin; + pluginInstance__myth_modules = p; + + const StaticPluginLoader spl(p, "myth-modules"); + if (spl.ok()) + { + p->addModel(modelMavka); + p->addModel(modelMolphar); + } +} + static void initStatic__nonlinearcircuits() { Plugin* const p = new Plugin; @@ -2726,6 +2743,7 @@ void initStaticPlugins() initStatic__Mog(); initStatic__mscHack(); initStatic__MSM(); + initStatic__myth_modules(); initStatic__nonlinearcircuits(); initStatic__Orbits(); initStatic__ParableInstruments(); diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index d72ff45d..fd611475 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 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 @@ -268,6 +268,9 @@ static const struct { { "/kocmoc/res/SKF.svg", {}, -1 }, { "/kocmoc/res/SVF.svg", {}, -1 }, { "/kocmoc/res/TRG.svg", {}, -1 }, + // GPL-3.0-or-later + { "/myth-modules/res/Mavka.svg", {}, -1 }, + { "/myth-modules/res/Molphar.svg", {}, -1 }, // CC0-1.0 { "/nonlinearcircuits/res/BOOLs2.svg", {}, -1 }, { "/nonlinearcircuits/res/DoubleNeuronRef.svg", {}, -1 }, @@ -549,6 +552,7 @@ static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const c { // scopes or other special things (do nothing) case 0x40ffffff: + case 0xff0000aa: case 0xff004200: case 0xff2b281e: case 0xff2d2827: From 2bcece64e71a4ac5b8d01ddfb340fdd9aef99736 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 29 Jun 2022 17:35:40 +0100 Subject: [PATCH 135/283] Do not exclude demo patches from source dir Signed-off-by: falkTX --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 03386518..44c8eb8d 100644 --- a/Makefile +++ b/Makefile @@ -328,7 +328,6 @@ TAR_ARGS = \ --exclude=build \ --exclude=jucewrapper \ --exclude=lv2export \ - --exclude=patches \ --exclude=carla/data \ --exclude=carla/source/frontend \ --exclude=carla/source/interposer \ From 0de51ecba8117e01f890834c9ddb59922f3e0747 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 30 Jun 2022 15:41:08 +0100 Subject: [PATCH 136/283] Update DPF, test macOS file browser dialog fix Signed-off-by: falkTX --- dpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpf b/dpf index 90b8d2d2..38dad9fd 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 90b8d2d2710d7aeb9f8f097dc3b4baed11c1073f +Subproject commit 38dad9fdfd75e0887a31abb9bfe7acff88cfd85b From a37016969d880c58d72a158a1233992c3fbf2fb4 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 30 Jun 2022 19:42:01 +0100 Subject: [PATCH 137/283] Handle example/demo patches as templates Closes #270 Signed-off-by: falkTX --- src/CardinalCommon.cpp | 10 ++++++++-- src/CardinalCommon.hpp | 2 +- src/override/MenuBar.cpp | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index b96557b8..5358c77e 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -151,11 +151,17 @@ void loadDialog() #endif } -void loadPathDialog(const std::string& path) +void loadPathDialog(const std::string& path, const bool asTemplate) { #ifndef HEADLESS - promptClear("The current patch is unsaved. Clear it and open the new patch?", [path]() { + promptClear("The current patch is unsaved. Clear it and open the new patch?", [path, asTemplate]() { APP->patch->loadAction(path); + + if (asTemplate) + { + APP->patch->path = ""; + APP->history->setSaved(); + } }); #endif } diff --git a/src/CardinalCommon.hpp b/src/CardinalCommon.hpp index 25ad8553..b45b1e8c 100644 --- a/src/CardinalCommon.hpp +++ b/src/CardinalCommon.hpp @@ -58,7 +58,7 @@ std::string getSpecialPath(SpecialPath type); namespace patchUtils { void loadDialog(); -void loadPathDialog(const std::string& path); +void loadPathDialog(const std::string& path, bool asTemplate = false); void loadSelectionDialog(); void loadTemplateDialog(); void revertDialog(); diff --git a/src/override/MenuBar.cpp b/src/override/MenuBar.cpp index 096c192c..c19e857e 100644 --- a/src/override/MenuBar.cpp +++ b/src/override/MenuBar.cpp @@ -176,7 +176,7 @@ struct FileButton : MenuButton { } menu->addChild(createMenuItem(label, "", [path]() { - patchUtils::loadPathDialog(path); + patchUtils::loadPathDialog(path, true); })); } })); From e79038812b1bad3fb5b09e5f07c2d7f3c2c6c11c Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 30 Jun 2022 20:03:38 +0100 Subject: [PATCH 138/283] Set custom DISTRHO and DGL namespace Closes #271 Signed-off-by: falkTX --- Makefile | 7 +++++-- carla | 2 +- deps/Makefile | 2 ++ dpf | 2 +- jucewrapper/CMakeLists.txt | 6 ++++++ lv2export/Makefile | 2 +- plugins/Makefile | 2 ++ src/Makefile | 2 ++ src/Makefile.cardinal.mk | 2 ++ 9 files changed, 22 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 44c8eb8d..4c8a970c 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,6 @@ VERSION = 22.06 # -------------------------------------------------------------- # Import base definitions -USE_NANOVG_FBO = true include dpf/Makefile.base.mk # -------------------------------------------------------------- @@ -43,7 +42,9 @@ endif # -------------------------------------------------------------- # Carla config -CARLA_EXTRA_ARGS = CARLA_BACKEND_NAMESPACE=Cardinal \ +CARLA_EXTRA_ARGS = \ + CARLA_BACKEND_NAMESPACE=Cardinal \ + DGL_NAMESPACE=CardinalDGL \ HAVE_FFMPEG=false \ HAVE_FLUIDSYNTH=false \ HAVE_PROJECTM=false \ @@ -58,6 +59,8 @@ endif # DGL config DGL_EXTRA_ARGS = \ + DISTRHO_NAMESPACE=CardinalDISTRHO \ + DGL_NAMESPACE=CardinalDGL \ NVG_DISABLE_SKIPPING_WHITESPACE=true \ NVG_FONT_TEXTURE_FLAGS=NVG_IMAGE_NEAREST \ USE_NANOVG_FBO=true \ diff --git a/carla b/carla index f428af38..770364fd 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit f428af3894a5916aee281fa682f4a938f8e67f0b +Subproject commit 770364fd8e684d08aa08f74d88c6d8cb41f77c21 diff --git a/deps/Makefile b/deps/Makefile index 94b15c19..22d32062 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -7,6 +7,8 @@ # -------------------------------------------------------------- # Import base definitions +DISTRHO_NAMESPACE = CardinalDISTRHO +DGL_NAMESPACE = CardinalDGL USE_NANOVG_FBO = true include ../dpf/Makefile.base.mk diff --git a/dpf b/dpf index 38dad9fd..194f04ae 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 38dad9fdfd75e0887a31abb9bfe7acff88cfd85b +Subproject commit 194f04aee8396c98f320052626603d77a1b1931e diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 1854ac73..15f35d6a 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -143,6 +143,8 @@ target_include_directories(Cardinal target_compile_definitions(Cardinal PUBLIC + DISTRHO_NAMESPACE=CardinalDISTRHO + DGL_NAMESPACE=CardinalDGL JucePlugin_PreferredChannelConfigurations=8,8 JUCE_CHECK_MEMORY_LEAKS=0 JUCE_DISABLE_NATIVE_FILECHOOSERS=1 @@ -234,6 +236,8 @@ target_include_directories(CardinalFX target_compile_definitions(CardinalFX PUBLIC + DISTRHO_NAMESPACE=CardinalDISTRHO + DGL_NAMESPACE=CardinalDGL JucePlugin_PreferredChannelConfigurations=2,2 JUCE_CHECK_MEMORY_LEAKS=0 JUCE_DISABLE_NATIVE_FILECHOOSERS=1 @@ -324,6 +328,8 @@ target_include_directories(CardinalSynth target_compile_definitions(CardinalSynth PUBLIC + DISTRHO_NAMESPACE=CardinalDISTRHO + DGL_NAMESPACE=CardinalDGL JucePlugin_PreferredChannelConfigurations=0,2 JUCE_CHECK_MEMORY_LEAKS=0 JUCE_DISABLE_NATIVE_FILECHOOSERS=1 diff --git a/lv2export/Makefile b/lv2export/Makefile index 0946d456..53ef3a1c 100644 --- a/lv2export/Makefile +++ b/lv2export/Makefile @@ -14,7 +14,7 @@ SYSDEPS ?= false # -------------------------------------------------------------- # Import base definitions -USE_NANOVG_FBO = true +DISTRHO_NAMESPACE = CardinalLV2 include ../dpf/Makefile.base.mk # -------------------------------------------------------------- diff --git a/plugins/Makefile b/plugins/Makefile index d46d6344..76f002fb 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -7,6 +7,8 @@ # -------------------------------------------------------------- # Import base definitions +DISTRHO_NAMESPACE = CardinalDISTRHO +DGL_NAMESPACE = CardinalDGL USE_NANOVG_FBO = true include ../dpf/Makefile.base.mk diff --git a/src/Makefile b/src/Makefile index 2e2bfab2..e24110d6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,6 +7,8 @@ # -------------------------------------------------------------- # Import base definitions +DISTRHO_NAMESPACE = CardinalDISTRHO +DGL_NAMESPACE = CardinalDGL USE_NANOVG_FBO = true include ../dpf/Makefile.base.mk diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 5a36fd6d..ec997a46 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -48,6 +48,8 @@ endif # STATIC_BUILD # -------------------------------------------------------------- # Import base definitions +DISTRHO_NAMESPACE = CardinalDISTRHO +DGL_NAMESPACE = CardinalDGL NVG_DISABLE_SKIPPING_WHITESPACE = true NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST USE_NANOVG_FBO = true From f4c2c03003341d5f59fefe3b36a88989d0428e4e Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 10:55:17 +0100 Subject: [PATCH 139/283] Allow forcing GLES mode Signed-off-by: falkTX --- Makefile | 4 +--- carla | 2 +- dpf | 2 +- plugins/Makefile | 6 ++++++ src/Makefile | 6 ++++++ src/Makefile.cardinal.mk | 6 ++++++ 6 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 4c8a970c..b619221e 100644 --- a/Makefile +++ b/Makefile @@ -97,8 +97,7 @@ endif # -------------------------------------------------------------- # Check for X11+OpenGL dependencies (unless headless build) -ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS),true) -ifneq ($(WASM),true) +ifneq ($(HAIKU_OR_MACOS_OR_WASM_OR_WINDOWS),true) ifneq ($(HEADLESS),true) ifneq ($(HAVE_OPENGL),true) @@ -125,7 +124,6 @@ CARLA_EXTRA_ARGS += HAVE_XCURSOR=false CARLA_EXTRA_ARGS += HAVE_XEXT=false CARLA_EXTRA_ARGS += HAVE_XRANDR=false -endif endif endif diff --git a/carla b/carla index 770364fd..ca154454 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 770364fd8e684d08aa08f74d88c6d8cb41f77c21 +Subproject commit ca15445429d7ff872fd40db23e24840cc6b90436 diff --git a/dpf b/dpf index 194f04ae..717c7596 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 194f04aee8396c98f320052626603d77a1b1931e +Subproject commit 717c7596c29530998fc8522d000c9e856618a56b diff --git a/plugins/Makefile b/plugins/Makefile index 76f002fb..61b4b492 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -1004,6 +1004,12 @@ ifeq ($(NOPLUGINS),true) BASE_FLAGS += -DNOPLUGINS endif +ifeq ($(USE_GLES2),true) +BASE_FLAGS += -DNANOVG_GLES2_FORCED +else ifeq ($(USE_GLES3),true) +BASE_FLAGS += -DNANOVG_GLES3_FORCED +endif + ifeq ($(shell $(PKG_CONFIG) --exists sndfile && echo true),true) BASE_FLAGS += -DHAVE_SNDFILE endif diff --git a/src/Makefile b/src/Makefile index e24110d6..6f2d182a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -95,6 +95,12 @@ BASE_FLAGS += -I../include/mingw-compat BASE_FLAGS += -I../include/mingw-std-threads endif +ifeq ($(USE_GLES2),true) +BASE_FLAGS += -DNANOVG_GLES2_FORCED +else ifeq ($(USE_GLES3),true) +BASE_FLAGS += -DNANOVG_GLES3_FORCED +endif + BUILD_C_FLAGS += -std=gnu11 BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index ec997a46..83a7b90a 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -178,6 +178,12 @@ BASE_FLAGS += -I../../include/mingw-compat BASE_FLAGS += -I../../include/mingw-std-threads endif +ifeq ($(USE_GLES2),true) +BASE_FLAGS += -DNANOVG_GLES2_FORCED +else ifeq ($(USE_GLES3),true) +BASE_FLAGS += -DNANOVG_GLES3_FORCED +endif + BUILD_C_FLAGS += -std=gnu11 BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing From d03e73119dfa7513ccba6808841ae52153fa663f Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 12:45:38 +0100 Subject: [PATCH 140/283] wasm related tweaks, still WIP Signed-off-by: falkTX --- .../{haiku-compat => linux-compat}/execinfo.h | 3 +++ .../ghc/filesystem.hpp | 0 src/CardinalPlugin.cpp | 17 +++++++++++++++-- src/Makefile | 4 +++- src/Makefile.cardinal.mk | 4 +++- 5 files changed, 24 insertions(+), 4 deletions(-) rename include/{haiku-compat => linux-compat}/execinfo.h (94%) rename include/{haiku-compat => linux-compat}/ghc/filesystem.hpp (100%) diff --git a/include/haiku-compat/execinfo.h b/include/linux-compat/execinfo.h similarity index 94% rename from include/haiku-compat/execinfo.h rename to include/linux-compat/execinfo.h index 78e164a6..02b7f777 100644 --- a/include/haiku-compat/execinfo.h +++ b/include/linux-compat/execinfo.h @@ -17,6 +17,8 @@ #pragma once +#ifdef __HAIKU__ +// these are missing from HaikuOS #define pthread_setname_np(...) static int pthread_getcpuclockid(pthread_t, clockid_t* const clock_id) @@ -24,6 +26,7 @@ static int pthread_getcpuclockid(pthread_t, clockid_t* const clock_id) *clock_id = CLOCK_REALTIME; return 0; } +#endif static int backtrace(void**, int) { diff --git a/include/haiku-compat/ghc/filesystem.hpp b/include/linux-compat/ghc/filesystem.hpp similarity index 100% rename from include/haiku-compat/ghc/filesystem.hpp rename to include/linux-compat/ghc/filesystem.hpp diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 5e206506..38e5f320 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -47,7 +47,10 @@ #include "DistrhoPluginUtils.hpp" #include "PluginContext.hpp" #include "extra/Base64.hpp" -#include "extra/SharedResourcePointer.hpp" + +#ifndef DISTRHO_OS_WASM +# include "extra/SharedResourcePointer.hpp" +#endif static const constexpr uint kCardinalStateBaseCount = 3; // patch, screenshot, comment @@ -173,7 +176,9 @@ struct Initializer else #endif { - #if defined(ARCH_MAC) + #if defined(DISTRHO_OS_WASM) + asset::systemDir = "/resources"; + #elif defined(ARCH_MAC) asset::systemDir = "/Library/Application Support/Cardinal"; #elif defined(ARCH_WIN) const std::string commonprogfiles = getSpecialPath(kSpecialPathCommonProgramFiles); @@ -452,7 +457,11 @@ struct ScopedContext { class CardinalPlugin : public CardinalBasePlugin { + #ifdef DISTRHO_OS_WASM + ScopedPointer fInitializer; + #else SharedResourcePointer fInitializer; + #endif #if DISTRHO_PLUGIN_NUM_INPUTS != 0 /* If host audio ins == outs we can get issues for inplace processing. @@ -484,7 +493,11 @@ class CardinalPlugin : public CardinalBasePlugin public: CardinalPlugin() : CardinalBasePlugin(kModuleParameters + kWindowParameterCount + 1, 0, kCardinalStateCount), + #ifdef DISTRHO_OS_WASM + fInitializer(new Initializer(this)), + #else fInitializer(this), + #endif #if DISTRHO_PLUGIN_NUM_INPUTS != 0 fAudioBufferCopy(nullptr), #endif diff --git a/src/Makefile b/src/Makefile index 6f2d182a..0ef8eb01 100644 --- a/src/Makefile +++ b/src/Makefile @@ -35,7 +35,9 @@ BASE_FLAGS += -DARCH_LIN endif ifeq ($(HAIKU),true) -BASE_FLAGS += -I../include/haiku-compat +BASE_FLAGS += -I../include/linux-compat +else ifeq ($(WASM),true) +BASE_FLAGS += -I../include/linux-compat endif BASE_FLAGS += -DPRIVATE= diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 83a7b90a..027c09c1 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -204,7 +204,9 @@ BASE_FLAGS += -Wno-unused-variable # -------------------------------------------------------------- # extra linker flags -ifeq ($(HAIKU),true) +ifeq ($(WASM),true) +LINK_FLAGS += --preload-file=./resources -sALLOW_MEMORY_GROWTH +else ifeq ($(HAIKU),true) LINK_FLAGS += -lpthread else LINK_FLAGS += -pthread From be26b6f61cbd9431b675a5a2f59bbdce9ae1996d Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 15:10:01 +0100 Subject: [PATCH 141/283] Update imgui for GL3 compat mode Signed-off-by: falkTX --- plugins/Cardinal/src/DearImGui.cpp | 33 + plugins/Cardinal/src/DearImGui/imconfig.h | 4 +- plugins/Cardinal/src/DearImGui/imgui_demo.cpp | 6 - .../src/DearImGui/imgui_impl_opengl3.cpp | 798 ++++++++++++++++++ .../src/DearImGui/imgui_impl_opengl3.h | 55 ++ .../Cardinal/src/DearImGuiColorTextEditor.cpp | 17 + plugins/Cardinal/src/ImGuiWidget.cpp | 43 +- plugins/Makefile | 4 +- 8 files changed, 947 insertions(+), 13 deletions(-) create mode 100644 plugins/Cardinal/src/DearImGui.cpp create mode 100644 plugins/Cardinal/src/DearImGui/imgui_impl_opengl3.cpp create mode 100644 plugins/Cardinal/src/DearImGui/imgui_impl_opengl3.h create mode 100644 plugins/Cardinal/src/DearImGuiColorTextEditor.cpp diff --git a/plugins/Cardinal/src/DearImGui.cpp b/plugins/Cardinal/src/DearImGui.cpp new file mode 100644 index 00000000..01633847 --- /dev/null +++ b/plugins/Cardinal/src/DearImGui.cpp @@ -0,0 +1,33 @@ +/* + * Dear ImGui for DPF, converted to VCV + * Copyright (C) 2021-2022 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#if defined(DGL_USE_GLES2) +# define IMGUI_IMPL_OPENGL_ES2 +#elif defined(DGL_USE_GLES3) +# define IMGUI_IMPL_OPENGL_ES3 +#endif + +#define IMGUI_DPF_BACKEND +#include "DearImGui/imgui.cpp" +#include "DearImGui/imgui_demo.cpp" +#include "DearImGui/imgui_draw.cpp" +#include "DearImGui/imgui_tables.cpp" +#include "DearImGui/imgui_widgets.cpp" +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) +# include "DearImGui/imgui_impl_opengl3.cpp" +#else +# include "DearImGui/imgui_impl_opengl2.cpp" +#endif diff --git a/plugins/Cardinal/src/DearImGui/imconfig.h b/plugins/Cardinal/src/DearImGui/imconfig.h index 42043f36..f2556017 100644 --- a/plugins/Cardinal/src/DearImGui/imconfig.h +++ b/plugins/Cardinal/src/DearImGui/imconfig.h @@ -32,8 +32,8 @@ //---- Disable all of Dear ImGui or don't implement standard windows. // It is very strongly recommended to NOT disable the demo windows during development. Please read comments in imgui_demo.cpp. //#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty. -#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended. -#define IMGUI_DISABLE_METRICS_WINDOW // Disable metrics/debugger and other debug tools: ShowMetricsWindow() and ShowStackToolWindow() will be empty. +//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended. +//#define IMGUI_DISABLE_METRICS_WINDOW // Disable metrics/debugger and other debug tools: ShowMetricsWindow() and ShowStackToolWindow() will be empty. //---- Don't implement some functions to reduce linkage requirements. //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a) diff --git a/plugins/Cardinal/src/DearImGui/imgui_demo.cpp b/plugins/Cardinal/src/DearImGui/imgui_demo.cpp index 9cbc503a..2b7c889b 100644 --- a/plugins/Cardinal/src/DearImGui/imgui_demo.cpp +++ b/plugins/Cardinal/src/DearImGui/imgui_demo.cpp @@ -342,12 +342,6 @@ void ImGui::ShowDemoWindow(bool* p_open) if (unsaved_document) window_flags |= ImGuiWindowFlags_UnsavedDocument; if (no_close) p_open = NULL; // Don't pass our bool* to Begin - // We specify a default position/size in case there's no data in the .ini file. - // We only do it to make the demo applications a little more welcoming, but typically this isn't required. - const ImGuiViewport* main_viewport = ImGui::GetMainViewport(); - ImGui::SetNextWindowPos(ImVec2(main_viewport->WorkPos.x + 650, main_viewport->WorkPos.y + 20), ImGuiCond_FirstUseEver); - ImGui::SetNextWindowSize(ImVec2(550, 680), ImGuiCond_FirstUseEver); - // Main body of the Demo window starts here. if (!ImGui::Begin("Dear ImGui Demo", p_open, window_flags)) { diff --git a/plugins/Cardinal/src/DearImGui/imgui_impl_opengl3.cpp b/plugins/Cardinal/src/DearImGui/imgui_impl_opengl3.cpp new file mode 100644 index 00000000..288864eb --- /dev/null +++ b/plugins/Cardinal/src/DearImGui/imgui_impl_opengl3.cpp @@ -0,0 +1,798 @@ +// dear imgui: Renderer Backend for modern OpenGL with shaders / programmatic pipeline +// - Desktop GL: 2.x 3.x 4.x +// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0) +// This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..) + +// Implemented features: +// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! +// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. + +// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. +// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. +// If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. +// Read online: https://github.com/ocornut/imgui/tree/master/docs + +// CHANGELOG +// (minor and older changes stripped away, please see git history for details) +// 2021-12-15: OpenGL: Using buffer orphaning + glBufferSubData(), seems to fix leaks with multi-viewports with some Intel HD drivers. +// 2021-08-23: OpenGL: Fixed ES 3.0 shader ("#version 300 es") use normal precision floats to avoid wobbly rendering at HD resolutions. +// 2021-08-19: OpenGL: Embed and use our own minimal GL loader (imgui_impl_opengl3_loader.h), removing requirement and support for third-party loader. +// 2021-06-29: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX). +// 2021-06-25: OpenGL: Use OES_vertex_array extension on Emscripten + backup/restore current state. +// 2021-06-21: OpenGL: Destroy individual vertex/fragment shader objects right after they are linked into the main shader. +// 2021-05-24: OpenGL: Access GL_CLIP_ORIGIN when "GL_ARB_clip_control" extension is detected, inside of just OpenGL 4.5 version. +// 2021-05-19: OpenGL: Replaced direct access to ImDrawCmd::TextureId with a call to ImDrawCmd::GetTexID(). (will become a requirement) +// 2021-04-06: OpenGL: Don't try to read GL_CLIP_ORIGIN unless we're OpenGL 4.5 or greater. +// 2021-02-18: OpenGL: Change blending equation to preserve alpha in output buffer. +// 2021-01-03: OpenGL: Backup, setup and restore GL_STENCIL_TEST state. +// 2020-10-23: OpenGL: Backup, setup and restore GL_PRIMITIVE_RESTART state. +// 2020-10-15: OpenGL: Use glGetString(GL_VERSION) instead of glGetIntegerv(GL_MAJOR_VERSION, ...) when the later returns zero (e.g. Desktop GL 2.x) +// 2020-09-17: OpenGL: Fix to avoid compiling/calling glBindSampler() on ES or pre 3.3 context which have the defines set by a loader. +// 2020-07-10: OpenGL: Added support for glad2 OpenGL loader. +// 2020-05-08: OpenGL: Made default GLSL version 150 (instead of 130) on OSX. +// 2020-04-21: OpenGL: Fixed handling of glClipControl(GL_UPPER_LEFT) by inverting projection matrix. +// 2020-04-12: OpenGL: Fixed context version check mistakenly testing for 4.0+ instead of 3.2+ to enable ImGuiBackendFlags_RendererHasVtxOffset. +// 2020-03-24: OpenGL: Added support for glbinding 2.x OpenGL loader. +// 2020-01-07: OpenGL: Added support for glbinding 3.x OpenGL loader. +// 2019-10-25: OpenGL: Using a combination of GL define and runtime GL version to decide whether to use glDrawElementsBaseVertex(). Fix building with pre-3.2 GL loaders. +// 2019-09-22: OpenGL: Detect default GL loader using __has_include compiler facility. +// 2019-09-16: OpenGL: Tweak initialization code to allow application calling ImGui_ImplOpenGL3_CreateFontsTexture() before the first NewFrame() call. +// 2019-05-29: OpenGL: Desktop GL only: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. +// 2019-04-30: OpenGL: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. +// 2019-03-29: OpenGL: Not calling glBindBuffer more than necessary in the render loop. +// 2019-03-15: OpenGL: Added a GL call + comments in ImGui_ImplOpenGL3_Init() to detect uninitialized GL function loaders early. +// 2019-03-03: OpenGL: Fix support for ES 2.0 (WebGL 1.0). +// 2019-02-20: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN even if defined by the headers/loader. +// 2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display. +// 2019-02-01: OpenGL: Using GLSL 410 shaders for any version over 410 (e.g. 430, 450). +// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. +// 2018-11-13: OpenGL: Support for GL 4.5's glClipControl(GL_UPPER_LEFT) / GL_CLIP_ORIGIN. +// 2018-08-29: OpenGL: Added support for more OpenGL loaders: glew and glad, with comments indicative that any loader can be used. +// 2018-08-09: OpenGL: Default to OpenGL ES 3 on iOS and Android. GLSL version default to "#version 300 ES". +// 2018-07-30: OpenGL: Support for GLSL 300 ES and 410 core. Fixes for Emscripten compilation. +// 2018-07-10: OpenGL: Support for more GLSL versions (based on the GLSL version string). Added error output when shaders fail to compile/link. +// 2018-06-08: Misc: Extracted imgui_impl_opengl3.cpp/.h away from the old combined GLFW/SDL+OpenGL3 examples. +// 2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. +// 2018-05-25: OpenGL: Removed unnecessary backup/restore of GL_ELEMENT_ARRAY_BUFFER_BINDING since this is part of the VAO state. +// 2018-05-14: OpenGL: Making the call to glBindSampler() optional so 3.2 context won't fail if the function is a NULL pointer. +// 2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150". +// 2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. +// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself. +// 2018-01-07: OpenGL: Changed GLSL shader version from 330 to 150. +// 2017-09-01: OpenGL: Save and restore current bound sampler. Save and restore current polygon mode. +// 2017-05-01: OpenGL: Fixed save and restore of current blend func state. +// 2017-05-01: OpenGL: Fixed save and restore of current GL_ACTIVE_TEXTURE. +// 2016-09-05: OpenGL: Fixed save and restore of current scissor rectangle. +// 2016-07-29: OpenGL: Explicitly setting GL_UNPACK_ROW_LENGTH to reduce issues because SDL changes it. (#752) + +//---------------------------------------- +// OpenGL GLSL GLSL +// version version string +//---------------------------------------- +// 2.0 110 "#version 110" +// 2.1 120 "#version 120" +// 3.0 130 "#version 130" +// 3.1 140 "#version 140" +// 3.2 150 "#version 150" +// 3.3 330 "#version 330 core" +// 4.0 400 "#version 400 core" +// 4.1 410 "#version 410 core" +// 4.2 420 "#version 410 core" +// 4.3 430 "#version 430 core" +// ES 2.0 100 "#version 100" = WebGL 1.0 +// ES 3.0 300 "#version 300 es" = WebGL 2.0 +//---------------------------------------- + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "imgui.h" +#include "imgui_impl_opengl3.h" +#include +#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +#include // intptr_t +#else +#include // intptr_t +#endif + +// GL includes +#if defined(IMGUI_IMPL_OPENGL_ES2) +#include +#if defined(__EMSCRIPTEN__) +#ifndef GL_GLEXT_PROTOTYPES +#define GL_GLEXT_PROTOTYPES +#endif +#include +#endif +#elif defined(IMGUI_IMPL_OPENGL_ES3) +#if defined(__APPLE__) +#include +#endif +#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) +#include // Use GL ES 3 +#else +#include // Use GL ES 3 +#endif +#elif !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM) +// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. +// Helper libraries are often used for this purpose! Here we are using our own minimal custom loader based on gl3w. +// In the rest of your app/engine, you can use another loader of your choice (gl3w, glew, glad, glbinding, glext, glLoadGen, etc.). +// If you happen to be developing a new feature for this backend (imgui_impl_opengl3.cpp): +// - You may need to regenerate imgui_impl_opengl3_loader.h to add new symbols. See https://github.com/dearimgui/gl3w_stripped +// - You can temporarily use an unstripped version. See https://github.com/dearimgui/gl3w_stripped/releases +// Changes to this backend using new APIs should be accompanied by a regenerated stripped loader version. +#define IMGL3W_IMPL +#include "imgui_impl_opengl3_loader.h" +#endif + +// Vertex arrays are not supported on ES2/WebGL1 unless Emscripten which uses an extension +#ifndef IMGUI_IMPL_OPENGL_ES2 +#define IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY +#elif defined(__EMSCRIPTEN__) +#define IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY +#define glBindVertexArray glBindVertexArrayOES +#define glGenVertexArrays glGenVertexArraysOES +#define glDeleteVertexArrays glDeleteVertexArraysOES +#define GL_VERTEX_ARRAY_BINDING GL_VERTEX_ARRAY_BINDING_OES +#endif + +// Desktop GL 2.0+ has glPolygonMode() which GL ES and WebGL don't have. +#ifdef GL_POLYGON_MODE +#define IMGUI_IMPL_HAS_POLYGON_MODE +#endif + +// Desktop GL 3.2+ has glDrawElementsBaseVertex() which GL ES and WebGL don't have. +#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && defined(GL_VERSION_3_2) +#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET +#endif + +// Desktop GL 3.3+ has glBindSampler() +#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && defined(GL_VERSION_3_3) +#define IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER +#endif + +// Desktop GL 3.1+ has GL_PRIMITIVE_RESTART state +#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && defined(GL_VERSION_3_1) +#define IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART +#endif + +// Desktop GL use extension detection +#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) +#define IMGUI_IMPL_OPENGL_MAY_HAVE_EXTENSIONS +#endif + +// OpenGL Data +struct ImGui_ImplOpenGL3_Data +{ + GLuint GlVersion; // Extracted at runtime using GL_MAJOR_VERSION, GL_MINOR_VERSION queries (e.g. 320 for GL 3.2) + char GlslVersionString[32]; // Specified by user or detected based on compile time GL settings. + GLuint FontTexture; + GLuint ShaderHandle; + GLint AttribLocationTex; // Uniforms location + GLint AttribLocationProjMtx; + GLuint AttribLocationVtxPos; // Vertex attributes location + GLuint AttribLocationVtxUV; + GLuint AttribLocationVtxColor; + unsigned int VboHandle, ElementsHandle; + GLsizeiptr VertexBufferSize; + GLsizeiptr IndexBufferSize; + bool HasClipOrigin; + + ImGui_ImplOpenGL3_Data() { memset(this, 0, sizeof(*this)); } +}; + +// Backend data stored in io.BackendRendererUserData to allow support for multiple Dear ImGui contexts +// It is STRONGLY preferred that you use docking branch with multi-viewports (== single Dear ImGui context + multiple windows) instead of multiple Dear ImGui contexts. +static ImGui_ImplOpenGL3_Data* ImGui_ImplOpenGL3_GetBackendData() +{ + return ImGui::GetCurrentContext() ? (ImGui_ImplOpenGL3_Data*)ImGui::GetIO().BackendRendererUserData : NULL; +} + +// Functions +bool ImGui_ImplOpenGL3_Init(const char* glsl_version) +{ + ImGuiIO& io = ImGui::GetIO(); + IM_ASSERT(io.BackendRendererUserData == NULL && "Already initialized a renderer backend!"); + + // Initialize our loader +#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM) + if (imgl3wInit() != 0) + { + fprintf(stderr, "Failed to initialize OpenGL loader!\n"); + return false; + } +#endif + + // Setup backend capabilities flags + ImGui_ImplOpenGL3_Data* bd = IM_NEW(ImGui_ImplOpenGL3_Data)(); + io.BackendRendererUserData = (void*)bd; + io.BackendRendererName = "imgui_impl_opengl3"; + + // Query for GL version (e.g. 320 for GL 3.2) +#if !defined(IMGUI_IMPL_OPENGL_ES2) + GLint major = 0; + GLint minor = 0; + glGetIntegerv(GL_MAJOR_VERSION, &major); + glGetIntegerv(GL_MINOR_VERSION, &minor); + if (major == 0 && minor == 0) + { + // Query GL_VERSION in desktop GL 2.x, the string will start with "." + const char* gl_version = (const char*)glGetString(GL_VERSION); + sscanf(gl_version, "%d.%d", &major, &minor); + } + bd->GlVersion = (GLuint)(major * 100 + minor * 10); +#else + bd->GlVersion = 200; // GLES 2 +#endif + +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET + if (bd->GlVersion >= 320) + io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. +#endif + + // Store GLSL version string so we can refer to it later in case we recreate shaders. + // Note: GLSL version is NOT the same as GL version. Leave this to NULL if unsure. + if (glsl_version == NULL) + { +#if defined(IMGUI_IMPL_OPENGL_ES2) + glsl_version = "#version 100"; +#elif defined(IMGUI_IMPL_OPENGL_ES3) + glsl_version = "#version 300 es"; +#elif defined(__APPLE__) + glsl_version = "#version 150"; +#else + glsl_version = "#version 130"; +#endif + } + IM_ASSERT((int)strlen(glsl_version) + 2 < IM_ARRAYSIZE(bd->GlslVersionString)); + strcpy(bd->GlslVersionString, glsl_version); + strcat(bd->GlslVersionString, "\n"); + + // Make an arbitrary GL call (we don't actually need the result) + // IF YOU GET A CRASH HERE: it probably means the OpenGL function loader didn't do its job. Let us know! + GLint current_texture; + glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤t_texture); + + // Detect extensions we support + bd->HasClipOrigin = (bd->GlVersion >= 450); +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_EXTENSIONS + GLint num_extensions = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); + for (GLint i = 0; i < num_extensions; i++) + { + const char* extension = (const char*)glGetStringi(GL_EXTENSIONS, i); + if (extension != NULL && strcmp(extension, "GL_ARB_clip_control") == 0) + bd->HasClipOrigin = true; + } +#endif + + return true; +} + +void ImGui_ImplOpenGL3_Shutdown() +{ + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + IM_ASSERT(bd != NULL && "No renderer backend to shutdown, or already shutdown?"); + ImGuiIO& io = ImGui::GetIO(); + + ImGui_ImplOpenGL3_DestroyDeviceObjects(); + io.BackendRendererName = NULL; + io.BackendRendererUserData = NULL; + IM_DELETE(bd); +} + +void ImGui_ImplOpenGL3_NewFrame() +{ + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + IM_ASSERT(bd != NULL && "Did you call ImGui_ImplOpenGL3_Init()?"); + + if (!bd->ShaderHandle) + ImGui_ImplOpenGL3_CreateDeviceObjects(); +} + +static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height, GLuint vertex_array_object) +{ + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill + glEnable(GL_BLEND); + glBlendEquation(GL_FUNC_ADD); + glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + glDisable(GL_STENCIL_TEST); + glEnable(GL_SCISSOR_TEST); +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART + if (bd->GlVersion >= 310) + glDisable(GL_PRIMITIVE_RESTART); +#endif +#ifdef IMGUI_IMPL_HAS_POLYGON_MODE + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif + + // Support for GL 4.5 rarely used glClipControl(GL_UPPER_LEFT) +#if defined(GL_CLIP_ORIGIN) + bool clip_origin_lower_left = true; + if (bd->HasClipOrigin) + { + GLenum current_clip_origin = 0; glGetIntegerv(GL_CLIP_ORIGIN, (GLint*)¤t_clip_origin); + if (current_clip_origin == GL_UPPER_LEFT) + clip_origin_lower_left = false; + } +#endif + + // Setup viewport, orthographic projection matrix + // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. + float L = draw_data->DisplayPos.x; + float T = draw_data->DisplayPos.y; +#if 0 // ndef IMGUI_DPF_BACKEND + glViewport(-L, T, (GLsizei)fb_width, (GLsizei)fb_height); + L = T = 0.0f; +#else + glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height); +#endif + float R = L + draw_data->DisplaySize.x; + float B = T + draw_data->DisplaySize.y; +#if defined(GL_CLIP_ORIGIN) + if (!clip_origin_lower_left) { float tmp = T; T = B; B = tmp; } // Swap top and bottom if origin is upper left +#endif + const float ortho_projection[4][4] = + { + { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, + { 0.0f, 0.0f, -1.0f, 0.0f }, + { (R+L)/(L-R), (T+B)/(B-T), 0.0f, 1.0f }, + }; + glUseProgram(bd->ShaderHandle); + glUniform1i(bd->AttribLocationTex, 0); + glUniformMatrix4fv(bd->AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]); + +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER + if (bd->GlVersion >= 330) + glBindSampler(0, 0); // We use combined texture/sampler state. Applications using GL 3.3 may set that otherwise. +#endif + + (void)vertex_array_object; +#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + glBindVertexArray(vertex_array_object); +#endif + + // Bind vertex/index buffers and setup attributes for ImDrawVert + glBindBuffer(GL_ARRAY_BUFFER, bd->VboHandle); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bd->ElementsHandle); + glEnableVertexAttribArray(bd->AttribLocationVtxPos); + glEnableVertexAttribArray(bd->AttribLocationVtxUV); + glEnableVertexAttribArray(bd->AttribLocationVtxColor); + glVertexAttribPointer(bd->AttribLocationVtxPos, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, pos)); + glVertexAttribPointer(bd->AttribLocationVtxUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, uv)); + glVertexAttribPointer(bd->AttribLocationVtxColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col)); +} + +// OpenGL3 Render function. +// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly. +// This is in order to be able to run within an OpenGL engine that doesn't do so. +void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) +{ + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x); + int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y); + if (fb_width <= 0 || fb_height <= 0) + return; + + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + + // Backup GL state + GLenum last_active_texture; glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&last_active_texture); + glActiveTexture(GL_TEXTURE0); + GLuint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, (GLint*)&last_program); + GLuint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, (GLint*)&last_texture); +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER + GLuint last_sampler; if (bd->GlVersion >= 330) { glGetIntegerv(GL_SAMPLER_BINDING, (GLint*)&last_sampler); } else { last_sampler = 0; } +#endif + GLuint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, (GLint*)&last_array_buffer); +#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + GLuint last_vertex_array_object; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint*)&last_vertex_array_object); +#endif +#ifdef IMGUI_IMPL_HAS_POLYGON_MODE + GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); +#endif + GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); + GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); + GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb); + GLenum last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&last_blend_dst_rgb); + GLenum last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&last_blend_src_alpha); + GLenum last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&last_blend_dst_alpha); + GLenum last_blend_equation_rgb; glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&last_blend_equation_rgb); + GLenum last_blend_equation_alpha; glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&last_blend_equation_alpha); + GLboolean last_enable_blend = glIsEnabled(GL_BLEND); + GLboolean last_enable_cull_face = glIsEnabled(GL_CULL_FACE); + GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST); + GLboolean last_enable_stencil_test = glIsEnabled(GL_STENCIL_TEST); + GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST); +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART + GLboolean last_enable_primitive_restart = (bd->GlVersion >= 310) ? glIsEnabled(GL_PRIMITIVE_RESTART) : GL_FALSE; +#endif + + // Setup desired GL state + // Recreate the VAO every time (this is to easily allow multiple GL contexts to be rendered to. VAO are not shared among GL contexts) + // The renderer would actually work without any VAO bound, but then our VertexAttrib calls would overwrite the default one currently bound. + GLuint vertex_array_object = 0; +#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + glGenVertexArrays(1, &vertex_array_object); +#endif + ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object); + + // Will project scissor/clipping rectangles into framebuffer space + ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports + ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) + + // Render command lists + for (int n = 0; n < draw_data->CmdListsCount; n++) + { + const ImDrawList* cmd_list = draw_data->CmdLists[n]; + + // Upload vertex/index buffers + GLsizeiptr vtx_buffer_size = (GLsizeiptr)cmd_list->VtxBuffer.Size * (int)sizeof(ImDrawVert); + GLsizeiptr idx_buffer_size = (GLsizeiptr)cmd_list->IdxBuffer.Size * (int)sizeof(ImDrawIdx); + if (bd->VertexBufferSize < vtx_buffer_size) + { + bd->VertexBufferSize = vtx_buffer_size; + glBufferData(GL_ARRAY_BUFFER, bd->VertexBufferSize, NULL, GL_STREAM_DRAW); + } + if (bd->IndexBufferSize < idx_buffer_size) + { + bd->IndexBufferSize = idx_buffer_size; + glBufferData(GL_ELEMENT_ARRAY_BUFFER, bd->IndexBufferSize, NULL, GL_STREAM_DRAW); + } + glBufferSubData(GL_ARRAY_BUFFER, 0, vtx_buffer_size, (const GLvoid*)cmd_list->VtxBuffer.Data); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, idx_buffer_size, (const GLvoid*)cmd_list->IdxBuffer.Data); + + for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) + { + const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; + if (pcmd->UserCallback != NULL) + { + // User callback, registered via ImDrawList::AddCallback() + // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) + if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) + ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object); + else + pcmd->UserCallback(cmd_list, pcmd); + } + else + { + // Project scissor/clipping rectangles into framebuffer space + ImVec2 clip_min((pcmd->ClipRect.x - clip_off.x) * clip_scale.x, (pcmd->ClipRect.y - clip_off.y) * clip_scale.y); + ImVec2 clip_max((pcmd->ClipRect.z - clip_off.x) * clip_scale.x, (pcmd->ClipRect.w - clip_off.y) * clip_scale.y); + if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y) + continue; + + // Apply scissor/clipping rectangle (Y is inverted in OpenGL) + glScissor((int)clip_min.x, (int)(fb_height - clip_max.y), (int)(clip_max.x - clip_min.x), (int)(clip_max.y - clip_min.y)); + + // Bind texture, Draw + glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->GetTexID()); +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET + if (bd->GlVersion >= 320) + glDrawElementsBaseVertex(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)), (GLint)pcmd->VtxOffset); + else +#endif + glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx))); + } + } + } + + // Destroy the temporary VAO +#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + glDeleteVertexArrays(1, &vertex_array_object); +#endif + + // Restore modified GL state + glUseProgram(last_program); + glBindTexture(GL_TEXTURE_2D, last_texture); +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER + if (bd->GlVersion >= 330) + glBindSampler(0, last_sampler); +#endif + glActiveTexture(last_active_texture); +#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + glBindVertexArray(last_vertex_array_object); +#endif + glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); + glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); + glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); + if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND); + if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); + if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); + if (last_enable_stencil_test) glEnable(GL_STENCIL_TEST); else glDisable(GL_STENCIL_TEST); + if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST); +#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART + if (bd->GlVersion >= 310) { if (last_enable_primitive_restart) glEnable(GL_PRIMITIVE_RESTART); else glDisable(GL_PRIMITIVE_RESTART); } +#endif + +#ifdef IMGUI_IMPL_HAS_POLYGON_MODE + glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); +#endif + glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); + glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]); + (void)bd; // Not all compilation paths use this +} + +bool ImGui_ImplOpenGL3_CreateFontsTexture() +{ + ImGuiIO& io = ImGui::GetIO(); + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + + // Build texture atlas + unsigned char* pixels; + int width, height; + io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); // Load as RGBA 32-bit (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. + + // Upload texture to graphics system + GLint last_texture; + glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); + glGenTextures(1, &bd->FontTexture); + glBindTexture(GL_TEXTURE_2D, bd->FontTexture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); +#ifdef GL_UNPACK_ROW_LENGTH // Not on WebGL/ES + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); +#endif + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts->SetTexID((ImTextureID)(intptr_t)bd->FontTexture); + + // Restore state + glBindTexture(GL_TEXTURE_2D, last_texture); + + return true; +} + +void ImGui_ImplOpenGL3_DestroyFontsTexture() +{ + ImGuiIO& io = ImGui::GetIO(); + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + if (bd->FontTexture) + { + glDeleteTextures(1, &bd->FontTexture); + io.Fonts->SetTexID(0); + bd->FontTexture = 0; + } +} + +// If you get an error please report on github. You may try different GL context version or GLSL version. See GL<>GLSL version table at the top of this file. +static bool CheckShader(GLuint handle, const char* desc) +{ + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + GLint status = 0, log_length = 0; + glGetShaderiv(handle, GL_COMPILE_STATUS, &status); + glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &log_length); + if ((GLboolean)status == GL_FALSE) + fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile %s! With GLSL: %s\n", desc, bd->GlslVersionString); + if (log_length > 1) + { + ImVector buf; + buf.resize((int)(log_length + 1)); + glGetShaderInfoLog(handle, log_length, NULL, (GLchar*)buf.begin()); + fprintf(stderr, "%s\n", buf.begin()); + } + return (GLboolean)status == GL_TRUE; +} + +// If you get an error please report on GitHub. You may try different GL context version or GLSL version. +static bool CheckProgram(GLuint handle, const char* desc) +{ + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + GLint status = 0, log_length = 0; + glGetProgramiv(handle, GL_LINK_STATUS, &status); + glGetProgramiv(handle, GL_INFO_LOG_LENGTH, &log_length); + if ((GLboolean)status == GL_FALSE) + fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to link %s! With GLSL %s\n", desc, bd->GlslVersionString); + if (log_length > 1) + { + ImVector buf; + buf.resize((int)(log_length + 1)); + glGetProgramInfoLog(handle, log_length, NULL, (GLchar*)buf.begin()); + fprintf(stderr, "%s\n", buf.begin()); + } + return (GLboolean)status == GL_TRUE; +} + +bool ImGui_ImplOpenGL3_CreateDeviceObjects() +{ + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + + // Backup GL state + GLint last_texture, last_array_buffer; + glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); + glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); +#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + GLint last_vertex_array; + glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); +#endif + + // Parse GLSL version string + int glsl_version = 130; + sscanf(bd->GlslVersionString, "#version %d", &glsl_version); + + const GLchar* vertex_shader_glsl_120 = + "uniform mat4 ProjMtx;\n" + "attribute vec2 Position;\n" + "attribute vec2 UV;\n" + "attribute vec4 Color;\n" + "varying vec2 Frag_UV;\n" + "varying vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " Frag_UV = UV;\n" + " Frag_Color = Color;\n" + " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" + "}\n"; + + const GLchar* vertex_shader_glsl_130 = + "uniform mat4 ProjMtx;\n" + "in vec2 Position;\n" + "in vec2 UV;\n" + "in vec4 Color;\n" + "out vec2 Frag_UV;\n" + "out vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " Frag_UV = UV;\n" + " Frag_Color = Color;\n" + " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" + "}\n"; + + const GLchar* vertex_shader_glsl_300_es = + "precision highp float;\n" + "layout (location = 0) in vec2 Position;\n" + "layout (location = 1) in vec2 UV;\n" + "layout (location = 2) in vec4 Color;\n" + "uniform mat4 ProjMtx;\n" + "out vec2 Frag_UV;\n" + "out vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " Frag_UV = UV;\n" + " Frag_Color = Color;\n" + " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" + "}\n"; + + const GLchar* vertex_shader_glsl_410_core = + "layout (location = 0) in vec2 Position;\n" + "layout (location = 1) in vec2 UV;\n" + "layout (location = 2) in vec4 Color;\n" + "uniform mat4 ProjMtx;\n" + "out vec2 Frag_UV;\n" + "out vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " Frag_UV = UV;\n" + " Frag_Color = Color;\n" + " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" + "}\n"; + + const GLchar* fragment_shader_glsl_120 = + "#ifdef GL_ES\n" + " precision mediump float;\n" + "#endif\n" + "uniform sampler2D Texture;\n" + "varying vec2 Frag_UV;\n" + "varying vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV.st);\n" + "}\n"; + + const GLchar* fragment_shader_glsl_130 = + "uniform sampler2D Texture;\n" + "in vec2 Frag_UV;\n" + "in vec4 Frag_Color;\n" + "out vec4 Out_Color;\n" + "void main()\n" + "{\n" + " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" + "}\n"; + + const GLchar* fragment_shader_glsl_300_es = + "precision mediump float;\n" + "uniform sampler2D Texture;\n" + "in vec2 Frag_UV;\n" + "in vec4 Frag_Color;\n" + "layout (location = 0) out vec4 Out_Color;\n" + "void main()\n" + "{\n" + " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" + "}\n"; + + const GLchar* fragment_shader_glsl_410_core = + "in vec2 Frag_UV;\n" + "in vec4 Frag_Color;\n" + "uniform sampler2D Texture;\n" + "layout (location = 0) out vec4 Out_Color;\n" + "void main()\n" + "{\n" + " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" + "}\n"; + + // Select shaders matching our GLSL versions + const GLchar* vertex_shader = NULL; + const GLchar* fragment_shader = NULL; + if (glsl_version < 130) + { + vertex_shader = vertex_shader_glsl_120; + fragment_shader = fragment_shader_glsl_120; + } + else if (glsl_version >= 410) + { + vertex_shader = vertex_shader_glsl_410_core; + fragment_shader = fragment_shader_glsl_410_core; + } + else if (glsl_version == 300) + { + vertex_shader = vertex_shader_glsl_300_es; + fragment_shader = fragment_shader_glsl_300_es; + } + else + { + vertex_shader = vertex_shader_glsl_130; + fragment_shader = fragment_shader_glsl_130; + } + + // Create shaders + const GLchar* vertex_shader_with_version[2] = { bd->GlslVersionString, vertex_shader }; + GLuint vert_handle = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vert_handle, 2, vertex_shader_with_version, NULL); + glCompileShader(vert_handle); + CheckShader(vert_handle, "vertex shader"); + + const GLchar* fragment_shader_with_version[2] = { bd->GlslVersionString, fragment_shader }; + GLuint frag_handle = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(frag_handle, 2, fragment_shader_with_version, NULL); + glCompileShader(frag_handle); + CheckShader(frag_handle, "fragment shader"); + + // Link + bd->ShaderHandle = glCreateProgram(); + glAttachShader(bd->ShaderHandle, vert_handle); + glAttachShader(bd->ShaderHandle, frag_handle); + glLinkProgram(bd->ShaderHandle); + CheckProgram(bd->ShaderHandle, "shader program"); + + glDetachShader(bd->ShaderHandle, vert_handle); + glDetachShader(bd->ShaderHandle, frag_handle); + glDeleteShader(vert_handle); + glDeleteShader(frag_handle); + + bd->AttribLocationTex = glGetUniformLocation(bd->ShaderHandle, "Texture"); + bd->AttribLocationProjMtx = glGetUniformLocation(bd->ShaderHandle, "ProjMtx"); + bd->AttribLocationVtxPos = (GLuint)glGetAttribLocation(bd->ShaderHandle, "Position"); + bd->AttribLocationVtxUV = (GLuint)glGetAttribLocation(bd->ShaderHandle, "UV"); + bd->AttribLocationVtxColor = (GLuint)glGetAttribLocation(bd->ShaderHandle, "Color"); + + // Create buffers + glGenBuffers(1, &bd->VboHandle); + glGenBuffers(1, &bd->ElementsHandle); + + ImGui_ImplOpenGL3_CreateFontsTexture(); + + // Restore modified GL state + glBindTexture(GL_TEXTURE_2D, last_texture); + glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); +#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY + glBindVertexArray(last_vertex_array); +#endif + + return true; +} + +void ImGui_ImplOpenGL3_DestroyDeviceObjects() +{ + ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData(); + if (bd->VboHandle) { glDeleteBuffers(1, &bd->VboHandle); bd->VboHandle = 0; } + if (bd->ElementsHandle) { glDeleteBuffers(1, &bd->ElementsHandle); bd->ElementsHandle = 0; } + if (bd->ShaderHandle) { glDeleteProgram(bd->ShaderHandle); bd->ShaderHandle = 0; } + ImGui_ImplOpenGL3_DestroyFontsTexture(); +} diff --git a/plugins/Cardinal/src/DearImGui/imgui_impl_opengl3.h b/plugins/Cardinal/src/DearImGui/imgui_impl_opengl3.h new file mode 100644 index 00000000..98c9aca1 --- /dev/null +++ b/plugins/Cardinal/src/DearImGui/imgui_impl_opengl3.h @@ -0,0 +1,55 @@ +// dear imgui: Renderer Backend for modern OpenGL with shaders / programmatic pipeline +// - Desktop GL: 2.x 3.x 4.x +// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0) +// This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..) + +// Implemented features: +// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! +// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. + +// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. +// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. +// If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. +// Read online: https://github.com/ocornut/imgui/tree/master/docs + +// About GLSL version: +// The 'glsl_version' initialization parameter should be NULL (default) or a "#version XXX" string. +// On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es" +// Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp. + +#pragma once +#include "imgui.h" // IMGUI_IMPL_API + +// Backend API +IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown(); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame(); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data); + +// (Optional) Called by Init/NewFrame/Shutdown +IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateFontsTexture(); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyFontsTexture(); +IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateDeviceObjects(); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects(); + +// Specific OpenGL ES versions +//#define IMGUI_IMPL_OPENGL_ES2 // Auto-detected on Emscripten +//#define IMGUI_IMPL_OPENGL_ES3 // Auto-detected on iOS/Android + +// You can explicitly select GLES2 or GLES3 API by using one of the '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line. +#if !defined(IMGUI_IMPL_OPENGL_ES2) \ + && !defined(IMGUI_IMPL_OPENGL_ES3) + +// Try to detect GLES on matching platforms +#if defined(__APPLE__) +#include +#endif +#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__)) +#define IMGUI_IMPL_OPENGL_ES3 // iOS, Android -> GL ES 3, "#version 300 es" +#elif defined(__EMSCRIPTEN__) +#define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100" +#else +// Otherwise imgui_impl_opengl3_loader.h will be used. +#endif + +#endif diff --git a/plugins/Cardinal/src/DearImGuiColorTextEditor.cpp b/plugins/Cardinal/src/DearImGuiColorTextEditor.cpp new file mode 100644 index 00000000..a4685f38 --- /dev/null +++ b/plugins/Cardinal/src/DearImGuiColorTextEditor.cpp @@ -0,0 +1,17 @@ +/* + * Dear ImGui for DPF, converted to VCV + * Copyright (C) 2021-2022 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DearImGuiColorTextEditor/TextEditor.cpp" diff --git a/plugins/Cardinal/src/ImGuiWidget.cpp b/plugins/Cardinal/src/ImGuiWidget.cpp index 3e86b005..7f27a734 100644 --- a/plugins/Cardinal/src/ImGuiWidget.cpp +++ b/plugins/Cardinal/src/ImGuiWidget.cpp @@ -22,7 +22,11 @@ # include "../../../dpf/dgl/src/Resources.hpp" #endif -#include "DearImGui/imgui_impl_opengl2.h" +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) +# include "DearImGui/imgui_impl_opengl3.h" +#else +# include "DearImGui/imgui_impl_opengl2.h" +#endif static const char* GetClipboardTextFn(void*) { @@ -91,7 +95,11 @@ struct ImGuiWidget::PrivateData { if (created) { ImGui::SetCurrentContext(context); +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + ImGui_ImplOpenGL3_Shutdown(); +#else ImGui_ImplOpenGL2_Shutdown(); +#endif } ImGui::DestroyContext(context); @@ -161,7 +169,11 @@ struct ImGuiWidget::PrivateData { if (created) { ImGui::SetCurrentContext(context); +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + ImGui_ImplOpenGL3_Shutdown(); +#else ImGui_ImplOpenGL2_Shutdown(); +#endif created = false; } @@ -177,7 +189,11 @@ struct ImGuiWidget::PrivateData { if (doInit) { +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + ImGui_ImplOpenGL3_Init(); +#else ImGui_ImplOpenGL2_Init(); +#endif created = true; } } @@ -232,7 +248,11 @@ void ImGuiWidget::onContextCreate(const ContextCreateEvent& e) DISTRHO_SAFE_ASSERT_RETURN(!imData->created,); ImGui::SetCurrentContext(imData->context); +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + ImGui_ImplOpenGL3_Init(); +#else ImGui_ImplOpenGL2_Init(); +#endif imData->created = true; } @@ -241,7 +261,11 @@ void ImGuiWidget::onContextDestroy(const ContextDestroyEvent& e) if (imData->created) { ImGui::SetCurrentContext(imData->context); +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + ImGui_ImplOpenGL3_Shutdown(); +#else ImGui_ImplOpenGL2_Shutdown(); +#endif imData->created = false; } @@ -446,7 +470,11 @@ void ImGuiWidget::drawFramebufferCommon(const Vec& fbSize, const float scaleFact if (!imData->created) { +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + ImGui_ImplOpenGL3_Init(); +#else ImGui_ImplOpenGL2_Init(); +#endif imData->created = true; } @@ -454,13 +482,22 @@ void ImGuiWidget::drawFramebufferCommon(const Vec& fbSize, const float scaleFact io.DeltaTime = time - imData->lastFrameTime; imData->lastFrameTime = time; +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + ImGui_ImplOpenGL3_NewFrame(); +#else ImGui_ImplOpenGL2_NewFrame(); - ImGui::NewFrame(); +#endif + ImGui::NewFrame(); drawImGui(); - ImGui::Render(); if (ImDrawData* const data = ImGui::GetDrawData()) + { +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + ImGui_ImplOpenGL3_RenderDrawData(data); +#else ImGui_ImplOpenGL2_RenderDrawData(data); +#endif + } } diff --git a/plugins/Makefile b/plugins/Makefile index 61b4b492..d787fe44 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -222,8 +222,8 @@ ifneq ($(HEADLESS),true) PLUGIN_FILES += Cardinal/src/ImGuiWidget.cpp PLUGIN_FILES += Cardinal/src/ImGuiTextEditor.cpp PLUGIN_FILES += Cardinal/src/SassyScope.cpp -PLUGIN_FILES += $(wildcard Cardinal/src/DearImGui/*.cpp) -PLUGIN_FILES += $(wildcard Cardinal/src/DearImGuiColorTextEditor/*.cpp) +PLUGIN_FILES += Cardinal/src/DearImGui.cpp +PLUGIN_FILES += Cardinal/src/DearImGuiColorTextEditor.cpp endif ifeq ($(shell pkg-config --exists fftw3f && echo true),true) From 7af9041635ee3df334eeb38542df510446f3a786 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 15:10:22 +0100 Subject: [PATCH 142/283] Use Runner instead of Thread for AudioFile and Ildaeil modules Signed-off-by: falkTX --- dpf | 2 +- plugins/Cardinal/src/AudioFile.cpp | 17 ++- plugins/Cardinal/src/Ildaeil.cpp | 196 +++++++++++++++++------------ 3 files changed, 124 insertions(+), 91 deletions(-) diff --git a/dpf b/dpf index 717c7596..614eeaf0 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 717c7596c29530998fc8522d000c9e856618a56b +Subproject commit 614eeaf0ef0390d4956feb991e9038980cf50371 diff --git a/plugins/Cardinal/src/AudioFile.cpp b/plugins/Cardinal/src/AudioFile.cpp index 528c04a0..18d51c18 100644 --- a/plugins/Cardinal/src/AudioFile.cpp +++ b/plugins/Cardinal/src/AudioFile.cpp @@ -17,7 +17,7 @@ #include "plugincontext.hpp" #include "ModuleWidgets.hpp" -#include "extra/Thread.hpp" +#include "extra/Runner.hpp" #include "CarlaNativePlugin.h" @@ -58,7 +58,7 @@ static void host_ui_closed(NativeHostHandle) {} // -------------------------------------------------------------------------------------------------------------------- -struct CarlaInternalPluginModule : Module, Thread { +struct CarlaInternalPluginModule : Module, Runner { enum ParamIds { NUM_PARAMS }; @@ -168,7 +168,7 @@ struct CarlaInternalPluginModule : Module, Thread { // host-sync disabled by default fCarlaPluginDescriptor->set_parameter_value(fCarlaPluginHandle, kParameterHostSync, 0.0f); - startThread(); + startRunner(500); } ~CarlaInternalPluginModule() override @@ -176,18 +176,15 @@ struct CarlaInternalPluginModule : Module, Thread { if (fCarlaPluginHandle == nullptr) return; - stopThread(-1); + stopRunner(); fCarlaPluginDescriptor->deactivate(fCarlaPluginHandle); fCarlaPluginDescriptor->cleanup(fCarlaPluginHandle); } - void run() override + bool run() override { - while (!shouldThreadExit()) - { - d_msleep(500); - fCarlaPluginDescriptor->dispatcher(fCarlaPluginHandle, NATIVE_PLUGIN_OPCODE_IDLE, 0, 0, nullptr, 0.0f); - } + fCarlaPluginDescriptor->dispatcher(fCarlaPluginHandle, NATIVE_PLUGIN_OPCODE_IDLE, 0, 0, nullptr, 0.0f); + return true; } const NativeTimeInfo* hostGetTimeInfo() const noexcept diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 5d1b4eef..46c091e2 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -32,8 +32,9 @@ # include "ImGuiWidget.hpp" # include "ModuleWidgets.hpp" # include "extra/FileBrowserDialog.hpp" +# include "extra/Mutex.hpp" +# include "extra/Runner.hpp" # include "extra/ScopedPointer.hpp" -# include "extra/Thread.hpp" # include "../../src/extra/SharedResourcePointer.hpp" #else # include "extra/Mutex.hpp" @@ -589,7 +590,7 @@ static intptr_t host_dispatcher(const NativeHostHandle handle, const NativeHostD // -------------------------------------------------------------------------------------------------------------------- #ifndef HEADLESS -struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { +struct IldaeilWidget : ImGuiWidget, IdleCallback, Runner { static constexpr const uint kButtonHeight = 20; struct PluginInfoCache { @@ -670,6 +671,19 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { kIdleNothing } fIdleState = kIdleInit; + struct RunnerData { + bool needsReinit = true; + uint pluginCount = 0; + uint pluginIndex = 0; + + void init() + { + needsReinit = true; + pluginCount = 0; + pluginIndex = 0; + } + } fRunnerData; + PluginType fPluginType = PLUGIN_LV2; PluginType fNextPluginType = fPluginType; uint fPluginCount = 0; @@ -741,8 +755,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { module->fUI = nullptr; } - if (isThreadRunning()) - stopThread(-1); + stopRunner(); fPluginGenericUI = nullptr; @@ -1046,13 +1059,13 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { { case kIdleInit: fIdleState = kIdleNothing; - startThread(); + initAndStartRunner(); break; case kIdleInitPluginAlreadyLoaded: fIdleState = kIdleNothing; createOrUpdatePluginGenericUI(handle); - startThread(); + initAndStartRunner(); break; case kIdlePluginLoadedFromDSP: @@ -1087,10 +1100,9 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { case kIdleChangePluginType: fIdleState = kIdleNothing; fPluginSelected = -1; - if (isThreadRunning()) - stopThread(-1); + stopRunner(); fPluginType = fNextPluginType; - startThread(); + initAndStartRunner(); break; case kIdleNothing: @@ -1130,93 +1142,117 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { loadPlugin(handle, label); } - void run() override + bool initAndStartRunner() { - const char* path; - switch (fPluginType) - { - case PLUGIN_LV2: - path = std::getenv("LV2_PATH"); - break; - case PLUGIN_JSFX: - path = getPathForJSFX(); - break; - default: - path = nullptr; - break; - } + if (isRunnerActive()) + stopRunner(); - if (path != nullptr) - carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, fPluginType, path); - - fPluginCount = 0; - delete[] fPlugins; - - uint count; + fRunnerData.needsReinit = true; + return startRunner(); + } + bool run() override + { + if (fRunnerData.needsReinit) { - const MutexLocker cml(sPluginInfoLoadMutex); + fRunnerData.needsReinit = false; - d_stdout("Will scan plugins now..."); - count = carla_get_cached_plugin_count(fPluginType, path); - d_stdout("Scanning found %u plugins", count); - } + const char* path; + switch (fPluginType) + { + case PLUGIN_LV2: + path = std::getenv("LV2_PATH"); + break; + case PLUGIN_JSFX: + path = getPathForJSFX(); + break; + default: + path = nullptr; + break; + } - if (fDrawingState == kDrawingLoading) - { - fDrawingState = kDrawingPluginList; - fPluginSearchFirstShow = true; - } + if (path != nullptr) + carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, fPluginType, path); - if (count != 0) - { - fPlugins = new PluginInfoCache[count]; + fPluginCount = 0; + delete[] fPlugins; - for (uint i=0, j; i < count && ! shouldThreadExit(); ++i) { const MutexLocker cml(sPluginInfoLoadMutex); - const CarlaCachedPluginInfo* const info = carla_get_cached_plugin_info(fPluginType, i); - DISTRHO_SAFE_ASSERT_CONTINUE(info != nullptr); - - if (! info->valid) - continue; - if (info->audioIns != 0 && info->audioIns != 2) - continue; - if (info->midiIns != 0 && info->midiIns != 1) - continue; - if (info->midiOuts != 0 && info->midiOuts != 1) - continue; + d_stdout("Will scan plugins now..."); + fRunnerData.pluginCount = carla_get_cached_plugin_count(fPluginType, path); + d_stdout("Scanning found %u plugins", fRunnerData.pluginCount); + } - if (fPluginType == PLUGIN_INTERNAL) - { - if (std::strcmp(info->label, "audiogain_s") == 0) - continue; - if (std::strcmp(info->label, "cv2audio") == 0) - continue; - if (std::strcmp(info->label, "lfo") == 0) - continue; - if (std::strcmp(info->label, "midi2cv") == 0) - continue; - if (std::strcmp(info->label, "midithrough") == 0) - continue; - if (std::strcmp(info->label, "3bandsplitter") == 0) - continue; - } + if (fDrawingState == kDrawingLoading) + { + fDrawingState = kDrawingPluginList; + fPluginSearchFirstShow = true; + } - j = fPluginCount; - fPlugins[j].name = strdup(info->name); - fPlugins[j].label = strdup(info->label); - ++fPluginCount; + if (fRunnerData.pluginCount != 0) + { + fPlugins = new PluginInfoCache[fRunnerData.pluginCount]; + fPluginScanningFinished = false; + return true; + } + else + { + fPlugins = nullptr; + fPluginScanningFinished = true; + return false; } } - else - { - fPlugins = nullptr; - } - if (! shouldThreadExit()) - fPluginScanningFinished = true; + const uint index = fRunnerData.pluginIndex++; + DISTRHO_SAFE_ASSERT_UINT2_RETURN(index < fRunnerData.pluginCount, + index, fRunnerData.pluginCount, false); + + do { + const MutexLocker cml(sPluginInfoLoadMutex); + + const CarlaCachedPluginInfo* const info = carla_get_cached_plugin_info(fPluginType, index); + DISTRHO_SAFE_ASSERT_CONTINUE(info != nullptr); + + if (! info->valid) + break; + if (info->audioIns != 0 && info->audioIns != 2) + break; + if (info->midiIns != 0 && info->midiIns != 1) + break; + if (info->midiOuts != 0 && info->midiOuts != 1) + break; + + if (fPluginType == PLUGIN_INTERNAL) + { + if (std::strcmp(info->label, "audiogain_s") == 0) + break; + if (std::strcmp(info->label, "cv2audio") == 0) + break; + if (std::strcmp(info->label, "lfo") == 0) + break; + if (std::strcmp(info->label, "midi2cv") == 0) + break; + if (std::strcmp(info->label, "midithrough") == 0) + break; + if (std::strcmp(info->label, "3bandsplitter") == 0) + break; + } + + const uint pindex = fPluginCount; + fPlugins[pindex].name = strdup(info->name); + fPlugins[pindex].label = strdup(info->label); + ++fPluginCount; + } while (false); + + // run again + if (fRunnerData.pluginIndex != fRunnerData.pluginCount) + return true; + + // stop here + fPluginScanningFinished = true; + return false; } void drawImGui() override From 8bc997f2d3b16681e4bf335c215d2d5e563b8572 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 16:17:02 +0100 Subject: [PATCH 143/283] Always use PKG_CONFIG make var Signed-off-by: falkTX --- Makefile | 2 +- plugins/Makefile | 11 ++++++++--- src/Makefile.cardinal.mk | 6 +++--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index b619221e..aefe6b1e 100644 --- a/Makefile +++ b/Makefile @@ -130,7 +130,7 @@ endif # -------------------------------------------------------------- # Check for optional system-wide dependencies -ifeq ($(shell pkg-config --exists fftw3f && echo true),true) +ifeq ($(shell $(PKG_CONFIG) --exists fftw3f && echo true),true) HAVE_FFTW3F = true else $(warning fftw3f dependency not installed/available) diff --git a/plugins/Makefile b/plugins/Makefile index d787fe44..8796b1a7 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -194,7 +194,6 @@ PLUGIN_FILES = plugins.cpp PLUGIN_FILES += Cardinal/src/Blank.cpp PLUGIN_FILES += Cardinal/src/ExpanderInputMIDI.cpp PLUGIN_FILES += Cardinal/src/ExpanderOutputMIDI.cpp -PLUGIN_FILES += Cardinal/src/glBars.cpp PLUGIN_FILES += Cardinal/src/HostAudio.cpp PLUGIN_FILES += Cardinal/src/HostCV.cpp PLUGIN_FILES += Cardinal/src/HostMIDI.cpp @@ -206,6 +205,12 @@ PLUGIN_FILES += Cardinal/src/HostParameters-Map.cpp PLUGIN_FILES += Cardinal/src/HostTime.cpp PLUGIN_FILES += Cardinal/src/TextEditor.cpp +ifeq ($(USE_GLES2),true) +ifeq ($(USE_GLES3),true) +PLUGIN_FILES += Cardinal/src/glBars.cpp +endif +endif + ifneq ($(STATIC_BUILD),true) PLUGIN_FILES += Cardinal/src/AudioFile.cpp PLUGIN_FILES += Cardinal/src/Carla.cpp @@ -226,7 +231,7 @@ PLUGIN_FILES += Cardinal/src/DearImGui.cpp PLUGIN_FILES += Cardinal/src/DearImGuiColorTextEditor.cpp endif -ifeq ($(shell pkg-config --exists fftw3f && echo true),true) +ifeq ($(shell $(PKG_CONFIG) --exists fftw3f && echo true),true) PLUGIN_FILES += Cardinal/src/AudioToCVPitch.cpp BASE_FLAGS += -DHAVE_FFTW3F endif @@ -953,7 +958,7 @@ endif ifeq ($(SYSDEPS),true) BASE_FLAGS += -DCARDINAL_SYSDEPS -BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp) +BASE_FLAGS += $(shell $(PKG_CONFIG) --cflags jansson libarchive samplerate speexdsp) BASE_FLAGS += -I../deps/sysroot/include else BASE_FLAGS += -DZSTDLIB_VISIBILITY= diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 027c09c1..90d1e641 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -116,7 +116,7 @@ endif EXTRA_DEPENDENCIES = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) EXTRA_LIBS = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) $(STATIC_CARLA_PLUGIN_LIBS) -ifeq ($(shell pkg-config --exists fftw3f && echo true),true) +ifeq ($(shell $(PKG_CONFIG) --exists fftw3f && echo true),true) EXTRA_DEPENDENCIES += ../../deps/aubio/libaubio.a EXTRA_LIBS += ../../deps/aubio/libaubio.a EXTRA_LIBS += $(shell $(PKG_CONFIG) --libs fftw3f) @@ -147,7 +147,7 @@ BASE_FLAGS += -I../../include/neon-compat BASE_FLAGS += -I../Rack/include ifeq ($(SYSDEPS),true) BASE_FLAGS += -DCARDINAL_SYSDEPS -BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp) +BASE_FLAGS += $(shell $(PKG_CONFIG) --cflags jansson libarchive samplerate speexdsp) else BASE_FLAGS += -DZSTDLIB_VISIBILITY= BASE_FLAGS += -I../Rack/dep/include @@ -234,7 +234,7 @@ EXTRA_LIBS += -lws2_32 -lwinmm endif ifeq ($(SYSDEPS),true) -EXTRA_LIBS += $(shell pkg-config --libs jansson libarchive samplerate speexdsp) +EXTRA_LIBS += $(shell $(PKG_CONFIG) --libs jansson libarchive samplerate speexdsp) endif ifeq ($(WITH_LTO),true) From d5f5e57e78b9977b0b1ac2ec223fdd4c09b4dd40 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 16:17:48 +0100 Subject: [PATCH 144/283] Skip window screenshots and glBars module if using GLES Signed-off-by: falkTX --- plugins/Cardinal/src/ImGuiWidget.cpp | 4 ++++ plugins/plugins.cpp | 6 +++++- src/override/Window.cpp | 12 +++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/plugins/Cardinal/src/ImGuiWidget.cpp b/plugins/Cardinal/src/ImGuiWidget.cpp index 7f27a734..65d129bd 100644 --- a/plugins/Cardinal/src/ImGuiWidget.cpp +++ b/plugins/Cardinal/src/ImGuiWidget.cpp @@ -456,6 +456,9 @@ void ImGuiWidget::drawFramebufferCommon(const Vec& fbSize, const float scaleFact } } +#if defined(DGL_USE_GLES2) || defined(DGL_USE_GLES3) || defined(DGL_USE_OPENGL3) + // TODO? +#else glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); @@ -464,6 +467,7 @@ void ImGuiWidget::drawFramebufferCommon(const Vec& fbSize, const float scaleFact glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); +#endif io.DisplaySize = ImVec2(box.size.x * scaleFactor, box.size.y * scaleFactor); io.DisplayFramebufferScale = ImVec2(fbSize.x / (box.size.x * scaleFactor), fbSize.y / (box.size.y * scaleFactor)); diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 712fa889..b38d1b6f 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -890,7 +890,6 @@ static void initStatic__Cardinal() p->addModel(modelCardinalBlank); p->addModel(modelExpanderInputMIDI); p->addModel(modelExpanderOutputMIDI); - p->addModel(modelGlBars); p->addModel(modelHostAudio2); p->addModel(modelHostAudio8); p->addModel(modelHostCV); @@ -902,6 +901,11 @@ static void initStatic__Cardinal() p->addModel(modelHostParametersMap); p->addModel(modelHostTime); p->addModel(modelTextEditor); + #ifndef DGL_USE_GLES + p->addModel(modelGlBars); + #else + spl.removeModule("glBars"); + #endif #ifndef STATIC_BUILD p->addModel(modelAudioFile); p->addModel(modelCarla); diff --git a/src/override/Window.cpp b/src/override/Window.cpp index a49efdf3..512fec61 100644 --- a/src/override/Window.cpp +++ b/src/override/Window.cpp @@ -157,7 +157,9 @@ struct Window::Internal { int frame = 0; int frameSwapInterval = 1; +#ifndef DGL_USE_GLES int generateScreenshotStep = kScreenshotStepNone; +#endif double monitorRefreshRate = 60.0; double frameTime = 0.0; double lastFrameDuration = 0.0; @@ -366,6 +368,7 @@ void Window::run() { } +#ifndef DGL_USE_GLES static void Window__flipBitmap(uint8_t* pixels, const int width, const int height, const int depth) { for (int y = 0; y < height / 2; y++) { const int flipY = height - y - 1; @@ -415,6 +418,7 @@ static void Window__writeImagePNG(void* context, void* data, int size) { ui->setState("screenshot", String::asBase64(data, size).buffer()); } #endif +#endif void Window::step() { @@ -453,6 +457,7 @@ void Window::step() { APP->event->handleDirty(); } +#ifndef DGL_USE_GLES // Hide menu and background if generating screenshot if (internal->generateScreenshotStep == kScreenshotStepStarted) { #ifdef CARDINAL_TRANSPARENT_SCREENSHOTS @@ -462,6 +467,7 @@ void Window::step() { internal->generateScreenshotStep = kScreenshotStepSecondPass; #endif } +#endif // Get framebuffer/window ratio int winWidth = internal->ui->getWidth(); @@ -501,6 +507,7 @@ void Window::step() { ++internal->frame; +#ifndef DGL_USE_GLES if (internal->generateScreenshotStep != kScreenshotStepNone) { ++internal->generateScreenshotStep; @@ -541,6 +548,7 @@ void Window::step() { delete[] pixels; } +#endif } @@ -586,7 +594,7 @@ void Window::setFullScreen(bool) { bool Window::isFullScreen() { -#ifdef CARDINAL_TRANSPARENT_SCREENSHOTS +#if defined(CARDINAL_TRANSPARENT_SCREENSHOTS) && !defined(DGL_USE_GLES) return internal->generateScreenshotStep != kScreenshotStepNone; #else return false; @@ -668,7 +676,9 @@ int& Window::fbCount() { void generateScreenshot() { +#ifndef DGL_USE_GLES APP->window->internal->generateScreenshotStep = kScreenshotStepStarted; +#endif } From c14eee850bfe6ba49cddb86714d6e1c5182fbfe9 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 16:18:12 +0100 Subject: [PATCH 145/283] Build zstd ourselves Signed-off-by: falkTX --- deps/Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/deps/Makefile b/deps/Makefile index 22d32062..4e9db269 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -149,6 +149,7 @@ CONFIGURE += ac_cv_host=$(TARGET_MACHINE) DEP_MAKE = $(MAKE) DEP_MAKE += ARCH_NAME=$(ARCH_NAME) +DEP_MAKE += AR=$(AR) DEP_MAKE += CC=$(CC) DEP_MAKE += CXX=$(CXX) DEP_MAKE += CFLAGS="$(BUILD_C_FLAGS)" @@ -207,10 +208,14 @@ $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/.stamp-patched: sed -i -e "s/#pragma GCC visibility push/#error we dont want this/" $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/configure touch $@ -# zstd cmake is borked, see https://github.com/facebook/zstd/issues/1401 -# zstd also fails to build on old systems, patch that too +# custom zstd build for only building static libs $(DEP_PATH)/lib/libzstd.a: $(DEP_PATH)/zstd-1.4.5/.stamp-patched + cd $(DEP_PATH)/zstd-1.4.5/build/cmake && $(CMAKE) -DZSTD_BUILD_STATIC=ON -DZSTD_BUILD_PROGRAMS=OFF -DZSTD_BUILD_SHARED=OFF -DZSTD_MULTITHREAD_SUPPORT=OFF . + $(DEP_MAKE) -C $(DEP_PATH)/zstd-1.4.5/build/cmake + $(DEP_MAKE) -C $(DEP_PATH)/zstd-1.4.5/build/cmake install +# zstd cmake is borked, see https://github.com/facebook/zstd/issues/1401 +# zstd also fails to build on old systems, patch that too $(DEP_PATH)/zstd-1.4.5/.stamp-patched: $(DEP_MAKE) -C $(DEP_PATH) zstd-1.4.5 sed -i -e "56,66d" $(DEP_PATH)/zstd-1.4.5/build/cmake/CMakeModules/AddZstdCompilationFlags.cmake From 74b41e1713e7a12a95338718f8ce025e8aad2dfb Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 16:45:02 +0100 Subject: [PATCH 146/283] Implement openBrowser for wasm Signed-off-by: falkTX --- src/CardinalCommon.cpp | 15 +++++++++++++++ src/CardinalCommon.hpp | 1 + src/override/MenuBar.cpp | 4 ++-- src/override/Model.cpp | 16 +++++++++------- src/override/Scene.cpp | 2 +- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index 5358c77e..8a84e330 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -52,6 +52,10 @@ # include #endif +#ifdef DISTRHO_OS_WASM +# include +#endif + const std::string CARDINAL_VERSION = "22.06"; namespace rack { @@ -268,6 +272,17 @@ void saveAsDialogUncompressed() #endif } +void openBrowser(const std::string& url) +{ +#ifdef DISTRHO_OS_WASM + EM_ASM({ + window.open(UTF8ToString($0), '_blank'); + }, url.c_str()); +#else + patchUtils::openBrowser(url); +#endif +} + } void async_dialog_filebrowser(const bool saving, diff --git a/src/CardinalCommon.hpp b/src/CardinalCommon.hpp index b45b1e8c..16c74a9b 100644 --- a/src/CardinalCommon.hpp +++ b/src/CardinalCommon.hpp @@ -66,6 +66,7 @@ void saveDialog(const std::string& path); void saveAsDialog(); void saveAsDialogUncompressed(); void appendSelectionContextMenu(rack::ui::Menu* menu); +void openBrowser(const std::string& url); bool connectToRemote(); bool isRemoteConnected(); diff --git a/src/override/MenuBar.cpp b/src/override/MenuBar.cpp index c19e857e..416d8591 100644 --- a/src/override/MenuBar.cpp +++ b/src/override/MenuBar.cpp @@ -572,11 +572,11 @@ struct HelpButton : MenuButton { menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); menu->addChild(createMenuItem("Rack User manual", "F1", [=]() { - system::openBrowser("https://vcvrack.com/manual"); + patchUtils::openBrowser("https://vcvrack.com/manual"); })); menu->addChild(createMenuItem("Cardinal Project page", "", [=]() { - system::openBrowser("https://github.com/DISTRHO/Cardinal/"); + patchUtils::openBrowser("https://github.com/DISTRHO/Cardinal/"); })); menu->addChild(new ui::MenuSeparator); diff --git a/src/override/Model.cpp b/src/override/Model.cpp index 7ddafb02..a2541be1 100644 --- a/src/override/Model.cpp +++ b/src/override/Model.cpp @@ -38,6 +38,8 @@ #include #include +#include "../CardinalCommon.hpp" + namespace rack { namespace plugin { @@ -120,7 +122,7 @@ std::string Model::getManualUrl() { void Model::appendContextMenu(ui::Menu* menu, bool inBrowser) { // plugin menu->addChild(createMenuItem("Plugin: " + plugin->name, "", [=]() { - system::openBrowser(plugin->pluginUrl); + patchUtils::openBrowser(plugin->pluginUrl); }, plugin->pluginUrl == "")); // version @@ -129,7 +131,7 @@ void Model::appendContextMenu(ui::Menu* menu, bool inBrowser) { // author if (plugin->author != "") { menu->addChild(createMenuItem("Author: " + plugin->author, "", [=]() { - system::openBrowser(plugin->authorUrl); + patchUtils::openBrowser(plugin->authorUrl); }, plugin->authorUrl.empty())); } @@ -137,7 +139,7 @@ void Model::appendContextMenu(ui::Menu* menu, bool inBrowser) { std::string license = plugin->license; if (string::startsWith(license, "https://") || string::startsWith(license, "http://")) { menu->addChild(createMenuItem("License: Open in browser", "", [=]() { - system::openBrowser(license); + patchUtils::openBrowser(license); })); } else if (license != "") { @@ -158,28 +160,28 @@ void Model::appendContextMenu(ui::Menu* menu, bool inBrowser) { std::string manualUrl = getManualUrl(); if (manualUrl != "") { menu->addChild(createMenuItem("User manual", RACK_MOD_CTRL_NAME "+F1", [=]() { - system::openBrowser(manualUrl); + patchUtils::openBrowser(manualUrl); })); } // donate if (plugin->donateUrl != "") { menu->addChild(createMenuItem("Donate", "", [=]() { - system::openBrowser(plugin->donateUrl); + patchUtils::openBrowser(plugin->donateUrl); })); } // source code if (plugin->sourceUrl != "") { menu->addChild(createMenuItem("Source code", "", [=]() { - system::openBrowser(plugin->sourceUrl); + patchUtils::openBrowser(plugin->sourceUrl); })); } // changelog if (plugin->changelogUrl != "") { menu->addChild(createMenuItem("Changelog", "", [=]() { - system::openBrowser(plugin->changelogUrl); + patchUtils::openBrowser(plugin->changelogUrl); })); } diff --git a/src/override/Scene.cpp b/src/override/Scene.cpp index b69bc80d..9651f98c 100644 --- a/src/override/Scene.cpp +++ b/src/override/Scene.cpp @@ -342,7 +342,7 @@ void Scene::onHoverKey(const HoverKeyEvent& e) { e.consume(this); } if (e.key == GLFW_KEY_F1 && (e.mods & RACK_MOD_MASK) == 0) { - system::openBrowser("https://vcvrack.com/manual/"); + patchUtils::openBrowser("https://vcvrack.com/manual/"); e.consume(this); } if (e.key == GLFW_KEY_F3 && (e.mods & RACK_MOD_MASK) == 0) { From 8b9afb3d4ff9893a304dc397eefb4f9ed41ae578 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 19:45:05 +0100 Subject: [PATCH 147/283] Skip chowdsp and valleyaudio for wasm builds Signed-off-by: falkTX --- plugins/Makefile | 6 ++++++ plugins/plugins.cpp | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/plugins/Makefile b/plugins/Makefile index 8796b1a7..73a6ec87 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -490,9 +490,12 @@ BOGAUDIO_CUSTOM_PER_FILE = ARQuantity AttackMenuItem ReleaseMenuItem # -------------------------------------------------------------- # ChowDSP +# FIXME +ifneq ($(WASM),true) PLUGIN_FILES += $(wildcard ChowDSP/src/*/*.cpp) PLUGIN_FILES += $(wildcard ChowDSP/src/*/*/*.cpp) PLUGIN_FILES += $(wildcard ChowDSP/lib/r8lib/*.cpp) +endif # -------------------------------------------------------------- # CatroModulo @@ -825,6 +828,8 @@ UNLESS_MODULES_CUSTOM = Selection # -------------------------------------------------------------- # ValleyAudio +# FIXME +ifneq ($(WASM),true) PLUGIN_FILES += $(filter-out ValleyAudio/src/Valley.cpp,$(wildcard ValleyAudio/src/*.cpp)) PLUGIN_FILES += $(wildcard ValleyAudio/src/*/*.cpp) PLUGIN_FILES += $(wildcard ValleyAudio/src/*/*/*.cpp) @@ -897,6 +902,7 @@ PLUGIN_BINARIES += ValleyAudio/src/XFADE.bin # modules/types which are present in other plugins VALLEYAUDIO_CUSTOM = $(DRWAV) DigitalDisplay VALLEYAUDIO_CUSTOM_PER_FILE = TempoKnob +endif # -------------------------------------------------------------- # Voxglitch diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index b38d1b6f..91195b46 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -1622,6 +1622,8 @@ static void initStatic__cf() } } +// FIXME +#ifndef DISTRHO_OS_WASM static void initStatic__ChowDSP() { Plugin* const p = new Plugin; @@ -1648,6 +1650,7 @@ static void initStatic__ChowDSP() p->addModel(modelChowChorus); } } +#endif static void initStatic__DrumKit() { @@ -2586,6 +2589,8 @@ static void initStatic__unless_modules() } } +// FIXME +#ifndef DISTRHO_OS_WASM static void initStatic__ValleyAudio() { Plugin* const p = new Plugin; @@ -2604,6 +2609,7 @@ static void initStatic__ValleyAudio() p->addModel(modelTerrorform); } } +#endif static void initStatic__Voxglitch() { @@ -2719,7 +2725,10 @@ void initStaticPlugins() initStatic__BogaudioModules(); initStatic__CatroModulo(); initStatic__cf(); +// FIXME +#ifndef DISTRHO_OS_WASM initStatic__ChowDSP(); +#endif initStatic__DrumKit(); initStatic__ESeries(); initStatic__ExpertSleepersEncoders(); @@ -2759,7 +2768,10 @@ void initStaticPlugins() initStatic__sonusmodular(); initStatic__stocaudio(); initStatic__unless_modules(); +// FIXME +#ifndef DISTRHO_OS_WASM initStatic__ValleyAudio(); +#endif initStatic__Voxglitch(); initStatic__WhatTheRack(); initStatic__ZetaCarinaeModules(); From 034515190cf328d8abbb93ddb378fb30d74c8e7f Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 5 Jul 2022 19:45:59 +0100 Subject: [PATCH 148/283] A few more wasm tweaks Signed-off-by: falkTX --- plugins/Cardinal/src/ImGuiWidget.cpp | 3 + src/Makefile.cardinal.mk | 3 +- src/emscripten/shell.html | 140 +++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/emscripten/shell.html diff --git a/plugins/Cardinal/src/ImGuiWidget.cpp b/plugins/Cardinal/src/ImGuiWidget.cpp index 65d129bd..64e8848d 100644 --- a/plugins/Cardinal/src/ImGuiWidget.cpp +++ b/plugins/Cardinal/src/ImGuiWidget.cpp @@ -504,4 +504,7 @@ void ImGuiWidget::drawFramebufferCommon(const Vec& fbSize, const float scaleFact ImGui_ImplOpenGL2_RenderDrawData(data); #endif } + + // FIXME + io.KeysDown[GLFW_KEY_DELETE] = io.KeysDown[GLFW_KEY_BACKSPACE] = io.KeysDown[GLFW_KEY_ENTER] = false; } diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 90d1e641..6acf1992 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -205,7 +205,8 @@ BASE_FLAGS += -Wno-unused-variable # extra linker flags ifeq ($(WASM),true) -LINK_FLAGS += --preload-file=./resources -sALLOW_MEMORY_GROWTH +LINK_FLAGS += --preload-file=./resources -sALLOW_MEMORY_GROWTH -sINITIAL_MEMORY=32Mb -sLZ4=1 --shell-file=../emscripten/shell.html +# -sDISABLE_EXCEPTION_CATCHING=1 else ifeq ($(HAIKU),true) LINK_FLAGS += -lpthread else diff --git a/src/emscripten/shell.html b/src/emscripten/shell.html new file mode 100644 index 00000000..f3d8947f --- /dev/null +++ b/src/emscripten/shell.html @@ -0,0 +1,140 @@ + + + + + + Cardinal Synth + + + +

    +
    +
    Cardinal
    +
    +
    Downloading...
    +
    + +
    +
    + +
    + + + {{{ SCRIPT }}} + + From 5370e2ad6ec78aefe764dd16156ef69d2e53bacc Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 6 Jul 2022 02:02:22 +0100 Subject: [PATCH 149/283] More wasm details, basics mostly work now Signed-off-by: falkTX --- deps/Makefile | 12 ++++++--- dpf | 2 +- include/simd-compat/mmintrin.h | 27 +++++++++++++++++++ .../{neon-compat => simd-compat}/pmmintrin.h | 24 +++++++++++++++-- plugins/Makefile | 22 +++++++-------- plugins/plugins.cpp | 12 --------- src/AsyncDialog.cpp | 10 +++---- src/Makefile | 15 ++++++----- src/Makefile.cardinal.mk | 21 ++++++++++----- src/emscripten/shell.html | 7 +++++ 10 files changed, 103 insertions(+), 49 deletions(-) create mode 100644 include/simd-compat/mmintrin.h rename include/{neon-compat => simd-compat}/pmmintrin.h (69%) diff --git a/deps/Makefile b/deps/Makefile index 4e9db269..522e83d1 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -31,7 +31,7 @@ endif # custom build flags BASE_FLAGS += -I../include -BASE_FLAGS += -I../include/neon-compat +BASE_FLAGS += -I../include/simd-compat ifeq ($(HEADLESS),true) ifeq ($(WITH_LTO),true) @@ -43,11 +43,11 @@ ifneq ($(SYSDEPS),true) BASE_FLAGS += -DZSTDLIB_VISIBILITY= endif -ifeq ($(WASM),true) -BASE_FLAGS += -msse -msse2 -msse3 -msimd128 -else ifneq ($(HAIKU),true) +ifneq ($(HAIKU),true) +ifneq ($(WASM),true) BASE_FLAGS += -pthread endif +endif ifeq ($(WINDOWS),true) BASE_FLAGS += -D_USE_MATH_DEFINES @@ -62,6 +62,10 @@ BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS +ifeq ($(WASM),true) +BUILD_CXX_FLAGS += -fexceptions +endif + # -------------------------------------------------------------- # override VCV arch.mk stuff so we can build more architectures diff --git a/dpf b/dpf index 614eeaf0..c2938c02 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 614eeaf0ef0390d4956feb991e9038980cf50371 +Subproject commit c2938c02994988bd5dde4c4cbba9951709789ee8 diff --git a/include/simd-compat/mmintrin.h b/include/simd-compat/mmintrin.h new file mode 100644 index 00000000..e0854bc8 --- /dev/null +++ b/include/simd-compat/mmintrin.h @@ -0,0 +1,27 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#pragma once + +#if defined(__i386__) || defined(__x86_64__) +# include_next +#elif defined(__EMSCRIPTEN__) +# include +// # include_next +#else +# include "../sse2neon/sse2neon.h" +#endif diff --git a/include/neon-compat/pmmintrin.h b/include/simd-compat/pmmintrin.h similarity index 69% rename from include/neon-compat/pmmintrin.h rename to include/simd-compat/pmmintrin.h index de10d32c..6ed77fb1 100644 --- a/include/neon-compat/pmmintrin.h +++ b/include/simd-compat/pmmintrin.h @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 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 @@ -17,8 +17,28 @@ #pragma once -#if defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__) +#if defined(__i386__) || defined(__x86_64__) # include_next + +#elif defined(__EMSCRIPTEN__) +# include_next + +// NOTE these have been verified to be unused (included for ValleyAudio builds) +// static inline +// __m64 _mm_and_si64(__m64 a, __m64 b) { return a; } +// +// static inline +// __m64 _mm_andnot_si64(__m64 a, __m64 b) { return a; } +// +// static inline +// __m64 _mm_or_si64(__m64 a, __m64 b) { return a; } + +static inline +__m64 _mm_set1_pi16(short w) +{ + return __extension__ (__m64){ static_cast(w), static_cast(w) }; +} + #else # include "../sse2neon/sse2neon.h" diff --git a/plugins/Makefile b/plugins/Makefile index 73a6ec87..cb7112d2 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -490,12 +490,9 @@ BOGAUDIO_CUSTOM_PER_FILE = ARQuantity AttackMenuItem ReleaseMenuItem # -------------------------------------------------------------- # ChowDSP -# FIXME -ifneq ($(WASM),true) PLUGIN_FILES += $(wildcard ChowDSP/src/*/*.cpp) PLUGIN_FILES += $(wildcard ChowDSP/src/*/*/*.cpp) PLUGIN_FILES += $(wildcard ChowDSP/lib/r8lib/*.cpp) -endif # -------------------------------------------------------------- # CatroModulo @@ -828,8 +825,6 @@ UNLESS_MODULES_CUSTOM = Selection # -------------------------------------------------------------- # ValleyAudio -# FIXME -ifneq ($(WASM),true) PLUGIN_FILES += $(filter-out ValleyAudio/src/Valley.cpp,$(wildcard ValleyAudio/src/*.cpp)) PLUGIN_FILES += $(wildcard ValleyAudio/src/*/*.cpp) PLUGIN_FILES += $(wildcard ValleyAudio/src/*/*/*.cpp) @@ -902,7 +897,6 @@ PLUGIN_BINARIES += ValleyAudio/src/XFADE.bin # modules/types which are present in other plugins VALLEYAUDIO_CUSTOM = $(DRWAV) DigitalDisplay VALLEYAUDIO_CUSTOM_PER_FILE = TempoKnob -endif # -------------------------------------------------------------- # Voxglitch @@ -955,8 +949,8 @@ BASE_FLAGS += -I../dpf/dgl/src/nanovg BASE_FLAGS += -I../dpf/distrho BASE_FLAGS += -I../include -BASE_FLAGS += -I../include/neon-compat BASE_FLAGS += -I../include/osdialog-stub +BASE_FLAGS += -I../include/simd-compat ifeq ($(HAVE_X11),true) BASE_FLAGS += -DHAVE_X11 @@ -995,14 +989,16 @@ endif ifeq ($(BSD),true) BASE_FLAGS += -D'aligned_alloc_16(ptr)'='aligned_alloc(16,ptr)' BASE_FLAGS += -D'aligned_free_16(ptr)'='free(ptr)' +else ifeq ($(WASM),true) +BASE_FLAGS += -D'aligned_alloc_16(ptr)'='aligned_alloc(16,ptr)' +BASE_FLAGS += -D'aligned_free_16(ptr)'='free(ptr)' endif -ifeq ($(WASM),true) -BASE_FLAGS += -DNANOVG_GLES2=1 -BASE_FLAGS += -msse -msse2 -msse3 -msimd128 -else ifneq ($(HAIKU),true) +ifneq ($(WASM),true) +ifneq ($(HAIKU),true) BASE_FLAGS += -pthread endif +endif ifeq ($(WINDOWS),true) BASE_FLAGS += -D_USE_MATH_DEFINES @@ -1036,6 +1032,10 @@ endif # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS +ifeq ($(WASM),true) +BUILD_CXX_FLAGS += -fexceptions +endif + # -------------------------------------------------------------- # lots of warnings from VCV side diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 91195b46..b38d1b6f 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -1622,8 +1622,6 @@ static void initStatic__cf() } } -// FIXME -#ifndef DISTRHO_OS_WASM static void initStatic__ChowDSP() { Plugin* const p = new Plugin; @@ -1650,7 +1648,6 @@ static void initStatic__ChowDSP() p->addModel(modelChowChorus); } } -#endif static void initStatic__DrumKit() { @@ -2589,8 +2586,6 @@ static void initStatic__unless_modules() } } -// FIXME -#ifndef DISTRHO_OS_WASM static void initStatic__ValleyAudio() { Plugin* const p = new Plugin; @@ -2609,7 +2604,6 @@ static void initStatic__ValleyAudio() p->addModel(modelTerrorform); } } -#endif static void initStatic__Voxglitch() { @@ -2725,10 +2719,7 @@ void initStaticPlugins() initStatic__BogaudioModules(); initStatic__CatroModulo(); initStatic__cf(); -// FIXME -#ifndef DISTRHO_OS_WASM initStatic__ChowDSP(); -#endif initStatic__DrumKit(); initStatic__ESeries(); initStatic__ExpertSleepersEncoders(); @@ -2768,10 +2759,7 @@ void initStaticPlugins() initStatic__sonusmodular(); initStatic__stocaudio(); initStatic__unless_modules(); -// FIXME -#ifndef DISTRHO_OS_WASM initStatic__ValleyAudio(); -#endif initStatic__Voxglitch(); initStatic__WhatTheRack(); initStatic__ZetaCarinaeModules(); diff --git a/src/AsyncDialog.cpp b/src/AsyncDialog.cpp index 3c046e5b..1009eace 100644 --- a/src/AsyncDialog.cpp +++ b/src/AsyncDialog.cpp @@ -44,7 +44,7 @@ struct AsyncDialog : OpaqueWidget Label* label; AsyncDialog(const char* const message) - { + { setup(message); struct AsyncDismissButton : Button { @@ -61,7 +61,7 @@ struct AsyncDialog : OpaqueWidget } AsyncDialog(const char* const message, const std::function action) - { + { setup(message); struct AsyncCancelButton : Button { @@ -131,7 +131,7 @@ struct AsyncDialog : OpaqueWidget } void draw(const DrawArgs& args) override - { + { bndMenuBackground(args.vg, 0.0, 0.0, box.size.x, box.size.y, 0); Widget::draw(args); } @@ -261,13 +261,13 @@ struct AsyncTextInput : OpaqueWidget } void step() override - { + { OpaqueWidget::step(); box.pos = parent->box.size.minus(box.size).div(2).round(); } void draw(const DrawArgs& args) override - { + { bndMenuBackground(args.vg, 0.0, 0.0, box.size.x, box.size.y, 0); Widget::draw(args); } diff --git a/src/Makefile b/src/Makefile index 0ef8eb01..2308b054 100644 --- a/src/Makefile +++ b/src/Makefile @@ -44,7 +44,7 @@ BASE_FLAGS += -DPRIVATE= BASE_FLAGS += -I../dpf/dgl/src/nanovg BASE_FLAGS += -I../dpf/distrho BASE_FLAGS += -I../include -BASE_FLAGS += -I../include/neon-compat +BASE_FLAGS += -I../include/simd-compat BASE_FLAGS += -IRack/include ifeq ($(SYSDEPS),true) BASE_FLAGS += -DCARDINAL_SYSDEPS @@ -81,14 +81,11 @@ ifeq ($(HAIKU),true) BASE_FLAGS += -DCLOCK_MONOTONIC_RAW=CLOCK_MONOTONIC endif -ifeq ($(WASM),true) -BASE_FLAGS += -DNANOVG_GLES2=1 -BASE_FLAGS += -msse -msse2 -msse3 -msimd128 -# FIXME -BASE_FLAGS += -DRTLD_DEEPBIND=0 -else ifneq ($(HAIKU),true) +ifneq ($(WASM),true) +ifneq ($(HAIKU),true) BASE_FLAGS += -pthread endif +endif ifeq ($(WINDOWS),true) BASE_FLAGS += -D_USE_MATH_DEFINES @@ -117,6 +114,10 @@ BUILD_CXX_FLAGS += -DnsvgParseFromFile=nsvgParseFromFileCardinal # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS +ifeq ($(WASM),true) +BUILD_CXX_FLAGS += -fexceptions +endif + # -------------------------------------------------------------- # Rack files to build diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 6acf1992..b408cddd 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -143,7 +143,7 @@ BASE_FLAGS += -DPRIVATE= BASE_FLAGS += -I.. BASE_FLAGS += -I../../dpf/dgl/src/nanovg BASE_FLAGS += -I../../include -BASE_FLAGS += -I../../include/neon-compat +BASE_FLAGS += -I../../include/simd-compat BASE_FLAGS += -I../Rack/include ifeq ($(SYSDEPS),true) BASE_FLAGS += -DCARDINAL_SYSDEPS @@ -164,12 +164,11 @@ ifeq ($(MOD_BUILD),true) BASE_FLAGS += -DDISTRHO_PLUGIN_USES_MODGUI=1 -DDISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE=0xffff endif -ifeq ($(WASM),true) -BASE_FLAGS += -DNANOVG_GLES2=1 -BASE_FLAGS += -msse -msse2 -msse3 -msimd128 -else ifneq ($(HAIKU),true) +ifneq ($(WASM),true) +ifneq ($(HAIKU),true) BASE_FLAGS += -pthread endif +endif ifeq ($(WINDOWS),true) BASE_FLAGS += -D_USE_MATH_DEFINES @@ -195,6 +194,10 @@ endif # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS +ifeq ($(WASM),true) +BUILD_CXX_FLAGS += -fexceptions +endif + # -------------------------------------------------------------- # FIXME lots of warnings from VCV side @@ -205,8 +208,12 @@ BASE_FLAGS += -Wno-unused-variable # extra linker flags ifeq ($(WASM),true) -LINK_FLAGS += --preload-file=./resources -sALLOW_MEMORY_GROWTH -sINITIAL_MEMORY=32Mb -sLZ4=1 --shell-file=../emscripten/shell.html -# -sDISABLE_EXCEPTION_CATCHING=1 +LINK_FLAGS += --preload-file=./resources +LINK_FLAGS += -sALLOW_MEMORY_GROWTH +LINK_FLAGS += -sEXPORTED_RUNTIME_METHODS=FS,ccall +LINK_FLAGS += -sINITIAL_MEMORY=64Mb +LINK_FLAGS += -sLZ4=1 +LINK_FLAGS += --shell-file=../emscripten/shell.html else ifeq ($(HAIKU),true) LINK_FLAGS += -lpthread else diff --git a/src/emscripten/shell.html b/src/emscripten/shell.html index f3d8947f..ce061a3e 100644 --- a/src/emscripten/shell.html +++ b/src/emscripten/shell.html @@ -14,6 +14,11 @@ margin: 0; } + #canvas_file_open, + #canvas_file_save { + display: none; + } + #canvas_wrapper { display: none; width: 100vw; @@ -73,6 +78,8 @@

    P4$j={+BK^D;Z!oPLiqiz%1kpc>>HKW zRbld;B1WmKPS4E+ypWlUQ$>8M`XDJUX3Q@p zD{eUuY(x##jhWA9*A*4d6>(oG7Fb{bvPI!e6;*A*Z>XZ6V7=ssw^zN0$gP4(B>QC&z0zFl5Nhm((5k&>l zInEc#t>4vg{cNj>S5_OG!xf2wf%uH=lk&!ARh6qmr8ki2K>Q}&=p6*@uSi@6M^dme zHaW)1+??%30rngN&RPx?n+kr{At8Ums{46pwYVmKIzX^$`WxA--w)o@N(NS%51on6 z<`&$M%9^EBLxJ1hX;OqP8VIU(XVcg^ksbvvPLuA&C7Jn)--ZjJR4SF1>S54^7ucan z6fFz&k;p5U6V5ftH77-yA7%+I3PwcfnBd9U{l8Jhh<`1lt!;q^V}Td@;?57j&VHoL zKTK;R)*+u5PrIBZSC*xKe<|3rn{!1ZcQGJt#91O#vb25RMK>$^n5ra{h0LeVH~V^M z^-@xJVcAry-C>T5^gCYZn29wizOCIb@j>io-RKJ*o7INPK^5p&)g-2%!w zgLH#54}K6~HN=XwBQKF6L`#n4?_&|cXA61hx_69P$_wn&XlM)rL_2dj$tB)$w!yKA zIs{z&x2^MpB_ooo;Z>575Gb&7#kH+Ubfc`ao78QfIuwi(s4w-HSuCkoGgr%q3wh`b zxsC7Q$~aWpwg?B3^5#Xi%OH{5e>V`#s1nju!Weaka@Dv{Mw1IIXat~eR}Wk$ha4dd z^!j-%Q)dVqX&6mTmd3lEThy@lUv~-Zzm7*C*w}(mJ~TCek1E)}{SZ>>jbRXg%@gJ$ zCv>lEu}Z6j@k<216_>hhsdANv=Png``Z*}Gd77-r=ly7lTp9jsC~4)VN@-LFQge7o zaVb;$T>IkY1hszPSAZepM>gg*{Gq!sI0H5qn)-ZY*)jdRiaQn|&IEeX=|slq17qm2 zNz>RsCQb{ya_n@OS|x)cozyL zI1ze~n2*?x%*>vto#Usc*HI%a+&v=d5hMoM&exuXREcXS27hO@tIn5gp_g>1v^Pb$ zX6)R3)E+{~;}bTSrD@WS6U(${ z?)S8Ozr%C1S&W4lYunU_MRSec=d$TxIml6bB%vg4xH!n2dTScqaXqp%sUGzni`o4W zteckfE|n3cuj~t+5r$h6L1E(Y0=Z7zA}l%qx)pYRr?rn4af_L6b-TB$;s{Yz{Er<= zID99JFJ)=&Y7ygKia|Sm4@K56!{62d%fL<<^Jv97^(|} zr{0b4wi<>THA_e>wP_T{lHKCl5|h4FVA^kk&_+ZB3X2^aGqVXv@BShS8duN%~F?(zJ5;_)$i? zptP~=;K^+pRDj^}tpN3r4Ik32PAEoW`e&y*e4|)XNX~^Xt)InQ670%^oH?WnSEc2z zs3`)a?vt~1MIMO!Al9=vCs*qU2FN5`E9Wc000B_T0FqOpEY&aXvL=O0$_Z-k<6nFMzb z_(Z^Mh%g&*ai9q&{?E$~z?Fv_za&AK0TH4hBfVw{Y;=BW=g}EH9W-p`IR>mku?lQm zceeIl;@002OWJr4YN26;ajH;QraJiA5P~;hBa4%hi(*n9dP-&}hC_DzyE^aNd|)3= zEXuNo%>qB`NbzN&eQC!ge~4z0m`T73r?Nb5EXoKzc<6{osPlBr+w(i0o~_zdgn5A4 z#xEnpx#GK;D=T$fr$uS}RDza|nLywsx-DHh!P4W*!gqR*X+oKtM~Q-oIK-9qGb0r# z74(Vca|OZPQzHvwPAgB<9>d4=|{ zl{P=8^0B?hde@XnCIo)9-`wsf9rNkkLt%R;kq_UM0nd6B0|yBgJC1`xwu(%D{;B6m zT8=6b-XXUJ1{={Ulk{a#V0~?E{b!F=*2@c6XopL!C_yzpa7%^22Dpu)t*F3f=4j7i zV(w^a!2+^(0&c5-fe8qMoJ`CXvS+!AuNO-0OA7>*ju=nkb&&&99;Q8f)sz@^7Uyu7@uZ0}g#y<-L-m|eXb+)O~s4z84cQ2dQU!ot!OO|G2_c1Gv<~ zs%GKp=A?ab^;70lHD9p|Nwcg3y#qKY0%*|LW>@4g7P*;E|`+ty>mQ_^w*NQ(X zu(Gjt`fC-S?Eiptv$6aiW&HAuC`Cm+2}d*cKkUg$ z2vYo^&u8vvW@FCx_s4g<+$NSLX3QL1X57r2X575YrWU})@S5>h@N)22m~*o6{u?S; z2Uj-}2Q!O5r~u?FHUJ(Tb8bsBj`ya_mX>T>%$&UDCd?+>>=w-L%{a}?Elo_{bD8n{ z8wzC?8^9_}?EamrKd8(BR2H0;7HlSFX3VDS=H|?t>=y5sdAQ#3GMjL4S(pNRzGt&A z`wNx18K0D+i@gc3oi_F+Ru-&I4px6n{82ccsEVv0#XAL6W&hd_i^M8OeEnHjyOZVe{%1 z&VN7s?E-c-e@&5*{bja%CT4#VaW(OHibj)7s*Xp4b2r0*v7umj*iz9|t!dCnqBtJ0BYx1?xWqX8q&U|CCsO z_5Y<4fxiI$Eertb{vHFu3lObX{}rzOp|d|~{J;3~kG=T6NC80oUn2i2{r*>7|5exj zN(28Z;Qw0Jf7SKB(!l=;_`lZm|C_oH{-@xvZ~(F(PoSKkRQh@ZltM73^3oDuZ-0IZ zy33P+5qKvV9ak_gM9e?`;9yxfc)%d6o2;TF>^=+uIyIBewgoM4+aF9;LR15^a+>Q2 z(%V~p>sk4EooMfs02;m;r}BVV4yA&Uf!m`dZwg(8@WY3egY8tDK-IO@@sij5)PmMO zS|AG-db-C%OLDa?ew|`|cKbANU1=`=#eAX#OE~}JyM_D#QLbyA>xs{~tMI+6Fy{kr z)nau+zb$l-2pMSn_2tRt)z{ap$5E7`0}5gbCIp`j)_ZGP^36_!29t=3kO&3VjgQ#P z`>p$%X+y7RgGk+?xFcJy`8)KFln*^*P;G+KIqV^D7jZ~2L%}L!VA+!}A$@_`OfV4x z;4woGV0cI{z#knJLdK*e@ZneGJR3n=$rapSUet*EB~FqIlu!a}kVxR@s7#~;1)iN@ z;E*Xem=g~XTc*O`(2!`UnkY?j(4?h!@w`~6T9OnMnh#CC{3R4YTsT=09Kc;eLjzjO z(2Q;K;qkFcCvo z=vXKH^XS(5@YeehBtS(=TU=QQ4_2VUAX|(PDX1)VSOPB~PKOmdX-P>#1EX1mO%MmX zx{p@X)uHFxd8%~pN#Ff zXlQ5@6cs_Zw67lV!GwSV3RP8A-CWtWg!+rIP|-^-flIqwRKDD)qqPm&X0f_Oeu4OQ zUFGs0qGV`+BRfIUJ4rA!Xg+y%+``|X&P~|xj2pD!;NgS%jGcZ48DH>%zBtIpz;O~F z10=s$a@g4YEissJqjtfMqfM7~fE$O!+hLVBDatl|mP0qbB_^DvK^6GHJlTq%8B}1a z5=KJC%w2w0STySvs#O-u+g6@6wLD9C{>)II0Tjd_n=3+gryyVm@#spNE6C^W;n8o+ z*>B9&Yt1QEJd3p4($a$CD@4kKgJ{P^2)trMh3YzRW%n7gi4@Puh+{?yVs23{5i;Z| zMGTo1k~GiRzSq^$6I}7H2X}4Phl7Fud)e7Ia^qvy_**G`NO+ZXQu|8*)4hob5J5{E z=!U_$9mXYdo~gFc883HKF7MaZnOJ zQv&u>(nRt%(U8Iwk_njDc>}&UKLX^KA(zhcz$D!oO+48oH-J?PTQZ*YAwaK>kB@+Z ztj0^W8V#GjTk|jk6!+`)w$GaLlQhRaWI9BKVZ%eJn70Mw1wNFY@ZO;1m~dqmwtTo) z?4(l>Bl~0D{FUt4lWcf#fx5_m(UBw^%&Ehnp!{(uuuFX`MD|PtfIpS0c>u&*f&XtV z_aY;hY;li%v=Xw}T<&8ltw;&@LLYsq8G^BZUv}xL3_1G%h10k4aFM>M`Nq z*-Od)#jN~ga1g%sG7}E4=fAuKElTdf`HZW319ognM$!S2BB7q4+Dtfyzq|n(WIJ># z|BwlTG;h~{2Kk2++SYApABunrIc_LD^=zwO>4IzN&)DPf?g97{(cnD1w0Ujhk z@W2BcD=>)`d5Q7=1=;6FK0h`LN0JcXb+d1BJXe`0B}MW5?)%BDb@~`t`q<3EdVHhR zbWvMd1}7dsV=aE^4#iATH9`@LqZeiSq!4nPgmWbpALBTB$M@!k1a42RVe zS``(VR3$Fe99uL^Q#V8~|3w!jt#VE;@E(%NsO8Pn0ft6Q95;Et7QyOqF>ICZA8qra zEQu5?$O-ZUb}fOBi7b?xpPz7pgfFzG>xsqG)Ku!l@8)2-{3|OJRp_%XTqvQ6^r8Q% zia%?Y@Z)U4<*k-cTvUYjL9VCi+v|&roE(KPIS{aaV3v`-M_YZq<fME-DpJ>_IY-Gz8pZ^E$0kc^}U&#d%JaauW+<>>M+#Q#OWUx0RN?2?E3t0MOe#> zfr*i5eSk(J=sjnYzhA?J?0mP#rxTWrQ_=s_e>1&vH9|_7?iUssYW#F}rrqj5%wpKZ zv;TyMf->CIFE%(hNXEp3)YsQHW6gPZb|z_W&&*=j5t^2kCQI8D@cJX4PSo$LdGT`n z>4M+D@y74oWM?=IED#WQBeB2JZTVf-_4Nc8SeRJQw@USw`JLNPcy!}^D6Ubb;FI(s zpJ~B+5Os%KDaJue^vuEvLZ$)?N<@fEB~}zXd@xj0#ZrbClzt*60W_DI|)g)Lrf}q+VO^;SCFcWhQ zZ{X!3eceGx3B@qr?0v$5pvx}Y>xE;$z|oI#An4}QViFKUTgazx9|*tkVqjpb`Wt~j zJRavuK>$sWQnlZwISBhxLkl%}>=xr#39YiSvVAc<&(tJu%hP{E-ziQI3RWto6m}2p z@$L#4K*BtKc{kFI4xtO$@IGO7YS(W)nVX;ATDHm`vO&Fe?(FQmTCO#CxUQ;mdV9Iw zX*YU?@DkGr;vbnsNJML1_(zfsT&z%Ul zu@S-^e!sn5R7}w_G9t3RUZ=;eKmT;xX=(nr7R@q4+PL2CN{etXIY9dMAiX`0{=B?H zTur_H6=G_KcxnK-!f9Xyfb{lscXxkS-bvucE*uPnTJ5mKc5!u0O3p)x>I_kK2zco59~_Pu<4+H~SUDSFz^ zcJ#g__U(=>PS)T84d?a*z zIRM(vv?B-`4xsX{k%sj3ey5hd1kA!P ze}cJnb$cdBQ(r%}b;I9h(B5@>Fv?^xNrtM;YfFquITNB%Bl@s{u724LNWnNcIX6$+ zU3olC@tSmNq@NVz7y> zD-`k4!JoJY9!0#;`RhlNHTHM<)gi?78#ncp-JJyUPRB+)X~oGp4Z>X z5hXrWR8&;P(~Cwst*qUl_CH&AnVu$$UV};3{J4WdLUK2d9J<{l`k$7H6ZpCUZYH_A zU&(#Or}KR=uJv}iE3)c0p z9n%(Yvrm3f^*)O{KP)_aTZ{E;BhXgR&#{kjk9=g*((_xfN}KYZA`J3&$4kh zE3GtSUw@dTK$BwB6Th&qKz`D5`Ftb(y}bj7AoE&A?W-5hUN@_jB0SbCED-nti`wr)U6J&yV6v(R9V1uqd{VOv$KJ#O?J zDFp|6Tbn_UGDI}<)3|_L`Q9CsgLbzf*7jA)%gVL^C?c*GHi~x`Kn!qZ?6@^&|@Slwp;vu&rvKK!q+G1UEJ|26{XyCm!s9ZQ8qi^31R4fLaL?;)9S{tPq-x`!^;#W<6uH-+z#fi)*!}noU!Ro~HhD%nAjWJG=aQSa^I&1CKIcEG=G%)CE|QrhWx5T28p`%fjZW?&E*9WUjpPsC-n z6gU)vdmjUy9JOfZhn>!1ASNj}WRCP++rW>lu8y{dUu`Sb=_*x9szcx7c#a-V zktSk#VcjD;B;t8XnsjSV)JE^ahYw5jCXgtkLJD3~z*l23in4v~{2{_V`$(};l&Rb& zr%PSv>p)oN@9ObA`kv9UR-W${Uf1)wa>PEq>!M#*(YrMeaW&gw|L}Y>UD*QKz8YyT z8$n5cwO}&r!UKvT(63qPh+Rz7cu~jIHgsrc=(#7yo)?@1fyau0uPNBrZHB5rYev37 zf<^&xzCV#&m~_6{;hVq1&+~pfB6sHn&WQ*?pF88H5mGZC?1BZhyB?SVc^e%gqwDY7 zo{bLdeE&!KT_rVC3m4v6{r2GQr@O-X0x*7$Q!tw*bN5)l3K~ zU#P49-NOzG^w)+4bYAXUnA=Uqev9h{)uyi85^4@j-+ZE_15N)4tjNY#4=01J; zB-Z_AJ`zuU8v})^Hpy85!IADqT``c>-6Bfdnf2-3B6ZVuXTiZmEyQke0 z8Zotpy4_P@mMCK*slne|As=xX(Sc zu6rZizfQj)9fiik#}6kf3-L-coxx*7q2b_g6`8qW)4DypijrJvJN?Xh54u~n>i+Bx z14fZFy5pWLSdD5&TIZRzaKMtnzA(4A=+k7Fzc!i7txqvz8h14a~)7?hFk6*P&@FV)X8lR%D6!~;SD zoS6^EeZzrVj7hf%PFeUiB}D7~$SNQCD%R1kY1Ce+{F~kuF=q#hWo*o9*WGc|!6mmco!qUAr3^)eke@w$)*k)^e@@q{*- z5%KZymC}JikuFs(!YNgStboR*boRxIWEI`3Yd!ihBbwDUR_VKX;hoQxpyzAXgayzx z;AYj2^n1Ej&%eF9+Xhmj;hr--A0P$Y&gb{+z>e24@^c?OsIn`L){hc(cW>4@a2cw- zK>)ihS0f42Eh_Zw3e1a8~OjHMj;Z2+~2pP^Y)1lfc{e$fnM7Wy4KT&Os`J0 zOwt<_?$xxdIdw%Ur}P}V_sBY|rt^mSLSU~3W{VRi_Eai0#8=K@);ife&-GWy9=3yZ z416!z_OIfH8;L6~mD-wdv9Sxw%SZN#SEk?Y1BgR$4=)PWJKP!b{DENR%xPtK5`rqo zNrjY{mKOe@bsgwV4Q%)wG;AU{`Ohet$1~H;Ednh70ShhBnvMeg-Ge=onN$Se;>gRui5XPW|u=b<* zlXqD*;{QpD_O8FhB9#v?y**FyYd3p0>(#m4pRZ|uajX2%K4<8ACE04Y90Up5g_=FO zN5{xozFuBl?vvWGNB^T-*|SZx`?4RAM=Ty^zF16Lo*2EYoLxQNcHaxI6!K)$eSI7+RCkyyl4OaQ08ypU(~Ey@ zZ8-Js{d0*5)&Jps)pa^U_;@8Zt0-zDyglg(HQLAmvYwH14o*-fs`ZpzyX6ayt-l+1mp4 zA_HVQbVCioBbDmqDA{$n>FE*89~YG@w{Dxm<5qUu-zzu>82R`8zB#x$+Zu3Ki~=H6 zUR}>HaAbv$v0jrUCnq<&05!*Vc~)fpwWmKPAG%NH9mzA$;1KV&dY8EbSo-Vrc_+!x z@BPW_2*0Pht+Up37e2naqN4u7os0XPr`!n*rX-or1fl1dvl%<1>sOx()i+pJ*qvfj zVK?4>HhTK8lT6;{pc9XNem3$-Mhr~M+%&G-(EgK?!a;}T7~bFz(h1C8D;A{6c~3*E ziOm5$Kc{ejW^wuJeL#cFj+F1~?*kstA=;l-M9FiJ3f&-(64!grGgKRPuM|J59CUg< zF}$L_;6>m9rN`L#)run#7JCwR@n#1RXG0Dt)czzC(J|QUq;(7OuqX9HqWP(^> z-K^_-lmBKsc{~pm7#oX}!{bln*!{vKCnraiK7md`5)XZIUrALQ;{i#c7fYySs^rSa83O%7jWwfZl8A*x1k;g0`UZ^QJHS-+Y>ynl{@H@`}Hp z0nKDfh5UGY5-eGEg186JlSjlh7v%FkcTXQsH67DnV`7H99Sr;U-p*?QorYn35cp;T zP{kOXt}8|<`1%U8IIJDJt;NTq2>iMn0O|>&Ub=YAs-a|{d-4j@=eJPrf#90X+aV|@ z*yea+*(IdF!`vI@DG=&$>CNKmFNpjeL|I=P74=|W5#$|PRngnn^AM&5JqQf}{wX&LU!#L9IS2zd(0TW2Zwl-@Oljb#{t zKlB%)%*VEeK!E3tbY;ls=-{9K>{_l`fhZ;i8hNo;(g$h1lL?=1w@RxOU5>fCY@t&PPAG`JkKiP+?x82&1+=+Vt(3wRF}1un zJp+?|QNUpRX@Gq7;|EgOcp#f9DJ>;`_YMR2VghI~il zMDUU}bp^4OW+Q7}4$g%d7fDLhj#`Ex{~z|=GOX(M>-$9Mlx|Rv5|9Sz z?kO23eGqMJGpm{_V_I+qOxh5T{R7oQTVr`NM@5Lw?0 z;UO=KtRppfwD4{+cmJE>eo*s>IFX4rqdExd#bo9#U%Z5CJejPv_VXlF$ByO0Tggnc z_KZPqUn<{EFz^>Q>n%R@xE=eB)qKyMIu!ZpWQ)o6BN_1H_j;$ko@(5q%3kdZu z4Ln-O<_|_Y7!YdNFHX%9pR*8Rg%jcI%g5XwO5NAo2zl`Zl>AT^^y!)}hdB;Db{voS zqhBZmJ<#itC_pVoUyUCjyZvX)<|t{Mpkl&5jr}` z3+u(es4ZsZpGtgwkLlArGlS*`!&MZm-1*+jzM0Od1zHa>kKriu;I%E~Gc$?aPx(ORmA^LUzrp>&HPJuX&? zeT*>8tQR~~_HV1vQJBg~UToUl)Wrx3dHoU(MLJL;ek8G2tF*|Ry_EPzZmzw9qwGNh z?#%UC`dL6PfyeyHCq>9iH*gc>gU|!H*?BRBX)p&@<}WYkr0bmin*}&19?HIfqNl6pCMoQL zNQjaaH%Cw==cPu>@3qmm#l*bcpvK2=^!2e}GFS)_vz_-F%dNBQCnjA8;Aj2>HNfvS z$qeW5X?`QlFU%~A;(UMFt%fXLbS=N={8w|Ui~Z49_V43wx+s@aq{GkfZib-L zVPm7bz?uI<5>Zr!iSOx&nn*a|Mikwv)+~dS`0`6Avzl~M%zWwLx{i?nhJp+C8Jxem zx~}8@{#x>7_T@{^z>B^%Z~eVbSDu-v+z=OUF6>WkMn^Z{PM@E+AB|NqD?V@|mfJ$n zR|Wge`d1kPO#+mq#rY;ZD~T7K_O!>oQ`1wrbhZvuRL%PO0zYY?(7?k${q5+;BHsF@ zyp0}PMdk8A+zj*_Qjl0PBh)gKtw@MF+{aY}Ua;m_Ef*=g-pCX6BW3og(}*{Y|F&Y~ zF<{fY^X{{>9S_gvTEd59WIP+k6Mkd7yeKH(KX)w#pvHBt)ZVIA4C^^RXDGxe?nHq{ z<&SgGYH|!Qm-$B-FBK;Y9x_6o{7g$@eyV${dRTR&#o+NWA5%#7bT4+%)0#ioxfa@aWli{dfHZ;X<0o$KcT8B>ZGKFTj2Nb_zS6O^m$n(rpf z;oIG(dPA|;mM+D@HT*aeF?Dbk`<7DHPV$f24ld3LHO~5mpUh^gmx94TGmxS(aDI>5 z#KSss!9tjrj#6;8qL3Jg_k70b`}K@9S9;WJi#W>bJ0B5k!!mDwc%hnG*?I{{7e5}0 zC2Mx*yg6Z@U-0e|wR;_WZ?feKH2MUeYJgc-dofgZieKwU)*6-7Ta_3x0I`?jpg z$zwXW46-k*rT8jcG8j2P>NbwY5SPp!@NBrHkR$F#T91p<(HP$|Ffb@*U{0^jLSmeq zrEO*uQ}O3d48_8GzOQ*==>wY$#?|^_`sbYo_#O2e--?@X#gHcNO)pluA~^+Y5AhxhEeh!_JN8@Mp||p++KbsEE`Up)8oRA zbwseZ`}zioDnc6s1phvasKGMX4%{Ed03Vs5qb@j{EJl9x?IhQ9DL*CQ{$CVYu^?J` zjZ#D^E`{qF0=;5i%_%_qTbU+$)SyDRerz`63|HK38KZ}7=Ekuz;b_s@k*nuwWpgMo zdT+F^o79Wk^HOen`zX|3m$(%h8usHI4J|F+jQEd*-QCCS^Y#Kou$=7@Zuhn~x|B7> z#Kax?QNFKns9ih4i0Q^6jsusmr$nerIYv#n03!=<0fEm{yvpE(WAQ-Pe|ueKYxmjg z!SgwRvU%U%M)Ur!S7aD##vRMAXTw%{twZ{4WZ`Zhi5*e8igy;L*#sST>L?#@TWGd& ze|GO)Bf$s>r^dPwT~&>5mYa)}q6`r0R~$NY@jhV4Oi!f#QIfWN=V4W}{aZhKILTQB?_AwT1>k zoi#>E3>+{vbCGD?-d+ST%-(%A6W8dt6e}yU_1gDRYiHbz1dZ>1pw{SUI(~h0bS?Sp zn?3BtrMXBwB}JvMr|Ua|bMtOKi;_`URKN{{(}YjGVaXBm#CeW`3lbHt%YhZ?_W=Ia zIOySwL>XS_P6IV&U28IO&Y00^>hd|x6?Cndn5D8eU;!5@qop~cyf7&4EDXGebejJ$ z84>%QuS6?1cC?m<)1+bG@!wezR_%ZTE9oZwsKM@UsT@&eT0f?vo+9PcQZ@6DE=A-` zyYr5etnhO^Nj)wu5liw5xCp{b;l}TDD&01}e`M%(!)P|w4W0QS4}}=~Wmwl5Y~)~_a+cK5V69{Z$UT~b$pVW7Mi|VafCrHUDZY){7@E4Q(XedCPD)qF%SmNAm&V_&9`ZfWa zkxazc!lqmhYhSmvCe26O{N8C>Pee?OlP8TrpQwcIyt}!1;CD2sJUmVBKStkwlJ_B( z^}^NjkkVNrZme-6z7KEyOYz0&PIkzZ?-YhPImNYq{a3p!;=~6pDEkwiGR?F3`H5$( zO;G{%^#0@oTg<`&C!6)+)PA&|k_?~Gil#ZqgYSQXJ^sUY{0H{<58v@0*yD^fC|^@3 zNnx|`hLTqEE+w(j3~V*V0ih4h+v|A=^G;mdqSVVVkAdR*+aMuB&ZeB+(h z%0LPv?zLY>iq(L=C4RINma;WxZf?fZiK~Y;9eJc(+J3G5}z%jdne(3aL3=8l?!C(bg zP#?be%MlfSOXK?O1lka7CNS`B!ZQVWB>?MYP??IgXTu^PLHGCLM*w0F8qe1m;jY0C z1&J~k@U5+_JlR8#fh>$?`3b#}k3@|=^KG%=Ulw@RN zCCS*UEGYbuuL-uv}6FFrgR zjg*ws^4HhQ*KPxA?gMOQz8EKO_1Qt+1(Xq48v>+2!DT8fZ^QI$eBABopYMmJrW8fi zW@Z6Sr!VuMp)UiE05{UwcBD)zUlH&bcXxL}p;&8td~Alo$bMx~C#UX-{>)F~M!Q zHLD23XU%lj;98OEf;d`CckNBU=$bwL@_ocY%hxe5h<)Gov*D=G@~*$O5%3#PXo*HQ^&cWr8Q zF1r&kk>3>*Bm=gkZ(zXvj6PQrGo?TL>sRDk!9u@@brz5#>=|o{hj{x@TR(hwShLEa zJxF%@FWAv=f@g?4CI3h%?~|JXOAj2NDwB44SlGw{CGJV|sVkVGfYua(tO4s5E}pWc zrlPAW4@5xA2HDB!DA0&ZtEwXmITfEgVFoii`St5?1VR>*8(>$N;xTFVR4cG*VI^r- z=re7F@URaI4uE1;yS)3Ebt2C@@PrEfAW22sg0Uq`MN?Ha$eccn%LF4t8ZyrH+7>`2 zFbQa-Jv{}%a2}nQKt4B8+UE1xYxjDkkU>4h?r z?7-`Lu%T{-^@jtiDUJjC1|IeO;rIIc-@YsFLgmJc%Danms4knV6Y% zE+8C5$Ha7oM&LefGz9u~baqySi@4MJ)2C0aC)-Bt_3Nv>iE?)cU$W1KVC~_{=k0Li zXJ(2pU3r3C5a7Q-s5&?R>?x9{xC44h1Ufnv4o+yNefWYU3i!2)w?Q*2DPaOr37Al!kaL#B+~H*9qdNOB zM#h$u)*Hl7ty0j$wX}!>oe0#LqmiB-N!!J)m}!d#b|C{p^C6%xsi_ekJ_t~1ya_^W z=yDPQoemWRE<7ck;BEer>Ea#W5WV_h!q(Th=^_!=TeMK&Be}TQBO=y7WN7a2fj!e)n;O0 zX7C*#l~+(YmGa9}S60=Glx7RpEkzty_iCG)Cm?-z?;oBNp`oEDC=fisZTsl!3$Yvy zOL`q+-Idc5Qv+kwaBsf+0Elm}Ws_4vka>g7YIY zGxKeE!={d>HHJmRcmWrMkEhLXg7 zy3>leqcNA3&IB)^`1$)s{g?(@UdQB7)Fj6vgcIN6{y%G2iP0#)-0JEQ1E!vokrDl8 zYnq7S_MWy)xMDGbC<_MB^74|~$58@RTt>ndS0Z15k@y94MBz!!cA-Q*H+!f-CEyO( zucx1W8z=&b^jAcfhu$rG2@f!goKm z439jcU;VjWip327Ag=$jXO3AP;0@ro=z9nh6%_$TNavU+1gjeiSfH(=(S*i>;;Mv|1 z;0LciXulFX*`4LL5#F?Xmc@_hf4bd?^wVu-zkhsQ=RK0gpwJFDOzf?N;M=STx0TGC z?Bd-N>60f&3U&AISmO70O>W~XUo&`7r*rV)%|CnH|Mu;hwvmxa!x&9XdqO+N z#Snz`^$o0mp#&_c=Y6SK-NoU^!GxZch>!mQk03wE_0@EHt>5wQ7a!J78XI5K!$%>A zS=f-ffaOS#t?}dXhBjFy#8g5uy7;9e!rygOWtF%UZIZNqm!ov{uKR9D9VG@fY25e% z={zlQD5RMlo}N0rGG61bvW zgY?(BjF(V0uB_(J84oqBF)=`RcQNT`wb7wL5TEb9huiL7DQAC6a0*NVC`XA1J zWWW?k_@7#>ww_wezJGEC++~j62M`PM_ZB2dP`qLNGv2-HwlT_payiQiIGT*N_X8o9 z1@WK%XsBu2;GGM5{$a`s{6!UTc|5Jno=UIg)r1sF1QKnaoxvAC+TKoKj&inLKT>1cUMq$7 zf-mdU)oHul;2VwXNGUKZQypQKy$e778ukLz&_@Ds z8||hff_a%>9xFoD)tOf`c>P8QNK5w8$exTvxnQKkU+jnb+ouJA}T7C`%T8x@NLi5yZ?yQcu#X7 zQ3u4Q<1M-`PF<1s6Ms4Z3Sxv}L(F@(M3N@sz_R)AxJIKU?FAJvz5h0^yu7^S{PpE+ zbH7dI-_Jp1KcwemgOV-apqm0xx8|ppe!uxa zLqFb{0#nx-Is)Wce~@v&VnO=(*MYKimj(FG*llkVys3xMVoN$}R=VX(F}!OTtxDqg z&7ar_ST)??(?Sv|&Vh6poaAV-4DgWck|naKoB%m@o6D<43WIpP&!r*>!93B-_$X`)Shud0!;wN zFY_94r6a$nW4+6Uw^(T`?wJC&Bh7DUYJ#hSI}=as)`=3xVo>*0qU!% zDJ{gx(eZIP=Ja|ITBwbXgpp$FHIlDiS+e~7j5~dBYoGRSw{2%DxY6BK|JHtZgI)yDiL2~E5*cK{aPUJ~N06T{ z@*Lw@#1#cfxwFYQZUQQK#IoytRJ92a^iS-}H;MVQK*oiRQq{WC$WZ)gJ9%&o<;Bs_ z(TjRJIO9}&d^%?9nZ(8KV4x8#A2XmLo(fRY#fHI7V3fFzZ<~S*)j9CKg+Z@9Fi^qU z;l4a+x~#A9i;-vSRO4<%6N*CpG_(Xl1^^qQqoXKLxB$2wwXnFbU``pYsOp2798xPQ zBXa|;m*irrf1fCv8o1<~9ffjHIkA6Sf-g*7zka>69Cf<~V7dLJuv=D}-%8ImtrH*b zyawPBmn! zVtkw&6!zec7wEF<1gyo%WiZ~mhuxb<-~GvROMGDwKDz$f(1FrR1WWB8l>=l_Wa>M0!vj(fj8+F$9-tMTGQo)jE0c~U02n=SVPT;U9FT4!*Z&f`MkhkH8X&=G0fZeI5Igm>BqCb< zPnNO&pN1wVwONI}>f&BqjdI>l+)9@N^d1U+riZ1Qlks!;G0?=le) zowYm9*V-IdwVcmAwSTU&kK{btuO@4dhS^7P zt&el_^JBAPAwrpW29=XfUXCvsIn&_(iiM>sSFXSEHItuf8bB9hVzYlv<8p^loVL!* z4S7Mev=Zm{gy6Shz+crK-wKw7CR1oF7@L}kOq03W#AWs={PXT7jyrPra3n56k!C%z z+?ZnxNn29nxu3jRX>{~Uc{w>$LD^Vt!aHyafsICzONNb_Ahbq-PU84d1dcg4xc{rs z2RbO412&1t2%=x9CQAj1;y5QxJH|&=7~vdIlu17Sg@+70Akmo^R6!N-N={W1p8T~c zGc^q;ccZRy7PtUjwO?QE(Nkz7dwU4Kj66h3>GzNuUg6zu&Lg~?2rX=A;S#qddNQgC zBUQEzzS#?Scz6|+R^t=l1 z``SC%ORJgCh>D87U2P-sg~kbKN-9_gP=~zQcZDjpcx+@xgk6-HI0ns0DErSq%)Tb$ z0a!$D-@Q}Rw_yT-M#sctOWQ{bSQ-#?MjZv%+Jop04i1FfR?wh;0XRt7mlPF4j8;%k z5V=8N6OB$zM)dS3+Su4Ey%Bj1TJ28lGbne!5P*eok30Trv$QLE{zz1(rL?gzb&#<8 zmzo{lWQ~oT!yx3#FQcEw`A<9$kOoJGD-lyNU#q(mj?Q1?q|z=tca)hBe{m_!qhx;{ zBi|!5*zxi4C1qv({uT{u0?JurA_;{w!iEniLgnV>X7E2Hf3x<}@|nzy3@`61i2g`v zpspPI7$0Asmjs02M|dUAVWlwe-ouX9&nN7$vlr^KkA43R zE!#JtqZ72)-Q8yp&pFLLk@kay_IzA}Fy_icr=q$V|H+dl_KuFSfq@d>-q9tbOS>Z5 zP(hZ1hJ_Cfq{yPLE#aV(l@7X_j?4HXs}ufTp|ksKy+bBc}9!87o$Tq(I&A zPgh6`+M2rvD9%ZIPjEy<#b9H-NSm6v`YxZ+->D6SYPc-J%IZo|Qql|87_?3X1}uDB zNZioYB2X@|{~^_07Z+}*?_H1Q1fdUDr-bwOJ-EHG_tLfhetka4@=vj_&kaE5Hc9_Lf({}!w1we?YbbDL2G`AF^!i|{Vd<%@Sf`!Fx!RIm_9s;mk;7640 zLfnZ@P;__agY1mcfJ0sJ?n5_doqf@76{1-j!c8cBhct9#Jq$P)CML8oFMf>l^z>q= zvtZZQKYc3a>nkGo$$p6v8%?Wqfxslo461pMgI@4_YiYhB8Q+FkJ(CY9-vfEK`fLPpKWO15C>mUI zXY~|9B{CO-9~X{n=C)ijGhqw;a0er!(XC^s-1KGrV81~=$3Tb$gl4(h0jlC=#aA=X zcNv|~3og#jwT+EqfB$xT>)e%QVq&7BYy4Zg*o!Z5o8cub$f74FUaA7cMMbrcPC8bU z9@N@FcPaGTh=r48sQ-#~lqFowWn#cAXiwPsTf~TblhAjH6ebmmWfT<9L1rNYT@p5! zyn+HS;h6BwAve!rhQS44FuULmA@b4#n*quUvJ(knH5fQhz8C1T>nx7GfJMU44ZchW zkFJuHbO0ut{Dv()yzk6gV*yM|ESIpevAM&_YS)*NCC|u^fJU@X$Pjg7#QR0a4RXNH zlvUN`_4P@=SnhuGrb+#);3_UsCJG)Bk=a`P;i=KWl}$E zOPDc!3Lj%6#Ih91jv^(3c6wGyDPx?b<-_8JY3rH zQ9ZIRyL3aO@@0*FIq1pSF<0^)Du$GBuRE7rJFMzEYe~L_{Id+}L}@ioggEBm<%xgK zL|NPnVMt6$ibft6F+4oXK%fBi3Ic)P2|R~m&P$iB1u#$Qc_-GB6ZNvOj(Uya*RYN4 zO@`3D+nHnJ-Q~1C%ZGd8AqdFhy4Uo@*i&)f;ps(oX~ao>EL;kN{m#R2$%>Ss7m|%E2${+sDLkf8K4yn_3RSP5E|2C*4;(jIaSO zWTAZcH^mDBo3SP64gyWK1NTOX3Rzv9opgZ8*$ZSVK4ot$TIXp}9^L=a#=S`aEQBgl ziD-?XBCxY>nk3sbnCZ|q+}DVb-uH&SGms{ZMCk-k4_@RRf_3RsJlm&j$=I^033m)M z`eaB}pe9DSOudefWq8GO&Qsv=rKFQBXdVx0B-906F|23JiNWd z8rA_k#`GtEF&S`wO7vCV{9!7E*pB~NWpfK-`2-@M2c4AW}z~yRJ4*eZ(b=f zBeulA-b>EUMtT(A1-!Yywdq(tgvC-gy)`yJj|;~wfJaHLnq}kVW0D^~e#{Vg&Vo!2 zDl6SizEauP+AO)d@q!zwe3zsr9=3*A3;snjF1qB5tkkOUA)Z=CmIMEvW1inSu-KBi++b2ifohy zw|l%ylR=yluU9Ka`k|+wLqO<=1Eh9P%Qw#+jzQZvq=$rBEnte}@kvPC_Vx8OY_mcK zr;^UkI~OuIH8Mq*(1D6lVJ*u<%pfA-+b0CZEj*wii-2}pWzI;l%hF>mvo>|Eo1J#A zQ&S78s_-~^X7g^*iH1uyQ0tXxGE*=tg?kqe4hfT${Fm$4BL4rP>xgy}={g#+KAtdT zW0$qFW1Xt8kYYFq*zdRjVCdHz!NH5gOXZ-$8@kQxmf{Ns_QT(|oqpQbS%X^$PARBp za#H)y)|lNLkfA)-D`=_0gIbX1#2m9*z@58qQ(nFNc4Q)s3~ z?2dIv!`yoT>iDT-MW}D$1m^b=sea`5ypMMdcP_jTRqEy8&+_-&d%k%3ab(?Ssy6V# z3l!&W1qHAXZQOkkJ_VU|lFQoBMF?3+p7i>68>LOnA|&agxx|*)zZyVPXboHV1wAe zhO=iSg#w%Jr>&iyo}L^Nu}TIzSQ*H)O{(jJ*mj8 zmz;^1?>;$v+w2Di5>Twa7;C@y@r=Up#}huPPRpd&SRD8+9Uq0^xFK5;o)f3~S@~tN zmoS(J&aeJ~;k;Ek=rj5@wV(;Y3;N%`bq^Ps8E%Q?ZZCdL|CL65b@VG6E>-YKW5NTW zZ%^vo2B)gSm}$h z(I{t^L6MP>hV`~XWDV;G+z;!wsHyiaF6{-f6nxvrchF)v<05|kw86uW3-umdT-1VU z3an#L6aE|?>aeFuSFx{mMPhvV^m+DRC62&sbF zURYTf2h!j9#YMzoO1}+M5zsvZH&F7?x-?_*9X_ceQQAil5*%EJJb$_b1^+hk>V4z) z@4=OkFCGhDD28GHCV;?!2V0SWLyV?ez$-&kOcYB~>+tu}8nZuM7J)m0q2uEqVSUkj zp|5J-B{VA{@^ftssFx_~G#NmGipJQ;;}i@>4g2&TK0K&_2B;e7PWsT$=>EPn*Lxu- zyDUE_3n~Jw%S*-LWKi{!vs3Du!<%YcI%l7|Smd*{#KnV#$;Z#XE)cLAw^&$T|6ZAo z61r5StK7@lYZ4!M?b_JeZ@g*}6A<{qA?E#UahkQ{H!w)A@Gu}YZSL)r)igcerDsY{ z$;?zazo{wyh&}b+kHt$mF^j-d=zvY_m>`8tNA~N(i^bKvjDnz5#h}w~YU0N~Q}P|f z01rX-eJ!V%JTuZi5f|pEUE20_wX__=*(-W^Fkr(6r3ZVdZu14ItP%@^J)oIXG*yV` z2YXDp#8XnXe>CmsxdiXE1%7uw9C`_DLvVBY@7)9R0zCKd%M7Z|jH#+R<@zwD#D;Iy z_u`FtwfNDfT)^s<#rjO0wfMj3V2wwQ9w9D_tJ7Shj*@2je-lG0tgfMPU)Vn{D+@-x z|-nYDJb57(6voZ+9!USw^u)2ad%U#bVeFo%M!nfOhQ|Xj{(`I42l-IAnoF8x9W9MY*w=bDqUJ8rEfb)`A@{zHw?2jx#6i%b};c$5$625_R zj=%H5ygf)_ZEX#7Ptfp?uNc%GEHhU>vTg!i!{Og>Qwtp*sdf7mJ>5WaZbj?&`=1u~ zC=85Y;=wDU1&G|4(;50M78bH)Y%%(=>Rcd{EuCKI+>u0TLx{1 zxqB$C7duV3h^^BL^yT~9-0S76`J@95VV!rt=!BHI?c})TIZS0hzt@60nMYB%&ow|< zqgt(4HvV{&rjI8(;&!fP+{ikxGIx`eiRtG{h_RnF`7fMw?s&0Q{Z=d0g-`$mGU#lY zWg0UN!WLdY^M9!Uck`;5sVQCu%o_4hNgR{9C=0e)t9Yo-X(S7YCDPlBBA{D&dc76w z25K~Je&9+!>&Nvt3$&#&7?p!=z=3X1Ihp`d(f%xQx4f8j`h^*MeL68U_1>x*rwx=) zYoYAF-FjNgHfWrr;`Ae-4eR_aABuV}L|BM}(Lj5_?jgp*Nai2~RY$?u!~>C_k(zdwWn091FI^zUZAdR?%qr9%HJYt=h|*=2RWw0;Poue zB*w=dfRT%{7t!@t(%yclSL!de%ih8eAfVmIE<%}$gX5Y&m?ei82|D4=3%>GQKE6Jm ztYPD1U#Yw$-tmUUBAf&kf<(a>6V;1&=hb%kyy&HG$NGrx3o zl0-{f#`EDr#M8k?RhE!yE;s!7xOJj+C zjVA1|f5#$l>Bhjo0C~=Sg?+t<8jx=s18W%qNr9;1ii_5x<^iHJG>Ia^WX|2=AGiZhlC0zhr z2~a0+P97hAUDaIAibA;I3G6Zg?R+q+)pun6G~KmEM;mmvFr^GXDT z`BHlOztY<1yXk`t;z9q4Y@IZ;v{n!QHeZKeV&&hp;cr379_C0Lfa}V?=^PiY@UfXZ zUh&`}z(<@uK+*znx9*-qE~Hu*7#Nf^G$gMEQ`yN>6z>LK^xe((yFmVjG9@MAbL;q~ zjg!;MkdPa2Wbt-i@L?^;1z21jd?<|Qp>b)s(ea?|AU@8#1&YqDt>Zsh*Z)S2glQ22 ze*u(>;N{0&7rJUQEzCGHhf)P3gfR1wi`xONQ~CUdaTGU~T`5y_KQ3(>mFjc#<#_1$ za1&wk@CZkbZ{{3sWINPp>l^k#b_@Y>cXt;}?rI?Lv<}AasV$uR(#Sr8&zLEThHSgm z4|xRysnCYpEZC+LpFw;p3fpci{1N(q)t^AQAAAk3AkN1Af2kKMjX0zA>;h*JQR zV3^ewt6R!Qd}^Aj$qLHd%#IhLknl-qDRyQ1>gp<5m<&8^n4BE0ZNPD+`1wXL6n%%2 znDmyHpFCR*dT2ayB!^0R!$j_eZ9QPwk?09c-EeKe(py=C*B7v*enp; zkSf5&-JNTUZ@*f+zIgR*;oXJ;XF7yB2S-O^?UNR#+4l-Y4UP5^=FyWG7cDR*^HFFz zNId=hL#4p8XAhCn)L)G$VL!&HoE!-8UVH*j5=BcZ%+PXM`r%z?T#daPnkaRSHSz@w zaxV~2-QAy$Z5?ATgbc1B){lcKvd%e%_V;;^c%oFmkq)UU^Wynblh5ydR$pk&_x)Gb z3+}Rrmc%jX^gE-JQRc0s&M@)Iqw$~X>xaR?f7OD3dxCa*WX7&I%-B+>9qkfum<@+B zm=F&Rii6KEudXnq2p6t@hu!)!-b)XFaB392U-TpMpv-H(E8nZ%pBGC%f6fj;pOHd3 z)B*s5V zS03Fw1~ixm{Y{vRx-I|p!QS;S{_*j@Ggc{)b@ZoohG(6p?IY=JN6evx@cSKHrtbQv zJ>`JGuOHQspf+gKh&_xj8Ca&)7s3Ma0@P-%xKHcBj24H<5XgVwtdEV0gFk>J#4@5Y zMjj)NG?NczRuk)O`ibEi(X~z^X`Tsh?EzAo^SQ}IYRexk1u`eJ%kzzdmGPdF+_bnD zY=rwW=Dm>4#K_Bjnr*S%7Lmw%&WW?f_+{ZoJTpJZb43iV&t`9Hzy0=r8Wt=sA28=h z4-`=16}$ed4MtEuZ!jJTJpIvodAc~Vd{@a{JSZomvoj;a*7iMc;8RnR-H{mQ0oW8? z0IMn`(m%1ZMDf?U^}u;Hbkb2nxxa3HM_pYVDOLPj-+xL$?sOVoRN`tb0Nu;0-}XzjY-0eL~3;6yE~#Ta=+?V!SS2a1H37*0ee zFqjO?Z<at?d$lYw;T_^3X6?N~t&gY|xAN?DW;tH7YLyt=yd*%0+I0X;z!cBHJj zkN9)(a^QdebYkA-5fV}aZ3duP%j4gZq$8@OfBpu*<@Ve5I>*GIq^BY}F_E_s0(}oA z``weEQ!|)?QZTKG6L1FAQr-Olg=I7O6`FWOk-&3-Oe!iURK_PKyMe`s7y&@^C6rnJ zByYohgsk3ee@O-a%JRxe67g87uuCQwv?vmA#sez?CP{!n3hABcXFow;}ehy8NMKk@Fv3Me&KHwx|>J;5-@8) zY8cW-nEr}`w5q()+R-nIDJ#`?CiyO#r})XDtVcFbUAW z!rxi;)*PHqFaX$1nAT%{2MYJ@lSjz+1brx=IzbYa#$|>aPrbRj+g7nHLL7rd55Sql zhd^p5lVz*y>;;G!h+|wq-vHao{bLTed~QEHr?FFY06LlAv`7Gumj7-TbO~gc7*kSF z$v_9sq+@1AhBQ|??h3pa>oGz@>m>W6b__ zf4>Tn?;Tw0TXRP;sRq@?3V>$3;DLza0UD32n+{Re-Mg?%&(ANcKgJYlhZaJX3Eq(J z$Bz&pQ=ai9=e&}I?it&9qkY*sX=lOUxAye*!bKAhe1Ln;!0tqsj7Wrr|I!(z_^7C= zT1^h5(u(*URn)G79M|b@z@Cczu@y2j-Gkh63U7j2<8xCi>N0^aVG^{D5*SMT0(Kt= zH}DfpKzUjJo{f|9%la{Kj3UHQga;PLzNUrJ?8(rq0Z|enHEhj$_wLyYWl?^gno7D99{66JoiZ{4_sMYq zu4=iyx|nfl9JCsNo|^OX^YEllQ?6bcz8F?zcmoVk{5@~{10|vSg}2HmC6y1B0bCMR ztvn_vDGU2;=Q=}3@*qLulaRQ7B=nFy6`CHvEP<;Jd#X@(;8_#DpkTz{8ZlQWtnwne zSyrNCH8&>PFWwlf=33xi!1zuG377m0>yRWMWiIh@aAe1l2_w9p^~tcL66Xn`vg73J zZkN=w=ZF3a06!VH_ojIb2&BX@@;=VCf;w+x!BpQU?!TKnJ|B*dYovW zI_bh;OpSglDRGbf2&EZ_L#=^aeD2zhZO??5 zI1&JT^kqW)vinC#x13}3vU^0yf04jWgluPDUmtB0b&=LZ;9(*2M+p*>K`JlTj z_iLkFxqPT%r9$yoQhvUcLCZSg?>pv{egV7K57BHb>jYwbHu8+g&lBb{iI!*SE@6J{ zzA&hzsiUJ8vW@r1x^NluZ$Nzw-A;;%io+rnz)=km#VGE_{x=ISHY-6h;drc&dd8lr zs?IWAzbL*pkYekt7nA~Fy-Bq`LTWEY zn7{DnQ*;~rbhKu9Fl{e@lZgYDRrUmtiTm~anX5V|gmB#}C%NXZiHr8l(HS`z-!DZ- zb5Uf?e6>{!=-v+jy_S(NotKk=?>d@84E~?7Xg?N+-e?2|@)Jg!8u)5X_ti5;jvAa95MN8es@lD78Fh6%C^E{T7|Eap_^_hyA76i6v zn8Z^*cL+V2p%QTR!ev%bw0$EypajKv8i>{~_fSQM`W_owLCJ^LuU-+qR9qDy>6a@c zeAbi=+KH%UZV_awZcW)KWtwhqcpVhPn(~68UJHqppExK@wN`5bagFPN(0K5GvTtMr zUPNB}Eu6=JDCLS);E!W=BGcy~i zcv!jrHy}qcFzYmdzO<<7WuoL&2E1qtrqR#$kDKO2fPIGw80KSt&6e<YCYF&8Gtz5DnJDYQb8V-2NCDAZ@e^(Wi8J5*nLRu8aB)1aQxH!yIA^XMxT71(kI z$RtcyfQjBCc?1vAAn=w#q?h>X*P+Y;?n>d|Lo$bT`)7pDS0WeY?LGMgH zr>zMJe*fUf0ewp9nwrDDUvENVUd(+S4-cMYuhm;<8Ch9YqR&QEQ`yr(iw#n21i<>0 zRZ+o)4kheG@M=J;1T)!^hZ0(KH$E5>&`EOU;U#Mg)kR{!hHu___xWA4MEmit?6Veg zgUP8_Ryopzdc9UBs)vJVbuh{TT1kP`6d4);eC0pMW<2Dikx@}@pMQ{&lfMEdgC?Ii zekC&pS^MAm{0S&=WP%2sFErFZ1A)f=OU_LIE2|w zv{-2H_1~KvNX%=}WBOG9^z(6-=gIb+NS#9la2~3>8vj?v#7R6 z2qM_nIe&WCv4XDk>+*DAwIc)-4Y@yz8S}iQ8bFf*N2e7LA~}#rtLN59s30S1dF%G`1HS;?kxJAQ`?Td3FbS zSgNWkk!IGWWm5U3gYd}4Yh+KV0S5@s_JY*xX`GLt^Dn^XpKyq@wBeVq8K$^Q%Gr$# zHq@{%m_(=~uEI$16}nFhKY46EbQpo7+!6-nLn3#Angs6JGcV|~5`+UKyqp-^2~bC) zZYADk6=aSO+iMPk3stU&EWxcNENi;PM6_M38n& zK6@Q3AFL`r;X`^NLqlY38~_o5N2vCk9}Gi4?4n~C|HMGPrWhFon{p7|P5VM!SYBS9 z!fkiMBZP^Ojtq=$RW0S~RF)tifzFI<&_E%(ZC)J~E3c?PI0=#DtSR6fosLh=sx%Gt z7`6-tM!ufV$Eh;FiHohZdD2baD$7t65dpsI3V0%#u`dvZB`vqz{c~1>EXF#@2 z3JSvAia~I=%YegZaeVT9?i<7stE<(xxH#}-3M(ochyQ&*#k>Wf9dULh46C55rRt?e ziVCIU=7G;yZDB}43hU<9-a4#-OH@>!72iaR);utoR*D$kL*jdn!}^KyeJFD51yn!v ze~CQa0+*@f=$jg}rXi10Xq4sL4ud48q9S%GjT|Dd$bIrh(K%5N*KdY&K#7}>kf88m z{;>|O3pD@2%8*`hy7&2q<|8}SGR@qT#`$N(kY}pLp|A9ak1mcBqGCdVw_5$sT{n-i9$R3e`2Wn(YySRk2~%nb z!jzk)??xufp3Hg#zjUDOaL2{sn->laj?bSM)|nRHL%XX7xy~m4yS=ynf79OE(EH#* zOHI9!nk%-sw?(4s37NMF1}eaqP%e#6&u3HKdNl|VKGP)*b6!(p<9p~AZ#(Pe&O3d6 z8u)h**o{{txCIkX4fU|s+U5>|2^@5oz32+RMSxS-pPrV|&=u+I-GN;t3sWMs*`S*M z@#8k3DBnj@E>0sO7~O@H_{5rvBClWNWOx3wys6!LvCVMDKL9NW90`~Y1iu3c>X8#U zVHMqb0L(?mCht@Fe)NGU*$__?|`ANAOEJA_-uN& zoBR*v-aH)3w(S>gxK*Mug-V1nXHJnJGG>ZUWXO;yQIt7KWKKdNLx_@0Ns=iug)7M% zG7~~FWm>yLGB&wW3)JJ;oMp2v9{`~I8unFXeuemF}F@KKH( zyV-V6D)Z7&+6l4_9!=7yyi`bYp#3$d*e3^{U<|HP5L zd96%=^YhwR=_A>^$kgG{|6jSf4WC6;v;a3J+O&-IYOv3s^<)xvlvnnbphb@WLk3(< zl@`K8+k!M$&U*%{r;; zBs<<4ojXoe)FLI51S3fQN@~SZnzbE;4oN(ADN-k~J-GRC+#x{`-b@VpsOOso5Yli( z?PWo>K+?HLc^;g3Db3cP(qBZr^xbPRJ#-kbSL0qPOsk4WFoWu?c3 zHdJxBXJb{fVgjHQ!S%{5+X^y*_Ws=5T;5)~ep3V1=M-=uzX;A6eV*wN&&6(sIZTxy z>C+j!zrnrnXD*QmVc|MuaWrgVMjtrger87A?0-g_ixHubGFxxAa^H7PW!C^|dkmJ4>7^4N>7 zw&;7emE57s(_d;Hf3xH%4LXJ<@Nj>wI#2j_=c3W8EZ^*1_(UG zEs?QZ81JQHJHJ=lvNnumR7Yt$pc=^kr20!xi4aZPb_8rNWBSE#nThM>yv~L_>+911 z8ZTD|?e)YusI?QD3x1yPr|NScD8&sBPw2wehfUV~_VS*0oVZ#ri$m(QTMLKR%w3kl z_auM28!v&!8_yb5pg3}OHSs>^>Iz_GXUQ3zv_oa z0HDk?ot!>vViGnS(m+#a*u*ehxZS_98~|8$T_MOOinatR|3mWqYjL!JGCnblmf-e$ z6D`bz9sPXHa``G|Y6Qrnf3-C=H8ZX^*Vn-R4g zd{Hh}yTxj|z0)RBx=#QHF(lkBJ*9^P1;fpZWEPz+}{q_qz68T`%if z=lKhN{{aC8h<>)(%QG;NINy3%t zJMElxMn=Zw6RtHrMxy(NQ5yoqdvw%@r`Y&F;*Fdui$C4gy7ypMQ={czu*s^KPqY^> zG%&`?Q~Qp`fBN&!bM2!SJQ6f#8T?!}?{MIvOU~%N2juK|drHfM%74I!diE}u!V+mc zsGhdj(^$Z(Ooo0=m=Uqfr&$uOql?SwECS|mUdPp6Ns$QeLHFl#D9fZQ0eQs6D=mp5 zRS6Un6k1$#NcoKhMH3LV|G@H#+;E`h>vJ+2w6`ZU>tY&7Br9|SBkxAt(-^l5G0+{h zYngIx`TSY1%=ohC$NL9QqJ|#%Gm*XBY>N80UB}!0ZEW$%suy2Oj8OK^5Wavn zUv>IDo4(JxV_Cqc*x<1`liIg-zijzQ8DT)bOiGaQSu6s8i)Q9bs$+TAT;Ug5g|I~@ zWzqfB({uf^uIP*_CZIt$=Pm&aE}lNn2ONi^d3AXnhA6HtgeytUFKpod1UWbsI8om<26frmEsB&0cry`W$6J>Mfz%vuDn)+kumv{Vr5)M5|kwYwjf7-Q0W! zQO8f)=hnBg#LYj?$e1YZ&U0}|(cvi^iM=vXTwsrgP&h07+OgT=K7KoE;;oXay{S;{ zdfQ@cZLJ%+;}?DJ!qGOAx{{9W?XSfhMbVU?duBN9>uE?uYL#!_DF+of z8mIeHE!YoQMX0Lq3z9RyEj7Zs*t3{^#^AU^SJnBSMFQniSH%v1n@vh$4cbXz9-m?f z@F56%@uh22^?RkAK|0A4uL`3^d7j`&0~y;igd|Pwr#touD3su=92K>{bD=U4Cr{JR zluPgC?`cOb(v%X1R%^RqC1M=pE|^+ADd_Q9;q+RJIpObrXRbEh1YEcxfArjM0WVp2 z1k12XWOXEW5z^Ij?tgsptnkmh+&gIe7K6C|ovsC|&$>qx*Yx!lZLqGu_z>mK>ctsV zfA*!0j!p79g4ho(9L-!tia5{gZ{3L7L%@vBRMV5TjuSt~2w zFMHVFyBCxgdf!#JTnZ zZnT_J=wkw<@ExsB|C~GeP;z4*<7`gO~*(&vfI% z{s;E9x4)L#)(|e?h-OKnJc&-YA!>FH_w!1;Az`(4?e@8&dmF|+KEp5Cud zR*AzG`~J}PUwaJo&g0Pp4|@&9@zQKhKdXdWk02XnUe72SK!F@?h2sNdCr1L6)^jnVChaA@Z%Oe~y=JzSN#&l*pJ;YRH`3X~#iF$_mpr8-*_gX|`S_l_efwx(Vc~-8ZFwJ!?B`io_qhZQQkn@r zSq}5waIt@pJqjgGy*OEwS?U4=5$j} zcR}K!L+rS*82g9wcW2HVruou1LS{}Hw-f;$PuE)=P*QY2)skZ*gc8df`s_{CHzjcE zF~p3J;|49U!7gVCEKDx65YIlsj0V?NrblPO*+rRUnofON$+P$u&0E7#TOw`Z^BEdX z$KPXGz|M0Pe_v~Pbo4@In{OmjQBM=FV^m2UQwwCbUI7h8lG^Wt=JX$C*jPMQXKNYu zh9yj=AH>LpZ{8bgo}WK|Na8JiA$IcXrrbat@Ww_|3&m+!{HA>h{Uu$+Eh6jj0%6B_ z!UYE$n`Hz~h4tK*OFG2MtEwEx&Cd-d;CCkGG>pxOQ6v1;Xo^#$OU;;pnfP?Tp0G zn5e|5_tBm^OF);be|7XK)8IL>Kk(Z7ya=G9P|1$}_+d8wis!}UPmhEoB}4i~Q!-29 zp|;=6EU65sD(;Dol8|{$qCEBv|2-@1$^hu>)eHM<+1N2($b!*2s18y@5sHtJ@l0h z{8bu&2y{xo;hJpZaUKA|fCUzA5mvgL_-&w&*^zPOioStvHAJbt-LJN%6#oaNcWWGjT>|+&2^#2 zdzF(~KSFt1eMxY~im;&IDHsni&J<9~#bWPQpbkb)r)ndy00k60t&!N;T6%hJ>2^9D zrlFQZGGeLqiYT9Lzu$$4_sBXsOw$jF7YhxAF^cxV_Y+y{NGu81rT9v}lnK^FOT}$) z>xve<5fm0i@R9=V1jP8DfvaE^hmpT?RoxL8#$UUKPiEb?xLOblP}J z^J~|rP|O3)^Nm``IPyex=tnhD92^VL!@e@e55fmDIkqtAScvglcd10gnruJvL(@Um zYkgRb?(uJT8+%(h{%EMi+;9l#BQdLRHZmnf7MZG0pV9>d2SMLZZeP&S-pBGuozjnn zQkOqE1tOnMjYq&M-iQbsilhS{MwHAYMhACq$48>oPDR5R6LS1mI4Bjz%?-Z`;u8`$ z09fjxuNfL^&ZtP3`0?YPY5jB^j-iF1iXz79^BlB4s^i(&LDrL>JKKk>01i%0Kb37@ z+~7t7F`RB=V_|t&>%xTq(!>!OT$*iuyNwXwQz&;whfOx4C8=csqy?x~VB>YM$AsQx zW`^R(28g|nkr7m-5tm7P=f4)kkn#6H5rK3P?f9SuqzX)dF(=O1V6nLc{xN9IDDx z(aMK0l#V0 zt+|7{Zupn#4|3L>)1!u-Rs}ESmOVw8PAY1dvMw(#BLbp-ZkcfF;ESQ5p$8EWaA2F- z*->V=`I`zmG?;&wu?&#~-cwZifWv3$qrTQMhXU@V?o2 z+3fan_ykz6@K$fAO%-C#0)Z^9X$y1q8yhXx(R)mmubC`cI$IUIy=9ik$Ux%aVR+YL zk75?%C!yf}}h53f(jmbf1g zo+p?r?d&XC8X(g0SxMlrjn(lTsICES|Yaqk4c= z;k-pD&NmB70wHj0TDBFTeQG6AWQD=dr7vjUo(!zFkg%d|S{&O(R zMWHu`@Ff==@lxz>-BYDcJ8v=Yz7=T?g;JcGTjd5D@P`{o{++4SiPbK_0fzim7y+K# zK7qSCC+*jHN$?UHtOhbHkMoDEb{@6-7$Q)=6qx^vj)Gl2i;j?(eAR)t#jA`Zk>pa( z-U|;vm+Lo|-21i+ev87cl*oE`_T}-WTJPIV((fAsCK{%L%y=F11tXpy0LD+v4-ySl zkNyTSOUM{3PQu&p#$YNr{tzCBD0)-saME3>x?wrmC!Gxe*^JUue&^-ohlKAPkso2X zepw0eO!9QbMBWO1bK(p6{=N7@|6M@vmBfcJZ}uB`CQqnEjK*-V^|~euef=8gnj@d( z?o)mUCb#rcryie@G#`b=TDLe>osW#(Z}D}+qeqIy_WY3QV7C3Cwq=v-c8Y_mQp|fm zI?9NgOzwkh&wgRqf z!;6wBsQBdQZAX{`#UVEpgok zzRUj-l?=EdD?O7qhX89r0Cfa>;JD-!Qg3HMxt%0)*jZbB1A{Y&T*aYO85b_AZ^O+Z zDk>=YUuBYc25?>vc3sI%wVyIT94{0P=Z-#v?%uRnJylx^OgK2J6OK!QX>UY#AC!<+ zvU=`1qc9TBTojK!`I9AS`e(NiRGe0ei4G--J9w904jQ_Ms_l%QAZMovh)_(5Hq53%nZu ziI^GJ6U|=_C(wnfre)?w0b6+6=R|_3tFPoY&DG3Ioq&XFu3{^*e1r7#tdSb^Cj?3S zDt#YLc2`W}B@~yaufQh?FT>wtS_Rk&}5zP}$j8465%#Oo2En zpgyG5d{{>Yt(hx8!z>98>1*E!V`YOgmEUp2o4R}P8$%q>5a>;C0UquA1_l>lkC0sY zeiwF=oVQu`A>4sD8FhTWWXd^6)I z&{e#)nl_$29B3#=(8oxyI-e?)2x}({UFDbu78F8yA&(Sy>^ z1b>aB`&m4=o6wjZJ$i(3XEo&wboY$d;Sf_#8>_68tc4GwmEKCs(M9t>=`Q6k)m05! zDtlBtl9f4*A3wj8h2k3dE=L<15eN5W@Y;VuBo{qP_W2RJKl03FpKx~$4r0zWY5>$V z*K6Zlv=IpoAmGHOV8*fO=NWks_D@1{UE^0Mxzp3>E@aZt?=`Le7$oKHCwGB@qIrBC z;$WtZvP3Y^&hXvzxbz(jF+p7di1OtXTgIS8H!AAo!v?WWvfVxGui8-ixd?5{!uSgb z|2bXVV^&^Wcfj4)*qCBJ#3DFntf%%q!nSSi|p}x+L4-q@+}v{BtVjh2L=jfiU1DhpxYk?6D_)ZEU;OyRQ~#Ay71} zddqcl=CSF~&v&*GqKvkmJxmUEadSO*ns0R4F-bW3BG`(S>|VS^*2OaEk)x=44fr71 zd5zg{FcAmlKiyQ+!~gX?a>#JZfv?7^pt6c%c+&Xx(qyM)ULdM|t&CPEp(3K@3k)<|2Sx)z$IFf=0$RUxoFil(MgrXER!f`)oCI4dAsxt5KwDEa*u ztVuWu;BG@b6a35bXcsx1K0O7veuT>WGySxzED@$o>|S_iAeIHNdgp>}lmD(=H*UHR zK2U)=Wh+RdtZIV=zO?o<;tzaoLpt|s?$-t5bEhH8CP0nFMT#=ch7DSnn6g5Q9v=xz!%TAaC_wzqPej7;WuU#bV;-H+^f`Batz|ZF!G3+IMrwmB~C}lqtvwL}yI2 zWwLW}j*7^*L_1xKK7%A0P087R@L!80E4teYFzme`TNAL+J?^8S4Gj(AyAoFhT*f9} z@jay62JVi$+qN#N|E!Z?&F zYKd9{h2X&u3nxsV6y@1odrOSHn@GK0-B*cD*5TH~MIGJq=W;E`0S5jhm?un}KrkE9 zYZV!G8*owXru-Mz3{*vkHKHE%=8MQP{Xh5YI2ePD8iM?X=d^umUkgQ3kcJL>EKaR_ z?d~gbFnP5gCA~#CUFTukLtO6iVMp>6*0{szbjUuJOHy_Xi4y?NLwIEs~vfa7eH=61!pZuz8YW9N3Z8nnM8%e zcIXooGdbMa_|lj9U4vDTFqC_(boX(15~zz@MiiJw$bsJ-<8Lw&JJ8b7f{2W50mBNU zVuqdmZa5JArV(lM%B0{v5E^8IU=y6|EMh3@OU%iHnk&nwBsOit5~dM?MD?dZ8A1X3LidwCGOC9*12xx^vL~zbu0-CS*=i-WA zlwOSCeTzqnI6+2^akO@~M}Ou%!xqIB@d*zt9Ns!-bSr|gT^wl;TQglz1VsXLGs|J4 z36)dMb0ZfW$b;qL^S-p>=GAOn>+1=fGPeA=HsJhE2fxk@Jos5nXK0#=Hq9ADa)tC*yA~$;pAHY>ofDM-&&== zQw6S%&6xJjr$$AsA}pCfy8u`P#LB06qW*Hf&9A&Z8id|s09}gO1#Pw{+=)u1i&D() zW30yBgQ0G;y?(Z&U|rW#{0(vPe@LB`JxlwAS-8Z|*jba( zKf0UN+vi9W*+T7)yKpW(j~6 zhvM07I2nqUi~6p2PZgZY@f45I*C%ET%SHFrdso7v_N2hhRK;10xX%#du9U6Mix>Gj z7v1XZnj50>9h>#4k9q6^h~bbq`1ZOXN2FiaM)7d1KhsI~^$RRKm9DcbaBRp4UiS)0 zQ+XvNitLp&FRai~@sL0p(fvRFbeE-qaX<;P3F=NY508_GG>%T(SRHkuxx3Q4SgHiX zVPj=fW)x5~Z30%uab;EYVd!Qp@Ze5%<@1i+q6zdR{BLqx$&1P3>o*7*3Fa}vAndiA zVX}G9?N#5>$Z>Hk{dy!tF15o58}#X_G`_DoCSx{hn_lruJ+h4k6;7#Z$0 zvo&e3vIv#x`(KW2h<Se1fLna7*k3vX#j>>>VDsmn{8o}($6BwA9&~xyKE5 z!eDB>|H%E${1eC6rbQYs9K8n+p zEZdTt2m^BO_jg+|($yLGaNFKU95jf(A5gbLZfn$^9)5-W-@m}?x-_-Z4|C0#)jvc<7Uhd6W)NOh>0CbnnEEV7N8p{ zCY)q#ZFyidl1lWfu+r7lQJ2(67-~Ily!ntczx~IR-ReOZO^=>c$s=bXo!oUMLY$Fm za45t20~*DT-@g+DR-S~{`*k;5jm_-Lw_lF?4j!x? zzwzsPLFqB`F|+q((@nfHKVfRZkdQ&+?+VjlJBDO6y?SN1UtJe!xoU+X$JgH8GJf*oed6CmsHZYfk zw1fi}3%2b`MvXFl1K*@zVEe;$_=O7ULcDzJUC=?ri10J1c3tnNAuA9eNq@>V_Hz3; z*om>pVYMO?*G{{*6ddYcn0tQkmL#ADmrnJ2{aBi4?f z*|$L@^|`e(5I*d|*?)#_!hanR6Mly@Q4O)Tkr7Uf17#Pqxp$^M1Yc`eyz=8RT!3y1 zomN_0QNI6BHd*EYR|!SN%jo>Wm~iShe@+St-mV=)7IbrKr#L5>4R9WGYnGThFOv0g zad9!vrB52Ev3zf?7t+xl+uVjJ0~^0r=ZFT^b8UTPv#Z03^TK3jB~nAgbG&6VrI!yY z`1!pm8m9M}sbim99-=kXvJ*4>Vdzl0%mKZ=-P)h_T+Z6h{?py(op{=Rx0bPSQ+TESa<-;q zIqYf6-9S4}|*f*=3r0p{}v< zh%_tf3q3icc%uI}aqxad*EyLOC`Wd%Idb>zDK5QCZ=BseG2E}job;z*9})iJ^#?^i zJku2ued|pwuJBa{280ax%PegMn!uc0vap{x(->aqN${KZt*15(&$_;I8B|1zrvey4 zplnrG#&w7qNchJ5^hUyY<6AdBj+V>>n-Bsn3@a}$+vqMM=7pmO6T7_FTeY@PbG)n` zj&n6cLl7Osv_oH0HfkJttIM}o-O}OLKmcs}V9fD_$$3{nvNJ0D%A*dkN_CVQ>%|+1 z8RmD5i&lOXX>MwvwZDp_$}ZBOcI(@gM+ z-OH=@kJPARVNRzVBDS`~=tu}mc23Mez4?pV#+r6@vT*c-*Xq(`lf*!^(1RzP`K&yr zZVU*CRh9{i=8KQd1C8r0*~&B?O@uk=*0_rOjw`7NKq?Gp8=OuYyg zaVCY%r|S@+$?eRpw@>@;IS0Sa!T9*WZTo3Yd&zEw9Bfd1Ykbq8JCN89)P=JnO8(MS z`;oU79saJlBejSOBUmjbk+zW$f$C$6D{F7w<{L#n1b{=J2#r5Fa&v`V=}la|RoXsL z!usAvO|3nGhF08hsIE9?^x^F>fv;yPeO5DY`DmU#FNj{azdJTl4;(4HsLFx*kqP&E z>}%V4)M4z=PLG6R2KPeXm2**#J!&E_Ex6HVRL}UPN5I85I4^8bpgB86Jma`=L>N(S zE`f5R8PFF^-wOp2d?sJ)^1t*p%W7(pmgr9LN$@*TBeotChY(NDg}mi^1)~@8_N6oj zz~5Z#sO1W|!#&^cEC*7Oa>E~wSz}}jf{J%`wZ5_I6b3GST|7Px4h$io@U7c-e+D2+ ztSv1y#>vrUEPEJIpn4>%>fgSpAv%^fIQTi=N5n4+iJnkKl;?L{6*)QiDC!uYSHcn! zXCOgL{MqSrx_d76_Git%X6?;xC4$Dxq^@rvtbCMF2BEMUL$AC#P&XVI`AAq;;>-(U z((K2NvzZUr*+C!@y)=FfFjSHK;V_q#mL>oXM_B8OdkMlS(WaaRdZg;)$i;nBL2Nv_ zEImCCUT%1obHt8|AdOGdk~%y%MtKw<vm_>DYzbl^)u1bSs#3n!x)6}n!x!^NAd zCVl|P;Nqw*<>;D(@)b!f4^&cp@A(mV^-YN~nusR`T?wBWVvRA9ic?fnNAM*&e?Z~Z z@IHYpOeEE!R>7l!lq@`1O15WqR%7-CoR+y*VrL@k}_ z#0(9OqNWH8ybmErIBIBjcXvc5qWHx}15NI8;?J5_v2k{eQQP>98~C7N)OZ|czAf|m$>JH zYFFbSsP-*%#v2`sUY9!hpJLAi(}s_SU;*t57nCt@@b+ir&zPgb%-odxM)bXhJD%Y; z`2}I49PTBu_jn@e0cRiPIQ#%k`p9PG3$7=q!^0n|r9B;qLZBSrww>vkz;`LP2gNFb zbBZCOoxiH2q=Xp;sn?brce98)p6+lW7N-<1U6AU+JguJ#Ye2RR&m=>^{BL4rS`x(% zgi`NgW~P_e1*Qq8Ip$``%PZ2Di$y><(b9jZVY+r=c1I5@vc822^HcyI50>9ZrdYg(?N zTzcRt5K)iMD0>ou3vz51kMBbrN@%LCJf$V_5L%BNlO-$Ttl?x6J|KF>)`C`_99S#v zHG)sGilk05?Z(3Okw2fReRRxjo0cmlWaW3AdFB@uw6*kA79JjfuqVVy`X8Dvd3kx5 zm;%7ZEU(k|)-0`}__>&(oE$;5J6k>j1_iW@`46|*bFLO58zHudrOdPy+g7M(Ny|zzy=ypO_1Qi0DqBwamUjb4BFdzUE zlL`vXFVTpK9aBHaK^@MUJ4`+sf9iQlE;KP3iPGvuMm@*!M_;|-1I(Y+@D((=bxZP$ z#x8L+3vsoy-1I<%RX=jilg-6Us>HKy{4pX(aaM>}R4E>m6?WYnxV9Qu3ea z3p8up?QgzXh;fMw{NH0a^lv5WKMkmhLhvFOds(s(Z15;$poqSX#fAX_qhAwRzI=H% zp7taSzU}>?6n}l&s)FI-*K(KMf3t^#5^>V(931!R0(O)Ot{_!UEudZ~r(Q@nyPfyh zci86LSN@Fsn6$9IcSaA#su}&=I$b2XLzRz9v|TE@Wt_0QW7K0t>lw7k2qHgkK|<0H zbn3G~d*%GYg0X6qPNrKDthRG9LH8755`GXTG=`;M!UEUUmYjOymoTTxh}G1M zaj_#EW&6kePJe$Hmsl?M_iRoINWVw72BRAHZUwvudjH%&9J+5Fej4W5 z8cdC!h(w>x#E989LJ0O4*^f6-Q=^1zPGsRcuG=~J8;*_JqR!mZzvzj{sfsDr%jwHu zM7OPikjD9KF`Cw(*Cd-U>I4EUUnA2VXBV`O5A)15B;w6{BOI`nUlvkpPKm%RU6 zIh0x5K9Hv%pA{_v3J;qO7@j7#0!rjw0|*mgknfMb7#`PQEtK216cmy;`|JKd&5m$^ zozPTa+lLG%`V(4~;sN?;KzQnheiog*m>*o>aZqwwp!^nA*1;`IuA4+OdN`_X4wNK! z1byRD8yeY9xsCOlsfC4no$))@JNoeSbneE6AF7yl>7;T%#fn03PC#9>><-K{2xzq6 zs5(!{^4Fp5c(9U&%_;2NYxe(c*2b+Q{{7#4+zlpG)%h6~Y?+D&#>OPHhTM_^0@xpL ziVF*~8S{l7U`7-S1YcEC^b%B>9S}1r?(1meuqSx;_q3SRWG1%-3G4tpE*1YO10%(= z)IH@4Y|gJ@1YP9Fso;tFgBU_6oJ-buqMF_^Q!E{5zbz>w9s*4F6n7hdc3M< zF1)d(hLj+T2#VbS2`Ds+*wuY#noi5f`SuX8&^W3FZb;Z5I&LhS-Qu#vwI9E2n%dig zA8|SA_xWdtu^z&(&_kP4A`N=)b2=B4vCL6x;{A8l*r1=y>^#{i@;C(1pl=NTojZMMdQT-#zo`;|_9i(`(me zUeed&G=QU9hX=;e%Y>sFnrU;3!-S(dDOam_iOoqPuNAyS_07D|l0>gFko^QYeP07R zd8+QyC-&o<{__RBA3? zQGS~RF(sa8RR`3mVnhh(XlCYc+k_p7$P?=5CtO$f6TihTkx`K_($-$Z=sWD*SP|#a z^f!S?8l<3{pQqfld%&>>d$pQrQ4|NlC?{Z+M-TcUKyj7=!cf`iSXA zST*brdYL1i!`TNKsS0g*czK}nG;K*!HwloMUY$7|w|l#vf&%``&&A#G5kGMy>_AoH z!9{AC_G&Ry%jiha9%8O?T2avxfb#HMlT%O}a7Y|jG-qK>1J^~Xu8vBEDB_Uy4`~RH zeloYsv`3cB%*;Aqp~mnG=()y!*v_T}7z$Zkxk3n3=N=t3c_Fp29`ADE;>Ay9&2xMG z7R|ID5=P(4MsDH;nR;V5i%~kUcrCHQSr0)l$|pH}{e4)3useKd?+(TkuJ`E@OuLyh zI8mp;Q@#_!=Ll;XW(uH`Pza{Kj=V@(X6D@?E(qi3K}bwnR5VV)oIQKY3$Mu*i?cx$9xLWc;??BLFlY>q9*eqHqewV$oquz!EP@!$2nK;gXwxAv z^mTHRWF8n8c;_~6>uGM@;qQ;~o7&-F-K+7bsbLH@JRT=C-B-qvsmJ@*(7i*5@1i2| zd4d@P5@!R)BPP)R&}HihD!fP2u!s>r*Z0NQm5y*yT=YjN-Ot?|BSs`{^O!lYb3 zwlC&hGB}I4ba{|WPUOD0$KQ`Ha=tz=q$2lB8$%BOr%_2?fe#4kWZ3jol$D>RrYh*r zg_E!o_$BMDm)z(t}DLhTbE=3=vPF{pFH&2y3r=rXu{<;JbhezlO;M zP&?q@{+JiGH1tBAo9B<=`G*f#l z`A!ElJ3c&6OKa;-yHe1P0RRer@Zc1-{E>Gj*`GyqL2kNG2r@nf_+uaK(J({=xIQrMb8* zQzxB2_qK67`vHB4+`K!sI>>dOXXYO}!F)J^8nbF=_a8~%jXLv)f$qVh*dVJLbfhsZ zTt$K|9i4AC9&8sV<5M$%N;${L=Jk&CpN+>0uY8dUs+&*EOEK^5bh1+N=PITk$L%oW zS4uy-qip^5+3@s&g6Io*F*!5WOby!lx`S`Ix@w4tOfLU!nJt;VLw^d-H2w?&q_NBH ztzrH4>;V<>8ypKIt@n$!6GyXM?`yxti*IvYKl4Sb2(dR3D5TWlx2+#AB6O*{XnJH3 z6z2=)<2#TGg0kJsip0*&-aU7~v8aiC-ANwo?pX#Nf6@@Ta8YuG6=IP4~)12r$%KE}k$4UlYAvA744T}L- zO8%;2$J{?+3;@Q90aHu?orf75Fne(87dn2MGkQ%-c~gD&h~?)uZqEd$4bpTopy&ay z^{^?6pKyMldy919rP~Q-1s5NmMTfmr-}+h$^KlHZNrTZ3OB7Ir56Fiz<5iG7P(A{L{wLn{6En9O+$-;fy1 zlsXx&@z)wocBmL=+4IUfSu6RUDc{6JVF;)Uj)en8Q zHdf+fyp2zY!EI%-_A7cddo*zr8mfd=*PrhOcYDoNP{6!l%7=^%v-Y1o?S`(S8Bzi| z{YDRxwnb^fgr$((LVH!1d{3s{-Ij6epGb@KNxO>1521`sV)x3+%b&hU1m%eH2o28j z7QBRf{}bcqO3z!8c2$qRkzhZ&TBAb&h;>Eh?j}1nUnTq2hk>NKk01PY$d&loNeJ4R~WvR#z|gSh|Wcw>+35m zy-!$HXZ+>-eL>xY{X#|pW=vr+?^HFXcR7pajO@LwdAH9SyOCwrRyvWSY8N4)NN^k3 zx2bgT^XaOZnqPB?8*%N%-bSt)2g;UrrQ6s@E`8Yg>SDot;Lb+Pu7unIaEk!kQpL+7 zPc|`0xkqki_I%KCN53+^f`zO61j|&Xx7Mvo&4X(+kYQdc?BSvddTP=SmKu|!YA>dQ z+}~EchKG3^nimngS*(Ye`}&`++!~1z)hJ;}r}s$t z0tZssSSzDo_5YNblS6g8Coj(4`}b_^xvnov(vJUN{eK)7usO|I$>3*<4PwVBWBaU` zZ$SfQe>w3fHeq3HSAbFdOAR3*yv#^BV%~(D^PLjTuC7Z#**(Jny`K42!#5Mk1DU58 z0#4?{cHJoV;lA|GChBl%-)%heMMnH_5v8AjG$Fxned%YBlkh$Ko9G?3mQ5P|TcbZ6 zW1jmm5f~BzM{(laRVZ&yC>oq3Y_uSRV?eQ>g+P#$wQvUU#i=s#TBhm+YPe4vOH2 zJJn_}j;l$P{`#0Kd#uO-9aL{uo*e4j;aR}AaFVq>vh0uUJ1%xlF9qI@=F54_U%Jj{ ze7K^0MHD6*dR(=!BeqdZKZ29b5|dOh!)3-$^>5}bHh;a8@{=Pe-q$=i!@*$M7a)ud z&RE&p_l1O+G}?P@LVQilzfu;+vTeS*-WF-CH<#Z+@UM2vHU?;krnh(5%r`_Wfe0b= zYOYp0+SSfq^LjgocLB8xZCBbeWrcs<3mb~`>;5~popg`vgYRuTNKYRpVPrbvUIn=i z9w0Ip9)8+;=19`EtupRE(lewt!V=tfp1$yS=86O8Uho{~kT4!9>Ebmp@5Pd76r>-$S8Kg@)L!i?jh9OF`Ut;7N0|eQ=6b<~ zBJyO2Zw{0EwIk8<7kQz$_<70u8%tpuPxJGm2qQEU3r~=k`>R3ItHK}4QrGQEUJ%1a z3$OzyX*eRrV^j+uwP66(}IHIb*jMisyGinz)U7c2&6@;(pAXU5x)SR-@^VGYqkn~iWlMz3!7Mu(b>6t2 zun^~;HzBOd5xTnHimnev+W8VuE|MFX8}a~FWtPhKxK8)DxJ|X5ClbGNjNhHA)otJc zE<*qloEa~<5av$Qo5WiYZwUcZ(Fk)kW{6JAHXMMpPV(`V)WZzV=8iYATio;Z?%g1@ z=E`RGtVLzV-JXq2cG@>MzwAjjGu&~3_$Lb@=|gfcY(u%0l1v5#soS4gnUM^WH6G^d<6IgZfU)4ZzMq;N2-yjd zN~f-yrwi>F9nH?IwIdi@gksrza7lDzo_bU`~PC{prL?!HwS-jYpUXs7{7 z&*)A}!)POM0z-OH+H2g^)jj&ADVO`fN8R)1kEd2nxBmLwqM4Wcf@=&DezEk483A?A zzPOo^j1$A4)zDNq{p5S$Xu_bYLN%!4)z#J6&tJB)@NHj>U^W+7U2!yil4s6vV|x&+ zl4j;+f(lB=fYb+sxM_bTVXlYrv$OCD!>FNZ58;5KzhH(#|q=)!0_#QdUVJn8~=?k{`%r(Q4gwfz?TXN z3P5^xoa2O^M9J4=n6V18UzlQw>5Uta@I6WQ`{(qk_-u3a$Ra@I+pg9=M^s2FuNXo+%Ir1O##S!N|!@YW` zg5s>pPbQ?jRzK@FZ+B?%EKHwzdiT_Lj)?MwAWG43ebo(}H`;xSETX2NkweprS+71? zzzK=r4Og!4g3<+cOY6iddWbf1e`eD5tnHtG)xQHPl<50lOkI;B2`Q{E5_}VnI{`to-FMPMX~Ux2ag`z!`mb$54`WrgNX$FvhodGOm}Ir zMBT#%c{z7kZ>cnoW*mX<|EJ_|lHL!|{A+Wu>TxH4bGbh+p-?E^G@e}6w7oPQB3sgDXxR8xnNOz3Kyt8`2wq0kUx* zU9bEDI4dHN|1b@HybvR0h3$+yNf;nD{yW;43UAIJU2yE%w$=|ZylS(FXyuG0Lwq?o z0FjhtMxAd)$XJJm1@a0&5~;bl*EOcZVRZ&lVbkR&lG6O{X$#oVl7DDpwlV}~cTc7L z{3edb?*LG0Y;1CZ4LD6P!z+@pV~8=PePXZnHOxtYpakRWgheGK2TxS-Z3`z-6i~wY zNL*KQEyK=_`Ke&Xk(P&oc`#^FAB?`(6K>;Nv#vI^O}JXtoUKHPw~L~t)BBH03;m{( zu=C8K!l0pM=2xra@JNT$6&eoqJL3i>-ZGHZQIZb5jd&iI{G3<#Jf0)A=ubfZV+PKu ziLUY?p85H6r3>E=GBH(+-+*@S?xZ-T1!guQI}R!O6-+M*ucc2vY_^Vj`{yyB>6Uv3 z`R^|qH(=QSv_J*gFJ7p|@kVCf!F_mMr!z^XVV%En2gfg1aS+b?Rx7YG&B{DNwpnJ$73lGfbfW$jjg>h2KyFJ6uc_?{Yq^$L_d%L zJT63tBU8{bouI1e+UZ47*VfX=$H52Kkp+wMFWjZ+!@VS4*`%{i$*XQL*k&NX zJNs^}V7T+ho`9Ub>Fs5SF`lONO9zn41RHjWU@n&(GWpf~K)Jz&J#cKd&C~nP*eM`a zpxGK=Fu9g%*(GXv>SgU6chorOa$_2NmxB7Y{`FgDnO~5z_(>i8Md80&uc--xHvanS z$_`%+e)rBfO6^&z^_GK1oI#Ql3fH%|Jp_a?P)$>a$Sz3~35wtBleW(K#zP?(d8fy2 zK<^Sh@yT#%YC?YV;Bf#q&rZhdRmcl`cdk1Z#Umd%DW|Z}lGeab^QRyy+b;zq94RA> z6BmW8VEa?{!HGc)xVXI^fUTsQ9gs5LYdQQb7;~7?}f<2VOEb5SA}@&pr28c!~fx zYzR_PM#V&q_d!t2m_hvD;lqlL4{7L+8u%)vAOZ*3A{D^Kk;Q_Y=c(@;@F>#)O`v2L zF9Ssd#sr*jAKHPoCr;v4?A-kPfC7D?Jyv2<;z|EAsb&~@;$%r;;G-8tnm&eb2)yPh zKCgkH>(J2xi`Rn3+SD}ZQk>Y6sfU-@OBi&y^SY-h^gf|X0iBut>QxopL3PO7_Ci8+ z^JXA}(NHYr6@Q8mu>wrh-jJ||MOqD!-XLS-o6a&Cfi~Z#51-si%)ZPrR6)QYbRN(n z7`L*;kVa|gdw}?YK_n)pRD#(I2^spHbXrtYEQrCxqRHm1LHdgq@9Yg?LY1%OOI%Iq=lkd^~dor1IcfWVK;)#-766 z!bgl=pCv;UArd047xv)j5Zo_l4PAbMPl`6Rt>A-%1P!PGIy*aM6Jd{@buS_49}u@1 z*ueCh#_FhNEdvaXMeW^-pyV8zmNbE?1Q$@L8vb`HlG*TQ6(^;{Rij@+lPG52 zJAOkWy#yKFpZ+C5B(#4B)xyqO4Wc9fI|3MB}IJ|T)K zz8(0`6UuyoKSrJ0V?R1(JkRp)T7Vlj^Igx$XFbl#&&OTNb^G)Pw2k*h)5$m_TIP-| z2UU0oao5*_*nOQ<%#^8jGIiMf|0?pA(4&`lm7DbocrR1rTag@bv_M5laDMJ32?{ng zFmfF#c_Gs+|LIU-yQ+aL&#ur=^aM_mV_FN-eVP!Lt=+oy?fPguzH!IsFIUN`>gwxr zKU$Y+YCuOrX35@rI9$I4OB9a1%h`uVCOdNP(sF7JI2ZXT zNHRL4NKvyB^-W%01keK>;%7TS07;lzPIt{gr3k}aD2lnYE!e`SSQwOm|Dkx3H6pyi zONc`hzy9kmb$|c2B2yyg7jE$Hv+lLKZqR`3_pjW18{B-5a@g`(NXY$Uo%9Qcs|DLU zc2mOnXIC|7X!7tgP!X`RvdS*KLPh=S*RL1pSsZX=fL+$ol9vYTMDPB-s1SX!gR;kZ z&l3meVT-??-c4cb8vWl`d+&HI|G#gzZ$nCjWQ34V*{Q6IQf5XWdlW(_*_#$6m1OVA zO0u%EvNJy+Bs(i1t1>dK=h5#xuitq+?(1=1=k>VnKfXQci;vIeINrzm{d&Egi`Pi` zh7rq7U-l0Q(`U~TzTP<&q`es5`+3Z89zMK1xPITK%F=|=*yLI{evoO6HSZpjV88P( zub~Ggqw7+Pj0BFRroyAlZ_4@iOivvu%xR41b0f`ni3blnSx$Cz zh?Gcnb$)tKS^RWkDL3~7@GPR-X_LObaeE7>e1d|4@8RB6-_XR-V99KIqkaiRDlP4& z_*3#o62U^qb#c5*IU@PpNxUgLn^)=lp%xo1$>YJJva&c9f!tk`JCtTywja|)I7Od@ zG#w98uiJQRB?CtP*xEjIenP1!mrz(FGqM-kJf8S*U&*enE`e`f_E6}#($MVH0pWwH zSHA&lWuV^63*$uqj_O-lxVVJrHrMvH_P10ZvuI|eUfV z?v9XLHfrik$Z^0Eh3^H4B&DS-E>K%@5FRmU9TfB4e4qF18;f87zW_TkCQcyof#nEA z1XdXeV3`*eHVqfst7>X~bR60Y$hQ+->~~=L-0wNb7sYQdcuv-r?KuE22&N#(26y`< zre@$a4tYUefGMqx4#QYPgh2BzH5HYsRerni^ci<8V1S)-rHZUAx%>BuEEP3%g&%SN znwm;pldfIAh9*hZd;jm=celFu=-$lMR@d%jVhR|Tp?od*1??4F<#+7ZQC(MO`Xt~G zhuNyo$ky~U%zMJ7*c!s=m#9WO?GzGHFd!e5enF>KgvWQTX1HP zhKcEvlw?U1D^pG+re%b(7uvk#{ee9&?z-9Q=kcS6t7`+GAOT`wO2F@C;O#91C;IWB z`>b)lfBCFSZ`>z-5Q&HYlK_*s0x9zKD0H1OG3w1HO6&>0tg4Yj4&q<9kZCmi`T3X? zreD7f@Bb5zf`Y26tCf!~_0lc*J~KnLC2SL*f0ymO&=TH|b6}J%hx_hmKY3NX(H?DYi;8Y{koBLrO6favWEzl+xx#xQy zSM)qOAHh9CT)y`}NyX2fY5%~J#GU2()^51=Xy(??f(PSvwl@v+F*sfIA3j99 z9li#mLj-H#EAz2LcD%yjAKfcHe1-`~IM)g|t~ZZgpjBW-ni@3DX3 z579}_EGDR@ZY6zH0{f|I!jZ62fE)D2C55A#3vJuEuspkwgo62U#P2mA*S)z`v;f@E z-``Ar7lmotR<9N_%n^0G7MdeoCM+W)Rupu)tB)7az7y5bS6ZH>$@{EiJ0?-)Y%F$_ zj}5F(4$1tARl`DS=7L&aX4F~&yhw~R~Kk# zOPpk5oTLY4HxBlz9fSYZNby7_2gg?6$9n0tqxO)(-PQ6uP*ny0F)?bRTSS&C!Eiuj z3fB^HjrRzVnT4FLx$xuLG23-NAMc@USgB{y+E~4QQu}OBZU~Ngx%Ap?FLxc<28``r zxUXugcuhuMv4vzOf(GaNX1v3{hVtC?bs1Fx30>52Nf4!QXid$TO8pXhP6&2`+g)d@ z9{a(Kn(&0hg~nu0VtFKZ6~B6U(s)DsD%~vD6qR%a;Ew90C%<@cyZq1kqL|P6>ZJqH z^p&TKr`=xcoVf!(@en1n;O?<;mcfdymU)b5Pl5Zw0_DVYiXa7oftzy-wJcfE+P!=C z*n$*5E<^>MtEcku^G|U}5NR*5$+_fB^%e!A!+`yF*~Y$(lh(*vSskMEiTEuESK4r6 z@BO|8EffMJr>|V3HpcVwABtt^b=HkT-&|odeqNxANSA}~FJ$%3X2Ng?cRWz~_vbft z?yF07n3Zt;LrF)dfk0EthT5rTnn*K#n|RJu5~>!kLNJYgq^jXEI9JDF3Zen*ear+5 z8-~>+;N3Mgxi}!r`DC?rGLryg;Z~}1(V%I*QYOxO%pt`jx%cV(EvJys16f(jmi z+MYAu^Zpwg#&$~)D0r3u4)d_o(M#I-Q2OX4ZupDy!<^ui=IiI8ebr(JlfUAZ^*kGX zT>k+N??J63y|zs1bsCSobJ%_$S>>~h@NZU8!D$bc_4P%V0<3-?4e$Q_H2|Yv+~}pT zEtDTo07K4vhg(Auk>41Q7$LO4^;d^B=x#%JE+l3L@19{7>=Ctv_7lzPCeXOqFiKyV zhJ5(W*Akfsya_+j`0#e=)q}7-z@z^cXNIj}4m6Sg4{!D^A~O^ec_Xi1myA5toS-gY zU||`1Jh1Awm~U%=sS&{B9}ffLDOPXqeYDUTw`M#qtA;3~y$8a39)kn7LW^(@t`jF5 zOHMX?v%Daony!WGI%b2+x1*NdPcFy2Age08t;!g!o?5*>LcE36XQ>KQRL5TDp6lo2 z_E&OcBHhJl(0Yp8pg1^#*QvghMdxW>wH3%y1rR zzoEL(eTXTaZDw?0(f0^K8mXM!@CZ)Gv&g4bgyhC6Nhz1UR z;Q<#`+#c-7>&O#tarHDYVP9KYL*=IIHVw^pug6U3nc@&I9SN5*lWb+N^^ZeUyvAj# zZ@-p6>`w)u(fm+L>>FPGF;FA#L|}J;`wO@?&p;l{5~3Q2P4(%sXtxQN-u+4PNkoWb z5CYu5!U+zPj;F%r`9*_y4mweoGJ&4c7?o^n|M2_b!hJXz z`z-w_C+IoQRDIv#KYQG;AR;2dj&hQnbV`V7bHr*%<0!j?1aqXaa81Aya!2mMXQG)X z;^2qov$5zyZ#0AM0AjGv+uI5;F9ghRVz@Nw=$2s<>~IL(@|@Hks62Hx!ovQ=N~5H= z>OJij5e2^`g8I4q80j|AY&I|G!FN?IU;{JN+_&Q&we<3GV+DR~2z42EtwLIzv9bze z`Y2d>m6@f@<_TaDW4ya}?_NQ&?+Avz+wKqUx3}QfGcYqK83b;ux%CGkHVG1YcEP^* zrfStJieNq3lOiI>-MdFsV}>S_-#P}<6|ga3;ICV3z8ggxR_68t4hRDyRGhlkQmNt! z^)Rx4f(y+#KsKpqPz@%C=L`FqlCKHW$m%a5a!yjfE0CeS`Yd~7yF7ey!QC$luzG^R z?O9lq5=u|il;a8txM#qtLw`+n8P5&ml$FHT+VnA+J)jHN22l>a=~`;4Mn2i%zZBL} zQzh@pJ?5QuOLQT@!lmqwA&b}4v3{Qouc2jsg9}`x8^dZ+{|utxq18%<^riNL0ucj& z(F;tnsNyz`2=?(K6^^m)rEI`G*}}%60{OrLhd4Oy5k}*gUFT7ce4Ip<1f+8z+gUxS zZY9(`Y4+Tmyu9jP?lvE>{&QS<%gv3hGP<84Y7%(3k^YHQ={O!UEg5r~JJjUSLqb=K zKgFtsxor$U>D<~&O!MzD4U;EfE)xd6`pJ}lnjxSfm) zc`JB5FaVM@^ooP+C~nY)_08#dB%0k;o5Yy%CI%Fe%NT5jc%A(-G zViJq;9#0Nf@MQ`=87a+KOvsF1Ta6o7Y@JwwS4MdI%b%Y#)Zk^)lCUvaKD!~cb^^2O z)wO{Q$&G;-AJT_y-^*-e^Y31P-4Sq`jPDjL=I;qZxV`=cxn&-lz_!bWAm|?Z4eJ=d z{+^>e#(yKX2Dh*dIs{5Juo}DjLv@knz2=lk&m9V@>yz{(*nxD=Sp?0M)kV&^lHZqc zE$xrtg$bj&mXRvPUtmjIW_v$D%ZiHXF%EC&Na=g+J&qx}pf2d_{hOl9VxxE3ZA;Dw zQoV=#|I?>)x^7}}3C9kfg3R;Y*@NantPw5&t`aR}e`YL*rnakVApxP|B*~Q{_2=$j z=+P)Kw-7&GB1IQqw;?aB_Br-kr75G z+}Q~*4WXHO8E1TD2$~h)P!0F3;a3@B;N&IqX`BkFH^X>YQ;AbedhNu~UR@QdtkSUx~5!i1EQ zmD~1bQ++-WZIi!<@+T|nR?oEed73DjzzMLMooK3Eh80u6tZZvj2hjo6o8dp@%kU}p z5WlUpt?k)DsRGBHy5XUb`rsq94^L8){LP*bP{t)Dy)YlFlB5Hn+LgbRDTZ@MQXVu< zjpjn%eb_LrA22NF%9z}-??!mQvzP2sva(1YhJR2YFE`m1(ClC=hpOflcMds{)jpSb z73bC&q;<@HJWDzE0k%&+KOcLi7HeYV?k;vZAfWqS{aEAKEmcD?l!mye*g!0xR_^-D z-~xBfs-X|p>Onq&gCADp&A`Wf7rNlLZG2H6qi#5e#jcBc!Z8X?R9yTHY15%)>v~GN zH(}(6tZ+}2Y6ok%pIz3eR}9zFasn6~a1GkqAAzE+$qfKIDJVAJay_k2XnH|mY0(wUs_XEQ#<}FGS9hm#bw)!Bq;t6C)<3<^$(|H zDS0ux{QJ?z%&9-LmBn#yjl#S(8Qc&FE0KUd3`U9Hn{*hGlw_^-nX;2Oo49B)U7YxA zeIM0`0um?mUL76Kt9rDu?Yv(FFrDz51fvE6lJ0KZv9Ynw9c`8QwQ_nrUoK=UHA}-5 z9Q4hm>Dp0eBt6=<=(35%+nfsTwn=V)ICr}2;BZmH(9_-zTKUg+3>jLClC@m}UXvZs z{7U;%nUYZHeRK?H&_i}^8!M3@`XUU<03^Uv8$xz;#GoA_*gom`&aIn?B~n+Xn551T ztcZygl)5Oq2pa6`1ACmO`ybbvJ!`SHvU*rnCIuNjigB=8r*=>b(HiW7QOq<|Z~k>A zSm?k?{iol| zr^I8QAS(~+VPazX>Wv$FFb4-sAKB~%t#(gUQxuU`K-UJV_EyUg@DPCH5;;f?hOs00 z+Xj(P4m}cr&k={v^7H4@hFmp&p}T|Wkl}-W3i2ilf<|VCszj6}JW7oS+ly3l8{I1n z{P$cWciM7qn>g{JM%KM0hJdRyxy2m6QQ-#?OG=neGje>Jb460Bg{jK!90vzHr(9fz z!#!wd{9{fdH5uee?uJGn9El&z4}m*iedZtMV#5ZR%Wg-mz}odwTnDuGM~YtzNeEoJ zJt$+gb{$huSfx*uOmICpAnkp&+Cg7GIz%$9<9kfM(ZP~QDo7TDOb3NdiPXJ+f9u4y zU#Nb0`T3zzqr2Sw`BbP9gb!JC`z{#hDZ$JXVI-R3D(o!b&Kmo7k%e&6+Jl2wajU}e zTxJ&@M0c7@(1y@B&Q`5(ut~yV1OE%uX3)Fdr6{9ang+W(~_u@X{ zg|I1?4bLH*4H5$qwPCteaYpg}d$V!jzqs12eVBS5x#%ti^Ks$?rVHS6kuqa!!{8gM z7@{@U{N@TsF@@0Q6g4(B2A8PQ)6)|YENHv#3H5~K1W@txB|WV_m(NpZf_(#1`e&A4 zHW3kI)|sV#?Gv8zUv>XRk_Bm~qy5w#-Er`qOKb@9<)Z7!lOu{)`%sSKp53duf(MJZ z*KgiDdiz!gEPPnq5@GUTVH~y^d3ujA(6}r}Bs2>}n!(!>R}TF1Y#o@S^GuKIw-e_a zqUR*5$g8#2^2{ML;^N|jMJ?>PgRct zzC*MEc4eRurrA1#lO-i3sH7OvRG4Hdq*b`NHEI|g3L*!Y4?flt<+?fF5!@x+uKa_M z>5%(vJ1Ki#nGlAp+HjJ9k5Z@zwd{?`gMaCZ~>nUQI z=|>y4d-K5(`hCWc%K0|ZuKfucCW0S|9_cWua3RtYnZZeQg3AwmvmC`$#6#J`+zb|$ zJzdAgbxS^pPAaQto4va;33DJh#CeN|6f~USKlQ)?wLnvIvm!+aE)MLcku~gZQKamr znh6R%VRd?~)?r9Jo-?}H`OM<6gC%z;!Vc`)S+lLiC5c>s>@HfejgkoN(4V5T0W}H+ z{%bF&3@du>siq_p7DfPt3~15D8xAJ9 z^gC(19pU!fo4zTW0 z$WNDxkNg&O(k)EcPRQ$7wvMs^Z^dpk36{f1ya

    5{Tbcb}aRbCn> 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≶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 z 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 z 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 z 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 z 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 Fe*pB6m_`5q literal 71459 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 XKE16_G48Twfx|#V5CHeogom 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 a9jd1;?e< diff --git a/src/MOD/Cardinal.lv2/modgui/stylesheet.css b/src/MOD/Cardinal.lv2/modgui/stylesheet.css index c6dbc997..6065621e 100644 --- a/src/MOD/Cardinal.lv2/modgui/stylesheet.css +++ b/src/MOD/Cardinal.lv2/modgui/stylesheet.css @@ -3,7 +3,7 @@ background: #333333; background: linear-gradient(to bottom, #181919, #333333); width: 540px; - height: 590px; + height: 565px; font-size: 20px; margin: 0; padding: 0; @@ -11,7 +11,7 @@ .cardinal-main.mod-pedal .border { border: 2px solid #4c4d4d; width: 540px; - height: 590px; + height: 565px; position: absolute; } @@ -23,7 +23,7 @@ /* top and bottom area split */ .cardinal-main.mod-pedal .cardinal-main-top { width: 100%; - height: 240px; + height: 230px; position: absolute; top: 0px; color: white; @@ -31,16 +31,16 @@ .cardinal-main.mod-pedal .cardinal-main-bottom { width: 100%; - height: 180px; + height: 345px; position: absolute; - top: 240px; + top: 220px; color: white; } /* top area split */ .cardinal-main.mod-pedal .cardinal-main-top-left { - width: 180px; - height: 240px; + width: 190px; + height: 230px; position: absolute; top: 0px; left: 0px; @@ -52,30 +52,44 @@ .cardinal-main.mod-pedal .cardinal-main-top-right { width: 350px; - height: 240px; + height: 230px; position: absolute; top: 0px; - left: 180px; + left: 190px; } .cardinal-main.mod-pedal .cardinal-patch-comment, .cardinal-main.mod-pedal .cardinal-patch-screeenshot { width: 340px; height: 210px; - margin: 20px 20px 10px 0px; + margin: 10px 10px 10px 0px; } .cardinal-main.mod-pedal .visibility-buttons { - width: 180px; - height: 40px; + width: 100%; + height: 34px; font-size: 17px; display: flex; + align-items: center; justify-content: space-evenly; justify-content: space-between; } .cardinal-main.mod-pedal .visibility-buttons span { cursor: pointer; + background-color: #181919; + border: 2px solid #4c4d4d; + border-radius: 6px; + padding: 1px 4px; +} +.cardinal-main.mod-pedal .visibility-buttons span:hover { + background-color: #333333; +} +.cardinal-main.mod-pedal .visibility-buttons span:first-child { + width: 52%; +} +.cardinal-main.mod-pedal .visibility-buttons span:nth-child(2) { + width: 40%; } .cardinal-main.mod-pedal .cardinal-main-knobs { @@ -169,9 +183,12 @@ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2NgYGD4DwABBAEAwS2OUAAAAABJRU5ErkJggg==); background-position: center; background-repeat: no-repeat; - background-size: contain; + background-size: cover; width: 100%; height: 100%; + border: 2px solid #4c4d4d; + border-radius: 6px; + border-style: ridge; } .cardinal-main.mod-pedal .mod-pedal-input, diff --git a/src/MOD/Cardinal.lv2/modgui/thumbnail.png b/src/MOD/Cardinal.lv2/modgui/thumbnail.png index ef9d9ea28d9d8f1d862733bb32265c8873ef65ac..021793f4702f57f8952213119a152026b46b4488 100644 GIT binary patch literal 25094 zcmV(#K;*xPP)dQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O54=lH@qHZTZhp+#wJR(F_M5K#`h34ZqfcdPGLv zo3H9UkxI{SGdEKuLEtodpH8p+fB#?K^Um>@2U-_x6^ippAmwWDU@J+ja|Lf=P zaOd;)`CtC?m4E-+&#(OF=Xc~siLdGR&pQ6Re(>|>UvK#99%26b&#(69H?jS>&|i1_ zbHU`DBj2olE|Q#-`DrACAWY5m+HCn-xu-U*FS%dE4#EF zUX^0pDWv=S-F_=b{uk5W>vR4tye_27_bIiDFM%umR>Fq-+vEN9^}hePLI1YNe|>lT z_uc>A|GfEe{CP$CZ+lt(>=EDm$6ti!KX3lo;(y#Y{k@|2@4uKewg2%rfByTv)xK~4 zo^IsAj+Q?Xbzgt&&UvhFO}0Fpw-x?W{(Jboo2b;jH_;Cx711L*!JxE99`k z2w&Le>luQ9$cou9Q-V~=n8ofCh;7i;QirN&9VabFx=PVw)xgmd41?)Qeq zomb$cF>tYPj{kr0=lXy9<^Rc_>pSNi!r9FC>=o;ZN-oRrV@_zxRbz|ZoA=akUK^iSqCdtqaS%@`3EAR=28WgN zgZ$LokfHIUCqK_qp8B-w>CY&skI9zJ3af3rEx;v z-*0PN-51U9jg>>jtv;JuarI}vq4>L6-_^sDDx3Y5yg5f6Xou%(50@EF>0jC3UY)0W zd;h{r`<<-wj(zh0YtMFnxVG-)xM#RZX}t#ahh>kh1>KA1!U**589eS6SmH!&Vixq_U&!%V{=V)aIOZLf&>kOiczW)Bv0s?gK0Ed{`7|*lbk7JzS zxVyq3aY0V5#&4#zk-^Oqzh$`HAU2*H;cXu)EJ##;3zz!lx>MqcrOp+6-<*Br`nvwU z>WnY@*}tvWA+ht_*IV#};oF-xKQVnFvM*mb610^&k2mGJ?fm`gvST4B>`YTgUTw|Q z+j$F1%>M4_i2aU86F==K=BaVJb;giV2*e9u-SyY;^Yl;zg&EWd+zER>J1d(ns?%mOTGSHYVYM)Ae&hhGR~{Y zKnbv~7>DU%()@?~teb-^qj~M_E3WgBhb@k10=Ih5(yw$+<2(P&#pUXU33!pPq8Z_5 z;NK4iFe{=`c!!&v7H3`Z_;OzH%PN5C!lkDA4kp7^N(4~vHQC`0^;v9A7-)=0oVR%) z%>BAi=XdVLiLX80HtrmsfZ4{B=iTpbjNWU(T!SHyf1FmW&+FpQ8qnUn(2f~v8~7Kr zfaBo|Rx9~vOTG84)%!BPLMx7VRN(kf6JqW6;)wdwzI3IE{&WvHX|@6e=BY0Ry}FTk z4jv(-G!fVO3jdBp#eP3!VZYxsIGp$CtSIj1VIL7XR`O`pAQegF88$>))Xbr`|8}cexcyDQ06^xk8C|>jyT)_SHhE~h;71x;W^VNFRSE1 z$2-Ex$e&!RJ=aXXXAi>*@)&u(>`ZvDvUoraIK5gS9NmNYUD8A>Bzx2IyWd)3sKDQO zag?0NDgfaa;@~wmTd_W*4h}R~;kU=nEvX~821FranM3|YK}Ob5!*Kx~KF$(}c+(6| z^Sg=yelJg2kn9?97|K5T560MtUq@XK)gIW@-7|;Q>NQZL85%18fp!`y1qcEDzUA)N z_O#c-trFlv98mK!2R2JDUsxkX2xX4_WshbkXiJamG-eI43XwersURpNVenr}J)Z5! zb%Z_EQ3(+6z{Ca~ee1SyM`$`byLCVPS-9;5DdFB|<;}q%&576E88f&6T&QxvS=^Y5 zK6b9GYGb$id+m&Bt+bz57aN;mn8GLa08L5)!d*(#{_T}@R9VVV;Y~I^^OBg zLSSFSvV~{;jvlv%B)$h!48;AzIAMp-sK6yBevQY$d*c<|=Z-xWAfQShzw+H!0?uN9 zIddKr_#?=f0YzE`Le)B@ zfxjr%=Eegw^JV;S`7t)$ana0ldwJ31Tdq&%{;l z5gR09_Q1cvOLdIZF-4!d޳!Di40ExnA3!20hG)w~+Xx8YBIpiTA5NHFwaf8~O z8->T8APR*&53yc|5xxndoeMy%>bgJ&;D2y)jQ9a;)1wZ7->S}WFB~blxX@|EW@om# z-4~t*xDA;EX|IW&oiL&|LI+}ORm%j`*rAH&xy!0?Ni$xsGyrYS+QQrK8L!+1Yz1k7 z0t2T$j0@xm2f@R~#{+E|;aFdsbK*3x5Q^u+*#kmHn&QI8XiY}MxDGv2^wr z|1#x9us7(>4HV+Z1E_%o;fz9sVkNvQUL3j(6uxooO#?q7fP>QkpT)wrOYekbL7T(z z9C_XVXQ46P>hURFu?uz(=%>X+z}P-4W8n(CVhP>YPAnljZsYW0;{PfWo~fJ4E z_7zkI5Smy>L5X&WDZ0+!qrQ< zU)UsD(IQ5@dh4xj{yEP_oBd%xg%>Pku+EA1!)ic|ki{W)&ewwM70e{MTk6K5K?+)m z!oU!|{-99Eaf;8pSp%dqB8VtqMcqbu@I34jnBj6^i%o75!hz|~l@~Y|W(Ko>DbK0H zoiP@XBZSq4=N{0h`M{O2Z}7DT_=IFbIl)H=B%2Jg1bL$U91F$~Q!i=(i^0`=UVtSs z16;3B_yW1USAPTdy06Mj@saR?=jH@Ay9*J3n93?!-!~U}k&7GSiBqiX7mF&IP&_7< z2q8h*#}#W{Rc3rdH_b6CnQ6CzjX-DEvnT%L+t&Q)0u;8OMw}N*Tw;N=K zdj%40L?Lq*;2vHG>N8cl0k*{J3?wn;9I&UgT=>fTV0Q~x;SVIh@-0@})t(BvUN76+ zbk5`-W?zM`Q^9p<{%!^3XOER==^NAwET0|DcO z8~fP?`)ps<5&_~L3biK~x!fVM8$gU}LS68R0F@_z8hJ13Su=8) zN2yYX=nDYqQN|7W!+$jh%FO}P9Z?ZUSw(4~(UO1BbMREEo13r;T;paJ`hyW|iM>i~Za8X;*|=3T^92;+x;n0hRXdHz(k42o-DIsiy5_W-eh z_F@KYo0S-fA%=nb${xUXoFt%${c7+vp40o*v`1`|6aXq+EgH!LP*X|dOi@ien;eYpgz%9@L4J*)almJ1( zJ)Zd0VaNRe74g(Kv`752aR*<__ocJR;u^L;+#CSj2Aq%J$J@8RN{_Zl>w=;H6VvFB zgNTpBX>|1ceS5fg+uIs6W+Ko$6G}7;C~!YE0BbO@-vV1~6P(vYvl4gp)}ulq!viht z*T?%|Hv^Se_ldk97uZ#!0xfc6$UBRgY={qy`!EuUI^nKXPbXCO#sNNBqH%CEwDzuZ zh{sXYc54hWN(`Hn0)K?`v`etW*_Hyux=}Fb7N{tiM-a@RyuEiA?I+SzayGKI zpmhm9C?5@(}q6S=rS zA%*~?EMR(UOkp3;dH`ix&kKsh5)|W-y-mOe{vH1SOvoSuya?NdWk6X+Lz`X@g0cE| zW2@u$oEw1_vFi9VoDy;$*}eS$O4=dcK_7i#1oF-Z9i)&q`;g;C0l7?Q8NWC{$L|>Y z7KaW}g9yjcdFVFrWcl1K;c1~t>^%#(ajop;icmvi1F)XmCcrKv@e8&JxY1aCG>BOc zVPw+-g=(~STqPJPIT0-|6(^z~Rh?fl{?cb*IbdJ|NwFhmEV;9)tP7plY#q=N=!dYr z+kC?f8eBkPT;nbs$>sEfX7Gm-69kp@rd_R=s88Ntc<6z9vIlR!cu~7UlV@ZcUI%4^ zZlE_WCJz~e+~SaPehnS#?E$fR6j2T)>fVT0g&VLU9u0tuwcUM&1#|mwhQ%f3XR(9? z#0Fo20l_rj5quCRHW_T<@o^zZu!UhmKsilGlfj&n=NBOE5Gr;-k_~+|A_gGd2FxZfD6T9d5x0k|!!Z3bEg#SXO`nXp>HZi_jG{AqsB-ngyfedIBtP8sYY8n9J z%ec1W6ZFj9ON5}ehf3=yf?#zXo)_x^berRHqxZ_NWnX|4cByf{zp zh%f*N@O7ZtT%gz)x5~0H9iVWd^#(DGc(?m^2B?(5ug(=3$}J~YJMYQ zZ7Z8*;XLafh54lMbEk;@VHrFA1E3!R@4$=T<4%qSy9~uiR{>ywksgDWePQ^J%*>K7 z;sY17Q*HrN(v0Dw7XevA1-S9a)L`x*ibyEOU$xoqqn@D|_}u*9^Ti<6SL!=mCagXUsV>CrY)v;SHvuoH zMpzj(YMV4cMF7WpfgltK7OFxQ#PC$%OoP72Wg!rV_Nc=M<2Y6w* zkO$ZZ25&@-w808^ew@eeB2`etfsF%}%6^gCQ2PNp@U)sw{RO%{>xu>jEys$zp0jGy~G27|=%I=mr*eA&k&Qq_FFF#p-{Fpb0A zS1a)k5_duMfcdyg{RW;K`DJ?yyot3&hht3$0K#qfDm8*s5m%yj6VI19uGrmr$QSJ+e{tjxdVB)xbnlw4ovhg!8 z3)mov|G=m->nqrIQxY9^01WGwPHLe^+WhaNQpD1z0^ojOr2s`wz76t0+H}voWgLuA z2kynXu(-g(epMj%Q!ttj7%bz}&?qizr~&1v9A&EJ0d62N(thiIkZJ>K*g$T5GCE^k zSZQS|X)!Pa@Ppj2%_XB+Si0Nf6~+&Sgs1ruNOmK6U?x+W%d|Y0!;Bxidc7hJ01VsC z!Qe6>iaf%@O<@N)6~i2G=4YIM$T1*&x8vx6u%ga!B`iEUz$pV2;_8C^x@I^zAIw1Q zpHUzHpcD$b{X|qXf?zYgBdwkj5O+S;I&rU8vkzARrdIF|0*xe#-V(kGdBF6(taKWX zhGA_1^@MDO3}DJeX)jRWlH8@ofKO+Y23aw3n*YpQK>=^U+hS_9r1+#8I)ZPVC;beH zNB#GA0XSgdz22fw;BMPlsgJoDoy7MC$$em9(Hs+|Rse+cV&~ZaY&zEy`C;SHzmKi)7BlY` zoWd@H(N^GiCiIL2;d#&P)^!{Ces^d!>1v^7L!Yc@g@ari;Zi(;bTK)bREOtR*AVxVwFs6p8o28B^z)p)PxYS}7_p0Q;dew<*( zH*iuLs}Lvt1&}}4W1NB}5J3E3;=(2!F0Fe$#%uLNY2x**5n zJ&KY&wJ-k3uj6CA2o&S}@#|?Oze+j((=E7f(%<6e^2yWo`pcg`cxMzEzJ`ce9`U>L ziIboqCBsZ=$ITCeLx7FYN1xEM)evaB$dbWk>leVhJaIJDG>y(npSCa&$%B?xNd8lW z?}8OxvEZRFSm?nWuY4YiiRIOKJmKGEULQ06Dv5z_bS+jrW)6 zUJo9=%nv@rUarqF9pibv4}&QAA8!LThHi2+X)JK2f4&^LY^A`{F#cyn!@7_cL;IPy zMa?l3JDHjP@K4+w_*PNB03FD}(^vP$t5E9-RdBO$Is65F>KL}az8F=jucfBAaxMz- zz$uDN@FZV*?;rFNG<|TN6fQN0GqLyyL(CHw1blHwx79ZAwebG?E%F>@r|~!30cW^O zxxDQf2t$$12CxKx?*otk?311rV%{-SP!VM4RK|z^{@c3EE`oZm3{S-@zN3b2S&@#r z4CBGTbql{9U5vg)SC3J7R|V+?laO9H{jQ9K%7o57&q2g+hL%_$_Q9f!IH=CxEWlg zxfBbQ&~??sAPd&ORKc?>=m_|h$j;w5Z^(FKedt9rp2h-rv~~^?;9S54?+L!Vz`N^& zp5Es?FY<+T{)t)g*8hHE9K(0i`L8=G+!X+mu}hZ=F46j`Z~SVBFn})vk3B56_znAk z8Of{TL0`i?8J?q&V^f!GfK#u#A#f%q2F4F(UxgSq0+gXw9jAN@8O((TE5G^|cK*|m_U|9Jx~3B>-3*8M$Y@8v7fuJ%GI%kdeY?x!-r-;rkqu z2OTr#^g#Q+XjR*9`?>kixDJH+-s{g6^o6ydit~pxG5iJi{Fn~^iWQ17CpMcO;;tdS%Y-N| z{c&?%)Ia>d7re7oHrAtxO{^zF+*Sl^S&hNM@g@i)xY5cJkno!moN`z+_RVL(9uW4j zmjR!4o)-hO8h44O_{&JWR>lIcbcrdVUa_!B16k(KcNz^t44*tHYtSXWtHZ@i*Yh^` z%LjExfJJixh~2)>2TV8IXqITH!2RVI%vQ6HfJsp4miom|+xLhIK##Xs52!CktZA9pV5I$YMX&vljve3~Y9}Gx%KeKY(T+loLKdT~m-6JR7&l7{*9dmMp(2}ro8L*9Q zn45tlhV}>?L4EQD6dfE4K$>QxbYABetA#xi+Qn%>Mf=oQ33UpVHbP`9OoH78%<~Ku zmN(vL8LtV@@F3L4)nt|3@Y47dSC}5TG5r`f^P%P=aq4h&lV6yCj!q)aST$DS!UdE7 zuy?`Ous;dpABTlZP<7+9y&|+`3Zc~CA#NH1pVelYe;$2^U* zW7sm<5RoRI9anAU3a$pV+0b%!j03b5?zk$`%qkdE+*+O2sOv5keq82W*0F^T+ldUm z=sun-$%4SL7@YcGO92qD9!(;QTc~U*2);Be0*Rws)PE-yFsBOVA5?~;@wdokZW|bGb@s{;yaygoX zS-H$MLgwH6Dz4>iGAQoQnjXHI1P6|S^CaWVXc{NS_preItK7v1@-p@a6L$y5B>dob z*mr_z(*mQK7i@A^p7;UmJ_91bCV_ldOfh53>7h%&feRJtV&j{xG*>S!cWEgWF(9=Z((P#ONm=@M7=_M9ySEVv4`FnFbR7C86qu~wlt&4 zSe|s7aE#T#n1)AbrrA5eGKvO&}G3H5OyeEB85V*_{ z7pyL%qK|QSZLeK`H_Z9svU;;Cy)Mas{&? z@qyDCSiuohj28EJ0I^826?J^Ay!L%eRSwxVdN&PGis!Hu28BTWNV>v;!$nB!x3Cm1 zn;#9D4-OAMGG4?4uFrw?7%;EK7C0b7-ot#x_1;)l1h6eG86_ED;MuMGF^ZG|$mJKT zn-HgYIuB0ij(FoUqADPPieg@Y-F+E)MO^rmjXDCgZI0*_>DW-1$8CW?g6|^F+=-(E zak5Sx9K(A>^rY|-utJmD7>)p{hhTM6g$-iKmz<{k<+*p$2Oul~P=&Jrkb)MjPua92 z7|}Coy@idbo{eme@9>@j!IY=ZQc z@!Oj26NCO9P@5edvEoJJl`Z{{sR1C4pjqN(@u(={<8C-79LXH68pPC$L_{N}8>lMS zL3wi>7bZ?D3Aj+!zQR==Q=XrF3~da2+hg(pEBl@txGzMORlsiy>;G*j*jLe`a4NcU zv807FS#X4JZ!ChhE8Y;LW1O?q6Y^%%qlc1&HP(}V7h0admkmcy?X8Po!6l{$a8X=T ziNTVRXu4zFuZ^pS9Lx+4G)+1m60ag~P$X+h_3>OBIh}W=TyP zU}O{5m6I0?XzA!43bk3m`Bp;f-blO?!R^ zq960~WO=JbLZ<-jeiU5+|M$L@6LMe!+ym0jVo1z^L3#8lM&$^{DuThR2s{?v25?~I zIiQ9I+tq4@``z{en79B!#(2HPD{8P4DsUSBJ=Ta9b?kgF#BL=mdW*lU&tuiRL6on9 zFc5UM^#xRh$R4pqG?=FcUcw^K#+86#0OSGE@8vb5jkPnfym6AgER?7`S0=y6YhiVvXx}}#yvCza%PsMB7k`Cc+d4ygb~=73ae`` z@Z@oo7K7VYBnSX-qs5?`l~}LZ0{RA1oGMTxj-9!zf9UGN*6xRdv9h2inRW0Q;DUK_ zOG_r0t*Fl33KOo(Df5it#0IBDoVoInuo=cgw@Nzk&-(m!rK1Qc3<8E2^Dh{K?jiFY zadz4-TYAAG58%d;G<#kQ@(CY!Y(Qw|KTCBwIBXZ*i#m$0>|p=H#8F|KUxBWhQR3bp zkNW<6mCLYkz!Vg?8Nm46nX^vMQ6-C5ZfmTL+bUR6cJvZZAg=aPJ{AmO@t=W%Wf29O z(VFFhWtmz-HNFC~Xp9MWi$~GE3)T@^QO$XB3wx_ZHmNxSkG1Z{{42=)wW%O9 zYitoImCWwLxoum_t6XsX^^0L)%!BDbs6zi)w)P8yy%>KC6oOLL^Ai`~bhG^RhDNOB z3NM8znS2z!b110&E7SvH<7Vem0;h!;LISM4#J=E5pr3%qDZ7?r7pRiQZ>*?U4?LmV zmfhlJfs0-pzH`f$x&J9`h|tfMt+s|4umk`b{L}m}q=r3(Yo^01gSlB;-U)vt`z?T$ za1|WDlW!zie$0XO*f-#qw>FcMXS1uD{Ur4@o!@XWh?Z0^0 z#n%Uz+m#}%GyTF(>>cv|*wPIa0bxYTHnu=p6Fk!&zmCa9p4lTbvhEY4D<{%~nn6a8 zc8dtYDQ$1-UvI=5Vg#bZ#B`!Bc@MR}tUP(M!G2C5*f)*YX0Lt6ec?u&K>`VttMa#j4Vdij6q~jE?DB38xHFA;#Qy<5J80ch*5vh#AdQ0VUu2? zpgbNj2Vr>c+~y5s$A>0IW&mnF&$0sjT46si*4ys5Y95R0dO*%dNI<`~pbKBH#oNl} z&6WcmGh`ONF?EC?0JMxWuwb#g=wO|+qAhSfdx|U<^}-=xg-}CiX~_m8V*i32*MsJq7=)c7n6J}jI2)AhyWzz5apq>qEFXES z@Et9_nEPK_I|l3?#pax4$BETcCwU=msyR06?1AJ7;FJ?s8|DFB9yVLIY1jF*ba=x< zcvn=YaoMn2>+;W@_7`elA@&N>U<}aqJ%w_d@tdp~0OfPhcP0%g^l(}#!eSuDb!m)i z1xTHaC;23fx^vWsvC00&s+4Nm0Bmssl~5&FlEn~76IXTvXw}F1nA>ju4~M34KtrED zxpgD94TpPAySuW5>>$vJP?*#U;G=X3DXr325>K?SvXe-veI(neQdB(^8$egTPKof z+s0SkU?m2o9my;A1&3b6IRm#9p5Ww#wRsH5-zQfMyfJ=kS59i;<%$?5bDi)N*e$x$ z2AXprHXjTKCv7TY*so$7JWGf`Z%3LQ*oA0E9vgt|-PRO)yQD1S8bZFTT^)_QI%uYqoH-xPV<2Peel;QP?fiwGzgYd;tbYV-nuCJ9T3**Q2N4K#VNZK})XK(R(^AEH zn$uH(l-KZL4Dbf5pag`nMaQms`9$m2HEW8k-=}wZ z{K)y~4Z#d^Xn0Skwr6I4{skZdOd|Z@xsCOHiW%@E46eFRj0mdI=vn$=uiAJql&FFy ztUMk_1R7!4IQG-D3Tm3>w7|AW=)4_@QJ&R6wE&_Y(g03H6NvT9R6-9B$=iyk0z3lr zExjlP!xA0$5(%(7*(w=u$vcJq+o>SmZwQHb#&@F|$y!rhc|jPFAPi|c#o(Zc{3S=R z;C@eQ6)&|#)8auZ@G$!LsfuP-Tve->pt>=bmwD%5ffsDBW~&xTH8^*RE8A(nP)Ik% zvy>yz@BP@AY|9KP0cfslUA|t7Gi(ktep~);v;MZ0F1azR3I0$Klvbx<>~0BhaPhng z(a#?Mc0Zi@#e&QzVGL~XY7UkG1F;}&pUB%--Z-_!V6+pYko{UO70)OY%-+ZAuYP*K zEo^zV%B%yiYju0RI{zYRvRKyw7z?a!vqn4v&hNpWLf=qq5L>k`8nlRoHP7&MY%egK zpIAx_#9N~}ya4#-z?0AVs)ZMMz87F+#~3u@PA0`4r*!}&yM-S%gj$j|^FdL`B2xQ< z?*q6iSlH_7VyQ!k?B?<3J?9HCG}!3mse2o_vNF<+KbzE%Fo->@VIL&;pj7ptb|_*C+1WPYI5T9}am!NC8{`sEN4LzCS!qA*2rvu)RKG8s zC(LN$Mjh6Y?f9DLhOcpqxnebKzD4*H>kq*VzK=2G|uoa zSAU-BS!eApGF|c6`gZ* zoP>RLPz|s|H^#oz{O}s41BNWCuAcYgT7Z_nArJjz<@L1{mkpE)E2320($vpxaO~W@ z1zyr4yXcIPm@xax*PVfTmawO1-E8D6?UIHs-et!-78-kQ!+W>x-XekNR0G?D<1g-& zE96UtZrIEwWGUi}nqB$Cu&~d9 zdiM9y%1*2?uo5#rmz3LiDu4!~bUoNRZJ{&DoB3g|Qq}6PX@v`DxE!Rsu7^tiM>!1# zC!Lt-V=J3&@27#Rqs#R~vd+v8oFac2Nsr)s^FR}5sbt$BS^T9MWH7TjdkO64N-%V_ zIlK$i;>?tRyksszKgoiO<_+Q0mCLC-%^=?w=_{+xm@Qb_I0(IVw!!Sz(9BCh?56n9 ze7i=#Rd-A0G@dlOxauKWmdxY-T z=RSA;<_#_RYcsQC*&5z@CTn6%?$ZYG8|WtQ2HN73L$LTJU$q=~WF3?F1)fad2w`!&VE=>Z z8X)VIwb#GY>GMU!PI26)y$u=k*Ut32!#3J0s>C#jrA@ParsZF(mXnie!JldI?9F!M z4RXZ79Oi(d??_Dz;c(OkAL5XM&tjEq{>ciGTU1uMITIDJ%_XwUpp9N}M_pWQM%xD3 zWCqBF+~Trv^3e`oqs_@V1uIRYKD(L!iRCXx9yMQDcT#->!OqmU|w&(yy3*Zs; z>Oc)#Mnw0Iq+LDh+;7n2rYxNYHKH;-8^!*4tPI56peRQD1OyQwERZ=pdu# z!pA%{K6nJFIC$n8cv>VwdV^%#@dc5@@LC3h929mjV0WFU*G#<(;0y1*=%->V|Xk}br=oCC^$^X zmLKz$_g|Io20%IZtAUY6aWWVVdRv7gRzu$qc)L5xNEjVsxa=ew08GUGIA%`&#w)E| z&+EHF$<=u!kU~xiXD~Qs(I>ToKs@v00S>Og7p-~A}rg0EHmXTDcWA@SUk&czqIdU*{8A9 zyx)eg)tSgm`eO5j z4Auv&8*+U57I2piJZSIM&>5T!Cu;?!8LR+($4{Zc+g{xB6lmL0zi-e%9sP15#WSV$ zNB872xdLeJ!-ui+=ITw8S&NZs_65y$`DLN}sRtFXD`Uf1R?L`Mapx2+sSNe z7_-w@V1)V@Bfa&qv=j6Gv;s$blp~2@SoQ!#n~C#Cx1(b?EyFfKNc&={Zon#;_KaBjb8bMO4J>T+fZyb2^*_OxAevL=Xit2^;r{ zKdcVIgE+y&ajv7=S?YqVnK#z>*+2JQczpZFk`u&a3UWFWKI41jHeZBU*uiQQq)`yS zMyS>?I?V!?_#4wR;w2_dIMp-E7#n>`<*Y;mmy}}fl@rBq9?R0CmaN==JW3G81dCdf zVg=DPIr89q(sr0$y5AskNY;%&%Pr@_I!CNZw6o8uN3=q`6vFKYEvv~N=R>OH&?KnX zb3$X|HtXq#U;zz$SJwt_#gU{4U4?IO4@>?mxG_?N1de^J_m)sc-Y|bU4U$SQQs_{! zCNLRLci;=LV7U#x_!_@-GYa99T$op~=>>VfC4%9weh3Z5E z&MG#Z5)zX2@+=(L8(6u^86{~77@wEpSa;5-REBIi_|#Db@2SSes0|*;*a*^|L;P$v zVf7}nFzlDKA1mPSNgmNEq^=EZPQf$(Y;~{EEytztxWkc8!<;&VJItm}v2rn(U1ycq zA!<VLH%Xr)4w9csn7;3zr3s~-?xc0`s3D6w4Q0p=SWRu)@1HHQ_G$m-d& zM>38lthS$_6d34ikKYQ$gHNe~dhR6KQldSf-)GxkKeIKaWr>deh57+hoRd5p(S!Fj zHx&D|w0dRj-}XEXKy4(XWKwuW^y%^G~+DL%+2G-cjgNoiZHX3-H*1=%o zoC|$imcA!kYl+o_upSc*`edG;haP`gu&{1G zKbiX!djWnk9t1XCetmPVZDrN?Fvz&h8_u`w;}r(NeB|}%L_1L5%W(!mb}WIJuvt^F zJCyCgZ^8l7^ZR>YKT!qCl}z`e$=2(@dW#de!n(fU3_g3PTT2L5&(k6eerxjEc7b2x z8FtVfIs7>`7mG1>a8imH^^L}#A=BU(Y-6zm(}8AX->&!sy&U*eg?-iDt~t51{RA+J z7=L;G*)c|NlMB2Lqi-{ubqve=fJZii$ad}UVKWT3;B_4)@b=SqYONzSIpg?w2ba1W z*0!8s;)E3pwApV+P;j6~%=alV#M>;hQNdD*B~W;rMT2uJT?&K&?^nZF+a_t3>U4ma z!y257YM&l_$t2wKc2wt#SHWysy5rE4aApY`qCpnYwK=JMLW9+bJl5w5qwf>aVtubs zm+z0rdMd#J%huMfa%TNOl-qeDzs^4BSsKzQkTgu*(XXe00aeb=U+rh>I8W8$QT2of+R59P)1TezJaH1H!wZv(Oxl?lfo$jFv;>WW$cYuyVPt zYH&C@CRbC7RycaC@{fAIH~9KD%ch#2^5a#OEoT+mR_q}upb_jC=ZACX4yLxh#y$0;GdR#Vld(joDNf=7{U^ipAO!6AZx~i9PTdN&HJj>rlOq%? zrh0yj71g<$Hsqc1H@lDR?=QAf^kZ>ON#3#;;EkNtnVtPPsGViQLoo!0YTh7=T!+Fx-X%!wg$hj%?^guXViG$4?BaHX!YhD-&$Hsn$hyj7E$Aii_ zl_xo^5DN*)OOgfd7~y;LM{S3yTUz)_nIWULp$-oLi27*!S^bPAz^6vn@w*2R|rBoLvq2I#u}S{1`DA zKWSzDWvk)$&ZU*N8P-wI^Vk;C zZUv`|`??GkKF(%B;L9KP-ox($4B$An4w&Ql{>8%2do z$<)9-e@&}cjdfPBPw(Lc3E4~T2sz?a_q%O*uqD>A)^A#|AebvBW53SO62}jHR&Knf zqyRb$h(KB#FXn(1cgJizHW~G^!5j2}tahMTGEvEH%rk4eIqHT}#ejwG2ZT65_lr(M zfYyiCqSbGG_Nw`yr{{dYEQ|^{&m35))BMgj-?ANuV#U361>)?U?8vnm#ta>R?M%>0 zwiAsrq^7?x#^}6G#MR330K*&XBD(sXld5T79X7$fLXRTYv78D=55#d(Kw^X#reA8^ zh!xDbImXt6T{E&{vA95!XTO~M@_UfqjGi-!*})|!;t;UfJzOfxUHQAM5{H*MM+U|f z?1RGuW{Xdqg6rS~=WAHt_1aHvW3!cyHrbue5wLq;V_hO9hX3jCx+A!k8R*3oF32R- z^)xJJ!N~jl@VI5mpH#H?F#`6Fe#1Bb?l*qP^E;f!u3@vM=>h~T!w}el{aB)44^pt# z__OUhI>6Yf28T@7w>#-+pV;Ywkzp`W1cgq!pwEXN@L2Q3(gX+cqQtUflpAX1xWEEA zoTpvSni&WzN9_kWtTTk_Oj#|z7~4pvE004m%Vr({Sf{E*L=4dru2iFasNrdY0(5d0 z2NELVFogEu`z^j@Cw%cUCV*%BK1hP?pF>l&9cWU2;W-l%>E2c!DG;qBPCC}Y36CGk_I6}PtQ{!W|@EOuid(irDPl)hTQ&Nc90e4krok zd_LL5u1WO4x!w)y!0Mdw=CrmmZMZ->{G134!PU+<8?41Q&B}}I|Br{^vLnqV>WJKsaGkNn$q{`0iPR7Y$A+1qu{z zu|SdFQlJ!frw|~x77bq9-L<$CDXyWo6^G)a#oeWNDGuNJ{qbccGnqFpJNtI`o_o%@ zZx`aKAv(=5FRUqOIk{qA+Yo~{ArGp%b?ARFThog2{h&lyFyQo#LG8lho`Cv2&Ast6 zQ8q=&FAnu}lFW`P%?(lRK~VM|r3omi@Vgwd+Joy8((lJqecM({vW++L`U!mPhwLir zqG(>{pJjNVmX#U1uAkMS_KGBjI_PO1n0Q%1uV4IK7_wWw6{coM5tBy>8*&w`|A19o zt75goCXNKUtS;kwi*;RHC-AeroMpW;Y3bxRFwU|ppm{Qc&NVGSXhEIo`s zrr?QtsJIpDScJ+6wc@p|B~V$u`t{WEF1~0#zVa;UAFV7hj{N-}g}NUNdwObzcMlcu z58j6kx(&gmIpjVwxZ77Pufxg8iC8T~`AwCj{)o!|@u5@o^gFvdbFkqWoroeg3i7%a z4Y2b#GW#|k4FaKrT1!f*$xBN9|ELAvfQ4+|#1C@4VpRP`8n)89RDWnT2#TVDG1Onm zR!O{M3DM1mVkIkzhA_U6kBTl_({(&Gt2; z_uA>6N-LYbyyJpzf$EcU(n?BU< zRUXh!MbWgqkVe%g$h;!$EZx7@d-Is=)mfPcEd67UuWFdx&+4rb=B zZIE^;gq;Mq^2|{V<^lpeC;IP;0?N!L11@5@$}3A_?O;Wbn=9D}cPV>`gE?Pog7#K5w`lhd?9qYx_3PJ7 z9XA7%ixy(d&X)(5;rP^@TPXfl^AqRW9R3-0{ED1pTbHv&yX&%VTDG|O@(B=-r?xgv z^&~QC>fKD+>Xz-XcPrP0_mh(NH?O4UA=s!qupkSV@cn78@YRwF@4I&{8-33@ulqR= z79%8vzL&qryZP-G`U*m$L5>1cG}wEsad245NvgFe8DyiDvk7Tx`Nd=!bR`%$XYvh z21Os8I(%jg+zpZyz8!b|`dMYzfD=C$Jh8j^EzNMF^X|B?q$IpzrmAg=F1-V@HNQWelhDv0O0_7k7AjyeT_kCQn`JV#+S3dZf?{K154EfHZ@4^n$8!*( z1Y!gsGTN~5maL2Cc|q`}w19tjV3|CH;?YkV&&vV}d9 z9s^O@4LMXwk^>+8#{d33jg_U|-kT~^Qc_aW(;G>=TD9!Hzrj78@BNuc;hZY137v0o zdHZhFhv&W9pS9MO&jJ`(#R=h-Mh_o?m<+w%e_^vXHV%-;rx{KHGa%;eaIMn!X~YSx zhgJQ0=;MVYgmOMz?2O&7pZ`Uw7VbDJ^=%FzVwmKM zlI2kYL8>A*;Hfhw$Vd;bvOYVh<%&n}1phmtvMPo>$I}vz>_e?;Fkxh^YqyWRj%IMC z3PELAufLFVwOadD@5_`H?S>~2Ac4n!-B?evdhgx+1|G4)r>CcTK4-miDX)l@ z49D{=LbEBY$=k5BTa-b54v`?yaMFO-U>t#4*u<**`RHpY&7e1YxZnBwnUCGSs-UTUOz;Nu6yj=>isT! zv2mFNEo^c7mMG|yoZUHQ*3g?xq$aKU*j}qzN1P>xF-3)^tDdNrb23UglkTOf!ETQG zN(*EH0y65bMKh)CM;c&6^`qt)bW+iin6>qGFT1a(I6QIUl_VDr$T;uwc6Wkt$sxjlQ0ufx&AwHn#NQ;kh}oGEJOy4s7+em<2_IPC*$|^FeX* zGhteKiWhed1%FB8ZIg7p>!$~3Sa?g!)IzSM z<3KGzE9*M?ZC<6%3eYPfC51oEyv>tu=NiY%YC4`bD(5JgtHkyoyL@vCtn0U0Z4)I0 zoikL5WGF4w-m1BpV4E-|QABE=Qwd$*g>|LIxCFTQqi~1s3tDWb`pL!y=;Y4IdL_i z{Sdt*_#*bVjtKZ-%(n8txgfeYxKs`@@-`ubYuXLfr641w+ysZ4C{BRdm9+WsCuQy3 zz%wBpeQGX&w6jSvcb-h!lEcbtV+fQ>9mG%7bBsR$xi&Zjd`rtoyNr*Q6%;UkCf`FJ4yuN=yqp?|-ig$6pth z>_T2dpD@g~MbkgTDOkC+=)YpL$z%+op@}lxuD4hO#^}%Ev3u8DJ8tQZHz*>8aO$k$ z;rnqFV9D-LlK~5KLD1LN_xi!lxrNHi%nZsVPb{6S^0u{l6XIPVk*|h87dPgnc((nV zFHiZHmXlvX}d8!;9+uqL_&N=9vf6mJ4swchdtdMod+8$-YAu`n&7=)<&za$(61LIE?*4;t~6%ii~JgFQw zc{ERyS{X@3K|v=X5;wA)sgU&|IEbcJ)6v*uy#Zq&(6GCBgfD>VI$?kvBW*_v3I)p- z=s=QG7^WKN@capwr&U%re*b;#Pj3H6xzu&=Hd9!>d)kTRrv;acG7@MX7aw2od_3p< z+08>r$*x=5f21RbCPCp_#NejgJR-EO4}Hq&i=fNy^z5wm&*LERPh*+=N&V50gPXkD z7XnmxJ|fgu_-~|I&~0H%t?F5})8t-6X5V9e*S6a7KlE@i`@hj13g^=5gEfXY z8ocgy40ux*@2Hh;CE(QIi!JQ;r`tp*m2G$H44=chEmznn$c)-AqW#ktg&vZ3#rMj< z?PSH^^LhWH1Z4M8Rrstg288H!8m{8rAlTPR{wh)0h)K)5c5(L%Gnkhonkh~xPNmh1bX5N#()n1pbOI( zJeElXOw~f($4gYpoXy!?!`EJAg8im1n-)LBcEeIbix0okbJ0d)2L)6L$d$1G{}aej z0f4o>DW#^*4g}`9W4aGJR)9Ulo^^_TQ6PPxnUx>D(ca5zgl){#lpH#SfafhDeZySm z&6_um;m60vA}`m9 z*Qv*xj`{Crf6AVtAimk=Kx{P1RxlR6pWVbthfyXWf}P@UrV7n?w%ULgPWHR_Q#KK% z=KIdh&fMbS;-9F-k}N43b7y8iew;^`evmI~Yi)CC(FYSgGlvaqo_*aH!h6m)hyB(wK9GR<){D|1JkvaCV3cSye9;&s*x)5EGRz_B4X!k<+VU!1Se}sllfQ^nF-Wvk|fh-+%!BBP6DkCw@*+z~3 ziyx$&rx>3mGW*vi30_=Y4&h-9OQFgqUH2!ea&vP_)ah(ttv-oFN(HsH3SnYl0qKun zUWItR5l#ux6Fqx&aBxssQ)6jv9s*3Q60)eNDNP45P~(3=33}|^6&d_9U!Nfdb{yjF zHcs#m27n&G1frsk%r>^R&q5{qKxc5+KLTPdFQHESu}ss#PzJg$;+vVe^C_u}I0;Y){AI4KnkFpa z6@h^$0M@luBj@JiBqh;+X0F>;n5}(Bx^58ARsiSzIc%@DS6I~pJn8#-WYlD`fk1V0Sa@gUrN>VLRBdWwU<}>BJb-phNa<{>tH+zJHJ}kFijI zYIQ|-Nr~rKskj~HD9kUiO&f#kb^2Opy#zzZ$aX^8W2UX&V}0JkAD8L>NMcNU{DhG2 zt*acdG)^cg=xUt*=FZkGTlY&F$>Lw!d0diWqhJ1u#^>5OLeYn=GyECt3-rpH&rPOw z-Zu4~JBG0?!YR;`KTPf8UL3ncbHKkl>9J7jeL{-bAoKF#Zj5U9=MiFN>N(?3HpZIV z)aHm;LSj3=R%v5t9gEMDyd#V!adIh;>CLlAKs$I}Pv(>MpZK15ukIfmExU0|rc^No zeVbBeU312%jJ1L)T=F%WC!e|Q`&Tv8D&>ke803f#S*Yl~hp{oMl!4igpj`^k{F&nU&9(u`5tls(WKDbY87q2nKo znyI7z&K?80M|$ztPt`#>}GW519DXV+1(2*GJx%L`?dXbVU;Id(R<^9c#_rVY8Ef zQl-_w_&n#JoSi5^KM^W!k51Kr!z}iQ_8g5v9bo1MuuoslrzkgMVEHC@YeJP4E`wofr0kjtk+k#(P*^kGyV@nnt zMV{EHWf@A8E|DLgp8C%syilT$!|$gC=PQgdg=9cw6Q6sEi6uQcE5TCBDk|s+BbRor zZW>3PlR#)FqM<3kOYIY1bi0){BAc>7k!ehkZTjqxlKLXZ1m_8Y%YwXS!hJrSRI7kv z2@jN$lQT4B^*w15%^U&iyo_~77}-9(@#!<=5`LrlEdX(JHi*)ESlyPu5Sf}v5*8l5 zzqj{;6IUf$Adm*Ty~X!ED6jp=k1i1#;3bX%F$Oz$Nsx;+Z9`g$=(Ab9#>u%~A*;J) zc6KrU{<$R$gEu!fiKC>?Td4e(>Vmuc_hQvm&gaI{Sz~;3XCf~ixnI;! z6`QFR0cd!apEmsbylYo?*4Ebfb#*UmW}{~h88VbqJcA5tNMWh44llm)a$vbj@KP{n zFzSNx)gr`b#1vh45_dkC%bNmtMJ3`x21{j~FPhygtnSQpgtKj)39xEae(mbY13GM- z$)M=mmdFsvTHRdm1+GB2zMwm8;p|o?{b!}4&HR-+K-g~o)7I$X=@O|6#5#O~V_k0B zaymRj*%i9k9@4>0Se4{_&%#0P#@vyj>6)FGOCu39!>LT6NtLATo z6tEy$MlN_30~?*TK#7@sDc2tMPVHaeBy7r0KkOVFWPR2GvBnkENMi!esAR+8xX~Za zoD0+%ROVm(7Wkkg)Z|LQ-6W(f5x?B?oJ>nvL+{JRc zeEKpgl6A@%12c(mf@*UAU2)dQ*QQvsLYJW(C6zefB$wIpg}$@K&#%nPST@NMn^g9M zk!;XGrE2ksS7b^G_Xl6QVZK5;wIzwZQ#a-=j3oth@h2Gz^_(|As6JnBJ*@6Myr>fK z{`ZG=v5_@ysu7N`r~&Lh6=}h|TNPSG%p0HTkGF0>{F}LpU0c)F*I!J^V&k2u?F^mLHs(n-r5Y+l1Sv*|xRY&axlRAuKX=f%b9{Dm1BlKMu_0 z2k5<6l?ixWW z9kqGc9x)FAI20}}9$jk1aAf4OmG{mecTM&{5E0^H$}=W!U3dbFs1cs51^suttf*(p zYCBsk4Taj+*r-8M#Atq;o^r0Y3Vj>~JDe=^7X!^+KcJ(cY@7)s$^jmCm<22*F0SBE zXiznKE%|CyRrt-|$ra%44ViPNI2*Zudo)xZ-85hoSY1>hF$*z@BIiwE1I^3Ah$Z`Wpxnd&j4DY#w6uq8WeWx zHJsQ8?1Y>YU% zALneL%U?8$A6`&V5xx0VrPgkqd&&MC02rDq(gIYU0M-Zm5Xu>7gdZFp!dhLKFE1}& z*#g60y4vX*B0&q5-)NXM%p#-=IaKMV-HCSwnHH0|A+oHSAP%Uu?TlDb& zWb1;I%{MCZrxgw}Bido6PXXdROqUcGXej2eVjT!w1l_)CCM&&&PtZ?qn}A4<>`X_p z{(T5vj15Jxg~@>srJjY%rgZCb?iM?eyj4{uvZAuO#M`j2#Z)$fR)g_0&Do!wnXXbz zvfxfXz}FME02^){`V;IU`F;aGWrs%ooN#%#s+ucE6fxltp4PYdLaZ)7 zj)FaGy2fh8Zzt-9xpxL+G92v77--6*Hl;gnWD|KvOJT{dHTUYO^<3M7m*<;QLYAiu z?(`Zy83jz(KU7ct)i;j?r^=s?1e2)dovBturXtauin;$CT__8Gq8gdB!o{)6(DPl{ z5yX^W$879BfYplSjuY9J^6cS~)}0dxfU_ufp`x>?7>pvUao=ozVWBsUBFh^w4Bb(7 z%H0AjphMFG6v3gNr7L|0`Y|- zvj_*twOOv>{tK)%py@K;%BM)+aZpx5aP(Ygh@Gm2WF|q;GO~otEsx*x@w-k+^F4bb zjyNlKCZWfA!hj&$t66B*W_`^H%WG;)3HQ+=50(PyP;XDtr0Wf_K{O3+&1?MTG9ovM zEqz6%{Ota=R;G#H*D!B-sB@}i4@?bU;FmXKlQJxD?b55|`1Vly>gw|K^ov4? zR4H}36eVL?n#gayTCvT>lDf)iUl_!H9Gz*#p7cuu1{Kp9Na+`cu*fqerZbrZZD=}b zTHn+`Dx}I8xt8twqCEoOi)5|h)d?IO4|MXcFceZP06GAKK-1B3y=7bb=R+--!YS*J zUW8J+h|xDkE}m{?Ys_Sp2_^JF&p=InWD72`88SK?H1Um7F)1@f`>!Tv#netXwI7)$ zV#3i`zsZv)Y9w@alQwPSB{n)46;&SszQj&irxRl~7=N*^>Kpa==%>55uy=AOiR2|t ziyjEWR6=fjOEW4KBsA#_dja@ufUh+$w8sQ^(sgxQ6cm(^{ic6byYj}e-fg%(}XB+*luC8ht8o?GYz|td@ zHUUt9V@zC4^Q zWWvcTUUzFFkCkC2!2z(>@8(ZEFCRa`=f>H-b)T{F{JG_e7cZy;96Hx=JPH=hK1!4Ak1ns?=D;{*`D%{0P+5#>%PP-B{$UQ%kVK5m?^{{&An@_+bj z-@aeW+^-biMmzG(0e@Pk*S28N43`4@%w&by1Q zpI=vvN_Mt#Pb{<;P7^u3S!J!=T)O5RWn}Gjx5s~ZMk2^ldR}F~T}UctSFT&$yfl-r zjcl4(XOi)}D;mdNnNV@cOul%$V8qfMyG)Yr^E4H07X(8QL&ImIJQFl3GjBNDVy-y& ztesS7^k5|KqL<#Gb>GYpzRr8u%SO4>I`pZL*8nn4#@$@p5Fi;%^sjprQsGyv%Fbu) zqWs^1(=t+x?4=?nx!;8R=))Abn?3WDOU#6JD7uCR8c|g~s8rRsDm6epLZP3Ck6sl1 zDAS3Aprm`{vp5aEiot;)Ae6(EbiEluh1L}ksgQav^6_8KUE}9doDKMtkcc7D7p*_j zi!JCWkX#rVZ_9OGAL_1N%%L!E#>7{iHxcR$)aNaA3|qg2bxR}8KWc zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=ZKk|a5DME`M$IRf_OI9Nq^10J7G;T~C8OV9L> z6n=4Px+*im!yPb~si_(aVfKIi$1(r-$3L9S&6}7?%`Iok|6+^HcYdh$`Cq$#I~(uc z_kVG}@425}H}QSldR_|r8=hZFf3NSno_>7b^9(nBe%;jf9bexYxvv}F{{=l+KdPkA=e-O#jjz#)8%*b(+dSFt;B?@89(qLC}9b zbpB1x-?}aYeony|{)xfAH^U%5P4Dxswcic&laW6^nP08H{GW~Q`+G(B#g_TC5kLI# z4VQj-J$yaie}8cJ8j=6`jkm)ET)C(GOO@rQ{cb^f83&P4U(1*?gwB zd#z7Cd%X-cu@EWbP*|H5I*S!!!hcGv_)t$F#gtM`B~_DJ>N(_?Q_i_$fm|=4#F9!b zrPR_&uc5}8YObZ$+G=mU1u!tR+)AshwcfqyJg9T8&h?#Fh96tl%5(Fs*b{}asSQNm zv1M3bB)O5#>AR0JXDTr;mAG5UyOTt04yUCO7XKdI!G6Cwuf>CSJucI@>Df{FG3?cR zIoRef+wZ^hQ#%1@>u@JeJ~FsbOW%JnDTU^9VwNtlFga9*ooorwy8N$i{dJA`I~V=` zjs6dARQk%ht-TW~nn-VlcX#Qhv~flaj|U|dzjd?5xG&T*;+X~S$Ubeo!Y_&cR!RBn zA}sl{Q|_c!4IkdKoyt&LszuknS6chy+C{8zVSF!)cJ@*GiId;cwxJD^{Aeqb)XE^D zxkC$c&EZDz0=Ur6+OxU^X>9|}0K^bQYZ1C<`LP>_#3Y;ZlQz>R@dru~ah88U9(C(~Z!HdtJYYy&bOLLLBt(-9`7f zw=iGh`M2-!jN~&A^FJNQXCUUkJ(7SYKoh2ZPHmdn^JsjM%GgV4@&-HZs5>F(wH+>XQWh+LqYaxvi1fuowuK^lp1X8^0#7z>e5^ z19GM%K~|g}d(R-6kWPn;tc;UySMyRt**LMEQ9cs(>{#a$M7=Q3CO0Ii9})~klmnLlw6;RRS1 zF!;K-qnl8W+R`SOoVv@6e)#?LNo&29(^YVz@p-kr1 z?6UzySwkBDuC8kYvr(7ak4p?%%XI|IxMOK|ELme|ys1Qn@gQ0XGN7)cv|wHktezDp zPZ-2+qrkV$hVs3SAUBAuJ$K>!*vc&0nCN1rN zM<8rSMoWvnExCgQHEa|&Ad}& zu}IuZplLBdcZknY4_JtOIh9&a8R5-@eBe}0n!^15m!UB9J^8&RfUtA<8VMU^Dx~eh|5wK$8=M|=IF&#oUm2oOg~5bW$3onYfe~JVi`N2VK^%B!tS*6@ zJ1%Qe(;E?Y#VPn7=Iyx|oQMS59tq1jVF+%bVt{l|>tg0@;&zra{OtxQ0l~U4pP$nQ z<8{f2L}*btgDi+MEYfO+%Z#mX_soFMd|;R$!)=(W$D0TKPS2+o;ofx` z2u3V^0PabQ1~Z|fFR)ipOVzsoK9XtoDhx5BHRphn!$8QQT@Xc}1ijXV<95w8P5tV(2D` zSA)|)SBQ0@yoSCWHCB-%tcq$ncgdSw&!DINg&`%sdkfMzgy)o|4b~Hslb{DNfZwO~ zlF29|E0qGCHFt&&4)CeDoC<^yCfWtKu(l#GQ;o&vYN;)xhxU3z+j$4jg_c>Md5~d> z3lbd30AQNQEnEejsw%=!JsS=K!KkwpC-M~BPQw=Y5$+_;dIOPZVhVtU6o1)=+Xy=d z0H#yLv>Fj`fH`_3ACUkoYAD(`B&r)WiiP!tZ^O1$#A&04Qd#a!I_GUfvQ|S|hhS{P z6{D!o=Vfv@R)Rzz%#d-$F!rV`z>?-pq!?&2v?^9| zIM~CW*Mtq!lowIr0XA}kmCTYAmW9^f_YheDGSUrxMLy(hXt-B;1Wb7n{0eE6N5-jR z6U&@-vFwq2jT52ENZIgapn`>mC#r_UQW2(T2v`F{K}z4{x%G5z)q~2}NiU)=MWvxo z#G=_9O~`VJ#bPU_azKipq7B>!JVi1?r5XNSL>xX15DnYfmQ{J;zz6R})`av8PLnaKC-;NzNFf9gs5Xf@d%Xsk0pzmq9GO5501GphT zSinyBW`M^t3OI0-a1q(T3vlAe^B63i-0^6zO8^yN&JZ;fBbNavAaVpGVw2QVi&fF4 zLw>+VN3v8&l2k;*6wEM)y`=2Ng7|>zZEY9TX$_C@mEbQ^svWVlRo76KK(w>;K*YXC z47ED0m0G(pF&N}oY0#!TbpfN9l9~&jCCcOf&CR|r;Ej4Y8d{6-nh+UW3f?L zmpng6J`-a@HO|q_jrb+jm{BTc+!_p;?@z}u|DA%PV)>Zk~U=q_<_zXH2f-tN>8j{VS%eF220{28F zp>|b3y(J%bEJBj(0t-h#IMt9hxaYYm{sg_KXLzXned!o1)^HMWLZrMt3NK}$3C#rmd zMj6`@;ZQIZ5w|sM_^r}qzQr57Mgnx-MGj) z1QIIm$E)T(5AFrejU(U3h4*PU>m#eLRWXn^cE(?g<@$ zo`LRqenc1msZ(T+fI%&$27av#a`e1v5)ScdWaWnEW2s2K<~iZk{)qd~!h}%~>Cw5MY)2+&ack$6*{JNn zdd8cvxY5|vW@5BW*au6LiQx=8R}~D!4o|!}Rr}hSsJ|^P+BL}1!1qboj4~ejuDvad zA|W17J`=J^f|7^_HHfu!iH09JT9hn29$<4WqE?QWiihYrf)?CeAbVN`vZ!h*=>(AS zBCwhKM~G5?cmk0l&T) zsTk5OT?;R(;l{ICtJ>o*Pn4~%D61m;BnS_ca}e*kt5YFCIqZqG1u<0e1vE3=;cBvti@80blX0pcD5ZbB@_)9~p$B`qPa-KYQwE0iZfzRLF~hcXD} zL8y6P&5Rrh1n#!V%<2O$gfl9SByUKU=kDn9sj2GIwb!RMwsF&h#22Lk_2KOYNOe_g zG(s1^Y+|@EQIoOdKF}r0wPZ7h*6LouLW`Zi_)G6CL`{VOtg{9JX%VABU(BJxehCI| z3R&`rOsFb}s)pPUrh~i-ME25~Bp-M%_C5{f#~6y*eJQ zUVZ+uH$ghtm2onaRrdA_iC1xl2ImcsIea%Jr{Ono8nc&vHU zH8$>sx0;p`T(B0_Fi3ZW%S_tR{<(TrT0pVz#JO3o;osF!uL#D9!s0 zexCp0)$bqpexu)C`tRNP4>$UYTUSUUa7YA|g)S`5?7!yDjk42D->x#*-?A9DCZ@k$ zBS=fH29Ed?>LQHfR~9{B8;~4Tabfr!5QY-L$yFCRONErAqCLc|z#*M_aD0IA9_jd4 z^Cfx7s-jlKghSI#)Vz{_c}uY)s%$LWLEL@bw!Hd%gx~HB{9|q9h^h36 zJ;pE+t1-Z=|k0;fU~jc15?!#{t0p`BC>l=&S(G?GtCx?D@oy z_hMC&Um&}<)aR`>71Quv5(g9hY)+D6P-y8-D_PX)rV?3WL{K=gOL@{;F<#|D-2SMd z>~Uey&b+lt1MF+NpLj=X5-imsE2llmC;rE{>wPMIbRV1*&33Hp5n*H@R?#Nd>Aofq zwII5!YOZiOvK8;ohK}-&g|;`ckPCmd(8B#Ny|&h`e}vaR9-4|2mn7I~?n|WXrQVgG zUPX0mM?|PPS0Eo4tCzp08W-~F6$+Jf8?Z@+d_pUX+kM|hS|ubc0?enBk?*=7=T*xtr*fl)pidN&TxsUZm6Czz;%Fuqf9we zmxT-Z0Ih*bf`f{4AV6#pV+YJ`wb=+`si;=%^+Pd(^gj{7ptR?93$Bqrh)@{Z5G1wi zplFNW+R+;I7kM@D=SN*20JMRC(gn%p&EgOitu6TD)+8JN6v-T74LvY%I~WPnFF(eM z?!jc3y~j|Q{6@e+0~GNq;*Z+wBcAzLTkr?d5F5pjOWLYr5$SQ3IgPemZjQO!!hP9H z^{|dd#dPFZCI4+0`<#$jRltNXNW2|==!lvuKFH(NE&LO+PBW8uKvdHdYtKEd>c%;alB=J*h*;yOk@UE(cuuM=BgH@ZB+N5nKp+U@2 z-wsK!pe>xXGAmL@IZ=iqW5Ew0MCwo*F>SR9&!Wtk)D<(gZvj9qIhfctERU$Es&WH9 z{3f5x@$T+21gDLY^AVp#o2~`0?Qlc1#m*k_QmR3=U^rE9iV9U>^LEQcVY@fpFsgU0 zhT%|@_^9lvzJr>OUC{2JJznTaGTd7HW<{; z-bEo=+p0^cUW1S`Rn5G(iTWr&Ve%D8d#Uxh%28m@6}DaHa`@_2aga+$2HN;^JAjhC z;`kZ49#R1TASGKp9_Tih#*x8$Buxi}avC5Dn89-zUXoNLGu{e_Uipf?ugQWLcajQ|ib+9N{R;D&xd3b*=qQ~*;SoA${NHb|DEZS0&I zGi|yfXyfv8yIvN);?$xsJc5_$Mwqlp6Qs?hjSX|~e%RO~SYfHFsDD*MLe$}1XiMnt ziXgaM6RLv)!ip`fYDIS|=mwd#tJH%&j3j{JZ9ft5=L8*aIlM;450JH@ z7-(lWWG|>h?Y|xE21n#41R#+Z0ROJ05wacR`wMQ!<@}u%IWD15wWSD~*9OZ`=R;dw z?OKG&Rwvxn=1N?uWWti7Q`6T$xQjw1(p$jj)7GeCXp+<0FnqQ7X~O`PRKp81AQr9} z$g6njgiw=^PrnEOaB?+&si!w;i+dx;Vg6{2-kt$%(Yru24ru&Pal)x}I;}+#OoSR7 z8YfYGPP?_t8BGgvF%rZ0N3V9F;IYtpfJR3Tnxx3eADF>qh>8%(iE4A^LiM_wU0HU? zXl?jvD=QtSN11CsAjeCplqt~DfAT=uScATmuaUrp0EzbP=wt4O#8HNsp*22@RK2J}TbDV*QYHEd&i#S-b&DwQ70PieXN(MCoPpC8-rc zD2>fXeJo&9`{z^%>AsH*MdZ;|tu&KMWcEiCa;rZFu$eL~zMPeYu!2WhNibs-URL^r zmla48Sv*a6l&FmHorx0Ek^Gdh4%47tMQc=2RY&WADCj5((u$c^@fx@Wq!QayTl)o# zqJ5Fs$QQ(5AWBi!Ss}Bun^OXLJ%S@|*;E=jZ-|ZBqzbtuf^f)5mUj17uYoM^Gwliy zV)70(jyCN^FkQ7Nb{&(6OiG2eOkhV=<3L~Fk&Qr(I3%o@u`Kx(Kn2Xl_0>F$KKGj#Zu-bCe2cznzYDtgXP!#rkUC3}fn3yq1(LGFiTDQtBHc52Sn%~`wmq~eXaRukmJuD&3t$@E z^xV~Cx+cG~tT1udYY$b8RD`Hq>S8uPfPCsBUozlxXp69gnqhrYGo6v?7X8w8c zM+JFC45FfnMYc%UDT(hYqJ?Em8JCwZz}#ZTzo zs;kb^&Qx{43AItZPLaU&sXRbjO~fG3h*n`GC(t!WY3cS^M&vq}DrZI0 z>cmY|UtCvrNM22*$f5GoE#vE`7s}<_ZBNMl)s$SRvpCzRU9+cz6Q?B~BEqGVL@BNG zIX(}jsX3$EwhwrPc6G^Rh{cS&uU2)UC)1LRy>_#;#>jYw41$Jx)$b4zOSJ?w93>Qr z?sNCNz@zvcw18oTX#kFh!bV>wXnD@CdTppg)pl-;R{2#0T~wwjdUf)g4iD5;Sxkk7&nRkCI-ofe(p>B2zP?G2gq4~)t9PsamWi&QMmCk!7txHA$8RQ%2`dF zjA3qp70aVTzwU0smKAPyf_DE^;w%U!^>g`y#+$RNJCWbbfQ73YC~O^6vXz)3Vb)EaV{>Ep2zKZI&P>Qty(I_<~Zl8*K# z9dg8c&n}%Zk8*~+%hZg;+xJXQiHKSTgl-%7Sevpc)y+#`ddqN(kZ9#p)kjJP08yO*bo`!a{3}DW%#~}7w z)z+5wueGZOZ_$=W)-mR+#z$_6pVVfD!+@arDB5>B+9|Kuh!PzY@GXGN;PY7rmKGcY z4wpbkIn)(PfKn-4bU3J*J;Cy*T}Wm%)Es7DS5S*8cT>d<{V&F-BraWCffQyp)Gdy6 znmPmACT#$d@=tp|r#h=)B_Ky?$gEo>2L}UlO`WJ+XA^Z2fuybWKpm%&@+tSk<2`u< zlrrq7Ys~HbxUKUfiW`if;+n~7|MT@C5>~)}xNWTy0@YM9g=t(PCPMkB?9)%yKAv_K zQOt-m)R$_kUidh4k1EnLbx2@qXB_DXGv^gm@!%}DB+}0~LL`7$`c?=Ckut2>9@KrQ zBGC*;JA^*|(_GoMJ?H}h>o^L7x-G<9YDm8;xN&sqXNf7Fb`u_I>K*xSXU?3 zWnDEbUt3s`s?VlB2T1@nH79R@#0>zQi?9GIEJUYLkbcg83e+mcHLfNX*5{-Y;2*44 zQ^%|gCB1JCfz_swQ!@h|gl7_lwre2op<)s>nzC{w90oL3W9KxGS$#nS(R7an26;hr z;5{sA0ny?FHOE_)F1Q@}&nF!cy46#NU1)c|!GsU`kkeF7C+Juhopy%R3>}ZZ8}47* z?LAM0)6*vN?K<fhnL+V?Ho?4Fjx zkB(N;yk}8C|C&62)O8toLj7QHi@oZta_SV(Ru)xrJctP(0&EMmF`_QSj7#-LbyWMj*39T&UC+NBb0nV4XYk+M?#4r z@oHE%KB>$D^SK9DiI0tXSUSK)RO2vkH&mp)SwrwboDOvg!yHvc#(%g7DigNRVIX}$ z1_*=rhdqzW<*M+T03JG0GfW1oM!4GpNu|MY%|h~1 zab*U18PrkadytUG7|Q%rUlny!sX$~QrIQ4V9!5z*tc*qcP7M}y}<`vA^OofGXb?@Bn7IJ1iYE3W? zQHB`F(ItH4;01I&Iz_57Z$gM7g*Qk_A zp4Xv(f@so)S_G4HOg85GEl}h`jI-fBN*Iz|TFZ*eV%hMI0Jf&Pp**1CI_Z&d;B z$420w+@N)skoQ5q+7@>eqU4Up6C&!8C1%q^lmqqzrV9OndaG}c0bG_k6B@H7BeUeN z%cO&faK~~R^>(qU9>=a0Z(vxhi#ox+v`JLR(73z;0!}jSmK-^^>kN~QQ0v5wNC!@kgR}TdpXTmk)7~1&Mmnr1g6`IN3OQJs~IusjFnp5@P#hwL@G4Ikmx)P=FpI_*Wz`&iBW|CMIt37^|Z_c!{$7HmLr@b!mHFcBVoq)GG%>mpL!aY;2vnF1Y zb2?QcmeUu&Aiv3ZMaS-l1f%{u#NNC`6h=S>SpX3J+*JxmH$Q1F)MoN;6{Y<=SG#T{ zrg<9K*d&re4qmk|hTLKFJvEd%mI?5)yIFC+<79nqS$}(Fph^vk(^R*Jq6dVN$HGoz zc%olmGH7|=K)bX$EDJ*Y;m!dKX>|1K%W&inudl@5w%YT8QtPzQCA!3y^E%R0<*fQj zi27`?RbkmkW~xl4t)Sav;PWA*vcCI8UwNZbyxLkIA0DCJ^SD4@Gz$YMUn9_7w!R%j zRV+2F5C{ppg)RDgd%0lQK(H&{KI49SMc-(!4LGO%EAV|bHH)eLlCi7n8$dy%Ej8Fe zT@f@o;2984S?5t**9pw^v6%TXS>ugXZ!HfW1!3RPF4WYiXe#%S2tzrk+X5~Q<3~a0 zI69O`hrHAepzoh}3RYIdmSu596$g=ianz`9k!fEyPro|=GE0e{#5Z7f5nm>2LqT+g zEO-Xu0xv)zR7p+u8xEk$7}NiHFY^cg>a(i77|?}O2H)b1l=v-DaH$I@3v^?!7_%7t zeuG83s_7Fe73O!5Jy|i+_AN4WNW1?!*_}+mFTu}w^c4u&zk!NH)mce{IBc(82S%Y~ z|H2c@>k0`br2_-nJ==h-x`_Q#2EX6W(%$c9S!zH5T`v~vaPLOP+VRmMbFZ?h=@%XY}*K|McH~ej|M)$^m$=-Yvpv+wLjC9!>EM zOZ}-#()<^!IT&UgWs>;-00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq7>3`b7DXx! z77=mCP@P&36>-!m6rn<>6oM-vh{W<#7yv2ZkNIc67(R+3fXbK;mu7bJepURz9|O`+ycF8Uf){hIDG&z)T`7DaBv8W6)Ah&=iNP>efzhj)xRH_yK=XLTdKPN z000JJOGiWiQ~*~1SEwv5761SM32;bRa{vGf6951U69E94oEQKA00(qQO+^Rh1qBu} zD#VOlSpWbR4oO5oRCwC$oOy7Z<(=n0@7>+6q?WA9hiplfWm{P0h#}Zazz~OXYeGSW z4Y0)!lXJq68Ip0>+S-3+Yilc28{*WaQdGRu&NAf;GIxL&LI7i7u(4x|ZCO|rl66>T zOX^l%Z@=gM(cQ0gwAwa=)Qp#3RhLw+o^QX;^Lu{J?|vkZqpxn+^2>>diAVT?7Nl@l z+3vl2_ud8|=O3D;$=KM~7u+dAnx^@`i(jzg(~-|O;R{||5cx+HK|l}|W}oZ2jEsy> zQ&WR1%U>|=ddkn{Q=ZzHv0p%iMtm}E$wq2ZY zg(U7DfASL^e)wTdoH)VWy?bd~xsto@zMF73%=drrgL&gsMIjsxUo?y}EsIzzHcy=u zH4dKVaqqqNa^%Pno_+RNT3T8-`SHiR@WKn+eDlq;u3JX|k^BG4IOI7x^Rr^b3Mwlr z*|%>Wx8Hs{TOW9UE3dqgwzf88S>~E+u9=6q*w{8}T{DD2E+#FJNCd+$SXNiZ;NT!T ze)AjB=`^kD*8_0o%$a!@FK0+D7V#x5aQ4lZ;gR*d#L_Ch7C?E)Uu16pkAQp>JqU%_; zjUU0$90iJ2_s_=3_d$+AyfEug^-9ARq`LhLI*54wE(v6j|n- zci!R6x8AyNVO z1OghSWo7k3?)zm~CY?^BY8syFAqWDV=i#~zs;c5R4gikhAW0IUC}GW+m-j1rOoH}(1%d)s;(+dI^ zX~d?dS>M{4-Bbh+z%osO!63HnAc_K~`}zv<<(z&)WMYCl?!1#*Z@GmH8#d6>+e=$p zo4>fZG%`9$DwX=&kIz&z%GDb;5{<=ZY-pfm-8wps9_6EtKH}PIucf1-gR8E(iby2F z+O=!hvu6*QrV$K+5fgMWa_2QuYGS-Q7)l zdppOE9mDfH78)l>(yW;7b8|pt8Bq}E=;&a0c$mvquV!OQ3q8Zbq*5uu;V{W$lA4+t zHf`EOEEZ!h*~w&blv5r3tXRIB^{uURc6Js#IllE2MGV7007^?syUz>`?mVY)_;hCI zFJo7i*VVDQxtacf0c_jmipEA(sw(@JtBm$#lNGwIBZ?xGm6b@6MC)~R7%^BJEMawX zGmVXn=X_69RTWdwXmNMs-xDc{LTPC!sZA>#2kV`F3V#)lZ~Fz`H&H{N)I>gsA7*DX3<&+~lauy*a*OYXbxzNHU7_~4KX zuz&ylm69Y~4sg?rH&Rnui>~XWl1VBmDljdJ>Z&SUd+jy0Y}rCQ9w!!yVObWst`m#J z*sx&(yPkOl$8||05_q1MvxuTU0mpF=MG?nw5Cj1+=Y|M^;7>k}$&a&b8%dI|bILq# zfm5jz@kE096)WiM?BuGeu0mhAmU7P{5C~9OTFPy=-Nx^K|9d(+JBi2RsO4u5SYKZs z{R0E2ih^aD{v7i2%D-nOQ#DPiKYaM`24GkOwA*jL{qHI&D)c<)(7}Uvt_y-dBoZNG z7>tdL@!Q}2mQW~!?Kmu5wv2{`1~Qop|L33onTm=E|D}qepePEOrlBYbq9`Is60$7& z&s0@K(=`8?EXzJdk|ck8{+TSxsH%#pswj$r5uARa${oSvQ@1mNwr z-s0^Up0YPXDXv(yjJCG61@%DQC6Q%$mTt(4e*R}ZpC$V!wViO16JA{y16MnRC_I-us zm0wqWokxxw;pwNJ7G;27Fi2TAJWGu892d^Z135cNlq3Ryz~^op1VJDi4%5@qgD6R4 zG8sxsOPRDq0~lOiMbdE@CD;E)z5=t1FnaEsiFl{_$VXkCP;yFPTh+ zva&KZY}kMZB%glz>Hi*yM9lo)JMOrH?|t{X-1RqqLo%7fb6sr9BAHCG^;_TK()H^} zr_%tWQYr4b>#o1JJL0%5@pwF|PHJm?7X@G%jb-IJo2x~dS5{$)BBp5}2m*Q_K)2+P zSrk4$p_utj$KjP%Uin`yz4X$M48+&3U%zKyVBo*zC8x5olK;J92d(SZ^WXmIpC~OY z<-mahw6wHf7zW??#y8l!c{7ufleD(B($&@FOWj{8trUw!nVz0za%#%gp?RH{F*`Xq zGRfj)%duj;oUVw{_wi76ey)p=$)IT3c{}U=+5~~Jva$nxeSIS$;BDW&{a9>z`qliv zWHQNjzVjWvwq=W-u{e6{n6K<5Nn+1C@6g=bOe&Qk7!3a9^JId+)YKG<7A>N*tc;}T=h_h z<;#~dF)=|X6r!i6hjr`Lar*RWjNDq*u3gK?lPB>!kASAlOO4H?JP&GWYj?l@-g~nO z(gGmP$n2)22<_bkj|^o`+-Gl$4ZU7=|yY9-yfzu~-aU*RyVj zC}#Dj;}8l4u`CM@uygK?lvDnBYpo~>-QC>`4i5S*g)GY$hCypZ|A$Li*0Ov_^9)mQtDwIB$7g1|IQBuV0rfBYkF@7XgqA?yhN zzy9^FFYoT|e*bsB``tWqc+Wle(A(R~6<1uri4!N-vu6*2An>IxeTl<|56@%V(xppT zy?S*nzviN8nxC2x=H%lvP4oS?{P@E8IMI(FW=gx`I9X>n=l2y8)( zU0q$7rluxQ0>aNf|9n>@5($3z;fJ#rFfu$$Yilc&m6g8LN~hD=qoF9g`|i683=GVw zF^HmgQPovvW>FT`*0OEew)-k8E8Aos*wxj=$jHbnSHjI5m-hB{KhLJfvTq<9$I0p? z*PVsC7>k3#4BzqS(WCVD_lIPFL?V$*))g?#1A~JXmbAPW>#DgmIl0_ke}6wR;0z89 z4wROZH2*o4?78lOdHR{8sw%p!e{O3v48xCZJ`2qZJ2R%q^z`(oEXx@gnCk26`(8Ye zcojhieP+f1)_G)BE!!sfITv;Q9Aw$HFLAExa^%R7e`srK>y`m)Vq#)K)wBr#LVQ6B zOP?slhlhv907C*eb?VeaZB5O}L?ZF!FW6J`H0^2MyZ3(pZr*Qj5CrG5Dt2Ah{i5^5 zM3!Y?WHJcg0=6G=?bxxS>BvVP-84Ef@~OYPq@;wg@$qcM=^~@*>S|<3qNSzfOLyLR z=f)rZ_{RriK<(-2dC0Nt#M@L!N)PyWa3=IuYT3YHClH&0= z6B83W_x$s-Fe4))G&MD$X&M6q1KEC&bQ-;+gcBVd2!gU2| zs;uPDpZ+ut<2Vi>T}R1Pwgf>yl4T;}lOdH#NdmCsp@$yonV6gm z^!D~+ zElnY=YYq}0o8XyaE`8RyF*i2re5FZadUTSuV=jaCxiPn_DPdEiN_1p`wqqVcj#$v> zg~MUitXV^8NeMkYJy!|9lArzTXFZ1x9}ax-$tT%>{Zm@Tp`oF9&;Db*!*{ROk?aHr z0#gZ>|GZnGE3@#T?p^8dz;!yJod5(T;x0ekEfr<>->!1_+pnC(jK^I5@imG5A`Jib zYKMFON=LA=n9-=qqpwK}&tbT(>y(GXtX#R0OE0~Yj*gD2#JoQ8vZ-NIO+!_b3;rzB z!hh=;2gynLn^93Ba>ttD2I%J1Hlm&M!|TdYkvp2rqS4At&9gDpVUatUietXE%0{rx zVrt7p?pSFSjUwvn>#41+MF!%#cI|r7vhDBTc}i7P)!8g?Aiz~uUdh1VAg52C&MM)S z7KVn0(KL-yr%ug^4d;^Ux+tPe(iE9CU`bhaf|_XHd0N4SJCqUE+pE%7WU`JSM#$MsOVz$z|H`Fl?wP$zg;vP`JG5*fuY|_+s1fdl*t!FW5 z!{$J*TlhVKfFOzk$z<|>c6D`St6VR<@WLmtXtaH=!F3>cJ9* zMrLDVS@sJ^g(wuz86F+FAWSe2Vq|ofkSJgR9s;tW%E8voNVRfjJoU9PP2mbmD?BsdSP+Ab^>}jT;#p9AtT29X-9hjE;^{S64^fvSoa5@F1Sj zHYeX?qy8Jh%>9deuIy(zmuws#A7|C7RYW2Y1X1LM8*V6?3CUzKei_fUZGyp|FAe$X zktj*1Gm6(nCWAT`V_68In2iP$1Qk z!^6XLc6Rd2v(NgN#~**3STyQ4Lg%|dRaHfnWqNWgwm*OT@w1qp|D5URY3l3iQB{@6 z$w{BF`5JEjzyRB~Z(p#MGVg-O%$n%SFTXsGAxDoM^^fP^j6#k*C)PDhlgPvbjg5^+ zGj_bDwwCwy?IV>+Q9kFEp=p{#qtWbbn_O?4uInsbvV{Hn_oFHbOP4O4jmcz)ClY>4 z>$omurKMC=RdMj(K~kv{FU<)L^YsYRH2rP@UDqiqE920iLzIQXIOj zV@yT(Lx;^%J;e*wy5O5-hA;N_zZ&kV@tWgz6aAyP+2$ATXEf2oD40{-E+E%L^SD+^*Cy~1Jh zl1Xqq2*Z6>!+64C_t?Tt@Q*h*Tw6Pl#gxPS8(}PN^G0OhMg8Q<4%bvi!1bsohpn4n zByO{3a$(H2s~t8j8VAp#q5{5s4Gg_zvo9tWbVp`6_cQ;HZ+sC1fp32En>_N!Biw!W z-F_#JE<>o$M|2mI(shfSSq`-%30%G0EP8O}Vq{5RV_l|*BzUyc%*H6Pz@{P?5s$Ui z&WwW!sv>aB0+{0WRp(gLsi~=1Ui6eT^EGEFx_};a9EYS~adJ#T*Pt$(eQ`XQ!F7WL zlcBbq#Y9FW!a-P?3-YInU@Y4qWmt@)B^HIU$pp{ym`)gYUZ|idF>Qxb#%5qxqNXI9 z81OugSP{&ERyBWt&2gMr-Q|)b;dvfihDTWeCQW;C!3BAq$CI56+}|=tT}}3APEOmr z(jnkcSVBF|<2T3a+1h%BrDa)6Bx>_Yr+_CcjCtbN3ckI5h$T79c+}>Vk40R`EqKYz z^E`fibUEL-beP&wIh&80w0N~k#8bTaj4S4jh@!|Pmt3+Sm-~zCfL4HUk|dF-Ze(Zs zNj6`ifu{59euF=yWJ0>IprmJNR`T2SF0O6Sa8;dW-Z%ItT^y6HZe(ZsDZa8cfUSgR zdp|>msi21zz(^9w$_94sJ;h(G4PZ(k{`I{KCoKhCJ-1Dk&(}JB8WIG7gNNTIol@A{ z?ji^Y1VKVol?7`SGcm7>&%kJEQOu#k`$?x2emCaKc#oQmItpP#kwYIIz(^~+IC>VN z;wM0AkUju3iTN$$ugnP7d . +@prefix lv2: . +@prefix pset: . +@prefix rdf: . +@prefix rdfs: . +@prefix state: . +@prefix xsd: . + +<> + a pset:Preset ; + lv2:appliesTo ; + lv2:port [ + lv2:symbol "lv2_enabled" ; + pset:value 1.0 + ] , [ + lv2:symbol "param_1" ; + pset:value 3.0 + ] , [ + lv2:symbol "param_10" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_11" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_12" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_13" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_14" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_15" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_16" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_17" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_18" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_19" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_2" ; + pset:value 5.0 + ] , [ + lv2:symbol "param_20" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_21" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_22" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_23" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_24" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_3" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_4" ; + pset:value 5.0 + ] , [ + lv2:symbol "param_5" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_6" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_7" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_8" ; + pset:value 0.0 + ] , [ + lv2:symbol "param_9" ; + pset:value 0.0 + ] ; + state:state [ + "KLUv/QBIXR0AZrOOIiAR9Ly6CNQEzyzK+CwIw5H3QvHuEkY2KVmv3eQESAkA+gOGAIAAjQDTgneRB8Qu8lJbrrWmliuWWrVOOmB3F3ms5RZbrLlXSim3Ere7izyswlRGy6IQGWiCd5FHJ2kVtpgzg3eRh6wQXYWjvICRU3kXebAniVdhZzIRJC94F9HodSSl3H+5+1qsux3OjCoSCgkKH4GkHd0OCNKoOn4dTKnWvUml5b3t2P/W3Q6BJKuwIzMmtLDCkMLIEIu08uca+9XqU3sn9wDH2n3/at9JO/ulGkmP+PtzLTlz77fc2f9y5U99a+u5d6qdveQl39jtVTgynPQqLGsDL3h31wJC8OGuUFLYLPAq3Mg4LRhDNg104FXYYSZq8zzaJfeWcvfum7e2CkeGd3d3EY1INjUGnyJIUmkBIbjAXLHHVLdvzdl7c0jShjGQiIt4mkysAzSaBw10mAhBAqWe60+JvX+7ZqtwZBiBUPNh5u1Vr1+FZZwJTxSdyVAIVQoZaH1onRiUuWAoEzmSgdbHYSJHMjgQYMBGFkjo4VWY1sdBkFFdFiZG6VTKq7BsMChDIx34yGZiYjbIDCmhhXdl1MAlGwjELhLbsqR/qts3tp6/V73gp3fPseav2h9bzZfFSeWvMfZrdVtvpfdqxdTf7dkzX92Sa5fcHVvtUmIt+evn1Gu2mnn7a/evuf/29Bxbyr//13u9OH36ZQHgVRiazZRwh3EYRqD1oXUiyKbGmUDrQ+t85p0cU6tfat1SBJQIgKeoEVFmAEZGIJowRhA0AOACAJAhIgMSYGAIQCBIYgADQQwBQzIMROgoATAAGCAwQgjB4LBBADT1bxCWZ3XXFUabMDuaLONUf0bQ7TgesmQFW2K0AIC4DIQl6tqRPtTyQ0noFFHLQLAATUPeplJl0koHLuVhRjg4NPbs9Wj4AfakXtrVG9Ad+CrbZ0A7Je11icVN+xCwTDBY4Kno85VOIgGk9RzZ1xnpmiObAcD2we4MScUkfADxZIwmSY1vfFxeBnO2iMzNnVOizhd5nU4xNop8kqWVGCB1KmgvNEkW+hzkks3EyByFzDwFDlF2lniRVMGMMof+Y3EQBeSTGEBSh4gEX4611XB1fbturqxt69SVkxPISckW8aolo/yTNVoJCBspCeshPp+jqj7FYS6yDMBKLRy7IHXc+R+MwTYm+KQQqLmmbcdm0+47HTL1RQKZwQ4vBxDovJ+HmZDDJMrAgYowZEBNGMD3FABjnGbw" ; + """Activated by parameters. +1 - Dry Level +2 - Wet Level +3 - Low-Cut +4 - Decay""" ; + ] . diff --git a/src/MOD/CardinalFX.lv2/modgui.ttl b/src/MOD/CardinalFX.lv2/modgui.ttl index 9988dca0..98d95eb5 100644 --- a/src/MOD/CardinalFX.lv2/modgui.ttl +++ b/src/MOD/CardinalFX.lv2/modgui.ttl @@ -1,6 +1,8 @@ @prefix lv2: . @prefix mod: . @prefix modgui: . +@prefix pset: . +@prefix rdfs: . @prefix state: . @@ -19,3 +21,9 @@ """Welcome to Cardinal. If this is your first time, make sure to check out the documentation link on the plugin info, have fun!""" ; ] . + + + a pset:Preset ; + lv2:appliesTo ; + rdfs:label "Plateau Reverb" ; + rdfs:seeAlso . diff --git a/src/MOD/CardinalFX.lv2/modgui/screenshot.png b/src/MOD/CardinalFX.lv2/modgui/screenshot.png index 8b81b668e8e09ad215b744ff36f444835ef6733f..016c4c88986250dedec0501843efd97c6dfba336 100644 GIT binary patch literal 114345 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⪻p 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

From 5ed8eb4731ecd51412fc19a9b43e608e810ab2b7 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 6 Jul 2022 15:17:27 +0100 Subject: [PATCH 150/283] More wasm things, high-dpi browser tests Signed-off-by: falkTX --- Makefile | 1 + carla | 2 +- deps/Makefile | 5 +---- dpf | 2 +- include/simd-compat/mmintrin.h | 1 - include/simd-compat/pmmintrin.h | 29 ---------------------------- plugins/Cardinal/src/SassyScope.cpp | 2 +- src/Makefile | 5 +---- src/Makefile.cardinal.mk | 9 +++------ src/emscripten/shell.html | 30 +++++++++++++++++++++++++---- src/override/MenuBar.cpp | 26 +++++++++++++++++++++++-- src/override/Scene.cpp | 2 ++ 12 files changed, 61 insertions(+), 53 deletions(-) diff --git a/Makefile b/Makefile index aefe6b1e..b7916e95 100644 --- a/Makefile +++ b/Makefile @@ -64,6 +64,7 @@ DGL_EXTRA_ARGS = \ NVG_DISABLE_SKIPPING_WHITESPACE=true \ NVG_FONT_TEXTURE_FLAGS=NVG_IMAGE_NEAREST \ USE_NANOVG_FBO=true \ + ASM_EXCEPTIONS=true \ WINDOWS_ICON_ID=401 # -------------------------------------------------------------- diff --git a/carla b/carla index ca154454..1ee091f4 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit ca15445429d7ff872fd40db23e24840cc6b90436 +Subproject commit 1ee091f4cc42fcf25d5064e6b9ebd569038684fe diff --git a/deps/Makefile b/deps/Makefile index 522e83d1..5d58d7c2 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -10,6 +10,7 @@ DISTRHO_NAMESPACE = CardinalDISTRHO DGL_NAMESPACE = CardinalDGL USE_NANOVG_FBO = true +WASM_EXCEPTIONS = true include ../dpf/Makefile.base.mk # -------------------------------------------------------------- @@ -62,10 +63,6 @@ BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS -ifeq ($(WASM),true) -BUILD_CXX_FLAGS += -fexceptions -endif - # -------------------------------------------------------------- # override VCV arch.mk stuff so we can build more architectures diff --git a/dpf b/dpf index c2938c02..b63db742 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit c2938c02994988bd5dde4c4cbba9951709789ee8 +Subproject commit b63db742200341b91358c14a7290104cb97d5613 diff --git a/include/simd-compat/mmintrin.h b/include/simd-compat/mmintrin.h index e0854bc8..ce019805 100644 --- a/include/simd-compat/mmintrin.h +++ b/include/simd-compat/mmintrin.h @@ -21,7 +21,6 @@ # include_next #elif defined(__EMSCRIPTEN__) # include -// # include_next #else # include "../sse2neon/sse2neon.h" #endif diff --git a/include/simd-compat/pmmintrin.h b/include/simd-compat/pmmintrin.h index 6ed77fb1..45fa3fb1 100644 --- a/include/simd-compat/pmmintrin.h +++ b/include/simd-compat/pmmintrin.h @@ -23,16 +23,6 @@ #elif defined(__EMSCRIPTEN__) # include_next -// NOTE these have been verified to be unused (included for ValleyAudio builds) -// static inline -// __m64 _mm_and_si64(__m64 a, __m64 b) { return a; } -// -// static inline -// __m64 _mm_andnot_si64(__m64 a, __m64 b) { return a; } -// -// static inline -// __m64 _mm_or_si64(__m64 a, __m64 b) { return a; } - static inline __m64 _mm_set1_pi16(short w) { @@ -48,25 +38,6 @@ void __builtin_ia32_pause() __asm__ __volatile__("isb\n"); } -static inline -__m64 _mm_and_si64(__m64 a, __m64 b) -{ - return vreinterpret_s64_s32(vand_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b))); -} - -static inline -__m64 _mm_andnot_si64(__m64 a, __m64 b) -{ - // *NOTE* argument swap - return vreinterpret_s64_s32(vbic_s32(vreinterpret_s32_m64(b), vreinterpret_s32_m64(a))); -} - -static inline -__m64 _mm_or_si64(__m64 a, __m64 b) -{ - return vreinterpret_s64_s32(vorr_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b))); -} - static inline __m64 _mm_set1_pi16(short w) { diff --git a/plugins/Cardinal/src/SassyScope.cpp b/plugins/Cardinal/src/SassyScope.cpp index 4225a1f3..df79ccee 100644 --- a/plugins/Cardinal/src/SassyScope.cpp +++ b/plugins/Cardinal/src/SassyScope.cpp @@ -287,7 +287,7 @@ struct SassyScopeWidget : ImGuiWidget { do_show_scope_window(module != nullptr ? &module->scope : getFakeScopeInstance(), scaleFactor); } - void onButton(const ButtonEvent& e) + void onButton(const ButtonEvent& e) override { // if mouse press is over draggable areas, do nothing so event can go to Rack if (e.action == GLFW_PRESS) diff --git a/src/Makefile b/src/Makefile index 2308b054..0c1040f0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -10,6 +10,7 @@ DISTRHO_NAMESPACE = CardinalDISTRHO DGL_NAMESPACE = CardinalDGL USE_NANOVG_FBO = true +WASM_EXCEPTIONS = true include ../dpf/Makefile.base.mk # -------------------------------------------------------------- @@ -114,10 +115,6 @@ BUILD_CXX_FLAGS += -DnsvgParseFromFile=nsvgParseFromFileCardinal # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS -ifeq ($(WASM),true) -BUILD_CXX_FLAGS += -fexceptions -endif - # -------------------------------------------------------------- # Rack files to build diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index b408cddd..a0d4fef2 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -53,6 +53,7 @@ DGL_NAMESPACE = CardinalDGL NVG_DISABLE_SKIPPING_WHITESPACE = true NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST USE_NANOVG_FBO = true +WASM_EXCEPTIONS = true include ../../dpf/Makefile.base.mk # -------------------------------------------------------------- @@ -194,10 +195,6 @@ endif # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS -ifeq ($(WASM),true) -BUILD_CXX_FLAGS += -fexceptions -endif - # -------------------------------------------------------------- # FIXME lots of warnings from VCV side @@ -210,9 +207,9 @@ BASE_FLAGS += -Wno-unused-variable ifeq ($(WASM),true) LINK_FLAGS += --preload-file=./resources LINK_FLAGS += -sALLOW_MEMORY_GROWTH -LINK_FLAGS += -sEXPORTED_RUNTIME_METHODS=FS,ccall +LINK_FLAGS += -sEXPORTED_RUNTIME_METHODS=FS,cwrap LINK_FLAGS += -sINITIAL_MEMORY=64Mb -LINK_FLAGS += -sLZ4=1 +# LINK_FLAGS += -sLZ4=1 LINK_FLAGS += --shell-file=../emscripten/shell.html else ifeq ($(HAIKU),true) LINK_FLAGS += -lpthread diff --git a/src/emscripten/shell.html b/src/emscripten/shell.html index ce061a3e..55f887e4 100644 --- a/src/emscripten/shell.html +++ b/src/emscripten/shell.html @@ -3,10 +3,13 @@ + + + Cardinal Synth + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/ADSR-bg.svg b/plugins/ZamAudio/res/components/ADSR-bg.svg new file mode 100644 index 00000000..7d387d31 --- /dev/null +++ b/plugins/ZamAudio/res/components/ADSR-bg.svg @@ -0,0 +1,284 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/Scope-bg.svg b/plugins/ZamAudio/res/components/Scope-bg.svg new file mode 100644 index 00000000..e3cb21ee --- /dev/null +++ b/plugins/ZamAudio/res/components/Scope-bg.svg @@ -0,0 +1,282 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/button-off.svg b/plugins/ZamAudio/res/components/button-off.svg new file mode 100644 index 00000000..c335696f --- /dev/null +++ b/plugins/ZamAudio/res/components/button-off.svg @@ -0,0 +1,181 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/button-on.svg b/plugins/ZamAudio/res/components/button-on.svg new file mode 100644 index 00000000..67311501 --- /dev/null +++ b/plugins/ZamAudio/res/components/button-on.svg @@ -0,0 +1,265 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/knob-marker-small.svg b/plugins/ZamAudio/res/components/knob-marker-small.svg new file mode 100644 index 00000000..46e8a138 --- /dev/null +++ b/plugins/ZamAudio/res/components/knob-marker-small.svg @@ -0,0 +1,119 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/knob-marker.svg b/plugins/ZamAudio/res/components/knob-marker.svg new file mode 100644 index 00000000..d74efc60 --- /dev/null +++ b/plugins/ZamAudio/res/components/knob-marker.svg @@ -0,0 +1,144 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/knob-small.svg b/plugins/ZamAudio/res/components/knob-small.svg new file mode 100644 index 00000000..a84c54b6 --- /dev/null +++ b/plugins/ZamAudio/res/components/knob-small.svg @@ -0,0 +1,158 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/knob.svg b/plugins/ZamAudio/res/components/knob.svg new file mode 100644 index 00000000..5a4ec0a7 --- /dev/null +++ b/plugins/ZamAudio/res/components/knob.svg @@ -0,0 +1,229 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/res/components/port.svg b/plugins/ZamAudio/res/components/port.svg new file mode 100644 index 00000000..440fd3cd --- /dev/null +++ b/plugins/ZamAudio/res/components/port.svg @@ -0,0 +1,121 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ZamAudio/src/compressor.cpp b/plugins/ZamAudio/src/compressor.cpp new file mode 100644 index 00000000..c52f6de1 --- /dev/null +++ b/plugins/ZamAudio/src/compressor.cpp @@ -0,0 +1,195 @@ +/* + * ZamComp mono compressor for Cardinal + * Copyright (C) 2014-2019 Damien Zammit + * Copyright (C) 2022 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 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#include "plugin.hpp" +#include "widgets.hpp" + +// -------------------------------------------------------------------------------------------------------------------- + +struct ZamAudioCompModule : Module { + enum ParamIds { + PARAM_ATTACK, + PARAM_RELEASE, + PARAM_THRESHOLD, + PARAM_RATIO, + PARAM_KNEE, + PARAM_SLEW, + PARAM_MAKEUP, + NUM_PARAMS + }; + enum InputIds { + AUDIO_INPUT, + SIDECHAIN_INPUT, + NUM_INPUTS + }; + enum OutputIds { + AUDIO_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds { + OUTLEVEL, + GAINREDUCTION, + NUM_LIGHTS + }; + + float gainred,outlevel; //lights + float oldL_yl, oldL_y1, oldL_yg; //temp + + static inline float + sanitize_denormal(float v) { + if(!std::isnormal(v)) + return 0.f; + return v; + } + + static inline float + from_dB(float gdb) { + return (expf(0.05f*gdb*logf(10.f))); + } + + static inline float + to_dB(float g) { + return (20.f*log10f(g)); + } + + ZamAudioCompModule() + { + config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); + + configParam(PARAM_ATTACK, 0.1f, 100.f, 10.f, "Attack", " ms"); + configParam(PARAM_RELEASE, 1.f, 500.f, 80.f, "Release", " ms"); + configParam(PARAM_THRESHOLD, -80.f, 0.f, 0.f, "Threshold", " db"); + configParam(PARAM_RATIO, 1.f, 20.f, 4.f, "Ratio"); + configParam(PARAM_KNEE, 0.f, 8.f, 0.f, "Knee", " dB"); + configParam(PARAM_SLEW, 1.f, 150.f, 1.f, "Slew"); + configParam(PARAM_MAKEUP, 0.f, 30.f, 0.f, "Makeup", " dB"); + configInput(AUDIO_INPUT, "Audio"); + configInput(SIDECHAIN_INPUT, "Sidechain"); + configOutput(AUDIO_OUTPUT, "Audio"); + configLight(OUTLEVEL, "Output Level"); + configLight(GAINREDUCTION, "Gain Reduction"); + + gainred = 0.0f; + outlevel = -45.0f; + oldL_yl = oldL_y1 = oldL_yg = 0.f; + } + + void process(const ProcessArgs& args) override + { + const float attack = params[PARAM_ATTACK].getValue(); + const float release = params[PARAM_RELEASE].getValue(); + const float thresdb = params[PARAM_THRESHOLD].getValue(); + const float ratio = params[PARAM_RATIO].getValue(); + const float knee = params[PARAM_KNEE].getValue(); + const float slewfactor = params[PARAM_SLEW].getValue(); + const float makeup = params[PARAM_MAKEUP].getValue(); + + const float srate = args.sampleRate; + const float width = (6.f * knee) + 0.01; + const float slewwidth = 1.8f; + const float release_coeff = exp(-1000.f/(release * srate)); + + // const float gain = std::pow(params[0].getValue(), 2.f); + + const float in0 = inputs[AUDIO_INPUT].getVoltageSum() * 0.1f; + const float in = inputs[SIDECHAIN_INPUT].isConnected() + ? inputs[SIDECHAIN_INPUT].getVoltageSum() * 0.1f + : in0; + + const float Lxg = sanitize_denormal(in == 0.f ? -160.f : to_dB(fabsf(in))); + + const float checkwidth = 2.f*fabsf(Lxg-thresdb); + + bool attslew = false; + float Lyg; + if (2.f*(Lxg-thresdb) < -width) { + Lyg = Lxg; + } else if (checkwidth <= width) { + Lyg = thresdb + (Lxg-thresdb)/ratio; + Lyg = sanitize_denormal(Lyg); + if (checkwidth <= slewwidth) { + if (Lyg >= oldL_yg) { + attslew = true; + } + } + } else if (2.f*(Lxg-thresdb) > width) { + Lyg = thresdb + (Lxg-thresdb)/ratio; + Lyg = sanitize_denormal(Lyg); + } else { + Lyg = Lxg + (1.f/ratio-1.f)*(Lxg-thresdb+width/2.f)*(Lxg-thresdb+width/2.f)/(2.f*width); + } + + const float attack_coeff = attslew + ? exp(-1000.f/((attack + 2.0*(slewfactor - 1)) * srate)) + : exp(-1000.f/(attack * srate)); + // Don't slew on release + + const float Lxl = Lxg - Lyg; + + const float Lyl = sanitize_denormal(Lxl < oldL_yl ? release_coeff * oldL_yl + (1.f-release_coeff)*Lxl + : Lxl > oldL_yl ? attack_coeff * oldL_yl+(1.f-attack_coeff)*Lxl : Lxl); + + const float Lgain = from_dB(-Lyl); + + const float out = in0 * Lgain * from_dB(makeup); + outputs[AUDIO_OUTPUT].setVoltage(out * 10.0f); + + oldL_yl = Lyl; + oldL_yg = Lyg; + + gainred = Lyl; + // const float max = (fabsf(out) > max) ? fabsf(outputs[0][i]) : sanitize_denormal(max); + // outlevel = (max == 0.f) ? -45.f : to_dB(max); // relative to - thresdb; + } +}; + +// -------------------------------------------------------------------------------------------------------------------- + +struct ZamAudioCompModuleWidget : ZamAudioModuleWidget { + typedef FundamentalBlackKnob<36> BigKnob; + + ZamAudioCompModule* const module; + + ZamAudioCompModuleWidget(ZamAudioCompModule* const m) + : ZamAudioModuleWidget(), + module(m) + { + setModule(module); + setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/ZamComp.svg"))); + + addInput(createInput(Vec(32, 280), m, ZamAudioCompModule::AUDIO_INPUT)); + addInput(createInput(Vec(32, 310), m, ZamAudioCompModule::SIDECHAIN_INPUT)); + addOutput(createOutput(Vec(100, 310), m, ZamAudioCompModule::AUDIO_OUTPUT)); + + const float scale = 0.8f; + addParam(createParamCentered(Vec(45.75f * scale, 121.25f * scale), m, ZamAudioCompModule::PARAM_ATTACK)); + addParam(createParamCentered(Vec(127.75f * scale, 121.25f * scale), m, ZamAudioCompModule::PARAM_RELEASE)); + + addParam(createParamCentered(Vec(48.25f * scale, 208.f * scale), m, ZamAudioCompModule::PARAM_THRESHOLD)); + addParam(createParamCentered(Vec(130.75f * scale, 208.f * scale), m, ZamAudioCompModule::PARAM_RATIO)); + + addParam(createParamCentered(Vec(48.25f * scale, 305.f * scale), m, ZamAudioCompModule::PARAM_KNEE)); + addParam(createParamCentered(Vec(130.75f * scale, 305.f * scale), m, ZamAudioCompModule::PARAM_SLEW)); + } +}; + +// -------------------------------------------------------------------------------------------------------------------- + +Model* modelZamComp = createModel("ZamComp"); + +// -------------------------------------------------------------------------------------------------------------------- diff --git a/plugins/ZamAudio/src/plugin.hpp b/plugins/ZamAudio/src/plugin.hpp new file mode 100644 index 00000000..b4be0918 --- /dev/null +++ b/plugins/ZamAudio/src/plugin.hpp @@ -0,0 +1,27 @@ +/* + * ZamAudio plugins For Cardinal + * Copyright (C) 2014-2019 Damien Zammit + * Copyright (C) 2022 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 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#pragma once + +#include "rack.hpp" + +using namespace rack; + +extern Plugin* pluginInstance; + +extern Model* modelZamComp; diff --git a/plugins/ZamAudio/src/widgets.hpp b/plugins/ZamAudio/src/widgets.hpp new file mode 100644 index 00000000..437a1500 --- /dev/null +++ b/plugins/ZamAudio/src/widgets.hpp @@ -0,0 +1,52 @@ +/* + * ZamAudio plugins For Cardinal + * Copyright (C) 2014-2019 Damien Zammit + * Copyright (C) 2022 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 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#pragma once + +#include "plugin.hpp" + +struct ZamAudioModuleWidget : ModuleWidget { +}; + +template +struct FundamentalBlackKnob : RoundKnob { + static constexpr const float kSize = size; + static constexpr const float kHalfSize = size * 0.5f; + float scale; + + FundamentalBlackKnob() { + if (size <= 22) { + setSvg(Svg::load(asset::plugin(pluginInstance, "res/components/knob-marker-small.svg"))); + bg->setSvg(Svg::load(asset::plugin(pluginInstance, "res/components/knob-small.svg"))); + } else { + setSvg(Svg::load(asset::plugin(pluginInstance, "res/components/knob-marker.svg"))); + bg->setSvg(Svg::load(asset::plugin(pluginInstance, "res/components/knob.svg"))); + } + + scale = size / sw->box.size.x; + box.size = Vec(size, size); + bg->box.size = Vec(size, size); + } + + void draw(const DrawArgs& args) override { + nvgSave(args.vg); + nvgScale(args.vg, scale, scale); + RoundKnob::draw(args); + nvgRestore(args.vg); + } +}; diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 25807dbc..9653f4d3 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -26,6 +26,9 @@ // Fundamental (always enabled) #include "Fundamental/src/plugin.hpp" +// ZamAudio (always enabled) +#include "ZamAudio/src/plugin.hpp" + #ifndef NOPLUGINS // 21kHz #include "21kHz/src/21kHz.hpp" @@ -715,6 +718,7 @@ void saveHighQualityAsDefault(bool) {} // plugin instances Plugin* pluginInstance__Cardinal; Plugin* pluginInstance__Fundamental; +Plugin* pluginInstance__ZamAudio; #ifndef NOPLUGINS Plugin* pluginInstance__21kHz; Plugin* pluginInstance__8Mode; @@ -986,6 +990,18 @@ static void initStatic__Fundamental() } } +static void initStatic__ZamAudio() +{ + Plugin* const p = new Plugin; + pluginInstance__ZamAudio = p; + + const StaticPluginLoader spl(p, "ZamAudio"); + if (spl.ok()) + { + p->addModel(modelZamComp); + } +} + #ifndef NOPLUGINS static void initStatic__21kHz() { @@ -2703,6 +2719,7 @@ void initStaticPlugins() { initStatic__Cardinal(); initStatic__Fundamental(); + initStatic__ZamAudio(); #ifndef NOPLUGINS initStatic__21kHz(); initStatic__8Mode(); From 39f240f705b9f10bb55a0d927ef376abb04a4133 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 27 Jul 2022 03:35:53 +0100 Subject: [PATCH 226/283] Cleanup Signed-off-by: falkTX --- src/custom/dep.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index 6b663280..d060b927 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -867,6 +867,7 @@ NSVGimage* nsvgParseFromFileCardinal(const char* const filename, const char* con bool hasDarkMode = false; bool hasLightMode = false; + NSVGimage* handleOrig; NSVGimage* handleMOD = nullptr; NSVGshape* shapesOrig; NSVGshape* shapesMOD; @@ -991,8 +992,6 @@ NSVGimage* nsvgParseFromFileCardinal(const char* const filename, const char* con handle->shapes->fill.color = 0xff191919; postparse: - NSVGimage* handleOrig; - if (handleMOD != nullptr) { handleOrig = static_cast(malloc(sizeof(NSVGimage))); @@ -1066,7 +1065,7 @@ void nsvgDeleteCardinal(NSVGimage* const handle) nsvgDelete(handle); } -void switchDarkMode(bool darkMode) +void switchDarkMode(const bool darkMode) { if (rack::settings::darkMode == darkMode) return; @@ -1084,8 +1083,8 @@ void switchDarkMode(bool darkMode) for (ExtendedNSVGimage& ext : loadedLightSVGs) { if (ext.shapesMOD != nullptr) - ext.handle->shapes = darkMode ? ext.shapesOrig : ext.shapesMOD; + ext.handle->shapes = !darkMode ? ext.shapesMOD : ext.shapesOrig; else if (ext.handleMOD != nullptr) - std::memcpy(ext.handle, darkMode ? ext.handleOrig : ext.handleMOD, sizeof(NSVGimage)); + std::memcpy(ext.handle, !darkMode ? ext.handleMOD : ext.handleOrig, sizeof(NSVGimage)); } } From 4ead1d80bd80689ae9abfc9428733bcd68129735 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 27 Jul 2022 04:29:54 +0100 Subject: [PATCH 227/283] Add a single CardinalNative standalone variant Based on FX but forces usage of native audio/midi instead of JACK Signed-off-by: falkTX --- dpf | 2 +- src/CardinalFX/DistrhoPluginInfo.h | 8 +--- src/CardinalNative/CardinalCommon.cpp | 1 + src/CardinalNative/CardinalPlugin.cpp | 1 + src/CardinalNative/CardinalUI.cpp | 1 + src/CardinalNative/DistrhoPluginInfo.h | 59 ++++++++++++++++++++++++++ src/CardinalNative/Makefile | 8 ++++ src/CardinalNative/RemoteNanoVG.cpp | 1 + src/CardinalNative/RemoteWindow.cpp | 1 + src/CardinalNative/Window.cpp | 1 + src/CardinalNative/common.cpp | 1 + src/CardinalNative/glfw.cpp | 1 + src/Makefile | 6 ++- src/Makefile.cardinal.mk | 22 ++++++---- 14 files changed, 95 insertions(+), 18 deletions(-) create mode 120000 src/CardinalNative/CardinalCommon.cpp create mode 120000 src/CardinalNative/CardinalPlugin.cpp create mode 120000 src/CardinalNative/CardinalUI.cpp create mode 100644 src/CardinalNative/DistrhoPluginInfo.h create mode 100644 src/CardinalNative/Makefile create mode 120000 src/CardinalNative/RemoteNanoVG.cpp create mode 120000 src/CardinalNative/RemoteWindow.cpp create mode 120000 src/CardinalNative/Window.cpp create mode 120000 src/CardinalNative/common.cpp create mode 120000 src/CardinalNative/glfw.cpp diff --git a/dpf b/dpf index d41b971d..f412918c 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit d41b971d77dceadcb76a7736908d0b6a36ff1469 +Subproject commit f412918c5f4022f074663abf86877a67f9d9a421 diff --git a/src/CardinalFX/DistrhoPluginInfo.h b/src/CardinalFX/DistrhoPluginInfo.h index bab1cc06..c70b915f 100644 --- a/src/CardinalFX/DistrhoPluginInfo.h +++ b/src/CardinalFX/DistrhoPluginInfo.h @@ -28,13 +28,7 @@ #define DISTRHO_PLUGIN_BRAND "DISTRHO" #define DISTRHO_PLUGIN_URI "https://distrho.kx.studio/plugins/cardinal#fx" -#if defined(DISTRHO_OS_WASM) && defined(STATIC_BUILD) -# define DISTRHO_PLUGIN_NAME "Mini Cardinal" -# define DISTRHO_PLUGIN_LABEL "MiniCardinal" -#elif defined(DISTRHO_OS_WASM) -# define DISTRHO_PLUGIN_NAME "Cardinal" -# define DISTRHO_PLUGIN_LABEL "Cardinal" -#elif defined(__MOD_DEVICES__) +#if defined(__MOD_DEVICES__) # define DISTRHO_PLUGIN_NAME "Cardinal Mini" # define DISTRHO_PLUGIN_LABEL "CardinalMini" #else diff --git a/src/CardinalNative/CardinalCommon.cpp b/src/CardinalNative/CardinalCommon.cpp new file mode 120000 index 00000000..76b4b5f3 --- /dev/null +++ b/src/CardinalNative/CardinalCommon.cpp @@ -0,0 +1 @@ +../CardinalCommon.cpp \ No newline at end of file diff --git a/src/CardinalNative/CardinalPlugin.cpp b/src/CardinalNative/CardinalPlugin.cpp new file mode 120000 index 00000000..c0c7e71e --- /dev/null +++ b/src/CardinalNative/CardinalPlugin.cpp @@ -0,0 +1 @@ +../CardinalPlugin.cpp \ No newline at end of file diff --git a/src/CardinalNative/CardinalUI.cpp b/src/CardinalNative/CardinalUI.cpp new file mode 120000 index 00000000..5558256b --- /dev/null +++ b/src/CardinalNative/CardinalUI.cpp @@ -0,0 +1 @@ +../CardinalUI.cpp \ No newline at end of file diff --git a/src/CardinalNative/DistrhoPluginInfo.h b/src/CardinalNative/DistrhoPluginInfo.h new file mode 100644 index 00000000..5cb1e33e --- /dev/null +++ b/src/CardinalNative/DistrhoPluginInfo.h @@ -0,0 +1,59 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED +#define DISTRHO_PLUGIN_INFO_H_INCLUDED + +#define CARDINAL_VARIANT_MAIN 0 +#define CARDINAL_VARIANT_FX 1 +#define CARDINAL_VARIANT_SYNTH 0 + +#define CARDINAL_NUM_AUDIO_INPUTS 2 +#define CARDINAL_NUM_AUDIO_OUTPUTS 2 + +#define DISTRHO_PLUGIN_BRAND "DISTRHO" +#define DISTRHO_PLUGIN_URI "https://distrho.kx.studio/plugins/cardinal" + +#if defined(DISTRHO_OS_WASM) && defined(STATIC_BUILD) +# define DISTRHO_PLUGIN_NAME "Mini Cardinal" +# define DISTRHO_PLUGIN_LABEL "MiniCardinal" +#else +# define DISTRHO_PLUGIN_NAME "Cardinal" +# define DISTRHO_PLUGIN_LABEL "Cardinal" +#endif + +#ifdef HEADLESS +#define DISTRHO_PLUGIN_HAS_UI 0 +#else +#define DISTRHO_PLUGIN_HAS_UI 1 +#define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1 +#define DISTRHO_UI_FILE_BROWSER 1 +#define DISTRHO_UI_USE_NANOVG 1 +#define DISTRHO_UI_USER_RESIZABLE 1 +#endif +#define DISTRHO_PLUGIN_IS_SYNTH 0 +#define DISTRHO_PLUGIN_NUM_INPUTS CARDINAL_NUM_AUDIO_INPUTS +#define DISTRHO_PLUGIN_NUM_OUTPUTS CARDINAL_NUM_AUDIO_OUTPUTS +#define DISTRHO_PLUGIN_WANT_MIDI_INPUT 1 +#define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 1 +#define DISTRHO_PLUGIN_WANT_FULL_STATE 1 +#define DISTRHO_PLUGIN_WANT_STATE 1 +#define DISTRHO_PLUGIN_WANT_TIMEPOS 1 +#define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:UtilityPlugin" +#define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Generator" + +#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED diff --git a/src/CardinalNative/Makefile b/src/CardinalNative/Makefile new file mode 100644 index 00000000..9798d7eb --- /dev/null +++ b/src/CardinalNative/Makefile @@ -0,0 +1,8 @@ +#!/usr/bin/make -f +# Makefile for DISTRHO Plugins # +# ---------------------------- # +# Created by falkTX +# + +NAME = CardinalNative +include ../Makefile.cardinal.mk diff --git a/src/CardinalNative/RemoteNanoVG.cpp b/src/CardinalNative/RemoteNanoVG.cpp new file mode 120000 index 00000000..a6394af3 --- /dev/null +++ b/src/CardinalNative/RemoteNanoVG.cpp @@ -0,0 +1 @@ +../custom/RemoteNanoVG.cpp \ No newline at end of file diff --git a/src/CardinalNative/RemoteWindow.cpp b/src/CardinalNative/RemoteWindow.cpp new file mode 120000 index 00000000..7e00fed5 --- /dev/null +++ b/src/CardinalNative/RemoteWindow.cpp @@ -0,0 +1 @@ +../custom/RemoteWindow.cpp \ No newline at end of file diff --git a/src/CardinalNative/Window.cpp b/src/CardinalNative/Window.cpp new file mode 120000 index 00000000..759f2728 --- /dev/null +++ b/src/CardinalNative/Window.cpp @@ -0,0 +1 @@ +../override/Window.cpp \ No newline at end of file diff --git a/src/CardinalNative/common.cpp b/src/CardinalNative/common.cpp new file mode 120000 index 00000000..915948e3 --- /dev/null +++ b/src/CardinalNative/common.cpp @@ -0,0 +1 @@ +../override/common.cpp \ No newline at end of file diff --git a/src/CardinalNative/glfw.cpp b/src/CardinalNative/glfw.cpp new file mode 120000 index 00000000..8c6a6e44 --- /dev/null +++ b/src/CardinalNative/glfw.cpp @@ -0,0 +1 @@ +../custom/glfw.cpp \ No newline at end of file diff --git a/src/Makefile b/src/Makefile index f6328122..a9a0b90f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -206,9 +206,10 @@ ifeq ($(MOD_BUILD),true) $(MAKE) -C Cardinal lv2 $(MAKE) -C CardinalFX lv2 else ifeq ($(WASM),true) - $(MAKE) -C CardinalFX jack + $(MAKE) -C CardinalNative else $(MAKE) -C Cardinal + $(MAKE) -C CardinalNative $(MAKE) -C CardinalFX $(CARDINAL_FX_ARGS) $(MAKE) -C CardinalSynth $(CARDINAL_SYNTH_ARGS) endif @@ -216,6 +217,9 @@ endif jack: $(TARGET) $(MAKE) jack -C Cardinal +native: $(TARGET) + $(MAKE) jack -C CardinalNative + lv2: $(TARGET) $(MAKE) lv2 -C Cardinal $(MAKE) lv2 -C CardinalFX $(CARDINAL_FX_ARGS) diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 66a82c94..cf13cf0b 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -10,6 +10,8 @@ ifeq ($(NAME),Cardinal) CARDINAL_VARIANT = main else ifeq ($(NAME),CardinalFX) CARDINAL_VARIANT = fx +else ifeq ($(NAME),CardinalNative) +CARDINAL_VARIANT = native else ifeq ($(NAME),CardinalSynth) CARDINAL_VARIANT = synth endif @@ -55,6 +57,15 @@ NVG_DISABLE_SKIPPING_WHITESPACE = true NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST USE_NANOVG_FBO = true WASM_EXCEPTIONS = true + +ifeq ($(CARDINAL_VARIANT),main) +# main variant should not use rtaudio/sdl2 fallback (it has CV ports) +SKIP_NATIVE_AUDIO_FALLBACK = true +else +# fx and synth variants should only use rtaudio/sdl2 fallbacks +FORCE_NATIVE_AUDIO_FALLBACK = true +endif + include ../../dpf/Makefile.base.mk # -------------------------------------------------------------- @@ -300,11 +311,9 @@ BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' # Enable all possible plugin types and setup resources ifeq ($(CARDINAL_VARIANT),main) -ifneq ($(STATIC_BUILD),true) all: jack lv2 vst3 -else -all: lv2 vst3 -endif # STATIC_BUILD +else ifeq ($(CARDINAL_VARIANT),native) +all: jack else all: lv2 vst2 vst3 static endif @@ -323,11 +332,6 @@ LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/modgui/documentation.pdf LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/modgui endif -# Cardinal main variant should not use rtaudio/sdl2 fallback (it has CV ports) -ifeq ($(CARDINAL_VARIANT),main) -jack: BUILD_CXX_FLAGS += -DDPF_JACK_STANDALONE_SKIP_RTAUDIO_FALLBACK -DDPF_JACK_STANDALONE_SKIP_SDL2_FALLBACK -endif - # Cardinal main variant is not available as VST2 due to lack of CV ports ifneq ($(CARDINAL_VARIANT),main) ifeq ($(MACOS),true) From 9ca4fa74b97d05ce905885bed163c78f2e9bf503 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 29 Jul 2022 00:11:13 +0200 Subject: [PATCH 228/283] Use macos-11 for CI Signed-off-by: falkTX --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 529cc21d..4f420d87 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -403,7 +403,7 @@ jobs: make SYSDEPS=true -j $(nproc) macos-intel: - runs-on: macos-10.15 + runs-on: macos-11 steps: - uses: actions/checkout@v2 with: @@ -489,7 +489,7 @@ jobs: ${{ github.event.repository.name }}-*.pkg macos-universal: - runs-on: macos-10.15 + runs-on: macos-11 steps: - uses: actions/checkout@v2 with: From 22554bae0cc6a705b9edf6ab89946efe62fa41de Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 29 Jul 2022 00:11:28 +0200 Subject: [PATCH 229/283] Fix wasm build not loading lv2 plugins under Chrome Signed-off-by: falkTX --- dpf | 2 +- src/Makefile.cardinal.mk | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dpf b/dpf index f412918c..9d37dbf2 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit f412918c5f4022f074663abf86877a67f9d9a421 +Subproject commit 9d37dbf240e770195624e4fc4e06d2b49cf4661a diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index cf13cf0b..8ff16f3c 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -233,6 +233,7 @@ LINK_FLAGS += --preload-file=./jsfx LINK_FLAGS += --preload-file=./lv2 endif LINK_FLAGS += --preload-file=./resources +LINK_FLAGS += --use-preload-plugins LINK_FLAGS += -sALLOW_MEMORY_GROWTH LINK_FLAGS += -sINITIAL_MEMORY=64Mb LINK_FLAGS += -sLZ4=1 From 0f3ab5ddf0fde370578cb21c9648ce382010c072 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 31 Jul 2022 20:41:59 +0200 Subject: [PATCH 230/283] More wasm related fixes, high-dpi and touch events Signed-off-by: falkTX --- carla | 2 +- dpf | 2 +- patches/examples/DRMR_-_BassGrowl.vcv | 4 - patches/examples/DRMR_-_Etherpad.vcv | 4 - patches/examples/DRMR_-_Gabberswing.vcv | 4 - patches/examples/DRMR_-_Interverb.vcv | 4 - patches/examples/VT_-_Jupiter_Ascent.vcv | 8 +- .../falkTX_-_Random-Progress-Pluck-Rev.vcv | 4 - .../examples/falkTX_-_Salomonis-MonoRegen.vcv | 4 - patches/init/fx.vcv | 1 - patches/init/main.vcv | 1 - patches/init/synth.vcv | 1 - patches/init/wasm.vcv | 1 - patches/mini/JTB_-_Proof-Of-Concept.vcv | 2299 +++++++++++++++++ plugins/Makefile | 16 +- src/Makefile.cardinal.mk | 4 + src/emscripten/shell.html | 398 +-- 17 files changed, 2325 insertions(+), 432 deletions(-) create mode 100644 patches/mini/JTB_-_Proof-Of-Concept.vcv diff --git a/carla b/carla index 01f93b40..e3a0aad2 160000 --- a/carla +++ b/carla @@ -1 +1 @@ -Subproject commit 01f93b40d5e6d9238e2422c4daf4839412a98dd3 +Subproject commit e3a0aad27a01c1a91e12000c9df856a1df0f34fa diff --git a/dpf b/dpf index 9d37dbf2..11e76be7 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 9d37dbf240e770195624e4fc4e06d2b49cf4661a +Subproject commit 11e76be7057c8b189a593ca328aa871fe61fc699 diff --git a/patches/examples/DRMR_-_BassGrowl.vcv b/patches/examples/DRMR_-_BassGrowl.vcv index 7a26dc7e..95165999 100644 --- a/patches/examples/DRMR_-_BassGrowl.vcv +++ b/patches/examples/DRMR_-_BassGrowl.vcv @@ -1,10 +1,6 @@ { "version": "2.0", "zoom": 1.0, - "gridOffset": [ - -14.779948234558105, - -0.049229029566049576 - ], "modules": [ { "id": 5044954743508992, diff --git a/patches/examples/DRMR_-_Etherpad.vcv b/patches/examples/DRMR_-_Etherpad.vcv index 85ec0e6e..244d7b69 100644 --- a/patches/examples/DRMR_-_Etherpad.vcv +++ b/patches/examples/DRMR_-_Etherpad.vcv @@ -1,10 +1,6 @@ { "version": "2.0", "zoom": 1.0, - "gridOffset": [ - -6.7139325141906738, - -0.20362870395183563 - ], "modules": [ { "id": 6435223154102100, diff --git a/patches/examples/DRMR_-_Gabberswing.vcv b/patches/examples/DRMR_-_Gabberswing.vcv index a2604506..31a0a445 100644 --- a/patches/examples/DRMR_-_Gabberswing.vcv +++ b/patches/examples/DRMR_-_Gabberswing.vcv @@ -1,10 +1,6 @@ { "version": "2.0", "zoom": 1.0, - "gridOffset": [ - -37.436588287353516, - 0.2261204719543457 - ], "modules": [ { "id": 5567774278698987, diff --git a/patches/examples/DRMR_-_Interverb.vcv b/patches/examples/DRMR_-_Interverb.vcv index 6a6fa18a..a1ffb51a 100644 --- a/patches/examples/DRMR_-_Interverb.vcv +++ b/patches/examples/DRMR_-_Interverb.vcv @@ -1,10 +1,6 @@ { "version": "2.0", "zoom": 1.0, - "gridOffset": [ - -3.4424479007720947, - 0.86171877384185791 - ], "modules": [ { "id": 1184757612963547, diff --git a/patches/examples/VT_-_Jupiter_Ascent.vcv b/patches/examples/VT_-_Jupiter_Ascent.vcv index ab335698..d83aa942 100644 --- a/patches/examples/VT_-_Jupiter_Ascent.vcv +++ b/patches/examples/VT_-_Jupiter_Ascent.vcv @@ -1,12 +1,6 @@ { "version": "2.1.1", - "path": "/home/falktx/Source/DISTRHO/Cardinal/src/Rack/../../patches/VT_-_Jupiter_Ascent.vcv", - "unsaved": true, "zoom": 1.0, - "gridOffset": [ - -1.0, - -0.03684210404753685 - ], "modules": [ { "id": 674529428127255, @@ -630,4 +624,4 @@ "color": "#ff5252" } ] -} \ No newline at end of file +} diff --git a/patches/examples/falkTX_-_Random-Progress-Pluck-Rev.vcv b/patches/examples/falkTX_-_Random-Progress-Pluck-Rev.vcv index 5a9373c1..5f336fc3 100644 --- a/patches/examples/falkTX_-_Random-Progress-Pluck-Rev.vcv +++ b/patches/examples/falkTX_-_Random-Progress-Pluck-Rev.vcv @@ -1,10 +1,6 @@ { "version": "2.0", "zoom": 1.0, - "gridOffset": [ - -6.3333334922790527, - -0.028947368264198303 - ], "modules": [ { "id": 3056105853448179, diff --git a/patches/examples/falkTX_-_Salomonis-MonoRegen.vcv b/patches/examples/falkTX_-_Salomonis-MonoRegen.vcv index 2e49c87b..fc2f856e 100644 --- a/patches/examples/falkTX_-_Salomonis-MonoRegen.vcv +++ b/patches/examples/falkTX_-_Salomonis-MonoRegen.vcv @@ -1,10 +1,6 @@ { "version": "2.0", "zoom": 1.0, - "gridOffset": [ - -2.3333332538604736, - 0.71315789222717285 - ], "modules": [ { "id": 35699846797895, diff --git a/patches/init/fx.vcv b/patches/init/fx.vcv index 567f352e..e5e35d55 100644 --- a/patches/init/fx.vcv +++ b/patches/init/fx.vcv @@ -1,6 +1,5 @@ { "version": "2.1.1", - "unsaved": true, "zoom": 1.0, "modules": [ { diff --git a/patches/init/main.vcv b/patches/init/main.vcv index 91bf456d..185aae9d 100644 --- a/patches/init/main.vcv +++ b/patches/init/main.vcv @@ -1,6 +1,5 @@ { "version": "2.1", - "unsaved": true, "zoom": 1.0, "modules": [ { diff --git a/patches/init/synth.vcv b/patches/init/synth.vcv index d15f2d0a..ec0e1533 100644 --- a/patches/init/synth.vcv +++ b/patches/init/synth.vcv @@ -1,6 +1,5 @@ { "version": "2.1.1", - "unsaved": true, "zoom": 1.0, "modules": [ { diff --git a/patches/init/wasm.vcv b/patches/init/wasm.vcv index fe62fa02..61b752a6 100644 --- a/patches/init/wasm.vcv +++ b/patches/init/wasm.vcv @@ -1,6 +1,5 @@ { "version": "2.1.2", - "unsaved": true, "zoom": 1.0, "modules": [ { diff --git a/patches/mini/JTB_-_Proof-Of-Concept.vcv b/patches/mini/JTB_-_Proof-Of-Concept.vcv new file mode 100644 index 00000000..9cedef0f --- /dev/null +++ b/patches/mini/JTB_-_Proof-Of-Concept.vcv @@ -0,0 +1,2299 @@ +{ + "version": "2.1.2", + "zoom": 0.8264508843421936, + "modules": [ + { + "id": 5726895899473528, + "plugin": "Fundamental", + "model": "ADSR", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 0.59999996423721313, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.60722893476486206, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + } + ], + "leftModuleId": 3146744790938462, + "rightModuleId": 1394719894730985, + "pos": [ + 30, + 0 + ] + }, + { + "id": 4828178296911509, + "plugin": "Fundamental", + "model": "VCA-1", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + } + ], + "leftModuleId": 1133100648267642, + "rightModuleId": 8394463014211348, + "pos": [ + 64, + 0 + ] + }, + { + "id": 8601159184541723, + "plugin": "Fundamental", + "model": "VCO", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.5, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + } + ], + "leftModuleId": 8418253494908594, + "rightModuleId": 1647649757935413, + "pos": [ + 12, + -1 + ] + }, + { + "id": 758005564709860, + "plugin": "Fundamental", + "model": "Quantizer", + "version": "2.0", + "params": [ + { + "value": -0.22650615870952606, + "id": 0 + } + ], + "leftModuleId": 8873341177893106, + "rightModuleId": 8465489170887570, + "data": { + "enabledNotes": [ + false, + true, + false, + true, + false, + false, + true, + false, + false, + false, + true, + false + ] + }, + "pos": [ + 40, + -1 + ] + }, + { + "id": 8465489170887570, + "plugin": "Fundamental", + "model": "Quantizer", + "version": "2.0", + "params": [ + { + "value": -0.30361443758010864, + "id": 0 + } + ], + "leftModuleId": 758005564709860, + "rightModuleId": 4423007809468738, + "data": { + "enabledNotes": [ + false, + false, + false, + true, + false, + false, + true, + false, + true, + false, + false, + true + ] + }, + "pos": [ + 44, + -1 + ] + }, + { + "id": 683104811224040, + "plugin": "Fundamental", + "model": "Quantizer", + "version": "2.0", + "params": [ + { + "value": -0.17831322550773621, + "id": 0 + } + ], + "leftModuleId": 4423007809468738, + "rightModuleId": 4531725331261861, + "data": { + "enabledNotes": [ + false, + true, + false, + false, + false, + true, + false, + false, + true, + false, + true, + false + ] + }, + "pos": [ + 52, + -1 + ] + }, + { + "id": 4423007809468738, + "plugin": "Fundamental", + "model": "Quantizer", + "version": "2.0", + "params": [ + { + "value": -0.55662649869918823, + "id": 0 + } + ], + "leftModuleId": 8465489170887570, + "rightModuleId": 683104811224040, + "data": { + "enabledNotes": [ + false, + true, + false, + false, + false, + true, + true, + false, + false, + false, + true, + false + ] + }, + "pos": [ + 48, + -1 + ] + }, + { + "id": 8873341177893106, + "plugin": "Fundamental", + "model": "SequentialSwitch2", + "version": "2.0", + "params": [ + { + "value": 2.0, + "id": 0 + } + ], + "leftModuleId": 7206256653286977, + "rightModuleId": 758005564709860, + "pos": [ + 37, + -1 + ] + }, + { + "id": 5218974527740722, + "plugin": "Fundamental", + "model": "LFO", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": 0.65301215648651123, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.5, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "rightModuleId": 1035685351131893, + "pos": [ + -33, + -1 + ] + }, + { + "id": 1163131007452317, + "plugin": "Fundamental", + "model": "Octave", + "version": "2.0", + "params": [ + { + "value": -1.0, + "id": 0 + } + ], + "leftModuleId": 4531725331261861, + "rightModuleId": 891362589771903, + "pos": [ + 61, + -1 + ] + }, + { + "id": 8418253494908594, + "plugin": "Fundamental", + "model": "Random", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 1.0, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + } + ], + "leftModuleId": 5395301826848558, + "rightModuleId": 8601159184541723, + "pos": [ + 3, + -1 + ] + }, + { + "id": 5395301826848558, + "plugin": "Fundamental", + "model": "LFO", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": -2.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.5, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 731196840446297, + "rightModuleId": 8418253494908594, + "pos": [ + -6, + -1 + ] + }, + { + "id": 731196840446297, + "plugin": "Fundamental", + "model": "LFO", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": 3.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.5, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 1035685351131893, + "rightModuleId": 5395301826848558, + "pos": [ + -15, + -1 + ] + }, + { + "id": 1133100648267642, + "plugin": "Fundamental", + "model": "VCF", + "version": "2.0", + "params": [ + { + "value": 0.1967989057302475, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.46144583821296692, + "id": 2 + }, + { + "value": 1.0, + "id": 3 + }, + { + "value": 0.31325310468673706, + "id": 4 + }, + { + "value": 0.433735191822052, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 1259717562922476, + "rightModuleId": 4828178296911509, + "pos": [ + 57, + 0 + ] + }, + { + "id": 1394719894730985, + "plugin": "Fundamental", + "model": "ADSR", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 0.58072292804718018, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.3554217517375946, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + } + ], + "leftModuleId": 5726895899473528, + "rightModuleId": 1259717562922476, + "pos": [ + 39, + 0 + ] + }, + { + "id": 1259717562922476, + "plugin": "Fundamental", + "model": "VCMixer", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 0.74799954891204834, + "id": 1 + }, + { + "value": 0.50605034828186035, + "id": 2 + }, + { + "value": 0.7495308518409729, + "id": 3 + }, + { + "value": 1.0, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 1.0, + "id": 6 + }, + { + "value": 1.0, + "id": 7 + }, + { + "value": 1.0, + "id": 8 + }, + { + "value": 1.0, + "id": 9 + } + ], + "leftModuleId": 1394719894730985, + "rightModuleId": 1133100648267642, + "pos": [ + 48, + 0 + ] + }, + { + "id": 1647649757935413, + "plugin": "Fundamental", + "model": "8vert", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": -1.0, + "id": 5 + }, + { + "value": 0.35445797443389893, + "id": 6 + }, + { + "value": 0.19518086314201355, + "id": 7 + } + ], + "leftModuleId": 8601159184541723, + "rightModuleId": 5352206433681871, + "pos": [ + 21, + -1 + ] + }, + { + "id": 5352206433681871, + "plugin": "Fundamental", + "model": "Noise", + "version": "2.0", + "params": [], + "leftModuleId": 1647649757935413, + "rightModuleId": 7206256653286977, + "pos": [ + 29, + -1 + ] + }, + { + "id": 891362589771903, + "plugin": "Fundamental", + "model": "Octave", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + } + ], + "leftModuleId": 1163131007452317, + "rightModuleId": 5864032949729166, + "pos": [ + 64, + -1 + ] + }, + { + "id": 3146744790938462, + "plugin": "Fundamental", + "model": "LFO", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": 3.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.5, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 8016435651914356, + "rightModuleId": 5726895899473528, + "pos": [ + 21, + 0 + ] + }, + { + "id": 1691892280815347, + "plugin": "Fundamental", + "model": "Random", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.030120406299829483, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 1.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + } + ], + "leftModuleId": 5864032949729166, + "rightModuleId": 6544530457999805, + "pos": [ + 76, + -1 + ] + }, + { + "id": 6544530457999805, + "plugin": "Fundamental", + "model": "Random", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 1.0, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + } + ], + "leftModuleId": 1691892280815347, + "pos": [ + 85, + -1 + ] + }, + { + "id": 1233074000424232, + "plugin": "Fundamental", + "model": "VCMixer", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 0.75805014371871948, + "id": 1 + }, + { + "value": 0.95399570465087891, + "id": 2 + }, + { + "value": 1.0, + "id": 3 + }, + { + "value": 1.0, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 1.0, + "id": 6 + }, + { + "value": 1.0, + "id": 7 + }, + { + "value": 1.0, + "id": 8 + }, + { + "value": 1.0, + "id": 9 + } + ], + "leftModuleId": 3385514259127415, + "rightModuleId": 1, + "pos": [ + 79, + 0 + ] + }, + { + "id": 2730774444988771, + "plugin": "Fundamental", + "model": "ADSR", + "version": "2.0", + "params": [ + { + "value": 0.33253011107444763, + "id": 0 + }, + { + "value": 0.58072292804718018, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.3554217517375946, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + } + ], + "leftModuleId": 3201369453135267, + "rightModuleId": 7433032281179785, + "pos": [ + -28, + 0 + ] + }, + { + "id": 3201369453135267, + "plugin": "Fundamental", + "model": "ADSR", + "version": "2.0", + "params": [ + { + "value": 0.32168671488761902, + "id": 0 + }, + { + "value": 0.59999996423721313, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.32409638166427612, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + } + ], + "leftModuleId": 5646145412017245, + "rightModuleId": 2730774444988771, + "pos": [ + -37, + 0 + ] + }, + { + "id": 5646145412017245, + "plugin": "Fundamental", + "model": "VCO", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.5, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + } + ], + "rightModuleId": 3201369453135267, + "pos": [ + -46, + 0 + ] + }, + { + "id": 2032233011372771, + "plugin": "Fundamental", + "model": "VCA-1", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + } + ], + "leftModuleId": 7382588397539714, + "rightModuleId": 8016435651914356, + "pos": [ + 9, + 0 + ] + }, + { + "id": 5418598651204386, + "plugin": "Fundamental", + "model": "VCMixer", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 0.59294706583023071, + "id": 1 + }, + { + "value": 0.29136249423027039, + "id": 2 + }, + { + "value": 0.55528944730758667, + "id": 3 + }, + { + "value": 1.0, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 1.0, + "id": 6 + }, + { + "value": 1.0, + "id": 7 + }, + { + "value": 1.0, + "id": 8 + }, + { + "value": 1.0, + "id": 9 + } + ], + "leftModuleId": 2580763714379115, + "rightModuleId": 7382588397539714, + "pos": [ + -7, + 0 + ] + }, + { + "id": 7382588397539714, + "plugin": "Fundamental", + "model": "VCF", + "version": "2.0", + "params": [ + { + "value": 0.5689617395401001, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.16144582629203796, + "id": 2 + }, + { + "value": 1.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.18554241955280304, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 5418598651204386, + "rightModuleId": 2032233011372771, + "pos": [ + 2, + 0 + ] + }, + { + "id": 2580763714379115, + "plugin": "Fundamental", + "model": "ADSR", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.3879525363445282, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + } + ], + "leftModuleId": 7433032281179785, + "rightModuleId": 5418598651204386, + "pos": [ + -16, + 0 + ] + }, + { + "id": 7433032281179785, + "plugin": "Fundamental", + "model": "Mixer", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + } + ], + "leftModuleId": 2730774444988771, + "rightModuleId": 2580763714379115, + "data": { + "average": false, + "invert": false + }, + "pos": [ + -19, + 0 + ] + }, + { + "id": 8016435651914356, + "plugin": "Fundamental", + "model": "Delay", + "version": "2.0", + "params": [ + { + "value": 0.7241402268409729, + "id": 0 + }, + { + "value": 0.71686756610870361, + "id": 1 + }, + { + "value": 0.5, + "id": 2 + }, + { + "value": 0.66144609451293945, + "id": 3 + }, + { + "value": 0.27951806783676147, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + } + ], + "leftModuleId": 2032233011372771, + "rightModuleId": 3146744790938462, + "pos": [ + 12, + 0 + ] + }, + { + "id": 5864032949729166, + "plugin": "Fundamental", + "model": "LFO", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": -2.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.75, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 891362589771903, + "rightModuleId": 1691892280815347, + "pos": [ + 67, + -1 + ] + }, + { + "id": 6507602521553750, + "plugin": "Fundamental", + "model": "VCO", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": -24.722892761230469, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.24337352812290192, + "id": 4 + }, + { + "value": 0.5, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + } + ], + "leftModuleId": 1527334562618244, + "rightModuleId": 2378286691858201, + "pos": [ + 25, + -2 + ] + }, + { + "id": 3893327492950413, + "plugin": "Fundamental", + "model": "ADSR", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 0.25903621315956116, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.3554217517375946, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + } + ], + "rightModuleId": 1527334562618244, + "pos": [ + 7, + -2 + ] + }, + { + "id": 1527334562618244, + "plugin": "Fundamental", + "model": "ADSR", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 0.51807236671447754, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.49156633019447327, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + } + ], + "leftModuleId": 3893327492950413, + "rightModuleId": 6507602521553750, + "pos": [ + 16, + -2 + ] + }, + { + "id": 2378286691858201, + "plugin": "Fundamental", + "model": "VCA-1", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + } + ], + "leftModuleId": 6507602521553750, + "rightModuleId": 4455336980892018, + "pos": [ + 34, + -2 + ] + }, + { + "id": 4455336980892018, + "plugin": "Fundamental", + "model": "VCF", + "version": "2.0", + "params": [ + { + "value": 0.83173602819442749, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.053012050688266754, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 2378286691858201, + "rightModuleId": 6747341247828307, + "pos": [ + 37, + -2 + ] + }, + { + "id": 6747341247828307, + "plugin": "Fundamental", + "model": "VCF", + "version": "2.0", + "params": [ + { + "value": 0.28478816151618958, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.25542160868644714, + "id": 2 + }, + { + "value": 0.5951806902885437, + "id": 3 + }, + { + "value": 0.10361450910568237, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 4455336980892018, + "pos": [ + 44, + -2 + ] + }, + { + "id": 3385514259127415, + "plugin": "Fundamental", + "model": "Mixer", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + } + ], + "leftModuleId": 8394463014211348, + "rightModuleId": 1233074000424232, + "data": { + "average": false, + "invert": false + }, + "pos": [ + 76, + 0 + ] + }, + { + "id": 7206256653286977, + "plugin": "Fundamental", + "model": "Merge", + "version": "2.0", + "params": [], + "leftModuleId": 5352206433681871, + "rightModuleId": 8873341177893106, + "data": { + "channels": -1 + }, + "pos": [ + 32, + -1 + ] + }, + { + "id": 4531725331261861, + "plugin": "Fundamental", + "model": "Split", + "version": "2.0", + "params": [], + "leftModuleId": 683104811224040, + "rightModuleId": 1163131007452317, + "pos": [ + 56, + -1 + ] + }, + { + "id": 8394463014211348, + "plugin": "Fundamental", + "model": "ADSR", + "version": "2.0", + "params": [ + { + "value": 0.0, + "id": 0 + }, + { + "value": 0.63132643699645996, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.62530171871185303, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + } + ], + "leftModuleId": 4828178296911509, + "rightModuleId": 3385514259127415, + "pos": [ + 67, + 0 + ] + }, + { + "id": 1035685351131893, + "plugin": "Fundamental", + "model": "LFO", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 1.0, + "id": 1 + }, + { + "value": 1.0, + "id": 2 + }, + { + "value": 0.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.5, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + } + ], + "leftModuleId": 5218974527740722, + "rightModuleId": 731196840446297, + "pos": [ + -24, + -1 + ] + }, + { + "id": 1, + "plugin": "Cardinal", + "model": "HostAudio2", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + } + ], + "leftModuleId": 1233074000424232, + "data": { + "dcFilter": true + }, + "pos": [ + 88, + 0 + ] + } + ], + "cables": [ + { + "id": 8294316115570611, + "outputModuleId": 758005564709860, + "outputId": 0, + "inputModuleId": 8873341177893106, + "inputId": 2, + "color": "#52ffff" + }, + { + "id": 5555057650117096, + "outputModuleId": 8465489170887570, + "outputId": 0, + "inputModuleId": 8873341177893106, + "inputId": 3, + "color": "#52beff" + }, + { + "id": 3575299420836353, + "outputModuleId": 683104811224040, + "outputId": 0, + "inputModuleId": 8873341177893106, + "inputId": 5, + "color": "#6752ff" + }, + { + "id": 6673705553204462, + "outputModuleId": 1163131007452317, + "outputId": 0, + "inputModuleId": 8601159184541723, + "inputId": 0, + "color": "#a852ff" + }, + { + "id": 7936547708694047, + "outputModuleId": 731196840446297, + "outputId": 3, + "inputModuleId": 8418253494908594, + "inputId": 2, + "color": "#ffd452" + }, + { + "id": 6795587122824602, + "outputModuleId": 731196840446297, + "outputId": 3, + "inputModuleId": 5726895899473528, + "inputId": 4, + "color": "#e8ff52" + }, + { + "id": 3019680638787688, + "outputModuleId": 5395301826848558, + "outputId": 3, + "inputModuleId": 8873341177893106, + "inputId": 0, + "color": "#a8ff52" + }, + { + "id": 1666984200392735, + "outputModuleId": 5726895899473528, + "outputId": 0, + "inputModuleId": 4828178296911509, + "inputId": 0, + "color": "#e8ff52" + }, + { + "id": 8766740694668647, + "outputModuleId": 8601159184541723, + "outputId": 2, + "inputModuleId": 1133100648267642, + "inputId": 3, + "color": "#a8ff52" + }, + { + "id": 8237083691879690, + "outputModuleId": 1133100648267642, + "outputId": 0, + "inputModuleId": 4828178296911509, + "inputId": 1, + "color": "#67ff52" + }, + { + "id": 1834953772627333, + "outputModuleId": 731196840446297, + "outputId": 3, + "inputModuleId": 1394719894730985, + "inputId": 4, + "color": "#e8ff52" + }, + { + "id": 4168348114170351, + "outputModuleId": 1394719894730985, + "outputId": 0, + "inputModuleId": 1259717562922476, + "inputId": 1, + "color": "#52ff7d" + }, + { + "id": 5717596310825586, + "outputModuleId": 1259717562922476, + "outputId": 0, + "inputModuleId": 1133100648267642, + "inputId": 0, + "color": "#52ffff" + }, + { + "id": 4350563624640266, + "outputModuleId": 8601159184541723, + "outputId": 3, + "inputModuleId": 1133100648267642, + "inputId": 1, + "color": "#527dff" + }, + { + "id": 8219233151532425, + "outputModuleId": 8601159184541723, + "outputId": 3, + "inputModuleId": 1259717562922476, + "inputId": 2, + "color": "#527dff" + }, + { + "id": 4180550788448825, + "outputModuleId": 5352206433681871, + "outputId": 6, + "inputModuleId": 8418253494908594, + "inputId": 3, + "color": "#a852ff" + }, + { + "id": 2241414982743724, + "outputModuleId": 4423007809468738, + "outputId": 0, + "inputModuleId": 8873341177893106, + "inputId": 4, + "color": "#527dff" + }, + { + "id": 4401638766741046, + "outputModuleId": 3146744790938462, + "outputId": 3, + "inputModuleId": 1691892280815347, + "inputId": 2, + "color": "#ff52d4" + }, + { + "id": 4473547302936863, + "outputModuleId": 5352206433681871, + "outputId": 5, + "inputModuleId": 6544530457999805, + "inputId": 3, + "color": "#ffd452" + }, + { + "id": 2149514714768661, + "outputModuleId": 1691892280815347, + "outputId": 4, + "inputModuleId": 6544530457999805, + "inputId": 2, + "color": "#e8ff52" + }, + { + "id": 5076399399662756, + "outputModuleId": 4828178296911509, + "outputId": 0, + "inputModuleId": 1233074000424232, + "inputId": 1, + "color": "#52beff" + }, + { + "id": 7965867680638860, + "outputModuleId": 3201369453135267, + "outputId": 0, + "inputModuleId": 2032233011372771, + "inputId": 0, + "color": "#e8ff52" + }, + { + "id": 1755370288614689, + "outputModuleId": 7382588397539714, + "outputId": 0, + "inputModuleId": 2032233011372771, + "inputId": 1, + "color": "#67ff52" + }, + { + "id": 7321274404212847, + "outputModuleId": 2730774444988771, + "outputId": 0, + "inputModuleId": 5418598651204386, + "inputId": 1, + "color": "#52ff7d" + }, + { + "id": 5213022936510450, + "outputModuleId": 5418598651204386, + "outputId": 0, + "inputModuleId": 7382588397539714, + "inputId": 0, + "color": "#52ffff" + }, + { + "id": 4958477523630847, + "outputModuleId": 5646145412017245, + "outputId": 3, + "inputModuleId": 5418598651204386, + "inputId": 2, + "color": "#527dff" + }, + { + "id": 806948035554393, + "outputModuleId": 891362589771903, + "outputId": 0, + "inputModuleId": 5646145412017245, + "inputId": 0, + "color": "#52beff" + }, + { + "id": 6076414959882510, + "outputModuleId": 1691892280815347, + "outputId": 4, + "inputModuleId": 2580763714379115, + "inputId": 4, + "color": "#52ffff" + }, + { + "id": 5072464099602064, + "outputModuleId": 7433032281179785, + "outputId": 0, + "inputModuleId": 3201369453135267, + "inputId": 4, + "color": "#6752ff" + }, + { + "id": 7530722628496994, + "outputModuleId": 7433032281179785, + "outputId": 0, + "inputModuleId": 2730774444988771, + "inputId": 4, + "color": "#6752ff" + }, + { + "id": 8200608424961808, + "outputModuleId": 2580763714379115, + "outputId": 0, + "inputModuleId": 7433032281179785, + "inputId": 0, + "color": "#a852ff" + }, + { + "id": 3061807858227116, + "outputModuleId": 2580763714379115, + "outputId": 0, + "inputModuleId": 7433032281179785, + "inputId": 1, + "color": "#a852ff" + }, + { + "id": 7988697270634675, + "outputModuleId": 5646145412017245, + "outputId": 2, + "inputModuleId": 7382588397539714, + "inputId": 1, + "color": "#527dff" + }, + { + "id": 7154492867378238, + "outputModuleId": 8016435651914356, + "outputId": 0, + "inputModuleId": 1233074000424232, + "inputId": 2, + "color": "#52ffbe" + }, + { + "id": 5994859036363313, + "outputModuleId": 2032233011372771, + "outputId": 0, + "inputModuleId": 8016435651914356, + "inputId": 4, + "color": "#e952ff" + }, + { + "id": 8473185137644009, + "outputModuleId": 891362589771903, + "outputId": 0, + "inputModuleId": 5418598651204386, + "inputId": 3, + "color": "#52beff" + }, + { + "id": 8537027609635289, + "outputModuleId": 5646145412017245, + "outputId": 2, + "inputModuleId": 7382588397539714, + "inputId": 3, + "color": "#a8ff52" + }, + { + "id": 7269980652293972, + "outputModuleId": 5864032949729166, + "outputId": 3, + "inputModuleId": 1691892280815347, + "inputId": 4, + "color": "#ff5252" + }, + { + "id": 7057970615240989, + "outputModuleId": 6507602521553750, + "outputId": 0, + "inputModuleId": 2378286691858201, + "inputId": 1, + "color": "#e8ff52" + }, + { + "id": 3226519042405924, + "outputModuleId": 1527334562618244, + "outputId": 0, + "inputModuleId": 2378286691858201, + "inputId": 0, + "color": "#67ff52" + }, + { + "id": 2402945299515265, + "outputModuleId": 3893327492950413, + "outputId": 0, + "inputModuleId": 6507602521553750, + "inputId": 1, + "color": "#52ff7d" + }, + { + "id": 4244874454116090, + "outputModuleId": 1233074000424232, + "outputId": 0, + "inputModuleId": 1, + "inputId": 0, + "color": "#52ffbe" + }, + { + "id": 1193512545516727, + "outputModuleId": 2378286691858201, + "outputId": 0, + "inputModuleId": 4455336980892018, + "inputId": 3, + "color": "#52ffff" + }, + { + "id": 6386216099907021, + "outputModuleId": 6747341247828307, + "outputId": 0, + "inputModuleId": 1233074000424232, + "inputId": 3, + "color": "#a8ff52" + }, + { + "id": 3572923290268663, + "outputModuleId": 4455336980892018, + "outputId": 0, + "inputModuleId": 6747341247828307, + "inputId": 3, + "color": "#52beff" + }, + { + "id": 7653802884040555, + "outputModuleId": 3385514259127415, + "outputId": 0, + "inputModuleId": 1233074000424232, + "inputId": 5, + "color": "#6752ff" + }, + { + "id": 829864317578038, + "outputModuleId": 3385514259127415, + "outputId": 0, + "inputModuleId": 1233074000424232, + "inputId": 6, + "color": "#6752ff" + }, + { + "id": 3373678828632339, + "outputModuleId": 6544530457999805, + "outputId": 0, + "inputModuleId": 1647649757935413, + "inputId": 7, + "color": "#a8ff52" + }, + { + "id": 7351430308772461, + "outputModuleId": 8418253494908594, + "outputId": 0, + "inputModuleId": 1647649757935413, + "inputId": 6, + "color": "#e952ff" + }, + { + "id": 5057619955115593, + "outputModuleId": 7206256653286977, + "outputId": 0, + "inputModuleId": 758005564709860, + "inputId": 0, + "color": "#a8ff52" + }, + { + "id": 4853090475978388, + "outputModuleId": 7206256653286977, + "outputId": 0, + "inputModuleId": 8465489170887570, + "inputId": 0, + "color": "#a8ff52" + }, + { + "id": 4526032538453288, + "outputModuleId": 7206256653286977, + "outputId": 0, + "inputModuleId": 4423007809468738, + "inputId": 0, + "color": "#a8ff52" + }, + { + "id": 3124783542336781, + "outputModuleId": 7206256653286977, + "outputId": 0, + "inputModuleId": 683104811224040, + "inputId": 0, + "color": "#a8ff52" + }, + { + "id": 565654378994967, + "outputModuleId": 1647649757935413, + "outputId": 6, + "inputModuleId": 7206256653286977, + "inputId": 0, + "color": "#e952ff" + }, + { + "id": 3261847816183455, + "outputModuleId": 1647649757935413, + "outputId": 7, + "inputModuleId": 7206256653286977, + "inputId": 1, + "color": "#ff52d4" + }, + { + "id": 8653467738162234, + "outputModuleId": 8873341177893106, + "outputId": 0, + "inputModuleId": 4531725331261861, + "inputId": 0, + "color": "#ff9352" + }, + { + "id": 763700465340890, + "outputModuleId": 4531725331261861, + "outputId": 0, + "inputModuleId": 1163131007452317, + "inputId": 1, + "color": "#ff5293" + }, + { + "id": 8958469082437437, + "outputModuleId": 4531725331261861, + "outputId": 1, + "inputModuleId": 891362589771903, + "inputId": 1, + "color": "#ff9352" + }, + { + "id": 8462724473577648, + "outputModuleId": 1647649757935413, + "outputId": 0, + "inputModuleId": 3385514259127415, + "inputId": 0, + "color": "#e8ff52" + }, + { + "id": 2589536637508587, + "outputModuleId": 1647649757935413, + "outputId": 5, + "inputModuleId": 3385514259127415, + "inputId": 1, + "color": "#a8ff52" + }, + { + "id": 5887432763805406, + "outputModuleId": 8394463014211348, + "outputId": 0, + "inputModuleId": 1647649757935413, + "inputId": 5, + "color": "#ffd452" + }, + { + "id": 7644685380405945, + "outputModuleId": 1035685351131893, + "outputId": 3, + "inputModuleId": 8394463014211348, + "inputId": 4, + "color": "#ff9352" + }, + { + "id": 471611457647672, + "outputModuleId": 1035685351131893, + "outputId": 3, + "inputModuleId": 1527334562618244, + "inputId": 4, + "color": "#ff9352" + }, + { + "id": 8041272677194580, + "outputModuleId": 1035685351131893, + "outputId": 3, + "inputModuleId": 3893327492950413, + "inputId": 4, + "color": "#ff9352" + }, + { + "id": 6914773470225645, + "outputModuleId": 1035685351131893, + "outputId": 3, + "inputModuleId": 5864032949729166, + "inputId": 4, + "color": "#ff9352" + }, + { + "id": 1224715010483309, + "outputModuleId": 1035685351131893, + "outputId": 3, + "inputModuleId": 3146744790938462, + "inputId": 4, + "color": "#ff9352" + }, + { + "id": 2586356355502803, + "outputModuleId": 5218974527740722, + "outputId": 3, + "inputModuleId": 5395301826848558, + "inputId": 4, + "color": "#ff5293" + }, + { + "id": 8944424695894162, + "outputModuleId": 5218974527740722, + "outputId": 3, + "inputModuleId": 731196840446297, + "inputId": 4, + "color": "#ff9352" + }, + { + "id": 6554274278257604, + "outputModuleId": 5218974527740722, + "outputId": 3, + "inputModuleId": 1035685351131893, + "inputId": 4, + "color": "#ff5252" + }, + { + "id": 4008697176669096, + "outputModuleId": 1527334562618244, + "outputId": 0, + "inputModuleId": 6747341247828307, + "inputId": 0, + "color": "#67ff52" + } + ] +} diff --git a/plugins/Makefile b/plugins/Makefile index bf0fd9c8..ed6c6b36 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -1192,7 +1192,7 @@ endif RESOURCE_FILES += Cardinal/res/Miku/Miku.png -# MOD builds only have LV2 FX variant for now +# MOD builds only have LV2 main and FX variant ifeq ($(MOD_BUILD),true) LV2_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) @@ -1200,6 +1200,12 @@ LV2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalFX.lv2/resources/PluginManifests LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/Cardinal.lv2/resources/%) LV2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalFX.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 += $(RESOURCE_FILES:%=../bin/CardinalNative.lv2/resources/%) + else LV2_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) @@ -1238,6 +1244,10 @@ resources: $(LV2_RESOURCES) $(VST2_RESOURCES) $(VST3_RESOURCES) -@mkdir -p "$(shell dirname $@)" $(SILENT)ln -sf $(abspath $<) $@ +../bin/CardinalNative.lv2/resources/%: % + -@mkdir -p "$(shell dirname $@)" + $(SILENT)ln -sf $(abspath $<) $@ + ../bin/CardinalSynth.lv2/resources/%: % -@mkdir -p "$(shell dirname $@)" $(SILENT)ln -sf $(abspath $<) $@ @@ -1256,6 +1266,10 @@ endif -@mkdir -p "$(shell dirname $@)" $(SILENT)ln -sf $(abspath $<) $@ +../bin/CardinalNative.lv2/resources/PluginManifests/%.json: %/plugin.json + -@mkdir -p "$(shell dirname $@)" + $(SILENT)ln -sf $(abspath $<) $@ + ../bin/CardinalSynth.lv2/resources/PluginManifests/%.json: %/plugin.json -@mkdir -p "$(shell dirname $@)" $(SILENT)ln -sf $(abspath $<) $@ diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 8ff16f3c..7e78b436 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -378,7 +378,11 @@ endif $(TARGET_DIR)/%/patches: ../../patches -@mkdir -p "$(shell dirname $@)" +ifeq ($(WASM),true) + cp -rL $< $@ +else $(SILENT)ln -sf $(abspath $<) $@ +endif $(TARGET_DIR)/$(NAME).lv2/resources/%: ../Rack/res/% -@mkdir -p "$(shell dirname $@)" diff --git a/src/emscripten/shell.html b/src/emscripten/shell.html index 7c9d5a90..f63c4f8c 100644 --- a/src/emscripten/shell.html +++ b/src/emscripten/shell.html @@ -5,7 +5,7 @@ - + Cardinal