@@ -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 | |||
![ProM](https://raw.githubusercontent.com/DISTRHO/mini-series/master/plugins/ProM/Screenshot.png "ProM")<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 | |||
# -------------------------------------------------------------- |