| @@ -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 | |||
| @@ -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 | |||
| #--------------------------------------------------------------------------- | |||
| @@ -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, | |||
| @@ -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 | |||
| @@ -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) | |||
| @@ -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<uint>(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<uint>(value); | |||
| fOptions.audioNumPeriods = static_cast<uint>(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<uint>(value); | |||
| fOptions.audioBufferSize = static_cast<uint>(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<uint>(value); | |||
| fOptions.audioSampleRate = static_cast<uint>(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; | |||
| @@ -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 | |||
| @@ -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; | |||
| } | |||
| }; | |||
| @@ -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<EngineEvent>(pData->bufEvents.in, INTERNAL_EVENT_COUNT); | |||
| carla_zeroStruct<EngineEvent>(pData->bufEvents.in, kEngineMaxInternalEventCount); | |||
| { | |||
| uint32_t engineEventIndex = 0; | |||
| @@ -1293,7 +1297,7 @@ protected: | |||
| carla_copy<uint8_t>(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]; | |||
| @@ -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<juce::AudioIODeviceType> 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; | |||
| } | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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) | |||
| @@ -142,9 +142,9 @@ const char* carla_get_extended_license_text() | |||
| #ifdef WANT_LV2 | |||
| text4 += "<li>serd, sord, sratom and lilv libraries for LV2 discovery, http://drobilla.net/software/lilv/</li>"; | |||
| #endif | |||
| #ifdef WANT_RTAUDIO | |||
| text4 += "<li>RtAudio+RtMidi libraries for extra Audio and MIDI support, http://www.music.mcgill.ca/~gary/rtaudio/</li>"; | |||
| #endif | |||
| // end | |||
| text4 += "</ul>"; | |||
| // 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<int>(gStandalone.options.processMode), nullptr); | |||
| gStandalone.engine->setOption(CB::OPTION_TRANSPORT_MODE, static_cast<int>(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<int>(gStandalone.options.maxParameters), nullptr); | |||
| gStandalone.engine->setOption(CB::OPTION_UI_BRIDGES_TIMEOUT, static_cast<int>(gStandalone.options.uiBridgesTimeout), nullptr); | |||
| #ifdef WANT_RTAUDIO | |||
| gStandalone.engine->setOption(CB::OPTION_RTAUDIO_NUMBER_PERIODS, static_cast<int>(gStandalone.options.rtaudioNumPeriods), nullptr); | |||
| gStandalone.engine->setOption(CB::OPTION_RTAUDIO_BUFFER_SIZE, static_cast<int>(gStandalone.options.rtaudioBufferSize), nullptr); | |||
| gStandalone.engine->setOption(CB::OPTION_RTAUDIO_SAMPLE_RATE, static_cast<int>(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<int>(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<int>(gStandalone.options.maxParameters), nullptr); | |||
| gStandalone.engine->setOption(CB::OPTION_UI_BRIDGES_TIMEOUT, static_cast<int>(gStandalone.options.uiBridgesTimeout), nullptr); | |||
| gStandalone.engine->setOption(CB::OPTION_AUDIO_NUM_PERIODS, static_cast<int>(gStandalone.options.audioNumPeriods), nullptr); | |||
| gStandalone.engine->setOption(CB::OPTION_AUDIO_BUFFER_SIZE, static_cast<int>(gStandalone.options.audioBufferSize), nullptr); | |||
| gStandalone.engine->setOption(CB::OPTION_AUDIO_SAMPLE_RATE, static_cast<int>(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<unsigned int>(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<unsigned int>(value); | |||
| gStandalone.options.audioNumPeriods = static_cast<unsigned int>(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<unsigned int>(value); | |||
| gStandalone.options.audioBufferSize = static_cast<unsigned int>(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<unsigned int>(value); | |||
| gStandalone.options.audioSampleRate = static_cast<unsigned int>(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 | |||
| @@ -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 $@ | |||
| # -------------------------------------------------------------- | |||
| @@ -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 | |||
| @@ -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 <signal.h> | |||
| #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(); | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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; | |||
| @@ -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 | |||
| # -------------------------------------------------------------- | |||
| @@ -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 | |||
| @@ -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_() | |||
| @@ -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_() | |||
| @@ -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) | |||
| @@ -35,6 +35,7 @@ import ui_carla_about | |||
| import ui_carla_edit | |||
| import ui_carla_parameter | |||
| import ui_carla_plugin | |||
| from carla_shared import * | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| @@ -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) | |||
| @@ -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 | |||
| @@ -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(); | |||
| @@ -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 */ | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -21,20 +21,21 @@ | |||
| #include "CarlaBackend.hpp" | |||
| #include "CarlaString.hpp" | |||
| #include "juce_core.h" | |||
| #include <fcntl.h> | |||
| #include <QtCore/QThread> | |||
| 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; | |||