@@ -57,6 +57,7 @@ HAVE_OPENGL = $(shell pkg-config --exists gl && echo true) | |||
HAVE_AF_DEPS = $(shell pkg-config --exists libavcodec libavformat sndfile && echo true) | |||
HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml zlib && echo true) | |||
HAVE_ZYN_UI_DEPS = $(shell pkg-config --exists ntk ntk_images && echo true) | |||
ifeq ($(HAVE_JACK),true) | |||
HAVE_JACK_LATENCY = $(shell pkg-config --atleast-version=0.121.0 jack && echo true) | |||
@@ -57,3 +57,7 @@ endif | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
BUILD_CXX_FLAGS += -DWANT_ZYNADDSUBFX | |||
endif | |||
ifeq ($(HAVE_ZYN_UI_DEPS),true) | |||
BUILD_CXX_FLAGS += -DWANT_ZYNADDSUBFX_UI | |||
endif |
@@ -17,10 +17,17 @@ AF_C_FLAGS += $(shell pkg-config --cflags libavcodec libavformat sndfile) | |||
LINK_FLAGS += $(shell pkg-config --libs libavcodec libavformat sndfile) | |||
endif | |||
# -Izynaddsubfx/UI | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
ZYN_CXX_FLAGS = $(BUILD_CXX_FLAGS) | |||
ZYN_CXX_FLAGS = $(BUILD_CXX_FLAGS) -DNTK_GUI | |||
ZYN_CXX_FLAGS += $(shell pkg-config --cflags fftw3 mxml zlib) | |||
LINK_FLAGS += $(shell pkg-config --libs fftw3 mxml zlib) | |||
ifeq ($(HAVE_ZYN_UI_DEPS),true) | |||
ZYN_CXX_FLAGS += -DNTK_GUI | |||
ZYN_CXX_FLAGS += $(shell pkg-config --cflags ntk ntk_images) | |||
LINK_FLAGS += $(shell pkg-config --libs ntk ntk_images) | |||
endif | |||
endif | |||
# -------------------------------------------------------------- | |||
@@ -50,57 +57,30 @@ endif | |||
# ZynAddSubFX | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
OBJS += \ | |||
zynaddsubfx.cpp.o | |||
# zynaddsubfx-src.cpp.o | |||
OBJS += \ | |||
zynaddsubfx/DSP/AnalogFilter.cpp.o \ | |||
zynaddsubfx/DSP/FFTwrapper.cpp.o \ | |||
zynaddsubfx/DSP/Filter.cpp.o \ | |||
zynaddsubfx/DSP/FormantFilter.cpp.o \ | |||
zynaddsubfx/DSP/SVFilter.cpp.o \ | |||
zynaddsubfx/DSP/Unison.cpp.o \ | |||
zynaddsubfx/Effects/Alienwah.cpp.o \ | |||
zynaddsubfx/Effects/Chorus.cpp.o \ | |||
zynaddsubfx/Effects/Distorsion.cpp.o \ | |||
zynaddsubfx/Effects/DynamicFilter.cpp.o \ | |||
zynaddsubfx/Effects/Echo.cpp.o \ | |||
zynaddsubfx/Effects/Effect.cpp.o \ | |||
zynaddsubfx/Effects/EffectLFO.cpp.o \ | |||
zynaddsubfx/Effects/EffectMgr.cpp.o \ | |||
zynaddsubfx/Effects/EQ.cpp.o \ | |||
zynaddsubfx/Effects/Phaser.cpp.o \ | |||
zynaddsubfx/Effects/Reverb.cpp.o \ | |||
zynaddsubfx/Misc/Bank.cpp.o \ | |||
zynaddsubfx/Misc/Config.cpp.o \ | |||
zynaddsubfx/Misc/Dump.cpp.o \ | |||
zynaddsubfx/Misc/Master.cpp.o \ | |||
zynaddsubfx/Misc/Microtonal.cpp.o \ | |||
zynaddsubfx/Misc/Part.cpp.o \ | |||
zynaddsubfx/Misc/Recorder.cpp.o \ | |||
zynaddsubfx/Misc/Util.cpp.o \ | |||
zynaddsubfx/Misc/WavFile.cpp.o \ | |||
zynaddsubfx/Misc/WaveShapeSmps.cpp.o \ | |||
zynaddsubfx/Misc/XMLwrapper.cpp.o \ | |||
zynaddsubfx/Params/ADnoteParameters.cpp.o \ | |||
zynaddsubfx/Params/Controller.cpp.o \ | |||
zynaddsubfx/Params/EnvelopeParams.cpp.o \ | |||
zynaddsubfx/Params/FilterParams.cpp.o \ | |||
zynaddsubfx/Params/LFOParams.cpp.o \ | |||
zynaddsubfx/Params/PADnoteParameters.cpp.o \ | |||
zynaddsubfx/Params/Presets.cpp.o \ | |||
zynaddsubfx/Params/PresetsArray.cpp.o \ | |||
zynaddsubfx/Params/PresetsStore.cpp.o \ | |||
zynaddsubfx/Params/SUBnoteParameters.cpp.o \ | |||
zynaddsubfx/Synth/ADnote.cpp.o \ | |||
zynaddsubfx/Synth/Envelope.cpp.o \ | |||
zynaddsubfx/Synth/LFO.cpp.o \ | |||
zynaddsubfx/Synth/OscilGen.cpp.o \ | |||
zynaddsubfx/Synth/PADnote.cpp.o \ | |||
zynaddsubfx/Synth/Resonance.cpp.o \ | |||
zynaddsubfx/Synth/SUBnote.cpp.o \ | |||
zynaddsubfx/Synth/SynthNote.cpp.o | |||
# zynaddsubfx/Misc/Stereo.cpp.o | |||
zynaddsubfx.cpp.o \ | |||
zynaddsubfx-src.cpp.o | |||
ifeq ($(HAVE_ZYN_UI_DEPS),true) | |||
OBJS += zynaddsubfx-ui.cpp.o | |||
ZYN_UI_FILES = \ | |||
zynaddsubfx/UI/ADnoteUI.cpp \ | |||
zynaddsubfx/UI/BankUI.cpp \ | |||
zynaddsubfx/UI/ConfigUI.cpp \ | |||
zynaddsubfx/UI/EffUI.cpp \ | |||
zynaddsubfx/UI/EnvelopeUI.cpp \ | |||
zynaddsubfx/UI/FilterUI.cpp \ | |||
zynaddsubfx/UI/LFOUI.cpp \ | |||
zynaddsubfx/UI/MasterUI.cpp \ | |||
zynaddsubfx/UI/MicrotonalUI.cpp \ | |||
zynaddsubfx/UI/OscilGenUI.cpp \ | |||
zynaddsubfx/UI/PADnoteUI.cpp \ | |||
zynaddsubfx/UI/PartUI.cpp \ | |||
zynaddsubfx/UI/PresetsUI.cpp \ | |||
zynaddsubfx/UI/ResonanceUI.cpp \ | |||
zynaddsubfx/UI/SUBnoteUI.cpp \ | |||
zynaddsubfx/UI/VirKeyboard.cpp | |||
endif | |||
endif | |||
SHARED = ../libcarla_native.so | |||
@@ -115,6 +95,7 @@ all: $(STATIC) | |||
clean: | |||
rm -f $(OBJS) $(SHARED) $(STATIC) | |||
rm -f $(ZYN_UI_FILES) | |||
rm -f moc_*.cpp | |||
debug: | |||
@@ -151,13 +132,13 @@ distrho-notes.cpp.o: distrho-notes.cpp notes/DistrhoPluginNotes.cpp notes/Distrh | |||
audiofile.c.o: audiofile.c | |||
$(CC) $< $(AF_C_FLAGS) -c -o $@ | |||
zynaddsubfx.cpp.o: zynaddsubfx.cpp | |||
zynaddsubfx.cpp.o: zynaddsubfx.cpp $(ZYN_UI_FILES) | |||
$(CXX) $< $(ZYN_CXX_FLAGS) -c -o $@ | |||
zynaddsubfx-src.cpp.o: zynaddsubfx-src.cpp | |||
$(CXX) $< $(ZYN_CXX_FLAGS) -c -o $@ | |||
zynaddsubfx/%.cpp.o: zynaddsubfx/%.cpp | |||
zynaddsubfx-ui.cpp.o: zynaddsubfx-ui.cpp $(ZYN_UI_FILES) | |||
$(CXX) $< $(ZYN_CXX_FLAGS) -c -o $@ | |||
# -------------------------------------------------------------- | |||
@@ -165,6 +146,9 @@ zynaddsubfx/%.cpp.o: zynaddsubfx/%.cpp | |||
moc_DistrhoUINotes.cpp: notes/DistrhoUINotes.hpp | |||
$(MOC) $< -o $@ | |||
zynaddsubfx/UI/%.cpp: zynaddsubfx/UI/%.fl | |||
ntk-fluid -c -o zynaddsubfx/UI/$*.cpp -h zynaddsubfx/UI/$*.h $< | |||
# -------------------------------------------------------------- | |||
../libs/%: | |||
@@ -0,0 +1,39 @@ | |||
/* | |||
* Carla Native Plugins | |||
* Copyright (C) 2012-2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* 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 GPL.txt file | |||
*/ | |||
#define PIXMAP_PATH "/usr/share/zynaddsubfx/pixmaps/" | |||
#define SOURCE_DIR "/usr/share/zynaddsubfx/examples" | |||
// zynaddsubfx ui includes | |||
#include "zynaddsubfx/UI/NioUI.cpp" | |||
#include "zynaddsubfx/UI/WidgetPDial.cpp" | |||
#include "zynaddsubfx/UI/ADnoteUI.cpp" | |||
#include "zynaddsubfx/UI/BankUI.cpp" | |||
#include "zynaddsubfx/UI/ConfigUI.cpp" | |||
#include "zynaddsubfx/UI/EffUI.cpp" | |||
#include "zynaddsubfx/UI/EnvelopeUI.cpp" | |||
#include "zynaddsubfx/UI/FilterUI.cpp" | |||
#include "zynaddsubfx/UI/LFOUI.cpp" | |||
#include "zynaddsubfx/UI/MasterUI.cpp" | |||
#include "zynaddsubfx/UI/MicrotonalUI.cpp" | |||
#include "zynaddsubfx/UI/OscilGenUI.cpp" | |||
#include "zynaddsubfx/UI/PADnoteUI.cpp" | |||
#include "zynaddsubfx/UI/PartUI.cpp" | |||
#include "zynaddsubfx/UI/PresetsUI.cpp" | |||
#include "zynaddsubfx/UI/ResonanceUI.cpp" | |||
#include "zynaddsubfx/UI/SUBnoteUI.cpp" | |||
#include "zynaddsubfx/UI/VirKeyboard.cpp" |
@@ -28,14 +28,33 @@ | |||
#include "zynaddsubfx/Misc/Master.h" | |||
#include "zynaddsubfx/Misc/Util.h" | |||
#define WANT_ZYNADDSUBFX_UI | |||
#ifdef WANT_ZYNADDSUBFX_UI | |||
#include "zynaddsubfx/UI/common.H" | |||
#include "zynaddsubfx/UI/MasterUI.h" | |||
#include <FL/Fl_Shared_Image.H> | |||
#include <FL/Fl_Tiled_Image.H> | |||
#include <FL/Fl_Dial.H> | |||
#endif | |||
#include <ctime> | |||
#include <set> | |||
#include <string> | |||
// Dummy variables and functions for linking purposes | |||
const char* instance_name = nullptr; | |||
class WavFile; | |||
namespace Nio { | |||
bool start(void){return 1;} | |||
void stop(void){} | |||
bool setSource(std::string){return true;} | |||
bool setSink(std::string){return true;} | |||
std::set<std::string> getSources(void){return std::set<std::string>();} | |||
std::set<std::string> getSinks(void){return std::set<std::string>();} | |||
std::string getSource(void){return "";} | |||
std::string getSink(void){return "";} | |||
void waveNew(WavFile*){} | |||
void waveStart(void){} | |||
void waveStop(void){} | |||
@@ -44,6 +63,23 @@ namespace Nio { | |||
SYNTH_T* synth = nullptr; | |||
#ifdef WANT_ZYNADDSUBFX_UI | |||
#define PIXMAP_PATH "/usr/share/zynaddsubfx/pixmaps" | |||
#define SOURCE_DIR "/usr/share/zynaddsubfx/examples" | |||
static Fl_Tiled_Image* gModuleBackdrop = nullptr; | |||
void set_module_parameters(Fl_Widget* o) | |||
{ | |||
CARLA_ASSERT(gModuleBackdrop != nullptr); | |||
o->box(FL_DOWN_FRAME); | |||
o->align(o->align() | FL_ALIGN_IMAGE_BACKDROP); | |||
o->color(FL_BLACK); | |||
o->image(gModuleBackdrop); | |||
o->labeltype(FL_SHADOW_LABEL); | |||
} | |||
#endif | |||
class ZynAddSubFxPlugin : public PluginDescriptorClass | |||
{ | |||
public: | |||
@@ -55,15 +91,49 @@ public: | |||
: PluginDescriptorClass(host), | |||
kMaster(new Master()), | |||
kSampleRate(getSampleRate()), | |||
#ifdef WANT_ZYNADDSUBFX_UI | |||
fUi(nullptr), | |||
fUiClosed(0), | |||
#endif | |||
fThread(kMaster) | |||
{ | |||
fThread.start(); | |||
maybeInitPrograms(kMaster); | |||
fThread.waitForStarted(); | |||
#ifdef WANT_ZYNADDSUBFX_UI | |||
fl_register_images(); | |||
Fl_Dial::default_style(Fl_Dial::PIXMAP_DIAL); | |||
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/knob.png")) | |||
Fl_Dial::default_image(img); | |||
else | |||
Fl_Dial::default_image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/knob.png")); | |||
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/window_backdrop.png")) | |||
Fl::scheme_bg(new Fl_Tiled_Image(img)); | |||
else | |||
Fl::scheme_bg(new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/window_backdrop.png"))); | |||
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/module_backdrop.png")) | |||
gModuleBackdrop = new Fl_Tiled_Image(img); | |||
else | |||
gModuleBackdrop = new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/module_backdrop.png")); | |||
Fl::background(50, 50, 50); | |||
Fl::background2(70, 70, 70); | |||
Fl::foreground(255, 255, 255); | |||
#endif | |||
} | |||
~ZynAddSubFxPlugin() | |||
{ | |||
#ifdef WANT_ZYNADDSUBFX_UI | |||
if (fUi != nullptr) | |||
delete fUi; | |||
#endif | |||
//ensure that everything has stopped | |||
pthread_mutex_lock(&kMaster->mutex); | |||
pthread_mutex_unlock(&kMaster->mutex); | |||
@@ -238,6 +308,47 @@ protected: | |||
pthread_mutex_unlock(&kMaster->mutex); | |||
} | |||
#ifdef WANT_ZYNADDSUBFX_UI | |||
// ------------------------------------------------------------------- | |||
// Plugin UI calls | |||
void uiShow(const bool show) | |||
{ | |||
if (show) | |||
{ | |||
CARLA_ASSERT(fUi == nullptr); | |||
if (fUi != nullptr) | |||
return; | |||
fUiClosed = 0; | |||
fUi = new MasterUI(kMaster, &fUiClosed); | |||
fUi->showUI(); | |||
Fl::check(); | |||
} | |||
else | |||
{ | |||
CARLA_ASSERT(fUi != nullptr); | |||
if (fUi == nullptr) | |||
return; | |||
delete fUi; | |||
fUi = nullptr; | |||
Fl::check(); | |||
} | |||
} | |||
void uiIdle() | |||
{ | |||
CARLA_ASSERT(fUi != nullptr); | |||
Fl::check(); | |||
} | |||
#endif | |||
// ------------------------------------------------------------------- | |||
// Plugin chunk calls | |||
@@ -331,6 +442,11 @@ private: | |||
Master* const kMaster; | |||
const unsigned kSampleRate; | |||
#ifdef WANT_ZYNADDSUBFX_UI | |||
MasterUI* fUi; | |||
int fUiClosed; | |||
#endif | |||
ZynThread fThread; | |||
static int sInstanceCount; | |||
@@ -467,7 +583,11 @@ struct ProgramsDestructor { | |||
static const PluginDescriptor zynAddSubFxDesc = { | |||
/* category */ PLUGIN_CATEGORY_SYNTH, | |||
#ifdef WANT_ZYNADDSUBFX_UI | |||
/* hints */ static_cast<PluginHints>(PLUGIN_IS_SYNTH | PLUGIN_HAS_GUI | PLUGIN_USES_CHUNKS | PLUGIN_USES_SINGLE_THREAD), | |||
#else | |||
/* hints */ static_cast<PluginHints>(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS), | |||
#endif | |||
/* audioIns */ 2, | |||
/* audioOuts */ 2, | |||
/* midiIns */ 1, | |||
@@ -45,6 +45,9 @@ LINK_FLAGS += $(shell pkg-config --libs libavcodec libavformat sndfile) | |||
endif | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
LINK_FLAGS += $(shell pkg-config --libs fftw3 mxml zlib) | |||
# ifeq ($(HAVE_ZYN_UI_DEPS),true) | |||
LINK_FLAGS += $(shell pkg-config --libs ntk ntk_images) | |||
# endif | |||
endif | |||
# -------------------------------------------------------------- | |||
@@ -52,6 +52,7 @@ endif | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
NATIVE_BUILD_FLAGS += -DWANT_ZYNADDSUBFX | |||
NATIVE_LINK_FLAGS += $(shell pkg-config --libs fftw3 mxml zlib) | |||
NATIVE_LINK_FLAGS += $(shell pkg-config --libs ntk ntk_images) | |||
endif | |||
POSIX_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) | |||