Browse Source

Allow to use carla-backend with RtAudio (experimental, no midi yet)

tags/v0.9.0
falkTX 13 years ago
parent
commit
a7618a0534
6 changed files with 80 additions and 64 deletions
  1. +16
    -5
      src/carla-backend/Makefile
  2. +2
    -0
      src/carla-backend/carla_backend.cpp
  3. +2
    -0
      src/carla-backend/carla_engine.h
  4. +53
    -52
      src/carla-backend/carla_engine_rtaudio.cpp
  5. +2
    -2
      src/carla-backend/carla_plugin.h
  6. +5
    -5
      src/carla-backend/qtcreator/carla-backend.pro

+ 16
- 5
src/carla-backend/Makefile View File

@@ -4,6 +4,10 @@
# Created by falkTX # Created by falkTX
# #


# backend ouput driver, default JACK
driver = JACK
# driver = RtAudio

CC ?= gcc CC ?= gcc
CXX ?= g++ CXX ?= g++


@@ -16,8 +20,13 @@ HAVE_SUIL = $(shell pkg-config --exists suil-0 && echo true)
CARLA_C_FLAGS = $(BASE_FLAGS) $(CFLAGS) CARLA_C_FLAGS = $(BASE_FLAGS) $(CFLAGS)


CARLA_CXX_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS) 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 += -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 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 \ lv2-rtmempool/rtmempool.o \
../carla-lilv/carla_lilv.a ../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


# -------------------------------------------------------------- # --------------------------------------------------------------




+ 2
- 0
src/carla-backend/carla_backend.cpp View File

@@ -1277,6 +1277,8 @@ int main(int argc, char* argv[])
if (engine_init("carla_demo")) if (engine_init("carla_demo"))
{ {
set_callback_function(main_callback); 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"); short id = add_plugin_lv2("xxx", "name!!!", "http://linuxdsp.co.uk/lv2/peq-2a.lv2");


if (id >= 0) if (id >= 0)


+ 2
- 0
src/carla-backend/carla_engine.h View File

@@ -36,6 +36,8 @@ struct CarlaEnginePortNativeHandle {


typedef void* CarlaEngineClientNativeHandle; typedef void* CarlaEngineClientNativeHandle;
typedef void* CarlaEnginePortNativeHandle; typedef void* CarlaEnginePortNativeHandle;
#else
#error Engine type undefined!
#endif #endif


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


+ 53
- 52
src/carla-backend/carla_engine_rtaudio.cpp View File

@@ -28,8 +28,47 @@ CARLA_BACKEND_START_NAMESPACE
} /* adjust editor indent */ } /* adjust editor indent */
#endif #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 // Global RtAudio stuff
static RtAudio adac(RtAudio::LINUX_PULSE);
static RtAudio adac(getRtApiFromEnvironment());


static uint32_t carla_buffer_size = 512; static uint32_t carla_buffer_size = 512;
static const char* carla_client_name = nullptr; static const char* carla_client_name = nullptr;
@@ -244,6 +283,7 @@ CarlaEngineBasePort::CarlaEngineBasePort(CarlaEngineClientNativeHandle* const cl
isInput(isInput_), isInput(isInput_),
client(clientHandle) client(clientHandle)
{ {
handle = nullptr;
} }


CarlaEngineBasePort::~CarlaEngineBasePort() CarlaEngineBasePort::~CarlaEngineBasePort()
@@ -255,6 +295,7 @@ CarlaEngineBasePort::~CarlaEngineBasePort()


CarlaEngineClient::CarlaEngineClient(CarlaPlugin* const plugin) CarlaEngineClient::CarlaEngineClient(CarlaPlugin* const plugin)
{ {
handle = nullptr;
m_active = false; m_active = false;
Q_UNUSED(plugin); Q_UNUSED(plugin);
} }
@@ -280,7 +321,8 @@ bool CarlaEngineClient::isActive()


bool CarlaEngineClient::isOk() bool CarlaEngineClient::isOk()
{ {
return bool(handle);
//return bool(handle);
return true;
} }


CarlaEngineBasePort* CarlaEngineClient::addPort(const char* name, CarlaEnginePortType type, bool isInput) CarlaEngineBasePort* CarlaEngineClient::addPort(const char* name, CarlaEnginePortType type, bool isInput)
@@ -307,9 +349,8 @@ CarlaEngineAudioPort::CarlaEngineAudioPort(CarlaEngineClientNativeHandle* const
Q_UNUSED(name); Q_UNUSED(name);
} }


void* CarlaEngineAudioPort::getBuffer()
void CarlaEngineAudioPort::initBuffer()
{ {
return nullptr;
} }


// ------------------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------------------
@@ -321,42 +362,23 @@ CarlaEngineControlPort::CarlaEngineControlPort(CarlaEngineClientNativeHandle* co
Q_UNUSED(name); 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; 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; return nullptr;

Q_UNUSED(buffer);
Q_UNUSED(index); 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(type);
Q_UNUSED(time); Q_UNUSED(time);
Q_UNUSED(channel); Q_UNUSED(channel);
@@ -373,44 +395,23 @@ CarlaEngineMidiPort::CarlaEngineMidiPort(CarlaEngineClientNativeHandle* const cl
Q_UNUSED(name); 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; 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;

return nullptr;

Q_UNUSED(buffer);
Q_UNUSED(index); 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(time);
Q_UNUSED(data); Q_UNUSED(data);
Q_UNUSED(size); Q_UNUSED(size);


+ 2
- 2
src/carla-backend/carla_plugin.h View File

@@ -1264,10 +1264,10 @@ public:
float* aouts_buffer[aout.count]; float* aouts_buffer[aout.count];


for (uint32_t i=0; i < ain.count; i++) 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++) 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 #ifndef BUILD_BRIDGE
if (carla_options.proccess_hq) if (carla_options.proccess_hq)


+ 5
- 5
src/carla-backend/qtcreator/carla-backend.pro View File

@@ -45,13 +45,13 @@ INCLUDEPATH = .. \
../../carla-includes/vst ../../carla-includes/vst


DEFINES = QTCREATOR_TEST HAVE_SUIL WANT_FLUIDSYNTH WANT_LINUXSAMPLER CARLA_BACKEND_NO_NAMESPACE 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 LIBS = ../../carla-lilv/carla_lilv.a -ldl -lasound -lpulse -lpulse-simple


QMAKE_CXXFLAGS *= -std=c++0x 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__

Loading…
Cancel
Save