diff --git a/src/carla-backend/Makefile b/src/carla-backend/Makefile index 428d616..d4fc33b 100644 --- a/src/carla-backend/Makefile +++ b/src/carla-backend/Makefile @@ -4,6 +4,10 @@ # Created by falkTX # +# backend ouput driver, default JACK +driver = JACK +# driver = RtAudio + CC ?= gcc CXX ?= g++ @@ -16,8 +20,13 @@ HAVE_SUIL = $(shell pkg-config --exists suil-0 && echo true) CARLA_C_FLAGS = $(BASE_FLAGS) $(CFLAGS) CARLA_CXX_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS) -CARLA_CXX_FLAGS += $(shell pkg-config --cflags jack liblo QtCore QtGui) -DCARLA_BACKEND_NO_NAMESPACE -DCARLA_ENGINE_JACK -# CARLA_CXX_FLAGS += $(shell pkg-config --cflags jack liblo QtCore QtGui) -DCARLA_BACKEND_NO_NAMESPACE -DCARLA_ENGINE_RTAUDIO -D_FORTIFY_SOURCE=2 -DHAVE_GETTIMEOFDAY -D__UNIX_JACK__ -D__LINUX_ALSA__ -D__LINUX_PULSE__ +CARLA_CXX_FLAGS += $(shell pkg-config --cflags jack liblo QtCore QtGui) -DCARLA_BACKEND_NO_NAMESPACE +ifeq ($(driver),JACK) +CARLA_CXX_FLAGS += -DCARLA_ENGINE_JACK +endif +ifeq ($(driver),RtAudio) +CARLA_CXX_FLAGS += -DCARLA_ENGINE_RTAUDIO -D_FORTIFY_SOURCE=2 -DHAVE_GETTIMEOFDAY -D__LINUX_ALSA__ -D__LINUX_PULSE__ +endif CARLA_CXX_FLAGS += -DNDEBUG -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT CARLA_CXX_FLAGS += -DVESTIGE_HEADER -I../carla-includes/vestige # Comment this line to not use vestige header @@ -51,9 +60,11 @@ OBJS = \ lv2-rtmempool/rtmempool.o \ ../carla-lilv/carla_lilv.a -# OBJS += rtaudio/rtaudio-4.0.11/RtAudio.o -# CARLA_CXX_FLAGS += -Irtaudio/rtaudio-4.0.11 -# CARLA_LD_FLAGS += -lasound -lpulse -lpulse-simple +ifeq ($(driver),RtAudio) +OBJS += rtaudio/rtaudio-4.0.11/RtAudio.o +CARLA_CXX_FLAGS += $(shell pkg-config --cflags alsa libpulse-simple) -Irtaudio/rtaudio-4.0.11 +CARLA_LD_FLAGS += $(shell pkg-config --libs alsa libpulse-simple) +endif # -------------------------------------------------------------- diff --git a/src/carla-backend/carla_backend.cpp b/src/carla-backend/carla_backend.cpp index 07c1fb9..5dcea10 100644 --- a/src/carla-backend/carla_backend.cpp +++ b/src/carla-backend/carla_backend.cpp @@ -1277,6 +1277,8 @@ int main(int argc, char* argv[]) if (engine_init("carla_demo")) { set_callback_function(main_callback); + set_option(OPTION_PROCESS_MODE, PROCESS_MODE_CONTINUOUS_RACK, nullptr); + short id = add_plugin_lv2("xxx", "name!!!", "http://linuxdsp.co.uk/lv2/peq-2a.lv2"); if (id >= 0) diff --git a/src/carla-backend/carla_engine.h b/src/carla-backend/carla_engine.h index 50a5db3..0cc44b8 100644 --- a/src/carla-backend/carla_engine.h +++ b/src/carla-backend/carla_engine.h @@ -36,6 +36,8 @@ struct CarlaEnginePortNativeHandle { typedef void* CarlaEngineClientNativeHandle; typedef void* CarlaEnginePortNativeHandle; +#else +#error Engine type undefined! #endif CARLA_BACKEND_START_NAMESPACE diff --git a/src/carla-backend/carla_engine_rtaudio.cpp b/src/carla-backend/carla_engine_rtaudio.cpp index 7504799..1444bc6 100644 --- a/src/carla-backend/carla_engine_rtaudio.cpp +++ b/src/carla-backend/carla_engine_rtaudio.cpp @@ -28,8 +28,47 @@ CARLA_BACKEND_START_NAMESPACE } /* adjust editor indent */ #endif +// get initial options from environment +RtAudio::Api getRtApiFromEnvironment() +{ +#if defined(Q_OS_LINUX) + RtAudio::Api defaultRtApi = RtAudio::LINUX_PULSE; +#elif defined(Q_OS_MACOS) + RtAudio::Api defaultRtApi = RtAudio::MACOSX_CORE; +#elif defined(Q_OS_WIN) + RtAudio::Api defaultRtApi = RtAudio::WINDOWS_DS; +#endif + + const char* const driver = getenv("CARLA_BACKEND_DRIVER"); + + if (! driver) + return defaultRtApi; +#ifdef Q_OS_LINUX + if (strcmp(driver, "LINUX_ALSA") == 0) + return RtAudio::LINUX_ALSA; + if (strcmp(driver, "LINUX_PULSE") == 0) + return RtAudio::LINUX_PULSE; + if (strcmp(driver, "LINUX_OSS") == 0) + return RtAudio::LINUX_OSS; +#endif + if (strcmp(driver, "UNIX_JACK") == 0) + return RtAudio::UNIX_JACK; +#ifdef Q_OS_MACOS + if (strcmp(driver, "MACOSX_CORE") == 0) + return RtAudio::MACOSX_CORE; +#endif +#ifdef Q_OS_WIN + if (strcmp(driver, "WINDOWS_ASIO") == 0) + return RtAudio::WINDOWS_ASIO; + if (strcmp(driver, "WINDOWS_DS") == 0) + return RtAudio::WINDOWS_DS; +#endif + + return defaultRtApi; +} + // Global RtAudio stuff -static RtAudio adac(RtAudio::LINUX_PULSE); +static RtAudio adac(getRtApiFromEnvironment()); static uint32_t carla_buffer_size = 512; static const char* carla_client_name = nullptr; @@ -244,6 +283,7 @@ CarlaEngineBasePort::CarlaEngineBasePort(CarlaEngineClientNativeHandle* const cl isInput(isInput_), client(clientHandle) { + handle = nullptr; } CarlaEngineBasePort::~CarlaEngineBasePort() @@ -255,6 +295,7 @@ CarlaEngineBasePort::~CarlaEngineBasePort() CarlaEngineClient::CarlaEngineClient(CarlaPlugin* const plugin) { + handle = nullptr; m_active = false; Q_UNUSED(plugin); } @@ -280,7 +321,8 @@ bool CarlaEngineClient::isActive() bool CarlaEngineClient::isOk() { - return bool(handle); + //return bool(handle); + return true; } CarlaEngineBasePort* CarlaEngineClient::addPort(const char* name, CarlaEnginePortType type, bool isInput) @@ -307,9 +349,8 @@ CarlaEngineAudioPort::CarlaEngineAudioPort(CarlaEngineClientNativeHandle* const Q_UNUSED(name); } -void* CarlaEngineAudioPort::getBuffer() +void CarlaEngineAudioPort::initBuffer() { - return nullptr; } // ------------------------------------------------------------------------------------------------------------------- @@ -321,42 +362,23 @@ CarlaEngineControlPort::CarlaEngineControlPort(CarlaEngineClientNativeHandle* co Q_UNUSED(name); } -void* CarlaEngineControlPort::getBuffer() -{ - return nullptr; -} - -void CarlaEngineControlPort::initBuffer(void* buffer) +void CarlaEngineControlPort::initBuffer() { - //if (isInput) - return; - - Q_UNUSED(buffer); } -uint32_t CarlaEngineControlPort::getEventCount(void* buffer) +uint32_t CarlaEngineControlPort::getEventCount() { - //if (! isInput) return 0; - - Q_UNUSED(buffer); } -const CarlaEngineControlEvent* CarlaEngineControlPort::getEvent(void* buffer, uint32_t index) +const CarlaEngineControlEvent* CarlaEngineControlPort::getEvent(uint32_t index) { - //if (! isInput) return nullptr; - - Q_UNUSED(buffer); Q_UNUSED(index); } -void CarlaEngineControlPort::writeEvent(void* buffer, CarlaEngineControlEventType type, uint32_t time, uint8_t channel, uint8_t controller, double value) +void CarlaEngineControlPort::writeEvent(CarlaEngineControlEventType type, uint32_t time, uint8_t channel, uint8_t controller, double value) { - //if (isInput) - return; - - Q_UNUSED(buffer); Q_UNUSED(type); Q_UNUSED(time); Q_UNUSED(channel); @@ -373,44 +395,23 @@ CarlaEngineMidiPort::CarlaEngineMidiPort(CarlaEngineClientNativeHandle* const cl Q_UNUSED(name); } -void* CarlaEngineMidiPort::getBuffer() -{ - return nullptr; -} - -void CarlaEngineMidiPort::initBuffer(void* buffer) +void CarlaEngineMidiPort::initBuffer() { - //if (isInput) - return; - - Q_UNUSED(buffer); } -uint32_t CarlaEngineMidiPort::getEventCount(void* buffer) +uint32_t CarlaEngineMidiPort::getEventCount() { - //if (! isInput) return 0; - - Q_UNUSED(buffer); } -const CarlaEngineMidiEvent* CarlaEngineMidiPort::getEvent(void* buffer, uint32_t index) +const CarlaEngineMidiEvent* CarlaEngineMidiPort::getEvent(uint32_t index) { - //if (! isInput) return nullptr; - - return nullptr; - - Q_UNUSED(buffer); Q_UNUSED(index); } -void CarlaEngineMidiPort::writeEvent(void* buffer, uint32_t time, uint8_t* data, uint8_t size) +void CarlaEngineMidiPort::writeEvent(uint32_t time, uint8_t* data, uint8_t size) { - //if (! isInput) - return; - - Q_UNUSED(buffer); Q_UNUSED(time); Q_UNUSED(data); Q_UNUSED(size); diff --git a/src/carla-backend/carla_plugin.h b/src/carla-backend/carla_plugin.h index 44ad788..cedfbe0 100644 --- a/src/carla-backend/carla_plugin.h +++ b/src/carla-backend/carla_plugin.h @@ -1264,10 +1264,10 @@ public: float* aouts_buffer[aout.count]; for (uint32_t i=0; i < ain.count; i++) - ains_buffer[i] = (float*)ain.ports[i]->getJackAudioBuffer(); + ains_buffer[i] = ain.ports[i]->getJackAudioBuffer(); for (uint32_t i=0; i < aout.count; i++) - aouts_buffer[i] = (float*)aout.ports[i]->getJackAudioBuffer(); + aouts_buffer[i] = aout.ports[i]->getJackAudioBuffer(); #ifndef BUILD_BRIDGE if (carla_options.proccess_hq) diff --git a/src/carla-backend/qtcreator/carla-backend.pro b/src/carla-backend/qtcreator/carla-backend.pro index a04b74e..7ace283 100644 --- a/src/carla-backend/qtcreator/carla-backend.pro +++ b/src/carla-backend/qtcreator/carla-backend.pro @@ -45,13 +45,13 @@ INCLUDEPATH = .. \ ../../carla-includes/vst DEFINES = QTCREATOR_TEST HAVE_SUIL WANT_FLUIDSYNTH WANT_LINUXSAMPLER CARLA_BACKEND_NO_NAMESPACE -DEFINES += CARLA_ENGINE_JACK -#DEFINES += CARLA_ENGINE_RTAUDIO +#DEFINES += CARLA_ENGINE_JACK +DEFINES += CARLA_ENGINE_RTAUDIO LIBS = ../../carla-lilv/carla_lilv.a -ldl -lasound -lpulse -lpulse-simple QMAKE_CXXFLAGS *= -std=c++0x -#INCLUDEPATH += ../rtaudio/rtaudio-4.0.11 -#SOURCES += ../rtaudio/rtaudio-4.0.11/RtAudio.cpp -#DEFINES += _FORTIFY_SOURCE=2 HAVE_GETTIMEOFDAY __UNIX_JACK__ __LINUX_ALSA__ __LINUX_PULSE__ +INCLUDEPATH += ../rtaudio/rtaudio-4.0.11 +SOURCES += ../rtaudio/rtaudio-4.0.11/RtAudio.cpp +DEFINES += _FORTIFY_SOURCE=2 HAVE_GETTIMEOFDAY __UNIX_JACK__ __LINUX_ALSA__ __LINUX_PULSE__