| @@ -0,0 +1,13 @@ | |||||
| *.a | |||||
| *.o | |||||
| *.exe | |||||
| *.dll | |||||
| *.dylib | |||||
| *.so | |||||
| .kdev_include_paths | |||||
| .kdev4/ | |||||
| bin/*-dssi/ | |||||
| bin/*.lv2/ | |||||
| @@ -0,0 +1,3 @@ | |||||
| [submodule "dpf"] | |||||
| path = dpf | |||||
| url = git://github.com/DISTRHO/DPF | |||||
| @@ -0,0 +1,165 @@ | |||||
| GNU LESSER GENERAL PUBLIC LICENSE | |||||
| Version 3, 29 June 2007 | |||||
| Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | |||||
| Everyone is permitted to copy and distribute verbatim copies | |||||
| of this license document, but changing it is not allowed. | |||||
| This version of the GNU Lesser General Public License incorporates | |||||
| the terms and conditions of version 3 of the GNU General Public | |||||
| License, supplemented by the additional permissions listed below. | |||||
| 0. Additional Definitions. | |||||
| As used herein, "this License" refers to version 3 of the GNU Lesser | |||||
| General Public License, and the "GNU GPL" refers to version 3 of the GNU | |||||
| General Public License. | |||||
| "The Library" refers to a covered work governed by this License, | |||||
| other than an Application or a Combined Work as defined below. | |||||
| An "Application" is any work that makes use of an interface provided | |||||
| by the Library, but which is not otherwise based on the Library. | |||||
| Defining a subclass of a class defined by the Library is deemed a mode | |||||
| of using an interface provided by the Library. | |||||
| A "Combined Work" is a work produced by combining or linking an | |||||
| Application with the Library. The particular version of the Library | |||||
| with which the Combined Work was made is also called the "Linked | |||||
| Version". | |||||
| The "Minimal Corresponding Source" for a Combined Work means the | |||||
| Corresponding Source for the Combined Work, excluding any source code | |||||
| for portions of the Combined Work that, considered in isolation, are | |||||
| based on the Application, and not on the Linked Version. | |||||
| The "Corresponding Application Code" for a Combined Work means the | |||||
| object code and/or source code for the Application, including any data | |||||
| and utility programs needed for reproducing the Combined Work from the | |||||
| Application, but excluding the System Libraries of the Combined Work. | |||||
| 1. Exception to Section 3 of the GNU GPL. | |||||
| You may convey a covered work under sections 3 and 4 of this License | |||||
| without being bound by section 3 of the GNU GPL. | |||||
| 2. Conveying Modified Versions. | |||||
| If you modify a copy of the Library, and, in your modifications, a | |||||
| facility refers to a function or data to be supplied by an Application | |||||
| that uses the facility (other than as an argument passed when the | |||||
| facility is invoked), then you may convey a copy of the modified | |||||
| version: | |||||
| a) under this License, provided that you make a good faith effort to | |||||
| ensure that, in the event an Application does not supply the | |||||
| function or data, the facility still operates, and performs | |||||
| whatever part of its purpose remains meaningful, or | |||||
| b) under the GNU GPL, with none of the additional permissions of | |||||
| this License applicable to that copy. | |||||
| 3. Object Code Incorporating Material from Library Header Files. | |||||
| The object code form of an Application may incorporate material from | |||||
| a header file that is part of the Library. You may convey such object | |||||
| code under terms of your choice, provided that, if the incorporated | |||||
| material is not limited to numerical parameters, data structure | |||||
| layouts and accessors, or small macros, inline functions and templates | |||||
| (ten or fewer lines in length), you do both of the following: | |||||
| a) Give prominent notice with each copy of the object code that the | |||||
| Library is used in it and that the Library and its use are | |||||
| covered by this License. | |||||
| b) Accompany the object code with a copy of the GNU GPL and this license | |||||
| document. | |||||
| 4. Combined Works. | |||||
| You may convey a Combined Work under terms of your choice that, | |||||
| taken together, effectively do not restrict modification of the | |||||
| portions of the Library contained in the Combined Work and reverse | |||||
| engineering for debugging such modifications, if you also do each of | |||||
| the following: | |||||
| a) Give prominent notice with each copy of the Combined Work that | |||||
| the Library is used in it and that the Library and its use are | |||||
| covered by this License. | |||||
| b) Accompany the Combined Work with a copy of the GNU GPL and this license | |||||
| document. | |||||
| c) For a Combined Work that displays copyright notices during | |||||
| execution, include the copyright notice for the Library among | |||||
| these notices, as well as a reference directing the user to the | |||||
| copies of the GNU GPL and this license document. | |||||
| d) Do one of the following: | |||||
| 0) Convey the Minimal Corresponding Source under the terms of this | |||||
| License, and the Corresponding Application Code in a form | |||||
| suitable for, and under terms that permit, the user to | |||||
| recombine or relink the Application with a modified version of | |||||
| the Linked Version to produce a modified Combined Work, in the | |||||
| manner specified by section 6 of the GNU GPL for conveying | |||||
| Corresponding Source. | |||||
| 1) Use a suitable shared library mechanism for linking with the | |||||
| Library. A suitable mechanism is one that (a) uses at run time | |||||
| a copy of the Library already present on the user's computer | |||||
| system, and (b) will operate properly with a modified version | |||||
| of the Library that is interface-compatible with the Linked | |||||
| Version. | |||||
| e) Provide Installation Information, but only if you would otherwise | |||||
| be required to provide such information under section 6 of the | |||||
| GNU GPL, and only to the extent that such information is | |||||
| necessary to install and execute a modified version of the | |||||
| Combined Work produced by recombining or relinking the | |||||
| Application with a modified version of the Linked Version. (If | |||||
| you use option 4d0, the Installation Information must accompany | |||||
| the Minimal Corresponding Source and Corresponding Application | |||||
| Code. If you use option 4d1, you must provide the Installation | |||||
| Information in the manner specified by section 6 of the GNU GPL | |||||
| for conveying Corresponding Source.) | |||||
| 5. Combined Libraries. | |||||
| You may place library facilities that are a work based on the | |||||
| Library side by side in a single library together with other library | |||||
| facilities that are not Applications and are not covered by this | |||||
| License, and convey such a combined library under terms of your | |||||
| choice, if you do both of the following: | |||||
| a) Accompany the combined library with a copy of the same work based | |||||
| on the Library, uncombined with any other library facilities, | |||||
| conveyed under the terms of this License. | |||||
| b) Give prominent notice with the combined library that part of it | |||||
| is a work based on the Library, and explaining where to find the | |||||
| accompanying uncombined form of the same work. | |||||
| 6. Revised Versions of the GNU Lesser General Public License. | |||||
| The Free Software Foundation may publish revised and/or new versions | |||||
| of the GNU Lesser 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 | |||||
| Library as you received it specifies that a certain numbered version | |||||
| of the GNU Lesser General Public License "or any later version" | |||||
| applies to it, you have the option of following the terms and | |||||
| conditions either of that published version or of any later version | |||||
| published by the Free Software Foundation. If the Library as you | |||||
| received it does not specify a version number of the GNU Lesser | |||||
| General Public License, you may choose any version of the GNU Lesser | |||||
| General Public License ever published by the Free Software Foundation. | |||||
| If the Library as you received it specifies that a proxy can decide | |||||
| whether future versions of the GNU Lesser General Public License shall | |||||
| apply, that proxy's public statement of acceptance of any version is | |||||
| permanent authorization for you to choose that version for the | |||||
| Library. | |||||
| @@ -0,0 +1,32 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for DISTRHO Plugins # | |||||
| # ---------------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| all: libs plugins gen | |||||
| # -------------------------------------------------------------- | |||||
| libs: | |||||
| $(MAKE) -C dpf/dgl | |||||
| plugins: libs | |||||
| $(MAKE) -C plugins/ProM | |||||
| gen: plugins dpf/utils/lv2_ttl_generator | |||||
| @$(CURDIR)/dpf/utils/generate-ttl.sh | |||||
| dpf/utils/lv2_ttl_generator: | |||||
| $(MAKE) -C dpf/utils/lv2-ttl-generator | |||||
| # -------------------------------------------------------------- | |||||
| clean: | |||||
| $(MAKE) clean -C dpf/dgl | |||||
| $(MAKE) clean -C dpf/utils/lv2-ttl-generator | |||||
| $(MAKE) clean -C plugins/ProM | |||||
| # -------------------------------------------------------------- | |||||
| .PHONY: libs plugins | |||||
| @@ -0,0 +1,113 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for DISTRHO Plugins # | |||||
| # ---------------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| CC ?= gcc | |||||
| CXX ?= g++ | |||||
| # -------------------------------------------------------------- | |||||
| # Fallback to Linux if no other OS defined | |||||
| ifneq ($(HAIKU),true) | |||||
| ifneq ($(MACOS),true) | |||||
| ifneq ($(WIN32),true) | |||||
| LINUX=true | |||||
| endif | |||||
| endif | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Common build and link flags | |||||
| BASE_FLAGS = -Wall -Wextra -pipe | |||||
| BASE_OPTS = -O2 -ffast-math -mtune=generic -msse -msse2 -mfpmath=sse -fdata-sections -ffunction-sections | |||||
| LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-O1 -Wl,--as-needed -Wl,--gc-sections -Wl,--strip-all | |||||
| ifeq ($(MACOS),true) | |||||
| # MacOS linker flags | |||||
| LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs | |||||
| endif | |||||
| ifeq ($(RASPPI),true) | |||||
| # Raspberry-Pi optimization flags | |||||
| BASE_OPTS = -O2 -ffast-math -march=armv6 -mfpu=vfp -mfloat-abi=hard | |||||
| LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all | |||||
| endif | |||||
| ifneq ($(WIN32),true) | |||||
| # not needed for Windows | |||||
| BASE_FLAGS += -fPIC -DPIC | |||||
| endif | |||||
| ifeq ($(DEBUG),true) | |||||
| BASE_FLAGS += -DDEBUG -O0 -g | |||||
| LINK_OPTS = | |||||
| else | |||||
| BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden | |||||
| CXXFLAGS += -fvisibility-inlines-hidden | |||||
| LINK_OPTS += -Wl,--strip-all | |||||
| endif | |||||
| BUILD_C_FLAGS = $(BASE_FLAGS) -std=c99 -std=gnu99 $(CFLAGS) | |||||
| BUILD_CXX_FLAGS = $(BASE_FLAGS) -std=c++0x -std=gnu++0x $(CXXFLAGS) | |||||
| LINK_FLAGS = $(LINK_OPTS) -Wl,--no-undefined $(LDFLAGS) | |||||
| ifeq ($(MACOS),true) | |||||
| # No C++11 support | |||||
| BUILD_CXX_FLAGS = $(BASE_FLAGS) $(CXXFLAGS) | |||||
| LINK_FLAGS = $(LINK_OPTS) $(LDFLAGS) | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Check for required libs | |||||
| ifeq ($(LINUX),true) | |||||
| ifneq ($(shell pkg-config --exists gl && echo true),true) | |||||
| $(error OpenGL missing, cannot continue) | |||||
| endif | |||||
| ifneq ($(shell pkg-config --exists x11 && echo true),true) | |||||
| $(error X11 missing, cannot continue) | |||||
| endif | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Set libs stuff | |||||
| ifeq ($(LINUX),true) | |||||
| DGL_FLAGS = $(shell pkg-config --cflags gl x11) | |||||
| DGL_LIBS = $(shell pkg-config --libs gl x11) | |||||
| endif | |||||
| ifeq ($(MACOS),true) | |||||
| DGL_LIBS = -framework OpenGL -framework Cocoa | |||||
| endif | |||||
| ifeq ($(WIN32),true) | |||||
| DGL_LIBS = -lopengl32 -lgdi32 | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Set extension | |||||
| EXT = so | |||||
| ifeq ($(MACOS),true) | |||||
| EXT = dylib | |||||
| endif | |||||
| ifeq ($(WIN32),true) | |||||
| EXT = dll | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Set shared library CLI arg | |||||
| SHARED = -shared | |||||
| ifeq ($(MACOS),true) | |||||
| SHARED = -dynamiclib | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| @@ -0,0 +1,7 @@ | |||||
| # DISTRHO ProM | |||||
| [projectM](http://projectm.sourceforge.net/) is an awesome music visualizer.<br/> | |||||
| DISTRHO ProM makes it work as an audio plugin (LV2 and VST).<br/> | |||||
| ## Screenshot | |||||
| <br/> | |||||
| @@ -0,0 +1,3 @@ | |||||
| All final plugin builds will be placed in this folder. | |||||
| There is no "make install" process, simply copy those files to their appropriate place. | |||||
| @@ -0,0 +1 @@ | |||||
| Subproject commit e03cea028ed891ba253e23896223b09b016c5da6 | |||||
| @@ -0,0 +1,69 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for DISTRHO Plugins # | |||||
| # ---------------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| # NAME, OBJS_DSP and OBJS_UI have been defined before | |||||
| include ../../Makefile.mk | |||||
| # -------------------------------------------------------------- | |||||
| # Basic setup | |||||
| TARGET_DIR = ../../bin | |||||
| BUILD_C_FLAGS += -I. | |||||
| BUILD_CXX_FLAGS += -I. -I../../dpf/distrho -I../../dpf/dgl | |||||
| # -------------------------------------------------------------- | |||||
| # Enable all possible plugin types | |||||
| all: lv2 vst | |||||
| # -------------------------------------------------------------- | |||||
| # Set plugin binary file targets | |||||
| lv2 = $(TARGET_DIR)/$(NAME).lv2/$(NAME).$(EXT) | |||||
| vst = $(TARGET_DIR)/$(NAME)-vst.$(EXT) | |||||
| # TODO: MacOS VST bundle | |||||
| # -------------------------------------------------------------- | |||||
| # Set distrho code files | |||||
| DISTRHO_PLUGIN_FILES = ../../dpf/distrho/DistrhoPluginMain.cpp | |||||
| DISTRHO_UI_FILES = ../../dpf/distrho/DistrhoUIMain.cpp ../../dpf/libdgl.a | |||||
| # -------------------------------------------------------------- | |||||
| # Common | |||||
| %.c.o: %.c | |||||
| $(CC) $< $(BUILD_C_FLAGS) -c -o $@ | |||||
| %.cpp.o: %.cpp | |||||
| $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ | |||||
| clean: | |||||
| rm -f *.o | |||||
| rm -rf $(TARGET_DIR)/$(NAME)-* $(TARGET_DIR)/$(NAME).lv2/ | |||||
| # -------------------------------------------------------------- | |||||
| # LV2 | |||||
| lv2: $(lv2) | |||||
| $(lv2): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell pkg-config --libs libprojectM) -lpthread $(SHARED) -DDISTRHO_PLUGIN_TARGET_LV2 -o $@ | |||||
| # -------------------------------------------------------------- | |||||
| # VST | |||||
| vst: $(vst) | |||||
| $(vst): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell pkg-config --libs libprojectM) -lpthread $(SHARED) -DDISTRHO_PLUGIN_TARGET_VST -o $@ | |||||
| # -------------------------------------------------------------- | |||||
| @@ -0,0 +1,37 @@ | |||||
| /* | |||||
| * DISTRHO ProM Plugin | |||||
| * Copyright (C) 2014 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation. | |||||
| * | |||||
| * 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 Lesser 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_NAME "ProM" | |||||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||||
| #define DISTRHO_PLUGIN_IS_SYNTH 0 | |||||
| #define DISTRHO_PLUGIN_NUM_INPUTS 1 | |||||
| #define DISTRHO_PLUGIN_NUM_OUTPUTS 1 | |||||
| #define DISTRHO_PLUGIN_WANT_LATENCY 0 | |||||
| #define DISTRHO_PLUGIN_WANT_PROGRAMS 0 | |||||
| #define DISTRHO_PLUGIN_WANT_STATE 0 | |||||
| #define DISTRHO_PLUGIN_WANT_TIMEPOS 0 | |||||
| #define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1 | |||||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/ProM" | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -0,0 +1,84 @@ | |||||
| /* | |||||
| * DISTRHO ProM Plugin | |||||
| * Copyright (C) 2014 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation. | |||||
| * | |||||
| * 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 Lesser General Public License for more details. | |||||
| * | |||||
| * For a full copy of the license see the LICENSE file. | |||||
| */ | |||||
| #include "DistrhoPluginProM.hpp" | |||||
| #include "libprojectM/projectM.hpp" | |||||
| START_NAMESPACE_DISTRHO | |||||
| // ----------------------------------------------------------------------- | |||||
| DistrhoPluginProM::DistrhoPluginProM() | |||||
| : Plugin(0, 0, 0), | |||||
| fPM(nullptr) | |||||
| { | |||||
| } | |||||
| DistrhoPluginProM::~DistrhoPluginProM() | |||||
| { | |||||
| DISTRHO_SAFE_ASSERT(fPM == nullptr); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // Init | |||||
| void DistrhoPluginProM::d_initParameter(uint32_t, Parameter&) | |||||
| { | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // Internal data | |||||
| float DistrhoPluginProM::d_getParameterValue(uint32_t) const | |||||
| { | |||||
| return 0.0f; | |||||
| } | |||||
| void DistrhoPluginProM::d_setParameterValue(uint32_t, float) | |||||
| { | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // Process | |||||
| void DistrhoPluginProM::d_run(const float** inputs, float** outputs, uint32_t frames) | |||||
| { | |||||
| const float* in = inputs[0]; | |||||
| float* out = outputs[0]; | |||||
| if (in != out) | |||||
| std::memcpy(out, in, sizeof(float)*frames); | |||||
| const MutexLocker csm(fMutex); | |||||
| if (fPM == nullptr) | |||||
| return; | |||||
| if (PCM* const pcm = fPM->pcm()) | |||||
| pcm->addPCMfloat(in, frames); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| Plugin* createPlugin() | |||||
| { | |||||
| return new DistrhoPluginProM(); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| @@ -0,0 +1,96 @@ | |||||
| /* | |||||
| * DISTRHO ProM Plugin | |||||
| * Copyright (C) 2014 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation. | |||||
| * | |||||
| * 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 Lesser General Public License for more details. | |||||
| * | |||||
| * For a full copy of the license see the LICENSE file. | |||||
| */ | |||||
| #ifndef DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| #define DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| #include "DistrhoPlugin.hpp" | |||||
| #include "extra/d_mutex.hpp" | |||||
| class projectM; | |||||
| class DistrhoUIProM; | |||||
| START_NAMESPACE_DISTRHO | |||||
| // ----------------------------------------------------------------------- | |||||
| class DistrhoPluginProM : public Plugin | |||||
| { | |||||
| public: | |||||
| DistrhoPluginProM(); | |||||
| ~DistrhoPluginProM() override; | |||||
| protected: | |||||
| // ------------------------------------------------------------------- | |||||
| // Information | |||||
| const char* d_getLabel() const noexcept override | |||||
| { | |||||
| return "ProM"; | |||||
| } | |||||
| const char* d_getMaker() const noexcept override | |||||
| { | |||||
| return "DISTRHO"; | |||||
| } | |||||
| const char* d_getLicense() const noexcept override | |||||
| { | |||||
| return "LGPL"; | |||||
| } | |||||
| uint32_t d_getVersion() const noexcept override | |||||
| { | |||||
| return 0x1000; | |||||
| } | |||||
| long d_getUniqueId() const noexcept override | |||||
| { | |||||
| return d_cconst('D', 'P', 'r', 'M'); | |||||
| } | |||||
| // ------------------------------------------------------------------- | |||||
| // Init | |||||
| void d_initParameter(uint32_t, Parameter&) override; | |||||
| // ------------------------------------------------------------------- | |||||
| // Internal data | |||||
| float d_getParameterValue(uint32_t) const override; | |||||
| void d_setParameterValue(uint32_t, float) override; | |||||
| // ------------------------------------------------------------------- | |||||
| // Process | |||||
| void d_run(const float** inputs, float** outputs, uint32_t frames) override; | |||||
| // ------------------------------------------------------------------- | |||||
| private: | |||||
| Mutex fMutex; | |||||
| projectM* fPM; | |||||
| friend class DistrhoUIProM; | |||||
| DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoPluginProM) | |||||
| }; | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| #endif // DISTRHO_PLUGIN_3BANDEQ_HPP_INCLUDED | |||||
| @@ -0,0 +1,293 @@ | |||||
| /* | |||||
| * DISTRHO ProM Plugin | |||||
| * Copyright (C) 2014 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation. | |||||
| * | |||||
| * 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 Lesser General Public License for more details. | |||||
| * | |||||
| * For a full copy of the license see the LICENSE file. | |||||
| */ | |||||
| #include "DistrhoPluginProM.hpp" | |||||
| #include "DistrhoUIProM.hpp" | |||||
| #include "libprojectM/projectM.hpp" | |||||
| START_NAMESPACE_DISTRHO | |||||
| // ----------------------------------------------------------------------- | |||||
| static const projectM::Settings kSettings = { | |||||
| /* meshX */ 32, | |||||
| /* meshY */ 24, | |||||
| /* fps */ 35, | |||||
| /* textureSize */ 1024, | |||||
| /* windowWidth */ 512, | |||||
| /* windowHeight */ 512, | |||||
| /* presetURL */ "/usr/share/projectM/presets", | |||||
| /* titleFontURL */ "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", | |||||
| /* menuFontURL */ "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf", | |||||
| /* smoothPresetDuration */ 5, | |||||
| /* presetDuration */ 30, | |||||
| /* beatSensitivity */ 10.0f, | |||||
| /* aspectCorrection */ true, | |||||
| /* easterEgg */ 1.0f, | |||||
| /* shuffleEnabled */ true, | |||||
| /* softCutRatingsEnabled */ false | |||||
| }; | |||||
| // ----------------------------------------------------------------------- | |||||
| DistrhoUIProM::DistrhoUIProM() | |||||
| : UI() | |||||
| { | |||||
| } | |||||
| DistrhoUIProM::~DistrhoUIProM() | |||||
| { | |||||
| if (DistrhoPluginProM* const dspPtr = (DistrhoPluginProM*)d_getPluginInstancePointer()) | |||||
| { | |||||
| const MutexLocker csm(dspPtr->fMutex); | |||||
| dspPtr->fPM = nullptr; | |||||
| } | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // DSP Callbacks | |||||
| void DistrhoUIProM::d_parameterChanged(uint32_t, float) | |||||
| { | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // UI Callbacks | |||||
| void DistrhoUIProM::d_uiIdle() | |||||
| { | |||||
| if (fPM == nullptr) | |||||
| return; | |||||
| repaint(); | |||||
| if (DistrhoPluginProM* const dspPtr = (DistrhoPluginProM*)d_getPluginInstancePointer()) | |||||
| { | |||||
| if (dspPtr->fPM != nullptr) | |||||
| return; | |||||
| const MutexLocker csm(dspPtr->fMutex); | |||||
| dspPtr->fPM = fPM; | |||||
| } | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // Widget Callbacks | |||||
| void DistrhoUIProM::onDisplay() | |||||
| { | |||||
| if (fPM == nullptr) | |||||
| return; | |||||
| fPM->renderFrame(); | |||||
| } | |||||
| bool DistrhoUIProM::onKeyboard(bool press, uint32_t key) | |||||
| { | |||||
| if (fPM == nullptr) | |||||
| return false; | |||||
| projectMKeycode pmKey = PROJECTM_K_NONE; | |||||
| projectMModifier pmMod = PROJECTM_KMOD_LSHIFT; | |||||
| if ((key >= PROJECTM_K_0 && key <= PROJECTM_K_9) || | |||||
| (key >= PROJECTM_K_A && key <= PROJECTM_K_Z) || | |||||
| (key >= PROJECTM_K_a && key <= PROJECTM_K_z)) | |||||
| { | |||||
| pmKey = static_cast<projectMKeycode>(key); | |||||
| } | |||||
| else | |||||
| { | |||||
| switch (key) | |||||
| { | |||||
| case DGL::CHAR_BACKSPACE: | |||||
| pmKey = PROJECTM_K_BACKSPACE; | |||||
| break; | |||||
| case DGL::CHAR_ESCAPE: | |||||
| pmKey = PROJECTM_K_ESCAPE; | |||||
| break; | |||||
| case DGL::CHAR_DELETE: | |||||
| pmKey = PROJECTM_K_DELETE; | |||||
| break; | |||||
| } | |||||
| } | |||||
| if (pmKey == PROJECTM_K_NONE) | |||||
| return false; | |||||
| if (const int mod = getModifiers()) | |||||
| { | |||||
| if (mod & DGL::MODIFIER_CTRL) | |||||
| pmMod = PROJECTM_KMOD_LCTRL; | |||||
| } | |||||
| fPM->key_handler(press ? PROJECTM_KEYUP : PROJECTM_KEYDOWN, pmKey, pmMod); | |||||
| return true; | |||||
| } | |||||
| bool DistrhoUIProM::onSpecial(bool press, uint key) | |||||
| { | |||||
| if (fPM == nullptr) | |||||
| return false; | |||||
| projectMKeycode pmKey = PROJECTM_K_NONE; | |||||
| projectMModifier pmMod = PROJECTM_KMOD_LSHIFT; | |||||
| switch (key) | |||||
| { | |||||
| case DGL::KEY_F1: | |||||
| pmKey = PROJECTM_K_F1; | |||||
| break; | |||||
| case DGL::KEY_F2: | |||||
| pmKey = PROJECTM_K_F2; | |||||
| break; | |||||
| case DGL::KEY_F3: | |||||
| pmKey = PROJECTM_K_F3; | |||||
| break; | |||||
| case DGL::KEY_F4: | |||||
| pmKey = PROJECTM_K_F4; | |||||
| break; | |||||
| case DGL::KEY_F5: | |||||
| pmKey = PROJECTM_K_F5; | |||||
| break; | |||||
| case DGL::KEY_F6: | |||||
| pmKey = PROJECTM_K_F6; | |||||
| break; | |||||
| case DGL::KEY_F7: | |||||
| pmKey = PROJECTM_K_F7; | |||||
| break; | |||||
| case DGL::KEY_F8: | |||||
| pmKey = PROJECTM_K_F8; | |||||
| break; | |||||
| case DGL::KEY_F9: | |||||
| pmKey = PROJECTM_K_F9; | |||||
| break; | |||||
| case DGL::KEY_F10: | |||||
| pmKey = PROJECTM_K_F10; | |||||
| break; | |||||
| case DGL::KEY_F11: | |||||
| pmKey = PROJECTM_K_F11; | |||||
| break; | |||||
| case DGL::KEY_F12: | |||||
| pmKey = PROJECTM_K_F12; | |||||
| break; | |||||
| case DGL::KEY_LEFT: | |||||
| pmKey = PROJECTM_K_LEFT; | |||||
| break; | |||||
| case DGL::KEY_UP: | |||||
| pmKey = PROJECTM_K_UP; | |||||
| break; | |||||
| case DGL::KEY_RIGHT: | |||||
| pmKey = PROJECTM_K_RIGHT; | |||||
| break; | |||||
| case DGL::KEY_DOWN: | |||||
| pmKey = PROJECTM_K_DOWN; | |||||
| break; | |||||
| case DGL::KEY_PAGE_UP: | |||||
| pmKey = PROJECTM_K_PAGEUP; | |||||
| break; | |||||
| case DGL::KEY_PAGE_DOWN: | |||||
| pmKey = PROJECTM_K_PAGEDOWN; | |||||
| break; | |||||
| case DGL::KEY_HOME: | |||||
| pmKey = PROJECTM_K_HOME; | |||||
| break; | |||||
| case DGL::KEY_END: | |||||
| pmKey = PROJECTM_K_END; | |||||
| break; | |||||
| case DGL::KEY_INSERT: | |||||
| pmKey = PROJECTM_K_INSERT; | |||||
| break; | |||||
| case DGL::KEY_SHIFT: | |||||
| pmKey = PROJECTM_K_LSHIFT; | |||||
| break; | |||||
| case DGL::KEY_CTRL: | |||||
| pmKey = PROJECTM_K_LCTRL; | |||||
| break; | |||||
| case DGL::KEY_ALT: | |||||
| case DGL::KEY_SUPER: | |||||
| break; | |||||
| } | |||||
| if (pmKey == PROJECTM_K_NONE) | |||||
| return false; | |||||
| if (const int mod = getModifiers()) | |||||
| { | |||||
| if (mod & DGL::MODIFIER_CTRL) | |||||
| pmMod = PROJECTM_KMOD_LCTRL; | |||||
| } | |||||
| fPM->key_handler(press ? PROJECTM_KEYUP : PROJECTM_KEYDOWN, pmKey, pmMod); | |||||
| return true; | |||||
| } | |||||
| void DistrhoUIProM::onReshape(int width, int height) | |||||
| { | |||||
| /* Our shading model--Gouraud (smooth). */ | |||||
| glShadeModel(GL_SMOOTH); | |||||
| /* Set the clear color. */ | |||||
| glClearColor(0, 0, 0, 0); | |||||
| /* Setup our viewport. */ | |||||
| glViewport(0, 0, width, height); | |||||
| /* | |||||
| * Change to the projection matrix and set | |||||
| * our viewing volume. | |||||
| */ | |||||
| glMatrixMode(GL_TEXTURE); | |||||
| glLoadIdentity(); | |||||
| //gluOrtho2D(0.0, (GLfloat) width, 0.0, (GLfloat) height); | |||||
| //glOrtho(0, width, height, 0, 0.0f, 1.0f); | |||||
| glMatrixMode(GL_PROJECTION); | |||||
| glLoadIdentity(); | |||||
| glMatrixMode(GL_MODELVIEW); | |||||
| glLoadIdentity(); | |||||
| glDrawBuffer(GL_BACK); | |||||
| glReadBuffer(GL_BACK); | |||||
| glEnable(GL_BLEND); | |||||
| glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | |||||
| glEnable(GL_LINE_SMOOTH); | |||||
| glEnable(GL_POINT_SMOOTH); | |||||
| glClearColor(0.0f, 0.0f, 0.0f, 0.0f); | |||||
| glClear(GL_COLOR_BUFFER_BIT); | |||||
| glLineStipple(2, 0xAAAA); | |||||
| if (fPM == nullptr) | |||||
| fPM = new projectM(kSettings); // std::string("/usr/share/projectM/config.inp")); | |||||
| fPM->projectM_resetGL(width, height); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| UI* createUI() | |||||
| { | |||||
| return new DistrhoUIProM(); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| @@ -0,0 +1,76 @@ | |||||
| /* | |||||
| * DISTRHO ProM Plugin | |||||
| * Copyright (C) 2014 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation. | |||||
| * | |||||
| * 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 Lesser General Public License for more details. | |||||
| * | |||||
| * For a full copy of the license see the LICENSE file. | |||||
| */ | |||||
| #ifndef DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| #define DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| #include "DistrhoUI.hpp" | |||||
| class projectM; | |||||
| START_NAMESPACE_DISTRHO | |||||
| // ----------------------------------------------------------------------- | |||||
| class DistrhoUIProM : public UI | |||||
| { | |||||
| public: | |||||
| DistrhoUIProM(); | |||||
| ~DistrhoUIProM() override; | |||||
| protected: | |||||
| // ------------------------------------------------------------------- | |||||
| // Information | |||||
| uint d_getWidth() const noexcept override | |||||
| { | |||||
| return 512; | |||||
| } | |||||
| uint d_getHeight() const noexcept override | |||||
| { | |||||
| return 512; | |||||
| } | |||||
| // ------------------------------------------------------------------- | |||||
| // DSP Callbacks | |||||
| void d_parameterChanged(uint32_t, float) override; | |||||
| // ------------------------------------------------------------------- | |||||
| // UI Callbacks | |||||
| void d_uiIdle() override; | |||||
| // ------------------------------------------------------------------- | |||||
| // Widget Callbacks | |||||
| void onDisplay() override; | |||||
| bool onKeyboard(bool press, uint32_t key) override; | |||||
| bool onSpecial(bool press, uint key) override; | |||||
| void onReshape(int width, int height) override; | |||||
| private: | |||||
| ScopedPointer<projectM> fPM; | |||||
| DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoUIProM) | |||||
| }; | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| #endif // DISTRHO_UI_3BANDEQ_HPP_INCLUDED | |||||
| @@ -0,0 +1,26 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for DISTRHO Plugins # | |||||
| # ---------------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| # -------------------------------------------------------------- | |||||
| # Project name, used for binaries | |||||
| NAME = ProM | |||||
| # -------------------------------------------------------------- | |||||
| # Files to build | |||||
| OBJS_DSP = \ | |||||
| DistrhoPluginProM.cpp.o | |||||
| OBJS_UI = \ | |||||
| DistrhoUIProM.cpp.o | |||||
| # -------------------------------------------------------------- | |||||
| # Do some magic | |||||
| include ../Makefile.mk | |||||
| # -------------------------------------------------------------- | |||||