commit 812afaf90b5d21ad71fce9b206f653a05b908e34 Author: falkTX Date: Thu Oct 7 11:00:47 2021 +0100 Initial commit Signed-off-by: falkTX diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4f327d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.a +*.d +*.o + +*.exe +*.dll +*.dylib +*.so +*.zip + +.kdev_include_paths +.kdev4/ + +bin/ +build/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..412c4fc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "plugins/CVCRack/Rack"] + path = plugins/CVCRack/Rack + url = https://github.com/VCVRack/Rack.git +[submodule "dpf"] + path = dpf + url = https://github.com/DISTRHO/DPF.git diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..dde246a --- /dev/null +++ b/Makefile @@ -0,0 +1,42 @@ +#!/usr/bin/make -f +# Makefile for DISTRHO Plugins # +# ---------------------------- # +# Created by falkTX +# + +include dpf/Makefile.base.mk + +all: dgl plugins gen + +# -------------------------------------------------------------- + +dgl: + $(MAKE) -C dpf/dgl opengl + +plugins: dgl + $(MAKE) all -C plugins/CVCRack + +ifneq ($(CROSS_COMPILING),true) +gen: plugins dpf/utils/lv2_ttl_generator + @$(CURDIR)/dpf/utils/generate-ttl.sh +ifeq ($(MACOS),true) + @$(CURDIR)/dpf/utils/generate-vst-bundles.sh +endif + +dpf/utils/lv2_ttl_generator: + $(MAKE) -C dpf/utils/lv2-ttl-generator +else +gen: +endif + +# -------------------------------------------------------------- + +clean: + $(MAKE) clean -C dpf/dgl + $(MAKE) clean -C dpf/utils/lv2-ttl-generator + $(MAKE) clean -C plugins/CVCRack + rm -rf bin build + +# -------------------------------------------------------------- + +.PHONY: plugins diff --git a/README.md b/README.md new file mode 100644 index 0000000..a1c2e1d --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# DISTRHO CVCRack + +WORK IN PROGRESS + +This is a DPF'ied build of [VCVRack](https://github.com/VCVRack/Rack), allowing it to be used as an audio plugin. diff --git a/dpf b/dpf new file mode 160000 index 0000000..f79095a --- /dev/null +++ b/dpf @@ -0,0 +1 @@ +Subproject commit f79095abdeb7442121f9f26adc53b87352f04e26 diff --git a/plugins/CVCRack/CVCRackPlugin.cpp b/plugins/CVCRack/CVCRackPlugin.cpp new file mode 100644 index 0000000..6375e81 --- /dev/null +++ b/plugins/CVCRack/CVCRackPlugin.cpp @@ -0,0 +1,138 @@ +/* + * DISTRHO CVCRack Plugin + * Copyright (C) 2021 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 "DistrhoPlugin.hpp" + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------------------------------------------- + +/** + Plugin to demonstrate parameter outputs using meters. + */ +class CVCRackPlugin : public Plugin +{ +public: + CVCRackPlugin() + : Plugin(0, 0, 0) + { + } + +protected: + /* -------------------------------------------------------------------------------------------------------- + * Information */ + + /** + Get the plugin label. + A plugin label follows the same rules as Parameter::symbol, with the exception that it can start with numbers. + */ + const char* getLabel() const override + { + return "CVCRack"; + } + + /** + Get an extensive comment/description about the plugin. + */ + const char* getDescription() const override + { + return "..."; + } + + /** + Get the plugin author/maker. + */ + const char* getMaker() const override + { + return "DISTRHO"; + } + + /** + Get the plugin homepage. + */ + const char* getHomePage() const override + { + return "https://github.com/DISTRHO/CVCRack"; + } + + /** + Get the plugin license name (a single line of text). + For commercial plugins this should return some short copyright information. + */ + const char* getLicense() const override + { + return "ISC"; + } + + /** + Get the plugin version, in hexadecimal. + */ + uint32_t getVersion() const override + { + return d_version(1, 0, 0); + } + + /** + Get the plugin unique Id. + This value is used by LADSPA, DSSI and VST plugin formats. + */ + int64_t getUniqueId() const override + { + return d_cconst('d', 'C', 'V', 'C'); + } + + /* -------------------------------------------------------------------------------------------------------- + * Init */ + + /* -------------------------------------------------------------------------------------------------------- + * Internal data */ + + /* -------------------------------------------------------------------------------------------------------- + * Process */ + + /** + Run/process function for plugins without MIDI input. + */ + void run(const float** inputs, float** outputs, uint32_t frames) override + { + // copy inputs over outputs if needed + if (outputs[0] != inputs[0]) + std::memcpy(outputs[0], inputs[0], sizeof(float)*frames); + + if (outputs[1] != inputs[1]) + std::memcpy(outputs[1], inputs[1], sizeof(float)*frames); + } + + // ------------------------------------------------------------------------------------------------------- + +private: + /** + Set our plugin class as non-copyable and add a leak detector just in case. + */ + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CVCRackPlugin) +}; + +/* ------------------------------------------------------------------------------------------------------------ + * Plugin entry point, called by DPF to create a new plugin instance. */ + +Plugin* createPlugin() +{ + return new CVCRackPlugin(); +} + +// ----------------------------------------------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO diff --git a/plugins/CVCRack/CVCRackUI.cpp b/plugins/CVCRack/CVCRackUI.cpp new file mode 100644 index 0000000..d867f5e --- /dev/null +++ b/plugins/CVCRack/CVCRackUI.cpp @@ -0,0 +1,73 @@ +/* + * DISTRHO CVCRack Plugin + * Copyright (C) 2021 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 "DistrhoUI.hpp" + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------------------------------------------- + +class CVCRackUI : public UI +{ +public: + CVCRackUI() + : UI(128, 512) + { + setGeometryConstraints(32, 128, false); + } + +protected: + /* -------------------------------------------------------------------------------------------------------- + * DSP/Plugin Callbacks */ + + /** + A parameter has changed on the plugin side. + This is called by the host to inform the UI about parameter changes. + */ + void parameterChanged(uint32_t index, float value) override + { + } + + /* -------------------------------------------------------------------------------------------------------- + * Widget Callbacks */ + + /** + The drawing function. + */ + void onDisplay() override + { + } + + // ------------------------------------------------------------------------------------------------------- + +private: + /** + Set our UI class as non-copyable and add a leak detector just in case. + */ + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CVCRackUI) +}; + +/* ------------------------------------------------------------------------------------------------------------ + * UI entry point, called by DPF to create a new UI instance. */ + +UI* createUI() +{ + return new CVCRackUI(); +} + +// ----------------------------------------------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO diff --git a/plugins/CVCRack/DistrhoPluginInfo.h b/plugins/CVCRack/DistrhoPluginInfo.h new file mode 100644 index 0000000..ec1fe13 --- /dev/null +++ b/plugins/CVCRack/DistrhoPluginInfo.h @@ -0,0 +1,37 @@ +/* + * DISTRHO CVCRack 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 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 license see the LICENSE file. + */ + +#ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED +#define DISTRHO_PLUGIN_INFO_H_INCLUDED + +#define DISTRHO_PLUGIN_BRAND "DISTRHO" +#define DISTRHO_PLUGIN_NAME "CVCRack" +#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/glBars" + +#define DISTRHO_PLUGIN_HAS_UI 1 +#define DISTRHO_PLUGIN_NUM_INPUTS 2 +#define DISTRHO_PLUGIN_NUM_OUTPUTS 2 +#define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1 +// #define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:AnalyserPlugin" +// #define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Analyzer" +#define DISTRHO_UI_USER_RESIZABLE 1 + +enum Parameters { + kParameterCount +}; + +#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED diff --git a/plugins/CVCRack/Makefile b/plugins/CVCRack/Makefile new file mode 100644 index 0000000..df133ab --- /dev/null +++ b/plugins/CVCRack/Makefile @@ -0,0 +1,105 @@ +#!/usr/bin/make -f +# Makefile for DISTRHO Plugins # +# ---------------------------- # +# Created by falkTX +# + +# -------------------------------------------------------------- +# Project name, used for binaries + +NAME = CVCRack + +# -------------------------------------------------------------- +# Files to build (DPF stuff) + +FILES_DSP = \ + CVCRackPlugin.cpp + +FILES_UI = \ + CVCRackUI.cpp + +# -------------------------------------------------------------- +# Files to build (VCV stuff) + +FILES_DSP += Rack/dep/pffft/pffft.c +FILES_DSP += Rack/dep/pffft/fftpack.c + +# FILES_DSP += Rack/build/src/common.cpp + +FILES_UI += Rack/dep/oui-blendish/blendish.c +FILES_UI += Rack/dep/nanovg/src/nanovg.c +FILES_UI += Rack/dep/glfw/deps/glad.c + +# FIXME +FILES_UI += Rack/dep/osdialog/osdialog.c +FILES_UI += Rack/dep/osdialog/osdialog_zenity.c + +FILES_DSP += $(wildcard Rack/src/*.c) +FILES_DSP += $(wildcard Rack/src/*/*.c) +# TODO filter out src/rtaudio.cpp src/rtmidi.cpp +FILES_DSP += $(wildcard Rack/src/*.cpp) +FILES_DSP += $(wildcard Rack/src/*/*.cpp) + +EXTRA_LIBS = Rack/dep/lib/libglfw3.a +EXTRA_LIBS += Rack/dep/lib/libjansson.a +EXTRA_LIBS += Rack/dep/lib/libspeexdsp.a + +# ifeq ($(LINUX),true) +EXTRA_LIBS += Rack/dep/lib/libGLEW.a +# endif + +# ifeq ($(MACOS),true) +# EXTRA_LIBS += Rack/dep/lib/libGLEW.a +# endif +# +# ifeq ($(WINDOWS),true) +# EXTRA_LIBS += Rack/dep/lib/libglew32.a +# endif + +# -------------------------------------------------------------- + +Rack/dep/lib/%.a: + $(MAKE) -C Rack/dep lib/$*.a + +# -------------------------------------------------------------- +# Do some magic + +include ../../dpf/Makefile.plugins.mk + +# -------------------------------------------------------------- +# Extra flags for VCV stuff + +BASE_FLAGS += -D_APP_VERSION=2.git.0 +BASE_FLAGS += -IRack/include +BASE_FLAGS += -IRack/dep/include +BASE_FLAGS += -IRack/dep/filesystem/include +BASE_FLAGS += -IRack/dep/fuzzysearchdatabase/src +BASE_FLAGS += -IRack/dep/glfw/deps +BASE_FLAGS += -IRack/dep/nanovg/src +BASE_FLAGS += -IRack/dep/nanosvg/src +BASE_FLAGS += -IRack/dep/osdialog +BASE_FLAGS += -IRack/dep/oui-blendish +BASE_FLAGS += -IRack/dep/pffft + +ifeq ($(MACOS),true) +BASE_FLAGS += -DARCH_MAC +else ifeq ($(WINDOWS),true) +BASE_FLAGS += -DARCH_WIN +else +BASE_FLAGS += -DARCH_LIN +endif + +# FIXME +BASE_FLAGS += -Wno-unused-parameter +BASE_FLAGS += -Wno-unused-variable + +LINK_FLAGS += -lpthread -ldl + +# -------------------------------------------------------------- +# Enable all possible plugin types + +TARGETS = jack lv2 vst2 vst3 + +all: $(TARGETS) + +# -------------------------------------------------------------- diff --git a/plugins/CVCRack/Rack b/plugins/CVCRack/Rack new file mode 160000 index 0000000..042a9ce --- /dev/null +++ b/plugins/CVCRack/Rack @@ -0,0 +1 @@ +Subproject commit 042a9ce026d253700ea14e340182900162ab4653