diff --git a/source/Makefile.mk b/source/Makefile.mk index a27c1dc9b..9558f4130 100644 --- a/source/Makefile.mk +++ b/source/Makefile.mk @@ -7,7 +7,7 @@ # -------------------------------------------------------------- # Modify to enable/disable specific features -# Support for LADSPA, DSSI, LV2 and VST plugins +# Support for LADSPA, DSSI, LV2, VST and AU plugins CARLA_PLUGIN_SUPPORT = true # Support for csound files (version 6) @@ -16,9 +16,6 @@ CARLA_CSOUND_SUPPORT = true # Support for GIG, SF2 and SFZ sample banks (through fluidsynth and linuxsampler) CARLA_SAMPLERS_SUPPORT = true -# Support for Native Audio (ALSA and/or PulseAudio in Linux) -CARLA_RTAUDIO_SUPPORT = true - # Use the free vestige header instead of the official VST SDK CARLA_VESTIGE_HEADER = true @@ -66,10 +63,12 @@ endif # -------------------------------------------------------------- +HAVE_ALSA = $(shell pkg-config --exists alsa && echo true) HAVE_FFMPEG = $(shell pkg-config --exists libavcodec libavformat libavutil && pkg-config --max-version=1.9 libavcodec && echo true) HAVE_OPENGL = $(shell pkg-config --exists gl && echo true) HAVE_GTK2 = $(shell pkg-config --exists gtk+-2.0 && echo true) HAVE_GTK3 = $(shell pkg-config --exists gtk+-3.0 && echo true) +HAVE_PULSEAUDIO = $(shell pkg-config --exists libpulse-simple && echo true) HAVE_QT4 = $(shell pkg-config --exists QtCore && echo true) HAVE_QT5 = $(shell pkg-config --exists Qt5Core && echo true) @@ -83,11 +82,6 @@ HAVE_FLUIDSYNTH = $(shell pkg-config --exists fluidsynth && echo true) HAVE_LINUXSAMPLER = $(shell pkg-config --exists linuxsampler && echo true) endif -ifeq ($(CARLA_RTAUDIO_SUPPORT),true) -HAVE_ALSA = $(shell pkg-config --exists alsa && echo true) -HAVE_PULSEAUDIO = $(shell pkg-config --exists libpulse-simple && echo true) -endif - # -------------------------------------------------------------- # TODO - move this to theme diff --git a/source/backend/CarlaBackend.doxygen b/source/backend/CarlaBackend.doxygen index 2b8e78919..fd9deb97c 100644 --- a/source/backend/CarlaBackend.doxygen +++ b/source/backend/CarlaBackend.doxygen @@ -242,10 +242,9 @@ SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = DOXYGEN \ - WANT_NATIVE WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST WANT_FLUIDSYNTH WANT_LINUXSAMPLER \ - WANT_JACK WANT_JACK_LATENCY WANT_JACK_PORT_RENAME WANT_RTAUDIO \ + WANT_NATIVE WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST WANT_AU WANT_CSDOUND WANT_FLUIDSYNTH WANT_LINUXSAMPLER \ WANT_OPENGL WANT_AUDIOFILE WANT_MIDIFILE WANT_ZYNADDSUBFX WANT_ZYNADDSUBFX_UI \ - CARLA_EXPORT= + CARLA_EXPORT EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- diff --git a/source/backend/CarlaEngine.hpp b/source/backend/CarlaEngine.hpp index df9156848..ef24ae0fe 100644 --- a/source/backend/CarlaEngine.hpp +++ b/source/backend/CarlaEngine.hpp @@ -106,7 +106,7 @@ enum EnginePortType { * OSC port type. ** \see CarlaEngineOscPort */ - kEnginePortTypeOSC = 3 + kEnginePortTypeOSC = 4 }; /*! @@ -1163,12 +1163,12 @@ public: private: static CarlaEngine* newJack(); +#ifndef BUILD_BRIDGE static CarlaEngine* newJuce(); static size_t getJuceApiCount(); static const char* getJuceApiName(const unsigned int index); static const char** getJuceApiDeviceNames(const unsigned int index); -#ifdef WANT_RTAUDIO enum RtAudioApi { RTAUDIO_DUMMY = 0, RTAUDIO_LINUX_ALSA = 1, diff --git a/source/backend/Makefile b/source/backend/Makefile index 66fbb8acb..ad143fde1 100644 --- a/source/backend/Makefile +++ b/source/backend/Makefile @@ -9,7 +9,7 @@ include ../Makefile.mk # -------------------------------------------------------------- all: - $(MAKE) -C control +# $(MAKE) -C control $(MAKE) -C engine $(MAKE) -C plugin $(MAKE) -C standalone @@ -17,7 +17,7 @@ all: # -------------------------------------------------------------- clean: - $(MAKE) clean -C control +# $(MAKE) clean -C control $(MAKE) clean -C engine $(MAKE) clean -C plugin $(MAKE) clean -C standalone diff --git a/source/backend/Makefile.mk b/source/backend/Makefile.mk index 66e4fa64a..3294f1358 100644 --- a/source/backend/Makefile.mk +++ b/source/backend/Makefile.mk @@ -22,10 +22,6 @@ ifeq ($(CARLA_CSOUND_SUPPORT),true) BUILD_CXX_FLAGS += -DWANT_CSOUND endif -ifeq ($(CARLA_RTAUDIO_SUPPORT),true) -BUILD_CXX_FLAGS += -DWANT_RTAUDIO -endif - # -------------------------------------------------------------- ifeq ($(HAVE_FLUIDSYNTH),true) diff --git a/source/backend/engine/CarlaEngine.cpp b/source/backend/engine/CarlaEngine.cpp index 496eef1e5..a0e401bd6 100644 --- a/source/backend/engine/CarlaEngine.cpp +++ b/source/backend/engine/CarlaEngine.cpp @@ -340,8 +340,9 @@ unsigned int CarlaEngine::getDriverCount() unsigned int count = 1; // JACK -#ifdef WANT_RTAUDIO +#ifndef BUILD_BRIDGE count += getRtAudioApiCount(); + count += getJuceApiCount(); #endif return count; @@ -354,11 +355,16 @@ const char* CarlaEngine::getDriverName(const unsigned int index) if (index == 0) return "JACK"; -#ifdef WANT_RTAUDIO - const unsigned int rtIndex(index-1); +#ifndef BUILD_BRIDGE + const unsigned int rtAudioIndex(index-1); + + if (rtAudioIndex < getRtAudioApiCount()) + return getRtAudioApiName(rtAudioIndex); + + const unsigned int juceIndex(index-rtAudioIndex-1); - if (rtIndex < getRtAudioApiCount()) - return getRtAudioApiName(rtIndex); + if (juceIndex < getJuceApiCount()) + return getJuceApiName(juceIndex); #endif carla_stderr("CarlaEngine::getDriverName(%i) - invalid index", index); @@ -372,11 +378,16 @@ const char** CarlaEngine::getDriverDeviceNames(const unsigned int index) if (index == 0) return nullptr; -#ifdef WANT_RTAUDIO - const unsigned int rtIndex(index-1); +#ifndef BUILD_BRIDGE + const unsigned int rtAudioIndex(index-1); + + if (rtAudioIndex < getRtAudioApiCount()) + return getRtAudioApiDeviceNames(rtAudioIndex); + + const unsigned int juceIndex(index-rtAudioIndex-1); - if (rtIndex < getRtAudioApiCount()) - return getRtAudioApiDeviceNames(rtIndex); + if (juceIndex < getJuceApiCount()) + return getJuceApiDeviceNames(juceIndex); #endif carla_stderr("CarlaEngine::getDriverDeviceNames(%i) - invalid index", index); @@ -390,35 +401,33 @@ CarlaEngine* CarlaEngine::newDriverByName(const char* const driverName) if (std::strcmp(driverName, "JACK") == 0) return newJack(); -#ifdef WANT_RTAUDIO -# ifdef __LINUX_ALSA__ +#ifdef __LINUX_ALSA__ if (std::strcmp(driverName, "ALSA") == 0) return newRtAudio(RTAUDIO_LINUX_ALSA); -# endif -# ifdef __LINUX_PULSE__ +#endif +#ifdef __LINUX_PULSE__ if (std::strcmp(driverName, "PulseAudio") == 0) return newRtAudio(RTAUDIO_LINUX_PULSE); -# endif -# ifdef __LINUX_OSS__ +#endif +#ifdef __LINUX_OSS__ if (std::strcmp(driverName, "OSS") == 0) return newRtAudio(RTAUDIO_LINUX_OSS); -# endif -# ifdef __UNIX_JACK__ +#endif +#ifdef __UNIX_JACK__ if (std::strncmp(driverName, "JACK ", 5) == 0) return newRtAudio(RTAUDIO_UNIX_JACK); -# endif -# ifdef __MACOSX_CORE__ +#endif +#ifdef __MACOSX_CORE__ if (std::strcmp(driverName, "CoreAudio") == 0) return newRtAudio(RTAUDIO_MACOSX_CORE); -# endif -# ifdef __WINDOWS_ASIO__ +#endif +#ifdef __WINDOWS_ASIO__ if (std::strcmp(driverName, "ASIO") == 0) return newRtAudio(RTAUDIO_WINDOWS_ASIO); -# endif -# ifdef __WINDOWS_DS__ +#endif +#ifdef __WINDOWS_DS__ if (std::strcmp(driverName, "DirectSound") == 0) return newRtAudio(RTAUDIO_WINDOWS_DS); -# endif #endif carla_stderr("CarlaEngine::newDriverByName(\"%s\") - invalid driver name", driverName); @@ -1444,12 +1453,6 @@ void CarlaEngine::setOption(const OptionsType option, const int value, const cha fOptions.uisAlwaysOnTop = (value != 0); break; -#ifdef WANT_DSSI - case OPTION_USE_DSSI_VST_CHUNKS: - fOptions.useDssiVstChunks = (value != 0); - break; -#endif - case OPTION_MAX_PARAMETERS: if (value < 1) return carla_stderr2("carla_set_engine_option(OPTION_MAX_PARAMETERS, %i, \"%s\") - invalid value", value, valueStr); @@ -1464,32 +1467,30 @@ void CarlaEngine::setOption(const OptionsType option, const int value, const cha fOptions.uiBridgesTimeout = static_cast(value); break; -#ifdef WANT_RTAUDIO - case OPTION_RTAUDIO_NUMBER_PERIODS: + case OPTION_AUDIO_NUM_PERIODS: if (value < 2 || value > 3) - return carla_stderr2("carla_set_engine_option(OPTION_MAX_PARAMETERS, %i, \"%s\") - invalid value", value, valueStr); + return carla_stderr2("carla_set_engine_option(OPTION_AUDIO_NUM_PERIODS, %i, \"%s\") - invalid value", value, valueStr); - fOptions.rtaudioNumPeriods = static_cast(value); + fOptions.audioNumPeriods = static_cast(value); break; - case OPTION_RTAUDIO_BUFFER_SIZE: + case OPTION_AUDIO_BUFFER_SIZE: if (value < 8) - return carla_stderr2("carla_set_engine_option(OPTION_MAX_PARAMETERS, %i, \"%s\") - invalid value", value, valueStr); + return carla_stderr2("carla_set_engine_option(OPTION_AUDIO_BUFFER_SIZE, %i, \"%s\") - invalid value", value, valueStr); - fOptions.rtaudioBufferSize = static_cast(value); + fOptions.audioBufferSize = static_cast(value); break; - case OPTION_RTAUDIO_SAMPLE_RATE: + case OPTION_AUDIO_SAMPLE_RATE: if (value < 22050) - return carla_stderr2("carla_set_engine_option(OPTION_MAX_PARAMETERS, %i, \"%s\") - invalid value", value, valueStr); + return carla_stderr2("carla_set_engine_option(OPTION_AUDIO_SAMPLE_RATE, %i, \"%s\") - invalid value", value, valueStr); - fOptions.rtaudioSampleRate = static_cast(value); + fOptions.audioSampleRate = static_cast(value); break; - case OPTION_RTAUDIO_DEVICE: - fOptions.rtaudioDevice = valueStr; + case OPTION_AUDIO_DEVICE: + fOptions.audioDevice = valueStr; break; -#endif case OPTION_PATH_RESOURCES: fOptions.resourceDir = valueStr; diff --git a/source/backend/engine/CarlaEngine.pro b/source/backend/engine/CarlaEngine.pro index 15145d6af..c8b03f9b1 100644 --- a/source/backend/engine/CarlaEngine.pro +++ b/source/backend/engine/CarlaEngine.pro @@ -22,7 +22,6 @@ DEFINES += WANT_DSSI DEFINES += WANT_LV2 DEFINES += WANT_VST DEFINES += WANT_PLUGIN -DEFINES += WANT_RTAUDIO DEFINES += WANT_FLUIDSYNTH DEFINES += WANT_LINUXSAMPLER DEFINES += WANT_OPENGL diff --git a/source/backend/engine/CarlaEngineInternal.hpp b/source/backend/engine/CarlaEngineInternal.hpp index e905382ca..ad8de04f5 100644 --- a/source/backend/engine/CarlaEngineInternal.hpp +++ b/source/backend/engine/CarlaEngineInternal.hpp @@ -137,8 +137,8 @@ struct EnginePluginData { EnginePluginData() : plugin(nullptr) { - insPeak[0] = insPeak[1] = nullptr; - outsPeak[0] = outsPeak[1] = nullptr; + insPeak[0] = insPeak[1] = 0.0f; + outsPeak[0] = outsPeak[1] = 0.0f; } }; diff --git a/source/backend/engine/CarlaEngineJack.cpp b/source/backend/engine/CarlaEngineJack.cpp index 27cddcfea..b90be5f2c 100644 --- a/source/backend/engine/CarlaEngineJack.cpp +++ b/source/backend/engine/CarlaEngineJack.cpp @@ -505,6 +505,8 @@ public: case kEnginePortTypeEvent: port = jackbridge_port_register(fClient, name, JACK_DEFAULT_MIDI_TYPE, isInput ? JackPortIsInput : JackPortIsOutput, 0); break; + case kEnginePortTypeOSC: + break; } } @@ -519,6 +521,8 @@ public: return new CarlaEngineJackCVPort(fEngine, isInput, fClient, port); case kEnginePortTypeEvent: return new CarlaEngineJackEventPort(fEngine, isInput, fClient, port); + case kEnginePortTypeOSC: + break; } carla_stderr("CarlaEngineJackClient::addPort(%s, \"%s\", %s) - invalid type", EnginePortType2Str(portType), name, bool2str(isInput)); @@ -1212,7 +1216,7 @@ protected: float* outBuf[2] = { audioOut1, audioOut2 }; // initialize input events - carla_zeroStruct(pData->bufEvents.in, INTERNAL_EVENT_COUNT); + carla_zeroStruct(pData->bufEvents.in, kEngineMaxInternalEventCount); { uint32_t engineEventIndex = 0; @@ -1293,7 +1297,7 @@ protected: carla_copy(engineEvent->midi.data+1, jackEvent.buffer+1, jackEvent.size-1); } - if (engineEventIndex >= INTERNAL_EVENT_COUNT) + if (engineEventIndex >= kEngineMaxInternalEventCount) break; } } @@ -1305,7 +1309,7 @@ protected: { jackbridge_midi_clear_buffer(eventOut); - for (unsigned short i=0; i < INTERNAL_EVENT_COUNT; ++i) + for (unsigned short i=0; i < kEngineMaxInternalEventCount; ++i) { EngineEvent* const engineEvent = &pData->bufEvents.out[i]; diff --git a/source/backend/engine/CarlaEngineJuce.cpp b/source/backend/engine/CarlaEngineJuce.cpp index 2b36518b0..1c069517f 100644 --- a/source/backend/engine/CarlaEngineJuce.cpp +++ b/source/backend/engine/CarlaEngineJuce.cpp @@ -33,8 +33,8 @@ CARLA_BACKEND_START_NAMESPACE static const char** gRetNames = nullptr; -class CarlaEngineJuce : public CarlaEngine, - public juce::AudioIODeviceCallback +class CarlaEngineJuce : public CarlaEngine/*, + public juce::AudioIODeviceCallback*/ { public: CarlaEngineJuce() @@ -87,30 +87,30 @@ public: // ------------------------------------------------------------------- protected: - void audioDeviceIOCallback (const float** inputChannelData, - int numInputChannels, - float** outputChannelData, - int numOutputChannels, - int numSamples) - { - } - - void audioDeviceAboutToStart (juce::AudioIODevice* device) - { - } - - void audioDeviceStopped() - { - } - - void audioDeviceError (const juce::String& errorMessage) - { - } +// void audioDeviceIOCallback (const float** inputChannelData, +// int numInputChannels, +// float** outputChannelData, +// int numOutputChannels, +// int numSamples) +// { +// } +// +// void audioDeviceAboutToStart (juce::AudioIODevice* device) +// { +// } +// +// void audioDeviceStopped() +// { +// } +// +// void audioDeviceError (const juce::String& errorMessage) +// { +// } // ------------------------------------- private: - juce::AudioIODeviceType* fDeviceType; + //juce::AudioIODeviceType* fDeviceType; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineJuce) }; @@ -134,6 +134,7 @@ const char* CarlaEngine::getJuceApiName(const unsigned int index) const char** CarlaEngine::getJuceApiDeviceNames(const unsigned int index) { +#if 0 juce::ScopedPointer deviceType; switch(index) @@ -166,6 +167,7 @@ const char** CarlaEngine::getJuceApiDeviceNames(const unsigned int index) gRetNames[i] = carla_strdup(devNames[i].toRawUTF8()); gRetNames[devNameCount] = nullptr; +#endif return gRetNames; } diff --git a/source/backend/engine/CarlaEngineRtAudio.cpp b/source/backend/engine/CarlaEngineRtAudio.cpp index b3ead8845..1345f568b 100644 --- a/source/backend/engine/CarlaEngineRtAudio.cpp +++ b/source/backend/engine/CarlaEngineRtAudio.cpp @@ -15,8 +15,6 @@ * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ -#ifdef WANT_RTAUDIO - #include "CarlaEngineInternal.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaMIDI.h" @@ -158,13 +156,13 @@ public: return false; } - if (fOptions.rtaudioDevice.isNotEmpty()) + if (fOptions.audioDevice.isNotEmpty()) { for (unsigned int i=0; i < devCount; ++i) { RtAudio::DeviceInfo devInfo(fAudio.getDeviceInfo(i)); - if (devInfo.probed && devInfo.outputChannels > 0 && devInfo.name == (const char*)fOptions.rtaudioDevice) + if (devInfo.probed && devInfo.outputChannels > 0 && devInfo.name == (const char*)fOptions.audioDevice) { deviceSet = true; fConnectName = devInfo.name.c_str(); @@ -201,10 +199,10 @@ public: else fAudioIsInterleaved = true; - fBufferSize = fOptions.rtaudioBufferSize; + fBufferSize = fOptions.audioBufferSize; try { - fAudio.openStream(&oParams, &iParams, RTAUDIO_FLOAT32, fOptions.rtaudioSampleRate, &fBufferSize, carla_rtaudio_process_callback, this, &rtOptions); + fAudio.openStream(&oParams, &iParams, RTAUDIO_FLOAT32, fOptions.audioSampleRate, &fBufferSize, carla_rtaudio_process_callback, this, &rtOptions); } catch (RtError& e) { @@ -835,7 +833,7 @@ protected: carla_zeroFloat(fAudioBufRackOut[1], nframes); // initialize input events - carla_zeroMem(pData->bufEvents.in, sizeof(EngineEvent)*INTERNAL_EVENT_COUNT); + carla_zeroMem(pData->bufEvents.in, sizeof(EngineEvent)*kEngineMaxInternalEventCount); if (fMidiInEvents.mutex.tryLock()) { @@ -920,7 +918,7 @@ protected: engineEvent.midi.size = midiEvent.size; } - if (engineEventIndex >= INTERNAL_EVENT_COUNT) + if (engineEventIndex >= kEngineMaxInternalEventCount) break; } @@ -1463,5 +1461,3 @@ const char** CarlaEngine::getRtAudioApiDeviceNames(const unsigned int index) // ----------------------------------------- CARLA_BACKEND_END_NAMESPACE - -#endif // CARLA_ENGINE_RTAUDIO diff --git a/source/backend/engine/Makefile b/source/backend/engine/Makefile index 8de358e9d..da7149e20 100644 --- a/source/backend/engine/Makefile +++ b/source/backend/engine/Makefile @@ -8,24 +8,13 @@ include ../Makefile.mk # -------------------------------------------------------------- -BUILD_CXX_FLAGS += -D__UNIX_JACK__ +BUILD_CXX_FLAGS += -DHAVE_GETTIMEOFDAY -D__UNIX_JACK__ +BUILD_CXX_FLAGS += -Irtaudio-4.0.12 -Irtaudio-4.0.12/include -Irtmidi-2.0.1 BUILD_CXX_FLAGS += $(shell pkg-config --cflags liblo) -# ifeq ($(HAVE_QT4),true) -# BUILD_CXX_FLAGS += $(shell pkg-config --cflags QtCore QtXml) -# else -# BUILD_CXX_FLAGS += $(shell pkg-config --cflags Qt5Core Qt5Xml) -# endif - -# -------------------------------------------------------------- - -ifeq ($(CARLA_RTAUDIO_SUPPORT),true) -BUILD_CXX_FLAGS += -DHAVE_GETTIMEOFDAY -BUILD_CXX_FLAGS += -Irtaudio-4.0.12 -Irtaudio-4.0.12/include -Irtmidi-2.0.1 ifeq ($(DEBUG),true) BUILD_CXX_FLAGS += -D__RTAUDIO_DEBUG__ -D__RTMIDI_DEBUG__ endif -endif # -------------------------------------------------------------- @@ -56,9 +45,9 @@ OBJSp = \ OBJS = $(OBJSp) \ CarlaEngineBridge.cpp.o \ CarlaEngineJack.cpp.o \ + CarlaEngineJuce.cpp.o \ CarlaEngineRtAudio.cpp.o -ifeq ($(CARLA_RTAUDIO_SUPPORT),true) OBJS += \ rtaudio-4.0.12/RtAudio.cpp.o \ rtmidi-2.0.1/RtMidi.cpp.o @@ -70,7 +59,7 @@ OBJS += \ rtaudio-4.0.12/include/asiolist.cpp.o \ rtaudio-4.0.12/include/iasiothiscallresolver.cpp.o endif -endif + TARGET = ../libcarla_engine.a TARGETp = ../libcarla_engine_plugin.a diff --git a/source/backend/plugin/CarlaPlugin.pro b/source/backend/plugin/CarlaPlugin.pro index 98c16b4e2..00529f575 100644 --- a/source/backend/plugin/CarlaPlugin.pro +++ b/source/backend/plugin/CarlaPlugin.pro @@ -22,7 +22,6 @@ DEFINES += WANT_DSSI DEFINES += WANT_LV2 DEFINES += WANT_VST DEFINES += WANT_PLUGIN -DEFINES += WANT_RTAUDIO DEFINES += WANT_FLUIDSYNTH #DEFINES += WANT_LINUXSAMPLER DEFINES += WANT_OPENGL diff --git a/source/backend/plugin/DssiPlugin.cpp b/source/backend/plugin/DssiPlugin.cpp index eeb4250e7..dfa230fa5 100644 --- a/source/backend/plugin/DssiPlugin.cpp +++ b/source/backend/plugin/DssiPlugin.cpp @@ -167,8 +167,8 @@ public: if (isDssiVst) { - if (pData->engine->getOptions().useDssiVstChunks && fDssiDescriptor->get_custom_data != nullptr && fDssiDescriptor->set_custom_data != nullptr) - options |= PLUGIN_OPTION_USE_CHUNKS; +// if (pData->engine->getOptions().useDssiVstChunks && fDssiDescriptor->get_custom_data != nullptr && fDssiDescriptor->set_custom_data != nullptr) +// options |= PLUGIN_OPTION_USE_CHUNKS; } else { @@ -1935,8 +1935,8 @@ public: { fOptions |= PLUGIN_OPTION_FIXED_BUFFERS; - if (pData->engine->getOptions().useDssiVstChunks && fDssiDescriptor->get_custom_data != nullptr && fDssiDescriptor->set_custom_data != nullptr) - fOptions |= PLUGIN_OPTION_USE_CHUNKS; +// if (pData->engine->getOptions().useDssiVstChunks && fDssiDescriptor->get_custom_data != nullptr && fDssiDescriptor->set_custom_data != nullptr) +// fOptions |= PLUGIN_OPTION_USE_CHUNKS; } if (fDssiDescriptor->run_synth != nullptr || fDssiDescriptor->run_multiple_synths != nullptr) diff --git a/source/backend/standalone/CarlaStandalone.cpp b/source/backend/standalone/CarlaStandalone.cpp index a06b1f2c6..69d4da97a 100644 --- a/source/backend/standalone/CarlaStandalone.cpp +++ b/source/backend/standalone/CarlaStandalone.cpp @@ -142,9 +142,9 @@ const char* carla_get_extended_license_text() #ifdef WANT_LV2 text4 += "
  • serd, sord, sratom and lilv libraries for LV2 discovery, http://drobilla.net/software/lilv/
  • "; #endif -#ifdef WANT_RTAUDIO text4 += "
  • RtAudio+RtMidi libraries for extra Audio and MIDI support, http://www.music.mcgill.ca/~gary/rtaudio/
  • "; -#endif + + // end text4 += ""; // code snippets @@ -337,24 +337,18 @@ bool carla_engine_init(const char* driverName, const char* clientName) gStandalone.engine->setCallback(gStandalone.callback, nullptr); #ifndef BUILD_BRIDGE - gStandalone.engine->setOption(CB::OPTION_PROCESS_MODE, static_cast(gStandalone.options.processMode), nullptr); - gStandalone.engine->setOption(CB::OPTION_TRANSPORT_MODE, static_cast(gStandalone.options.transportMode), nullptr); -#endif - gStandalone.engine->setOption(CB::OPTION_FORCE_STEREO, gStandalone.options.forceStereo ? 1 : 0, nullptr); - gStandalone.engine->setOption(CB::OPTION_PREFER_PLUGIN_BRIDGES, gStandalone.options.preferPluginBridges ? 1 : 0, nullptr); - gStandalone.engine->setOption(CB::OPTION_PREFER_UI_BRIDGES, gStandalone.options.preferUiBridges ? 1 : 0, nullptr); - gStandalone.engine->setOption(CB::OPTION_UIS_ALWAYS_ON_TOP, gStandalone.options.uisAlwaysOnTop ? 1 : 0, nullptr); -#ifdef WANT_DSSI - gStandalone.engine->setOption(CB::OPTION_USE_DSSI_VST_CHUNKS, gStandalone.options.useDssiVstChunks ? 1 : 0, nullptr); -#endif - gStandalone.engine->setOption(CB::OPTION_MAX_PARAMETERS, static_cast(gStandalone.options.maxParameters), nullptr); - gStandalone.engine->setOption(CB::OPTION_UI_BRIDGES_TIMEOUT, static_cast(gStandalone.options.uiBridgesTimeout), nullptr); -#ifdef WANT_RTAUDIO - gStandalone.engine->setOption(CB::OPTION_RTAUDIO_NUMBER_PERIODS, static_cast(gStandalone.options.rtaudioNumPeriods), nullptr); - gStandalone.engine->setOption(CB::OPTION_RTAUDIO_BUFFER_SIZE, static_cast(gStandalone.options.rtaudioBufferSize), nullptr); - gStandalone.engine->setOption(CB::OPTION_RTAUDIO_SAMPLE_RATE, static_cast(gStandalone.options.rtaudioSampleRate), nullptr); - gStandalone.engine->setOption(CB::OPTION_RTAUDIO_DEVICE, 0, (const char*)gStandalone.options.rtaudioDevice); + gStandalone.engine->setOption(CB::OPTION_TRANSPORT_MODE, static_cast(gStandalone.options.transportMode), nullptr); #endif + gStandalone.engine->setOption(CB::OPTION_FORCE_STEREO, gStandalone.options.forceStereo ? 1 : 0, nullptr); + gStandalone.engine->setOption(CB::OPTION_PREFER_PLUGIN_BRIDGES, gStandalone.options.preferPluginBridges ? 1 : 0, nullptr); + gStandalone.engine->setOption(CB::OPTION_PREFER_UI_BRIDGES, gStandalone.options.preferUiBridges ? 1 : 0, nullptr); + gStandalone.engine->setOption(CB::OPTION_UIS_ALWAYS_ON_TOP, gStandalone.options.uisAlwaysOnTop ? 1 : 0, nullptr); + gStandalone.engine->setOption(CB::OPTION_MAX_PARAMETERS, static_cast(gStandalone.options.maxParameters), nullptr); + gStandalone.engine->setOption(CB::OPTION_UI_BRIDGES_TIMEOUT, static_cast(gStandalone.options.uiBridgesTimeout), nullptr); + gStandalone.engine->setOption(CB::OPTION_AUDIO_NUM_PERIODS, static_cast(gStandalone.options.audioNumPeriods), nullptr); + gStandalone.engine->setOption(CB::OPTION_AUDIO_BUFFER_SIZE, static_cast(gStandalone.options.audioBufferSize), nullptr); + gStandalone.engine->setOption(CB::OPTION_AUDIO_SAMPLE_RATE, static_cast(gStandalone.options.audioSampleRate), nullptr); + gStandalone.engine->setOption(CB::OPTION_AUDIO_DEVICE, 0, (const char*)gStandalone.options.audioDevice); gStandalone.engine->setOption(CB::OPTION_PATH_RESOURCES, 0, (const char*)gStandalone.options.resourceDir); #ifndef BUILD_BRIDGE gStandalone.engine->setOption(CB::OPTION_PATH_BRIDGE_NATIVE, 0, (const char*)gStandalone.options.bridge_native); @@ -502,12 +496,6 @@ void carla_set_engine_option(CarlaOptionsType option, int value, const char* val gStandalone.options.uisAlwaysOnTop = (value != 0); break; -#ifdef WANT_DSSI - case CB::OPTION_USE_DSSI_VST_CHUNKS: - gStandalone.options.useDssiVstChunks = (value != 0); - break; -#endif - case CB::OPTION_MAX_PARAMETERS: if (value < 1) return carla_stderr2("carla_set_engine_option(OPTION_MAX_PARAMETERS, %i, \"%s\") - invalid value", value, valueStr); @@ -522,32 +510,30 @@ void carla_set_engine_option(CarlaOptionsType option, int value, const char* val gStandalone.options.uiBridgesTimeout = static_cast(value); break; -#ifdef WANT_RTAUDIO - case CB::OPTION_RTAUDIO_NUMBER_PERIODS: + case CB::OPTION_AUDIO_NUM_PERIODS: if (value < 2 || value > 3) - return carla_stderr2("carla_set_engine_option(OPTION_RTAUDIO_NUMBER_PERIODS, %i, \"%s\") - invalid value", value, valueStr); + return carla_stderr2("carla_set_engine_option(OPTION_AUDIO_NUM_PERIODS, %i, \"%s\") - invalid value", value, valueStr); - gStandalone.options.rtaudioNumPeriods = static_cast(value); + gStandalone.options.audioNumPeriods = static_cast(value); break; - case CB::OPTION_RTAUDIO_BUFFER_SIZE: + case CB::OPTION_AUDIO_BUFFER_SIZE: if (value < 8) - return carla_stderr2("carla_set_engine_option(OPTION_RTAUDIO_BUFFER_SIZE, %i, \"%s\") - invalid value", value, valueStr); + return carla_stderr2("carla_set_engine_option(OPTION_AUDIO_BUFFER_SIZE, %i, \"%s\") - invalid value", value, valueStr); - gStandalone.options.rtaudioBufferSize = static_cast(value); + gStandalone.options.audioBufferSize = static_cast(value); break; - case CB::OPTION_RTAUDIO_SAMPLE_RATE: + case CB::OPTION_AUDIO_SAMPLE_RATE: if (value < 22050) - return carla_stderr2("carla_set_engine_option(OPTION_RTAUDIO_SAMPLE_RATE, %i, \"%s\") - invalid value", value, valueStr); + return carla_stderr2("carla_set_engine_option(OPTION_AUDIO_SAMPLE_RATE, %i, \"%s\") - invalid value", value, valueStr); - gStandalone.options.rtaudioSampleRate = static_cast(value); + gStandalone.options.audioSampleRate = static_cast(value); break; - case CB::OPTION_RTAUDIO_DEVICE: - gStandalone.options.rtaudioDevice = valueStr; + case CB::OPTION_AUDIO_DEVICE: + gStandalone.options.audioDevice = valueStr; break; -#endif case CB::OPTION_PATH_RESOURCES: gStandalone.options.resourceDir = valueStr; @@ -1277,6 +1263,8 @@ const char* carla_get_chunk_data(unsigned int pluginId) void* data = nullptr; const int32_t dataSize = plugin->getChunkData(&data); + // TODO +#if 0 if (data != nullptr && dataSize > 0) { QByteArray chunk(QByteArray((char*)data, dataSize).toBase64()); @@ -1284,6 +1272,7 @@ const char* carla_get_chunk_data(unsigned int pluginId) return (const char*)chunkData; } else +#endif carla_stderr2("carla_get_chunk_data(%i) - got invalid chunk data", pluginId); } else diff --git a/source/backend/standalone/Makefile b/source/backend/standalone/Makefile index 949b286f9..ca4ee6b7a 100644 --- a/source/backend/standalone/Makefile +++ b/source/backend/standalone/Makefile @@ -136,7 +136,7 @@ debug: $(CXX) $^ -dynamiclib $(LINK_FLAGS) -framework CoreAudio -framework CoreMIDI -framework CoreFoundation -o $@ ../libcarla_standalone.so: $(OBJS) $(LIBS) - $(CXX) $^ $(LINK_FLAGS) -o $@ # -shared + $(CXX) $^ $(LINK_FLAGS) -shared -o $@ # -------------------------------------------------------------- diff --git a/source/bridges/CarlaBridgeClient.cpp b/source/bridges/CarlaBridgeClient.cpp index 138b8b817..53dccab02 100644 --- a/source/bridges/CarlaBridgeClient.cpp +++ b/source/bridges/CarlaBridgeClient.cpp @@ -33,7 +33,7 @@ CarlaBridgeClient::CarlaBridgeClient(const char* const uiTitle) : fOsc(this), fOscData(fOsc.getControlData()) #ifdef BUILD_BRIDGE_UI - , fUI(CarlaBridgeToolkit::createNew(this, uiTitle)), + , fUI(CarlaBridgeToolkit::createNew(this, uiTitle)) #endif { #ifdef BUILD_BRIDGE_UI diff --git a/source/bridges/CarlaBridgePlugin.cpp b/source/bridges/CarlaBridgePlugin.cpp index ee9ac4a23..c02728ebf 100644 --- a/source/bridges/CarlaBridgePlugin.cpp +++ b/source/bridges/CarlaBridgePlugin.cpp @@ -20,7 +20,7 @@ #include "CarlaBackendUtils.hpp" #include "CarlaBridgeUtils.hpp" -#include "CarlaStandalone.hpp" +#include "CarlaHost.hpp" #include "CarlaEngine.hpp" #include "CarlaPlugin.hpp" @@ -38,6 +38,10 @@ # include #endif +#include "juce_core.h" + +using juce::File; + // ------------------------------------------------------------------------- static bool gCloseNow = false; @@ -99,10 +103,6 @@ void initSignalHandler() extern CarlaBackend::CarlaEngine* carla_get_standalone_engine(); -CARLA_BACKEND_START_NAMESPACE -extern const char* findDSSIGUI(const char* const filename, const char* const label); -CARLA_BACKEND_END_NAMESPACE - CARLA_BRIDGE_START_NAMESPACE #if 0 @@ -131,6 +131,13 @@ public: carla_engine_init("JACK", driverName); carla_set_engine_callback(callback, this); + + File curDir(File::getSpecialLocation(File::currentApplicationFile).getParentDirectory()); + + if (curDir.getChildFile("resources").exists()) + carla_set_engine_option(CarlaBackend::OPTION_PATH_RESOURCES, 0, curDir.getChildFile("resources").getFullPathName().toRawUTF8()); + else + carla_set_engine_option(CarlaBackend::OPTION_PATH_RESOURCES, 0, curDir.getChildFile("../modules/carla_native/resources").getFullPathName().toRawUTF8()); } ~CarlaPluginClient() @@ -536,15 +543,10 @@ int main(int argc, char* argv[]) // Listen for ctrl+c or sigint/sigterm events initSignalHandler(); - const void* extraStuff = nullptr; - - if (itype == CarlaBackend::PLUGIN_DSSI) - extraStuff = CarlaBackend::findDSSIGUI(filename, label); - // Init plugin int ret; - if (carla_add_plugin(CarlaBackend::BINARY_NATIVE, itype, filename, name, label, extraStuff)) + if (carla_add_plugin(CarlaBackend::BINARY_NATIVE, itype, filename, name, label, nullptr)) { if (useOsc) { @@ -579,9 +581,6 @@ int main(int argc, char* argv[]) ret = 1; } - if (extraStuff != nullptr && itype == CarlaBackend::PLUGIN_DSSI) - delete[] (const char*)extraStuff; - // Close OSC if (useOsc) client.oscClose(); diff --git a/source/bridges/CarlaBridgeToolkitQt.cpp b/source/bridges/CarlaBridgeToolkitQt.cpp index c914edac8..49c395ff9 100644 --- a/source/bridges/CarlaBridgeToolkitQt.cpp +++ b/source/bridges/CarlaBridgeToolkitQt.cpp @@ -119,14 +119,14 @@ public: { CarlaStyle* const style(new CarlaStyle()); fApp->setStyle(style); - style->ready(fApp); - - QString color(settings.value("Main/ProThemeColor", "Black").toString()); - - if (color == "System") - pass(); //style->setColorScheme(CarlaStyle::COLOR_SYSTEM); - else - style->setColorScheme(CarlaStyle::COLOR_BLACK); + //style->ready(fApp); + +// QString color(settings.value("Main/ProThemeColor", "Black").toString()); +// +// if (color == "System") +// pass(); //style->setColorScheme(CarlaStyle::COLOR_SYSTEM); +// else +// style->setColorScheme(CarlaStyle::COLOR_BLACK); } } diff --git a/source/bridges/CarlaBridgeUI-LV2.cpp b/source/bridges/CarlaBridgeUI-LV2.cpp index dd4f744d7..727787e9a 100644 --- a/source/bridges/CarlaBridgeUI-LV2.cpp +++ b/source/bridges/CarlaBridgeUI-LV2.cpp @@ -169,7 +169,7 @@ struct Lv2PluginOptions { opts[4] = &optNull; } - CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(Lv2PluginOptions) + CARLA_DECLARE_NON_COPY_STRUCT(Lv2PluginOptions) }; // ------------------------------------------------------------------------- @@ -358,7 +358,7 @@ public: // get plugin from lv2_rdf (lilv) gLv2World.init(); - fRdfDescriptor = lv2_rdf_new(pluginURI); + fRdfDescriptor = lv2_rdf_new(pluginURI, false); if (fRdfDescriptor == nullptr) return false; @@ -1095,14 +1095,14 @@ private: CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaLv2Client) }; -#define lv2ClientPtr ((CarlaLv2Client*)kClient) +#define lv2ClientPtr ((CarlaLv2Client*)fClient) int CarlaBridgeOsc::handleMsgLv2AtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS) { CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "is"); carla_debug("CarlaBridgeOsc::handleMsgLv2AtomTransfer()"); - if (kClient == nullptr) + if (fClient == nullptr) return 1; const int32_t portIndex = argv[0]->i; @@ -1125,7 +1125,7 @@ int CarlaBridgeOsc::handleMsgLv2UridMap(CARLA_BRIDGE_OSC_HANDLE_ARGS) CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "is"); carla_debug("CarlaBridgeOsc::handleMsgLv2UridMap()"); - if (kClient == nullptr) + if (fClient == nullptr) return 1; const int32_t urid = argv[0]->i; diff --git a/source/bridges/Makefile b/source/bridges/Makefile index 2679cd53a..92837eada 100644 --- a/source/bridges/Makefile +++ b/source/bridges/Makefile @@ -71,7 +71,7 @@ endif WIN_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) -DJACKBRIDGE_EXPORT WIN_32BIT_FLAGS = $(32BIT_FLAGS) WIN_64BIT_FLAGS = $(64BIT_FLAGS) -WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) $(EXTRA_LIBS) -mwindows -lwinspool -lole32 -luuid -limm32 -lshell32 -lws2_32 -L../libs +WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) $(EXTRA_LIBS) -mwindows -lwinspool -lole32 -luuid -limm32 -lshell32 -lws2_32 -L../modules # -------------------------------------------------------------- # Plugin bridges (Native) @@ -159,8 +159,8 @@ LINK_UI_LV2_WIN32_FLAGS = $(LINK_FLAGS) $(QT_UI_LIBS) $(EXTRA_LIBS) -mwindows - BUILD_UI_LV2_X11_FLAGS = $(BUILD_UI_LV2_FLAGS) -DBRIDGE_X11 -DBRIDGE_LV2_X11 $(QT_UI_FLAGS) LINK_UI_LV2_X11_FLAGS = $(LINK_UI_FLAGS) $(QT_UI_LIBS) -BUILD_UI_VST_COCOA_FLAGS = $(BUILD_UI_VST_FLAGS) -DBRIDGE_COCOA -DBRIDGE_VST_COCOA $(QT_UI_FLAGS) -LINK_UI_VST_COCOA_FLAGS = $(LINK_UI_FLAGS) $(QT_UI_LIBS) +BUILD_UI_VST_MAC_FLAGS = $(BUILD_UI_VST_FLAGS) -DBRIDGE_MAC -DBRIDGE_VST_MAC $(QT_UI_FLAGS) +LINK_UI_VST_MAC_FLAGS = $(LINK_UI_FLAGS) $(QT_UI_LIBS) BUILD_UI_VST_HWND_FLAGS = $(BUILD_UI_VST_FLAGS) -DBRIDGE_HWND -DBRIDGE_VST_HWND $(QT_UI_FLAGS) LINK_UI_VST_HWND_FLAGS = $(LINK_FLAGS) $(QT_UI_LIBS) $(EXTRA_LIBS) -mwindows -lwinspool -lole32 -luuid -limm32 -lshell32 -lws2_32 -static @@ -210,9 +210,9 @@ ui_lv2-cocoa: carla-bridge-lv2-cocoa ui_lv2-win32: carla-bridge-lv2-windows.exe ui_lv2-x11: carla-bridge-lv2-x11 -ui_vst-cocoa: carla-bridge-vst-cocoa -ui_vst-hwnd: carla-bridge-vst-hwnd.exe -ui_vst-x11: carla-bridge-vst-x11 +ui_vst-mac: carla-bridge-vst-mac +ui_vst-hwnd: carla-bridge-vst-hwnd.exe +ui_vst-x11: carla-bridge-vst-x11 # -------------------------------------------------------------- @@ -235,7 +235,11 @@ CarlaBridgeToolkitQt.moc: CarlaBridgeToolkitQt.cpp $(MOC) $< -DMOC_PARSING -o $@ OBJS_UI_LV2_LIBS = \ - ../libs/lilv.a + ../modules/lilv.a \ + ../modules/juce_core.a + +OBJS_UI_VST_LIBS = \ + ../modules/juce_core.a # -------------------------------------------------------------- # ui_lv2-gtk2 @@ -270,7 +274,7 @@ OBJS_UI_LV2_QT4 = CarlaBridgeUI-LV2__lv2-qt4.o \ CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-qt4.o -carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4) $(OBJS_UI_LV2_LIBS) ../libs/theme.a +carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4) $(OBJS_UI_LV2_LIBS) ../modules/theme.a $(CXX) $^ $(LINK_UI_LV2_QT4_FLAGS) -o $@ %__lv2-qt4.o: %.cpp CarlaBridgeToolkitQt.moc @@ -283,7 +287,7 @@ OBJS_UI_LV2_QT5 = CarlaBridgeUI-LV2__lv2-qt5.o \ CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-qt5.o -carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5) $(OBJS_UI_LV2_LIBS) ../libs/theme.a +carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5) $(OBJS_UI_LV2_LIBS) ../modules/theme.a $(CXX) $^ $(LINK_UI_LV2_QT5_FLAGS) -o $@ %__lv2-qt5.o: %.cpp CarlaBridgeToolkitQt.moc @@ -296,7 +300,7 @@ OBJS_UI_LV2_COCOA = CarlaBridgeUI-LV2__lv2-cocoa.o \ CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-cocoa.o -carla-bridge-lv2-cocoa: $(OBJS_UI_LV2_COCOA) $(OBJS_UI_LV2_LIBS) ../libs/theme.a +carla-bridge-lv2-cocoa: $(OBJS_UI_LV2_COCOA) $(OBJS_UI_LV2_LIBS) ../modules/theme.a $(CXX) $^ $(LINK_UI_LV2_COCOA_FLAGS) -o $@ %__lv2-cocoa.o: %.cpp CarlaBridgeToolkitQt.moc @@ -309,7 +313,7 @@ OBJS_UI_LV2_WIN32 = CarlaBridgeUI-LV2__lv2-windows.o \ CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-windows.o -carla-bridge-lv2-windows.exe: $(OBJS_UI_LV2_WIN32) $(OBJS_UI_LV2_LIBS) ../libs/theme.a +carla-bridge-lv2-windows.exe: $(OBJS_UI_LV2_WIN32) $(OBJS_UI_LV2_LIBS) ../modules/theme.a $(CXX) $^ $(LINK_UI_LV2_WIN32_FLAGS) -o $@ %__lv2-windows.o: %.cpp CarlaBridgeToolkitQt.moc @@ -322,24 +326,24 @@ OBJS_UI_LV2_X11 = CarlaBridgeUI-LV2__lv2-x11.o \ CarlaBridgeClient__lv2.o CarlaBridgeOsc__lv2.o \ CarlaBridgeToolkit__lv2.o CarlaBridgeToolkitQt__lv2-x11.o -carla-bridge-lv2-x11: $(OBJS_UI_LV2_X11) $(OBJS_UI_LV2_LIBS) ../libs/theme.a +carla-bridge-lv2-x11: $(OBJS_UI_LV2_X11) $(OBJS_UI_LV2_LIBS) ../modules/theme.a $(CXX) $^ $(LINK_UI_LV2_X11_FLAGS) -o $@ %__lv2-x11.o: %.cpp CarlaBridgeToolkitQt.moc $(CXX) $< $(BUILD_UI_LV2_X11_FLAGS) -c -o $@ # -------------------------------------------------------------- -# ui_vst-cocoa +# ui_vst-mac -OBJS_UI_VST_COCOA = CarlaBridgeUI-VST__vst-cocoa.o \ +OBJS_UI_VST_MAC = CarlaBridgeUI-VST__vst-mac.o \ CarlaBridgeClient__vst.o CarlaBridgeOsc__vst.o \ - CarlaBridgeToolkit__vst.o CarlaBridgeToolkitQt__vst-cocoa.o + CarlaBridgeToolkit__vst.o CarlaBridgeToolkitQt__vst-mac.o -carla-bridge-vst-cocoa: $(OBJS_UI_VST_COCOA) ../libs/theme.a - $(CXX) $^ $(LINK_UI_VST_COCOA_FLAGS) -o $@ +carla-bridge-vst-mac: $(OBJS_UI_VST_MAC) $(OBJS_UI_VST_LIBS) ../modules/theme.a + $(CXX) $^ $(LINK_UI_VST_MAC_FLAGS) -o $@ -%__vst-cocoa.o: %.cpp CarlaBridgeToolkitQt.moc - $(CXX) $< $(BUILD_UI_VST_COCOA_FLAGS) -c -o $@ +%__vst-mac.o: %.cpp CarlaBridgeToolkitQt.moc + $(CXX) $< $(BUILD_UI_VST_MAC_FLAGS) -c -o $@ # -------------------------------------------------------------- # ui_vst-hwnd @@ -348,7 +352,7 @@ OBJS_UI_VST_HWND = CarlaBridgeUI-VST__vst-hwnd.o \ CarlaBridgeClient__vst.o CarlaBridgeOsc__vst.o \ CarlaBridgeToolkit__vst.o CarlaBridgeToolkitQt__vst-hwnd.o -carla-bridge-vst-hwnd.exe: $(OBJS_UI_VST_HWND) ../libs/theme.a +carla-bridge-vst-hwnd.exe: $(OBJS_UI_VST_HWND) $(OBJS_UI_VST_LIBS) ../modules/theme.a $(CXX) $^ $(LINK_UI_VST_HWND_FLAGS) -o $@ %__vst-hwnd.o: %.cpp CarlaBridgeToolkitQt.moc @@ -361,7 +365,7 @@ OBJS_UI_VST_X11 = CarlaBridgeUI-VST__vst-x11.o \ CarlaBridgeClient__vst.o CarlaBridgeOsc__vst.o \ CarlaBridgeToolkit__vst.o CarlaBridgeToolkitQt__vst-x11.o -carla-bridge-vst-x11: $(OBJS_UI_VST_X11) ../libs/theme.a +carla-bridge-vst-x11: $(OBJS_UI_VST_X11) $(OBJS_UI_VST_LIBS) ../modules/theme.a $(CXX) $^ $(LINK_UI_VST_X11_FLAGS) -o $@ %__vst-x11.o: %.cpp CarlaBridgeToolkitQt.moc @@ -407,14 +411,15 @@ OBJS_NATIVE += \ # libs OBJS_NATIVE += \ - ../backend/libcarla_native.a \ - ../libs/dgl.a \ - ../libs/rtmempool.a \ - ../libs/widgets.a + ../modules/carla_native.a \ + ../modules/dgl.a \ + ../modules/juce_audio_basics.a \ + ../modules/juce_core.a \ + ../modules/rtmempool.a ifeq ($(CARLA_PLUGIN_SUPPORT),true) OBJS_NATIVE += \ - ../libs/lilv.a + ../modules/lilv.a endif carla-bridge-native: $(FILES) $(OBJS_NATIVE) @@ -457,8 +462,8 @@ OBJS_POSIX32 += \ # libs OBJS_POSIX32 += \ - ../libs/lilv.posix32.a \ - ../libs/rtmempool.posix32.a + ../modules/lilv.posix32.a \ + ../modules/rtmempool.posix32.a carla-bridge-posix32: $(FILES) $(OBJS_POSIX32) $(CXX) $(OBJS_POSIX32) $(POSIX_LINK_FLAGS) $(POSIX_32BIT_FLAGS) -o $@ @@ -500,8 +505,8 @@ OBJS_POSIX64 += \ # libs OBJS_POSIX64 += \ - ../libs/lilv.posix64.a \ - ../libs/rtmempool.posix64.a + ../modules/lilv.posix64.a \ + ../modules/rtmempool.posix64.a carla-bridge-posix64: $(FILES) $(OBJS_POSIX64) $(CXX) $(OBJS_POSIX64) $(POSIX_LINK_FLAGS) $(POSIX_64BIT_FLAGS) -o $@ @@ -543,10 +548,10 @@ OBJS_WIN32 += \ # libs OBJS_WIN32 += \ - ../libs/lilv.win32.a \ - ../libs/rtmempool.win32.a + ../modules/lilv.win32.a \ + ../modules/rtmempool.win32.a -carla-bridge-win32.exe: $(FILES) $(OBJS_WIN32) ../libs/jackbridge-win32.dll +carla-bridge-win32.exe: $(FILES) $(OBJS_WIN32) ../modules/jackbridge-win32.dll $(CXX) $(OBJS_WIN32) $(WIN_32BIT_FLAGS) $(WIN_LINK_FLAGS) -ljackbridge-win32 -o $@ %__win32.o: %.cpp @@ -586,10 +591,10 @@ OBJS_WIN64 += \ # libs OBJS_WIN64 += \ - ../libs/lilv.win64.a \ - ../libs/rtmempool.win64.a + ../modules/lilv.win64.a \ + ../modules/rtmempool.win64.a -carla-bridge-win64.exe: $(FILES) $(OBJS_WIN64) ../libs/jackbridge-win64.dll +carla-bridge-win64.exe: $(FILES) $(OBJS_WIN64) ../modules/jackbridge-win64.dll $(CXX) $(OBJS_WIN64) $(WIN_64BIT_FLAGS) $(WIN_LINK_FLAGS) -ljackbridge-win64 -o $@ %__win64.o: %.cpp @@ -605,20 +610,17 @@ carla-bridge-win64.exe: $(FILES) $(OBJS_WIN64) ../libs/jackbridge-win64.dll .FORCE: .PHONY: .FORCE -../backend/libcarla_native.a: .FORCE - $(MAKE) -C ../backend/native - -../libs/lilv.%.a: .FORCE - $(MAKE) -C ../libs lilv_$* +../modules/lilv.%.a: .FORCE + $(MAKE) -C ../modules lilv_$* -../libs/rtmempool.%.a: .FORCE - $(MAKE) -C ../libs rtmempool_$* +../modules/rtmempool.%.a: .FORCE + $(MAKE) -C ../modules rtmempool_$* -../libs/%.a: .FORCE - $(MAKE) -C ../libs $* +../modules/%.a: .FORCE + $(MAKE) -C ../modules $* -../libs/%.dll: - $(MAKE) -C ../libs $* +../modules/%.dll: + $(MAKE) -C ../modules $* # -------------------------------------------------------------- @@ -635,7 +637,7 @@ clean: rm -f $(OBJS_WIN32) rm -f $(OBJS_WIN64) rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-qt5 carla-bridge-lv2-cocoa carla-bridge-lv2-x11 - rm -f carla-bridge-vst-cocoa carla-bridge-vst-x11 + rm -f carla-bridge-vst-mac carla-bridge-vst-x11 rm -f carla-bridge-native carla-bridge-posix32 carla-bridge-posix64 # -------------------------------------------------------------- diff --git a/source/bridges/qtcreator/carla-bridge-plugin.pro b/source/bridges/qtcreator/carla-bridge-plugin.pro index d04ddee9e..ce94f13e9 100644 --- a/source/bridges/qtcreator/carla-bridge-plugin.pro +++ b/source/bridges/qtcreator/carla-bridge-plugin.pro @@ -1,14 +1,12 @@ # QtCreator project file -QT = core gui xml - TARGET = carla-bridge-qtcreator TEMPLATE = app # ------------------------------------------------------- CONFIG = debug -CONFIG += link_pkgconfig qt warn_on +CONFIG += link_pkgconfig warn_on DEFINES = DEBUG DEFINES += HAVE_CPP11_SUPPORT @@ -23,13 +21,14 @@ DEFINES += WANT_LADSPA DEFINES += WANT_DSSI DEFINES += WANT_LV2 DEFINES += WANT_VST +DEFINES += WANT_AU DEFINES += WANT_FLUIDSYNTH -#DEFINES += WANT_LINUXSAMPLER +DEFINES += WANT_LINUXSAMPLER DEFINES += WANT_OPENGL DEFINES += WANT_AUDIOFILE DEFINES += WANT_MIDIFILE DEFINES += WANT_ZYNADDSUBFX -#DEFINES += WANT_ZYNADDSUBFX_UI +# DEFINES += WANT_ZYNADDSUBFX_UI # Engine PKGCONFIG = liblo @@ -38,7 +37,7 @@ PKGCONFIG = liblo PKGCONFIG += fluidsynth # LinuxSampler -#PKGCONFIG += linuxsampler +PKGCONFIG += linuxsampler # AudioFile DEFINES += HAVE_FFMPEG @@ -74,7 +73,9 @@ SOURCES += \ ../../backend/engine/CarlaEngineOsc.cpp \ ../../backend/engine/CarlaEngineThread.cpp \ ../../backend/engine/CarlaEngineBridge.cpp \ - ../../backend/engine/CarlaEngineJack.cpp + ../../backend/engine/CarlaEngineJack.cpp \ + ../../backend/engine/CarlaEngineJuce.cpp \ + ../../backend/engine/CarlaEngineRtAudio.cpp # Plugin SOURCES += \ @@ -87,7 +88,7 @@ SOURCES += \ ../../backend/plugin/DssiPlugin.cpp \ ../../backend/plugin/Lv2Plugin.cpp \ ../../backend/plugin/VstPlugin.cpp \ - ../../backend/plugin/Vst3Plugin.cpp \ + ../../backend/plugin/CsoundPlugin.cpp \ ../../backend/plugin/FluidSynthPlugin.cpp \ ../../backend/plugin/LinuxSamplerPlugin.cpp @@ -104,7 +105,7 @@ HEADERS += \ ../../backend/CarlaNative.h \ ../../backend/CarlaNative.hpp \ ../../backend/CarlaPlugin.hpp \ - ../../backend/CarlaStandalone.hpp + ../../backend/CarlaHost.hpp # engine HEADERS += \ @@ -121,9 +122,14 @@ HEADERS += \ # includes HEADERS += \ ../../includes/CarlaDefines.hpp \ - ../../includes/CarlaMIDI.h \ - ../../includes/ladspa_rdf.hpp \ - ../../includes/lv2_rdf.hpp + ../../includes/CarlaMIDI.h + +# modules +HEADERS += \ + ../../modules/CarlaNative.h \ + ../../modules/CarlaNative.hpp \ + ../../modules/ladspa_rdf.hpp \ + ../../modules/lv2_rdf.hpp # utils HEADERS += \ @@ -156,11 +162,11 @@ INCLUDEPATH = .. \ # ----------------------------------------------------------- LIBS = -ldl -LIBS += ../../backend/libcarla_native.a +LIBS += ../../modules/carla_native.a +LIBS += ../../modules/juce_audio_basics.a LIBS += ../../modules/juce_core.a LIBS += ../../modules/rtmempool.a LIBS += ../../modules/theme.a -LIBS += ../../modules/widgets.a LIBS += ../../modules/dgl.a LIBS += ../../modules/lilv.a diff --git a/source/carla_database.py b/source/carla_database.py index 0d0d7338d..1150be5a2 100644 --- a/source/carla_database.py +++ b/source/carla_database.py @@ -34,6 +34,7 @@ except: import ui_carla_database import ui_carla_refresh + from carla_shared import * # ------------------------------------------------------------------------------------------------------------ @@ -116,12 +117,13 @@ def findFilenames(filePath, stype): # ------------------------------------------------------------------------------------------------------------ # Plugin Query -PLUGIN_QUERY_API_VERSION = 1 +PLUGIN_QUERY_API_VERSION = 2 PyPluginInfo = { 'API': PLUGIN_QUERY_API_VERSION, 'build': BINARY_NONE, 'type': PLUGIN_NONE, + 'category': PLUGIN_CATEGORY_NONE, 'hints': 0x0, 'binary': "", 'name': "", @@ -182,7 +184,7 @@ def runCarlaDiscovery(itype, stype, filename, tool, isWine=False): pinfo['binary'] = filename elif line == "carla-discovery::end::------------": - if pinfo != None: + if pinfo is not None: plugins.append(pinfo) del pinfo pinfo = None @@ -193,6 +195,9 @@ def runCarlaDiscovery(itype, stype, filename, tool, isWine=False): elif line.startswith("err:module:import_dll Library"): print(line) + elif line.startswith("carla-discovery::info::"): + print("%s - %s" % (line, filename)) + elif line.startswith("carla-discovery::error::"): print("%s - %s" % (line, filename)) @@ -217,6 +222,8 @@ def runCarlaDiscovery(itype, stype, filename, tool, isWine=False): if value.isdigit(): pinfo['uniqueId'] = int(value) elif prop == "hints": if value.isdigit(): pinfo['hints'] = int(value) + elif prop == "category": + if value.isdigit(): pinfo['category'] = int(value) elif prop == "audio.ins": if value.isdigit(): pinfo['audio.ins'] = int(value) elif prop == "audio.outs": @@ -247,12 +254,6 @@ def runCarlaDiscovery(itype, stype, filename, tool, isWine=False): pinfo = None continue - # FIXME - put this into c++ discovery - for pinfo in plugins: - if itype == PLUGIN_DSSI: - if findDSSIGUI(pinfo['binary'], pinfo['name'], pinfo['label']): - pinfo['hints'] |= PLUGIN_HAS_GUI - # FIXME? tmp = discoveryProcess discoveryProcess = None @@ -270,12 +271,13 @@ def checkPluginInternal(desc): plugins = [] pinfo = deepcopy(PyPluginInfo) - pinfo['build'] = BINARY_NATIVE - pinfo['type'] = PLUGIN_INTERNAL - pinfo['hints'] = int(desc['hints']) - pinfo['name'] = cString(desc['name']) - pinfo['label'] = cString(desc['label']) - pinfo['maker'] = cString(desc['maker']) + pinfo['build'] = BINARY_NATIVE + pinfo['type'] = PLUGIN_INTERNAL + pinfo['category'] = int(desc['category']) + pinfo['hints'] = int(desc['hints']) + pinfo['name'] = cString(desc['name']) + pinfo['label'] = cString(desc['label']) + pinfo['maker'] = cString(desc['maker']) pinfo['copyright'] = cString(desc['copyright']) pinfo['audio.ins'] = int(desc['audioIns']) @@ -500,7 +502,7 @@ class SearchPluginsThread(QThread): json.dump(ladspaRdfInfo, fdLadspa) fdLadspa.close() - if not self.fContinueChecking: return + if not self.fContinueChecking: return if self.fCheckDSSI: if self.fCheckNative: @@ -533,7 +535,7 @@ class SearchPluginsThread(QThread): settingsDB.sync() - if not self.fContinueChecking: return + if not self.fContinueChecking: return if self.fCheckLV2: if self.fCheckNative: @@ -566,7 +568,7 @@ class SearchPluginsThread(QThread): settingsDB.sync() - if not self.fContinueChecking: return + if not self.fContinueChecking: return if self.fCheckVST: if self.fCheckNative: @@ -599,7 +601,7 @@ class SearchPluginsThread(QThread): settingsDB.sync() - if not self.fContinueChecking: return + if not self.fContinueChecking: return if self.fCheckAU: if self.fCheckNative: @@ -620,28 +622,40 @@ class SearchPluginsThread(QThread): settingsDB.sync() - if not self.fContinueChecking: return + if not self.fContinueChecking: return if self.fCheckCSOUND: self._checkCSOUND() settingsDB.setValue("Plugins/CSOUND", self.fCsoundPlugins) - if not self.fContinueChecking: return + if not self.fContinueChecking: return if self.fCheckGIG: - self._checkKIT(Carla.GIG_PATH, "gig") + settings = QSettings() + GIG_PATH = toList(settings.value("Paths/GIG", Carla.DEFAULT_GIG_PATH)) + del settings + + self._checkKIT(GIG_PATH, "gig") settingsDB.setValue("Plugins/GIG", self.fKitPlugins) - if not self.fContinueChecking: return + if not self.fContinueChecking: return if self.fCheckSF2: - self._checkKIT(Carla.SF2_PATH, "sf2") + settings = QSettings() + SF2_PATH = toList(settings.value("Paths/SF2", Carla.DEFAULT_SF2_PATH)) + del settings + + self._checkKIT(SF2_PATH, "sf2") settingsDB.setValue("Plugins/SF2", self.fKitPlugins) - if not self.fContinueChecking: return + if not self.fContinueChecking: return if self.fCheckSFZ: - self._checkKIT(Carla.SFZ_PATH, "sfz") + settings = QSettings() + SFZ_PATH = toList(settings.value("Paths/SFZ", Carla.DEFAULT_SFZ_PATH)) + del settings + + self._checkKIT(SFZ_PATH, "sfz") settingsDB.setValue("Plugins/SFZ", self.fKitPlugins) settingsDB.sync() @@ -652,7 +666,10 @@ class SearchPluginsThread(QThread): self._pluginLook(self.fLastCheckValue, "LADSPA plugins...") - for iPATH in Carla.LADSPA_PATH: + settings = QSettings() + LADSPA_PATH = toList(settings.value("Paths/LADSPA", Carla.DEFAULT_LADSPA_PATH)) + + for iPATH in LADSPA_PATH: binaries = findBinaries(iPATH, OS) for binary in binaries: if binary not in ladspaBinaries: @@ -682,7 +699,10 @@ class SearchPluginsThread(QThread): self._pluginLook(self.fLastCheckValue, "DSSI plugins...") - for iPATH in Carla.DSSI_PATH: + settings = QSettings() + DSSI_PATH = toList(settings.value("Paths/DSSI", Carla.DEFAULT_DSSI_PATH)) + + for iPATH in DSSI_PATH: binaries = findBinaries(iPATH, OS) for binary in binaries: if binary not in dssiBinaries: @@ -712,7 +732,10 @@ class SearchPluginsThread(QThread): self._pluginLook(self.fLastCheckValue, "LV2 bundles...") - for iPATH in Carla.LV2_PATH: + settings = QSettings() + LV2_PATH = toList(settings.value("Paths/LV2", Carla.DEFAULT_LV2_PATH)) + + for iPATH in LV2_PATH: bundles = findLV2Bundles(iPATH) for bundle in bundles: if bundle not in lv2Bundles: @@ -745,7 +768,10 @@ class SearchPluginsThread(QThread): else: self._pluginLook(self.fLastCheckValue, "VST plugins...") - for iPATH in Carla.VST_PATH: + settings = QSettings() + VST_PATH = toList(settings.value("Paths/VST", Carla.DEFAULT_VST_PATH)) + + for iPATH in VST_PATH: if MACOS and not isWine: binaries = findMacVSTBundles(iPATH) else: @@ -779,7 +805,10 @@ class SearchPluginsThread(QThread): # FIXME - this probably uses bundles self._pluginLook(self.fLastCheckValue, "AU plugins...") - for iPATH in Carla.AU_PATH: + settings = QSettings() + AU_PATH = toList(settings.value("Paths/AU", Carla.DEFAULT_AU_PATH)) + + for iPATH in AU_PATH: binaries = findBinaries(iPATH, "MACOS") for binary in binaries: if binary not in auBinaries: @@ -807,7 +836,10 @@ class SearchPluginsThread(QThread): csoundFiles = [] self.fCsoundPlugins = [] - for iPATH in Carla.CSOUND_PATH: + settings = QSettings() + CSOUND_PATH = toList(settings.value("Paths/CSOUND", Carla.DEFAULT_CSOUND_PATH)) + + for iPATH in CSOUND_PATH: files = findFilenames(iPATH, "csd") for file_ in files: if file_ not in csoundFiles: @@ -1270,7 +1302,8 @@ class PluginDatabaseW(QDialog): mIns = plugin['midi.ins'] mOuts = plugin['midi.outs'] ptype = self.ui.tableWidget.item(i, 12).text() - isSynth = bool(plugin['hints'] & PLUGIN_IS_SYNTH) + #isSynth = bool(plugin['hints'] & PLUGIN_IS_SYNTH) + isSynth = bool(plugin['category'] == PLUGIN_CATEGORY_SYNTH) isEffect = bool(aIns > 0 < aOuts and not isSynth) isMidi = bool(aIns == 0 and aOuts == 0 and mIns > 0 < mOuts) isKit = bool(ptype in ("GIG", "SF2", "SFZ")) @@ -1332,6 +1365,9 @@ class PluginDatabaseW(QDialog): self.ui.frame.setVisible(yesNo) def _addPluginToTable(self, plugin, ptype): + if plugin['API'] != PLUGIN_QUERY_API_VERSION: + return + index = self.fLastTableIndex if plugin['build'] == BINARY_NATIVE: @@ -1370,7 +1406,7 @@ class PluginDatabaseW(QDialog): self.ui.tableWidget.setItem(index, 7, QTableWidgetItem(str(plugin['parameters.outs']))) self.ui.tableWidget.setItem(index, 8, QTableWidgetItem(str(plugin['programs.total']))) self.ui.tableWidget.setItem(index, 9, QTableWidgetItem(self.tr("Yes") if (plugin['hints'] & PLUGIN_HAS_GUI) else self.tr("No"))) - self.ui.tableWidget.setItem(index, 10, QTableWidgetItem(self.tr("Yes") if (plugin['hints'] & PLUGIN_IS_SYNTH) else self.tr("No"))) + self.ui.tableWidget.setItem(index, 10, QTableWidgetItem(self.tr("Yes") if (plugin['category'] == PLUGIN_CATEGORY_SYNTH) else self.tr("No"))) self.ui.tableWidget.setItem(index, 11, QTableWidgetItem(bridgeText)) self.ui.tableWidget.setItem(index, 12, QTableWidgetItem(ptype)) self.ui.tableWidget.setItem(index, 13, QTableWidgetItem(str(plugin['binary']))) @@ -1402,8 +1438,7 @@ class PluginDatabaseW(QDialog): internalPlugins = toList(settingsDB.value("Plugins/Internal", [])) for plugins in internalPlugins: - for plugin in plugins: - internalCount += 1 + internalCount += len(plugins) if Carla.host is not None and internalCount != Carla.host.get_internal_plugin_count(): internalCount = Carla.host.get_internal_plugin_count() @@ -1422,6 +1457,8 @@ class PluginDatabaseW(QDialog): for plugin in plugins: self._addPluginToTable(plugin, self.tr("Internal")) + del internalPlugins + # --------------------------------------------------------------------------- # LADSPA @@ -1437,6 +1474,8 @@ class PluginDatabaseW(QDialog): self._addPluginToTable(plugin, "LADSPA") ladspaCount += 1 + del ladspaPlugins + # --------------------------------------------------------------------------- # DSSI @@ -1452,6 +1491,8 @@ class PluginDatabaseW(QDialog): self._addPluginToTable(plugin, "DSSI") dssiCount += 1 + del dssiPlugins + # --------------------------------------------------------------------------- # LV2 @@ -1467,6 +1508,8 @@ class PluginDatabaseW(QDialog): self._addPluginToTable(plugin, "LV2") lv2Count += 1 + del lv2Plugins + # --------------------------------------------------------------------------- # VST @@ -1482,6 +1525,8 @@ class PluginDatabaseW(QDialog): self._addPluginToTable(plugin, "VST") vstCount += 1 + del vstPlugins + # --------------------------------------------------------------------------- # AU @@ -1496,6 +1541,8 @@ class PluginDatabaseW(QDialog): self._addPluginToTable(plugin, "AU") auCount += 1 + del auPlugins + # --------------------------------------------------------------------------- # Csound @@ -1506,28 +1553,42 @@ class PluginDatabaseW(QDialog): self._addPluginToTable(csd_i, "CSOUND") csoundCount += 1 + del csds + # --------------------------------------------------------------------------- # Kits gigs = toList(settingsDB.value("Plugins/GIG", [])) - sf2s = toList(settingsDB.value("Plugins/SF2", [])) - sfzs = toList(settingsDB.value("Plugins/SFZ", [])) for gig in gigs: for gig_i in gig: self._addPluginToTable(gig_i, "GIG") kitCount += 1 + del gigs + + # --------------------------------------------------------------------------- + + sf2s = toList(settingsDB.value("Plugins/SF2", [])) + for sf2 in sf2s: for sf2_i in sf2: self._addPluginToTable(sf2_i, "SF2") kitCount += 1 + del sf2s + + # --------------------------------------------------------------------------- + + sfzs = toList(settingsDB.value("Plugins/SFZ", [])) + for sfz in sfzs: for sfz_i in sfz: self._addPluginToTable(sfz_i, "SFZ") kitCount += 1 + del sfzs + # --------------------------------------------------------------------------- self.ui.tableWidget.setSortingEnabled(True) @@ -1603,10 +1664,8 @@ class PluginDatabaseW(QDialog): # ------------------------------------------------------------------------------------------------------------ # TESTING -#Carla.isControl = True - -#from PyQt5.QtWidgets import QApplication -#app = QApplication(sys.argv) -#gui = PluginDatabaseW(None) -#gui.show() -#app.exec_() +from PyQt5.QtWidgets import QApplication +app = QApplication(sys.argv) +gui = PluginDatabaseW(None) +gui.show() +app.exec_() diff --git a/source/carla_settings.py b/source/carla_settings.py index 7304f134d..461c8a2c9 100644 --- a/source/carla_settings.py +++ b/source/carla_settings.py @@ -31,8 +31,10 @@ except: # ------------------------------------------------------------------------------------------------------------ # Imports (Custom) +#import patchcanvas import ui_carla_settings import ui_carla_settings_driver + from carla_shared import * # ------------------------------------------------------------------------------------------------------------ @@ -43,16 +45,15 @@ CARLA_DEFAULT_CANVAS_WIDTH = 3100 CARLA_DEFAULT_CANVAS_HEIGHT = 2400 # Engine settings -CARLA_DEFAULT_DISABLE_CHECKS = False +CARLA_DEFAULT_RUN_DISCOVERY_CHECKS = True CARLA_DEFAULT_FORCE_STEREO = False CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES = False CARLA_DEFAULT_PREFER_UI_BRIDGES = True CARLA_DEFAULT_UIS_ALWAYS_ON_TOP = True -CARLA_DEFAULT_USE_DSSI_VST_CHUNKS = False CARLA_DEFAULT_MAX_PARAMETERS = MAX_DEFAULT_PARAMETERS CARLA_DEFAULT_UI_BRIDGES_TIMEOUT = 4000 CARLA_DEFAULT_AUDIO_NUM_PERIODS = 2 -CARLA_DEFAULT_AUDIO_BUFFER_SIZE = 1024 +CARLA_DEFAULT_AUDIO_BUFFER_SIZE = 512 CARLA_DEFAULT_AUDIO_SAMPLE_RATE = 44100 if WINDOWS: @@ -132,7 +133,7 @@ class DriverSettingsW(QDialog): else: self.ui.cb_device.setCurrentIndex(-1) - if audioNumPeriods and 2 < audioNumPeriods < 3: + if 2 < audioNumPeriods < 3: self.ui.sb_numperiods.setValue(audioNumPeriods) else: self.ui.sb_numperiods.setValue(CARLA_DEFAULT_AUDIO_NUM_PERIODS) @@ -177,7 +178,7 @@ class CarlaSettingsW(QDialog): PROCESS_MODE_NON_JACK_PADDING = 2 def __init__(self, parent): - QDialog.__init__(self, parent) + QDialog.__init__(self, parent, hasGL) self.ui = ui_carla_settings.Ui_CarlaSettingsW() self.ui.setupUi(self) @@ -202,8 +203,6 @@ class CarlaSettingsW(QDialog): if WINDOWS: self.ui.group_theme.setEnabled(False) self.ui.ch_theme_pro.setChecked(False) - self.ui.ch_engine_dssi_chunks.setChecked(False) - self.ui.ch_engine_dssi_chunks.setEnabled(False) # ------------------------------------------------------------- # Set-up connections @@ -227,6 +226,8 @@ class CarlaSettingsW(QDialog): # ------------------------------------------------------------- # Post-connect setup + # TODO - add AU and csound, hide AU on non-mac + self.ui.lw_ladspa.setCurrentRow(0) self.ui.lw_dssi.setCurrentRow(0) self.ui.lw_lv2.setCurrentRow(0) @@ -424,13 +425,13 @@ class CarlaSettingsW(QDialog): @pyqtSlot() def slot_resetSettings(self): - if self.ui.lw_page.currentRow() == TAB_INDEX_MAIN: + if self.ui.lw_page.currentRow() == self.TAB_INDEX_MAIN: self.ui.le_main_def_folder.setText(HOME) self.ui.ch_theme_pro.setChecked(True) self.ui.cb_theme_color.setCurrentIndex(0) self.ui.sb_gui_refresh.setValue(50) - elif self.ui.lw_page.currentRow() == TAB_INDEX_CANVAS: + elif self.ui.lw_page.currentRow() == self.TAB_INDEX_CANVAS: self.ui.cb_canvas_theme.setCurrentIndex(0) self.ui.cb_canvas_hide_groups.setChecked(False) self.ui.cb_canvas_bezier_lines.setChecked(True) @@ -439,14 +440,13 @@ class CarlaSettingsW(QDialog): self.ui.cb_canvas_render_aa.setCheckState(Qt.PartiallyChecked) self.ui.cb_canvas_render_hq_aa.setChecked(False) - elif self.ui.lw_page.currentRow() == TAB_INDEX_CARLA_ENGINE: + elif self.ui.lw_page.currentRow() == self.TAB_INDEX_CARLA_ENGINE: self.ui.cb_engine_audio_driver.setCurrentIndex(0) self.ui.sb_engine_max_params.setValue(CARLA_DEFAULT_MAX_PARAMETERS) self.ui.ch_engine_uis_always_on_top.setChecked(CARLA_DEFAULT_UIS_ALWAYS_ON_TOP) self.ui.ch_engine_prefer_ui_bridges.setChecked(CARLA_DEFAULT_PREFER_UI_BRIDGES) #self.ui.sb_engine_oscgui_timeout.setValue(CARLA_DEFAULT_OSC_UI_TIMEOUT) - self.ui.ch_engine_disable_checks.setChecked(CARLA_DEFAULT_DISABLE_CHECKS) - self.ui.ch_engine_dssi_chunks.setChecked(CARLA_DEFAULT_USE_DSSI_VST_CHUNKS) + #self.ui.ch_engine_disable_checks.setChecked(CARLA_DEFAULT_DISABLE_CHECKS) self.ui.ch_engine_prefer_plugin_bridges.setChecked(CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES) self.ui.ch_engine_force_stereo.setChecked(CARLA_DEFAULT_FORCE_STEREO) @@ -454,10 +454,10 @@ class CarlaSettingsW(QDialog): self.ui.cb_engine_process_mode_jack.setCurrentIndex(PROCESS_MODE_MULTIPLE_CLIENTS) self.ui.sw_engine_process_mode.setCurrentIndex(0) else: - self.ui.cb_engine_process_mode_other.setCurrentIndex(PROCESS_MODE_CONTINUOUS_RACK-PROCESS_MODE_NON_JACK_PADDING) + self.ui.cb_engine_process_mode_other.setCurrentIndex(PROCESS_MODE_CONTINUOUS_RACK-self.PROCESS_MODE_NON_JACK_PADDING) self.ui.sw_engine_process_mode.setCurrentIndex(1) - elif self.ui.lw_page.currentRow() == TAB_INDEX_CARLA_PATHS: + elif self.ui.lw_page.currentRow() == self.TAB_INDEX_CARLA_PATHS: if self.ui.tw_paths.currentIndex() == 0: paths = DEFAULT_LADSPA_PATH.split(splitter) paths.sort() @@ -640,14 +640,8 @@ class CarlaSettingsW(QDialog): # ------------------------------------------------------------------------------------------------------------ # TESTING -hasGL = True - from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) -#gui = PluginParameter(None, pInfo, 0, 0) -#gui = PluginEdit(None, 0) -#gui = PluginWidget(None, 0) -#gui = DriverSettingsW(None, 1, "beh") -gui = CarlaSettingsW(None) +gui = CarlaSettingsW(None, True) gui.show() app.exec_() diff --git a/source/carla_shared.py b/source/carla_shared.py index f7091a138..290f94292 100644 --- a/source/carla_shared.py +++ b/source/carla_shared.py @@ -256,8 +256,8 @@ elif MACOS: DEFAULT_VST_PATH = ":".join((os.path.join(HOME, "Library", "Audio", "Plug-Ins", "VST"), os.path.join("/", "Library", "Audio", "Plug-Ins", "VST"))) - DEFAULT_AU_PATH = ":".join((os.path.join(HOME, "Library", "Audio", "Plug-Ins", "AudioUnits"), - os.path.join("/", "Library", "Audio", "Plug-Ins", "AudioUnits"))) + DEFAULT_AU_PATH = ":".join((os.path.join(HOME, "Library", "Audio", "Plug-Ins", "Components"), + os.path.join("/", "Library", "Audio", "Plug-Ins", "Components"))) # TODO DEFAULT_CSOUND_PATH = "" @@ -291,13 +291,13 @@ else: # TODO DEFAULT_CSOUND_PATH = "" - DEFAULT_GIG_PATH = ":".join((os.path.join(HOME, ".sounds"), + DEFAULT_GIG_PATH = ":".join((os.path.join(HOME, ".sounds", "gig"), os.path.join("/", "usr", "share", "sounds", "gig"))) - DEFAULT_SF2_PATH = ":".join((os.path.join(HOME, ".sounds"), + DEFAULT_SF2_PATH = ":".join((os.path.join(HOME, ".sounds", "sf2"), os.path.join("/", "usr", "share", "sounds", "sf2"))) - DEFAULT_SFZ_PATH = ":".join((os.path.join(HOME, ".sounds"), + DEFAULT_SFZ_PATH = ":".join((os.path.join(HOME, ".sounds", "sfz"), os.path.join("/", "usr", "share", "sounds", "sfz"))) # ------------------------------------------------------------------------------------------------------------ @@ -538,7 +538,7 @@ def setUpSignals(): signal(SIGINT, signalHandler) signal(SIGTERM, signalHandler) - if haveSIGUSR1: + if not haveSIGUSR1: return signal(SIGUSR1, signalHandler) diff --git a/source/carla_widgets.py b/source/carla_widgets.py index 9134deb34..d2cd32ab2 100644 --- a/source/carla_widgets.py +++ b/source/carla_widgets.py @@ -35,6 +35,7 @@ import ui_carla_about import ui_carla_edit import ui_carla_parameter import ui_carla_plugin + from carla_shared import * # ------------------------------------------------------------------------------------------------------------ diff --git a/source/discovery/Makefile b/source/discovery/Makefile index bb3616d71..e6baa76f8 100644 --- a/source/discovery/Makefile +++ b/source/discovery/Makefile @@ -39,6 +39,8 @@ POSIX_LINK_FLAGS = $(LINK_FLAGS) $(EXTRA_LIBS) -ldl -lpthread ifeq ($(MACOS),true) POSIX_LINK_FLAGS += -framework Cocoa -framework IOKit +else +POSIX_LINK_FLAGS += -lrt endif WIN_BUILD_FLAGS = $(BUILD_CXX_FLAGS) diff --git a/source/modules/carla_native/CarlaNative.pro b/source/modules/carla_native/CarlaNative.pro index 580dddc99..32ecb6753 100644 --- a/source/modules/carla_native/CarlaNative.pro +++ b/source/modules/carla_native/CarlaNative.pro @@ -22,7 +22,6 @@ DEFINES += WANT_DSSI DEFINES += WANT_LV2 DEFINES += WANT_VST DEFINES += WANT_PLUGIN -DEFINES += WANT_RTAUDIO DEFINES += WANT_FLUIDSYNTH DEFINES += WANT_LINUXSAMPLER DEFINES += WANT_OPENGL diff --git a/source/modules/carla_native/distrho/DistrhoPluginCarla.cpp b/source/modules/carla_native/distrho/DistrhoPluginCarla.cpp index f7d5726e9..28160da43 100644 --- a/source/modules/carla_native/distrho/DistrhoPluginCarla.cpp +++ b/source/modules/carla_native/distrho/DistrhoPluginCarla.cpp @@ -65,9 +65,9 @@ public: CarlaString filename; filename += fHost->resourceDir; #ifdef CARLA_OS_WIN - filename += "\\resources\\"; + filename += "\\"; #else - filename += "/resources/"; + filename += "/"; #endif filename += fUi.getExternalFilename(); diff --git a/source/modules/carla_native/nekofilter/ui.c b/source/modules/carla_native/nekofilter/ui.c index 163da34b5..b2ad4f1d9 100644 --- a/source/modules/carla_native/nekofilter/ui.c +++ b/source/modules/carla_native/nekofilter/ui.c @@ -23,7 +23,7 @@ * *****************************************************************************/ -#define UI_EXECUTABLE "/resources/nekofilter-ui" +#define UI_EXECUTABLE "/nekofilter-ui" #define WAIT_START_TIMEOUT 3000 /* ms */ #define WAIT_ZOMBIE_TIMEOUT 3000 /* ms */ diff --git a/source/modules/juce_audio_basics/juce_audio_basics.cpp b/source/modules/juce_audio_basics/juce_audio_basics.cpp index 2bdd5a490..06ed681d4 100644 --- a/source/modules/juce_audio_basics/juce_audio_basics.cpp +++ b/source/modules/juce_audio_basics/juce_audio_basics.cpp @@ -65,7 +65,6 @@ namespace juce #include "buffers/juce_AudioSampleBuffer.cpp" #include "buffers/juce_FloatVectorOperations.cpp" #include "effects/juce_IIRFilter.cpp" -#include "effects/juce_IIRFilterOld.cpp" #include "effects/juce_LagrangeInterpolator.cpp" #include "midi/juce_MidiBuffer.cpp" #include "midi/juce_MidiFile.cpp" diff --git a/source/modules/juce_audio_basics/juce_audio_basics.h b/source/modules/juce_audio_basics/juce_audio_basics.h index c9ce9abb2..70c5432a7 100644 --- a/source/modules/juce_audio_basics/juce_audio_basics.h +++ b/source/modules/juce_audio_basics/juce_audio_basics.h @@ -36,7 +36,6 @@ namespace juce #include "buffers/juce_FloatVectorOperations.h" #include "effects/juce_Decibels.h" #include "effects/juce_IIRFilter.h" -#include "effects/juce_IIRFilterOld.h" #include "effects/juce_LagrangeInterpolator.h" #include "effects/juce_Reverb.h" #include "midi/juce_MidiMessage.h" diff --git a/source/utils/CarlaLogThread.hpp b/source/utils/CarlaLogThread.hpp index e21321d44..872e7883d 100644 --- a/source/utils/CarlaLogThread.hpp +++ b/source/utils/CarlaLogThread.hpp @@ -21,20 +21,21 @@ #include "CarlaBackend.hpp" #include "CarlaString.hpp" +#include "juce_core.h" + #include -#include using CarlaBackend::CallbackFunc; +using juce::Thread; // ----------------------------------------------------------------------- // Log thread -class CarlaLogThread : public QThread +class CarlaLogThread : public Thread { public: CarlaLogThread() - : QThread(nullptr), - fStop(false), + : Thread("CarlaLogThread"), fCallback(nullptr), fCallbackPtr(nullptr) { @@ -50,7 +51,7 @@ public: fcntl(fPipe[0], F_SETFL, O_NONBLOCK); - QThread::start(LowPriority); + startThread(2); } ~CarlaLogThread() @@ -58,7 +59,7 @@ public: fCallback = nullptr; fCallbackPtr = nullptr; - stop(); + stopThread(5000); fflush(stdout); fflush(stderr); @@ -75,18 +76,10 @@ public: fCallbackPtr = callbackPtr; } - void stop() - { - fStop = true; - - if (isRunning()) - wait(); - } - protected: void run() { - while (! fStop) + while (! threadShouldExit()) { size_t r, lastRead; ssize_t r2; // to avoid sign/unsign conversions @@ -145,7 +138,6 @@ protected: private: int fPipe[2]; - bool fStop; CallbackFunc fCallback; void* fCallbackPtr;