| @@ -23,7 +23,7 @@ HAVE_LINUXSAMPLER = $(shell pkg-config --exists linuxsampler && echo true) | |||||
| endif | endif | ||||
| HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml && echo true) | HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml && echo true) | ||||
| HAVE_ZYN_GUI_DEPS = $(shell pkg-config --exists ntk && echo true) | |||||
| HAVE_ZYN_GUI_DEPS = $(shell pkg-config --exists ntk ntk_images && echo true) | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| @@ -72,7 +72,7 @@ ifeq ($(HAVE_ZYN_DEPS),true) | |||||
| LINK_FLAGS += $(shell pkg-config --libs fftw3 mxml) | LINK_FLAGS += $(shell pkg-config --libs fftw3 mxml) | ||||
| ifeq ($(HAVE_ZYN_GUI_DEPS),true) | ifeq ($(HAVE_ZYN_GUI_DEPS),true) | ||||
| LINK_FLAGS += $(shell pkg-config --libs ntk) | |||||
| LINK_FLAGS += $(shell pkg-config --libs ntk ntk_images) | |||||
| endif | endif | ||||
| endif | endif | ||||
| @@ -7,7 +7,7 @@ | |||||
| include ../Makefile.mk | include ../Makefile.mk | ||||
| HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml && echo true) | HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml && echo true) | ||||
| HAVE_ZYN_GUI_DEPS = $(shell pkg-config --exists ntk && echo true) | |||||
| HAVE_ZYN_GUI_DEPS = $(shell pkg-config --exists ntk ntk_images && echo true) | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| @@ -19,7 +19,7 @@ ifeq ($(HAVE_ZYN_DEPS),true) | |||||
| BUILD_CXX_FLAGS += $(shell pkg-config --cflags fftw3 mxml) -DWANT_ZYNADDSUBFX | BUILD_CXX_FLAGS += $(shell pkg-config --cflags fftw3 mxml) -DWANT_ZYNADDSUBFX | ||||
| ifeq ($(HAVE_ZYN_GUI_DEPS),true) | ifeq ($(HAVE_ZYN_GUI_DEPS),true) | ||||
| BUILD_CXX_FLAGS += $(shell pkg-config --cflags ntk) -DWANT_ZYNADDSUBFX_GUI | |||||
| BUILD_CXX_FLAGS += $(shell pkg-config --cflags ntk ntk_images) -DWANT_ZYNADDSUBFX_GUI | |||||
| endif | endif | ||||
| endif | endif | ||||
| @@ -1,6 +1,6 @@ | |||||
| # QtCreator project file | # QtCreator project file | ||||
| QT = core gui | |||||
| QT = core # gui | |||||
| CONFIG = debug | CONFIG = debug | ||||
| CONFIG += static | CONFIG += static | ||||
| @@ -11,7 +11,7 @@ DEFINES += QTCREATOR_TEST | |||||
| DEFINES += WANT_ZYNADDSUBFX WANT_ZYNADDSUBFX_GUI | DEFINES += WANT_ZYNADDSUBFX WANT_ZYNADDSUBFX_GUI | ||||
| PKGCONFIG = fftw3 mxml ntk | |||||
| PKGCONFIG = fftw3 mxml ntk ntk_images | |||||
| TARGET = carla_native | TARGET = carla_native | ||||
| TEMPLATE = app #lib | TEMPLATE = app #lib | ||||
| @@ -42,6 +42,9 @@ INCLUDEPATH = . distrho \ | |||||
| ../carla-utils \ | ../carla-utils \ | ||||
| ../distrho-plugin-toolkit | ../distrho-plugin-toolkit | ||||
| # FIX | |||||
| INCLUDEPATH += /usr/include/ntk | |||||
| LIBS = -lGL | LIBS = -lGL | ||||
| QMAKE_CFLAGS *= -std=c99 | QMAKE_CFLAGS *= -std=c99 | ||||
| @@ -19,7 +19,7 @@ | |||||
| # include "carla_utils.hpp" | # include "carla_utils.hpp" | ||||
| # include "carla_native.h" | # include "carla_native.h" | ||||
| # include <vector> | # include <vector> | ||||
| # include <QApplication> | |||||
| //# include <QApplication> | |||||
| #endif | #endif | ||||
| #if defined(__WIN32__) || defined(__WIN64__) | #if defined(__WIN32__) || defined(__WIN64__) | ||||
| @@ -67,9 +67,15 @@ void carla_register_native_plugin(const PluginDescriptor* desc) | |||||
| descs.push_back(desc); | descs.push_back(desc); | ||||
| } | } | ||||
| #include <FL/Fl.H> | |||||
| int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||||
| { | { | ||||
| QApplication app(argc, argv, true); | |||||
| //QApplication app(argc, argv, true); | |||||
| Fl::args(argc, argv); | |||||
| //QDialog guiTest; | |||||
| // Available plugins | // Available plugins | ||||
| carla_register_native_plugin_bypass(); | carla_register_native_plugin_bypass(); | ||||
| @@ -88,6 +94,7 @@ int main(int argc, char* argv[]) | |||||
| ui_parameter_changed, ui_custom_data_changed | ui_parameter_changed, ui_custom_data_changed | ||||
| }; | }; | ||||
| #if 0 | |||||
| // test fast init & cleanup | // test fast init & cleanup | ||||
| for (auto it = descs.begin(); it != descs.end(); it++) | for (auto it = descs.begin(); it != descs.end(); it++) | ||||
| { | { | ||||
| @@ -137,6 +144,28 @@ int main(int argc, char* argv[]) | |||||
| if (desc->cleanup) | if (desc->cleanup) | ||||
| desc->cleanup(handle); | desc->cleanup(handle); | ||||
| } | } | ||||
| #endif | |||||
| const PluginDescriptor* zynDesc = descs[2]; | |||||
| PluginHandle zynHandle = zynDesc->instantiate(zynDesc, &host); | |||||
| zynDesc->activate(zynHandle); | |||||
| zynDesc->ui_show(zynHandle, true); | |||||
| // close app when this dialog is closed | |||||
| //guiTest.show(); | |||||
| //fl_display | |||||
| //int ret = app.exec(); | |||||
| Fl::redraw(); | |||||
| int ret = Fl::run(); | |||||
| zynDesc->ui_show(zynHandle, false); | |||||
| zynDesc->activate(zynHandle); | |||||
| zynDesc->cleanup(zynHandle); | |||||
| return ret; | |||||
| // test 3BandEQ GUI | // test 3BandEQ GUI | ||||
| // TODO | // TODO | ||||
| @@ -1,4 +1,9 @@ | |||||
| #define NTK_GUI 1 | |||||
| #define PIXMAP_PATH "/usr/share/zynaddsubfx/pixmaps/" | |||||
| #define SOURCE_DIR "/usr/share/zynaddsubfx/pixmaps/nothing-here" | |||||
| // zynaddsubfx includes | // zynaddsubfx includes | ||||
| #include "zynaddsubfx/DSP/AnalogFilter.cpp" | #include "zynaddsubfx/DSP/AnalogFilter.cpp" | ||||
| #include "zynaddsubfx/DSP/FFTwrapper.cpp" | #include "zynaddsubfx/DSP/FFTwrapper.cpp" | ||||
| @@ -56,3 +61,25 @@ | |||||
| #include "zynaddsubfx/Synth/Resonance.cpp" | #include "zynaddsubfx/Synth/Resonance.cpp" | ||||
| #include "zynaddsubfx/Synth/SUBnote.cpp" | #include "zynaddsubfx/Synth/SUBnote.cpp" | ||||
| #include "zynaddsubfx/Synth/SynthNote.cpp" | #include "zynaddsubfx/Synth/SynthNote.cpp" | ||||
| #ifdef WANT_ZYNADDSUBFX_GUI | |||||
| # include "zynaddsubfx/UI/NioUI.h" | |||||
| # include "zynaddsubfx/UI/ADnoteUI.cc" | |||||
| # include "zynaddsubfx/UI/BankUI.cc" | |||||
| # include "zynaddsubfx/UI/ConfigUI.cc" | |||||
| # include "zynaddsubfx/UI/EffUI.cc" | |||||
| # include "zynaddsubfx/UI/EnvelopeUI.cc" | |||||
| # include "zynaddsubfx/UI/FilterUI.cc" | |||||
| # include "zynaddsubfx/UI/LFOUI.cc" | |||||
| # include "zynaddsubfx/UI/MasterUI.cc" | |||||
| # include "zynaddsubfx/UI/MicrotonalUI.cc" | |||||
| # include "zynaddsubfx/UI/OscilGenUI.cc" | |||||
| # include "zynaddsubfx/UI/PADnoteUI.cc" | |||||
| # include "zynaddsubfx/UI/PartUI.cc" | |||||
| # include "zynaddsubfx/UI/PresetsUI.cc" | |||||
| # include "zynaddsubfx/UI/ResonanceUI.cc" | |||||
| # include "zynaddsubfx/UI/SUBnoteUI.cc" | |||||
| # include "zynaddsubfx/UI/VirKeyboard.cc" | |||||
| # include "zynaddsubfx/UI/WidgetPDial.cpp" | |||||
| # include "zynaddsubfx/UI/NioUI.cpp" | |||||
| #endif | |||||
| @@ -23,6 +23,29 @@ | |||||
| #include <climits> | #include <climits> | ||||
| #ifdef WANT_ZYNADDSUBFX_GUI | |||||
| # define PIXMAP_PATH "/usr/share/zynaddsubfx/pixmaps" | |||||
| # define SOURCE_DIR "" | |||||
| # include <FL/Fl.H> | |||||
| # include <FL/Fl_Shared_Image.H> | |||||
| # include <FL/Fl_Tiled_Image.H> | |||||
| # include <FL/Fl_Dial.H> | |||||
| # include "zynaddsubfx/UI/MasterUI.h" | |||||
| // this is used to know wherever gui stuff is initialized | |||||
| static Fl_Tiled_Image* s_moduleBackdrop = nullptr; | |||||
| void set_module_parameters(Fl_Widget* o) | |||||
| { | |||||
| o->box(FL_DOWN_FRAME); | |||||
| o->align(o->align() | FL_ALIGN_IMAGE_BACKDROP); | |||||
| o->color(FL_BLACK ); | |||||
| o->image(s_moduleBackdrop); | |||||
| o->labeltype(FL_SHADOW_LABEL); | |||||
| } | |||||
| #endif | |||||
| SYNTH_T* synth = nullptr; | SYNTH_T* synth = nullptr; | ||||
| class ZynAddSubFxPlugin : public PluginDescriptorClass | class ZynAddSubFxPlugin : public PluginDescriptorClass | ||||
| @@ -38,7 +61,11 @@ public: | |||||
| { | { | ||||
| qDebug("ZynAddSubFxPlugin::ZynAddSubFxPlugin(), s_instanceCount=%i", s_instanceCount); | qDebug("ZynAddSubFxPlugin::ZynAddSubFxPlugin(), s_instanceCount=%i", s_instanceCount); | ||||
| m_master = new Master; | |||||
| m_master = new Master; | |||||
| #ifdef WANT_ZYNADDSUBFX_GUI | |||||
| m_masterUI = nullptr; | |||||
| m_uiClosed = 0; | |||||
| #endif | |||||
| // refresh banks | // refresh banks | ||||
| m_master->bank.rescanforbanks(); | m_master->bank.rescanforbanks(); | ||||
| @@ -70,8 +97,17 @@ public: | |||||
| { | { | ||||
| qDebug("ZynAddSubFxPlugin::~ZynAddSubFxPlugin(), s_instanceCount=%i", s_instanceCount); | qDebug("ZynAddSubFxPlugin::~ZynAddSubFxPlugin(), s_instanceCount=%i", s_instanceCount); | ||||
| //ensure that everything has stopped with the mutex wait | |||||
| pthread_mutex_lock(&m_master->mutex); | |||||
| pthread_mutex_unlock(&m_master->mutex); | |||||
| m_programs.clear(); | m_programs.clear(); | ||||
| #ifdef WANT_ZYNADDSUBFX_GUI | |||||
| if (m_masterUI) | |||||
| delete m_masterUI; | |||||
| #endif | |||||
| delete m_master; | delete m_master; | ||||
| } | } | ||||
| @@ -183,6 +219,72 @@ protected: | |||||
| } | } | ||||
| } | } | ||||
| // ------------------------------------------------------------------- | |||||
| // Plugin UI calls | |||||
| #ifdef WANT_ZYNADDSUBFX_GUI | |||||
| void uiShow(bool show) | |||||
| { | |||||
| if (! m_masterUI) | |||||
| { | |||||
| if (! s_moduleBackdrop) | |||||
| { | |||||
| 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")) | |||||
| s_moduleBackdrop = new Fl_Tiled_Image(img); | |||||
| else | |||||
| s_moduleBackdrop = 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); | |||||
| } | |||||
| m_masterUI = new MasterUI(m_master, &m_uiClosed); | |||||
| } | |||||
| if (show) | |||||
| { | |||||
| m_masterUI->showUI(); | |||||
| } | |||||
| else | |||||
| { | |||||
| // same as showUI | |||||
| switch (config.cfg.UserInterfaceMode) | |||||
| { | |||||
| case 0: | |||||
| m_masterUI->selectuiwindow->hide(); | |||||
| break; | |||||
| case 1: | |||||
| m_masterUI->masterwindow->hide(); | |||||
| break; | |||||
| case 2: | |||||
| m_masterUI->simplemasterwindow->hide(); | |||||
| break; | |||||
| }; | |||||
| } | |||||
| } | |||||
| void uiIdle() | |||||
| { | |||||
| if (m_masterUI) | |||||
| Fl::check(); | |||||
| } | |||||
| #endif | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Plugin process calls | // Plugin process calls | ||||
| @@ -269,7 +371,11 @@ private: | |||||
| }; | }; | ||||
| std::vector<ProgramInfo> m_programs; | std::vector<ProgramInfo> m_programs; | ||||
| Master* m_master; | |||||
| Master* m_master; | |||||
| #ifdef WANT_ZYNADDSUBFX_GUI | |||||
| MasterUI* m_masterUI; | |||||
| int m_uiClosed; | |||||
| #endif | |||||
| public: | public: | ||||
| static int s_instanceCount; | static int s_instanceCount; | ||||
| @@ -288,6 +394,8 @@ public: | |||||
| config.cfg.SampleRate = synth->samplerate; | config.cfg.SampleRate = synth->samplerate; | ||||
| config.cfg.GzipCompression = 0; | config.cfg.GzipCompression = 0; | ||||
| //Nio::preferedSampleRate(synth->samplerate); | |||||
| sprng(time(NULL)); | sprng(time(NULL)); | ||||
| denormalkillbuf = new float [synth->buffersize]; | denormalkillbuf = new float [synth->buffersize]; | ||||
| for (int i=0; i < synth->buffersize; i++) | for (int i=0; i < synth->buffersize; i++) | ||||
| @@ -305,6 +413,12 @@ public: | |||||
| if (--s_instanceCount == 0) | if (--s_instanceCount == 0) | ||||
| { | { | ||||
| if (s_moduleBackdrop) | |||||
| { | |||||
| delete s_moduleBackdrop; | |||||
| s_moduleBackdrop = nullptr; | |||||
| } | |||||
| Master::deleteInstance(); | Master::deleteInstance(); | ||||
| delete[] denormalkillbuf; | delete[] denormalkillbuf; | ||||
| @@ -28,6 +28,7 @@ NioUI::NioUI() | |||||
| //initialize midi list | //initialize midi list | ||||
| { | { | ||||
| #if 0 | |||||
| set<string> midiList = Nio::getSources(); | set<string> midiList = Nio::getSources(); | ||||
| string source = Nio::getSource(); | string source = Nio::getSource(); | ||||
| int midival = 0; | int midival = 0; | ||||
| @@ -37,11 +38,15 @@ NioUI::NioUI() | |||||
| if(*itr == source) | if(*itr == source) | ||||
| midival = midi->size() - 2; | midival = midi->size() - 2; | ||||
| } | } | ||||
| #else | |||||
| int midival = 0; | |||||
| #endif | |||||
| midi->value(midival); | midi->value(midival); | ||||
| } | } | ||||
| //initialize audio list | //initialize audio list | ||||
| { | { | ||||
| #if 0 | |||||
| set<string> audioList = Nio::getSinks(); | set<string> audioList = Nio::getSinks(); | ||||
| string sink = Nio::getSink(); | string sink = Nio::getSink(); | ||||
| int audioval = 0; | int audioval = 0; | ||||
| @@ -51,6 +56,9 @@ NioUI::NioUI() | |||||
| if(*itr == sink) | if(*itr == sink) | ||||
| audioval = audio->size() - 2; | audioval = audio->size() - 2; | ||||
| } | } | ||||
| #else | |||||
| int audioval = 0; | |||||
| #endif | |||||
| audio->value(audioval); | audio->value(audioval); | ||||
| } | } | ||||
| resizable(this); | resizable(this); | ||||
| @@ -1,4 +1,4 @@ | |||||
| #ifndef NIOUI_H | |||||
| #ifndef NIOUT_H | |||||
| #define NIOUT_H | #define NIOUT_H | ||||
| #include <FL/Fl.H> | #include <FL/Fl.H> | ||||