Browse Source

Introduce carla-jackbridge for win32->wine->jack bridge, more bridge-related work

tags/v0.9.0
falkTX 12 years ago
parent
commit
b64a029152
24 changed files with 748 additions and 338 deletions
  1. +1
    -0
      .gitignore
  2. +13
    -4
      Makefile
  3. +3
    -2
      c++/carla-backend/Makefile
  4. +1
    -2
      c++/carla-backend/Makefile.dbg
  5. +77
    -74
      c++/carla-backend/carla_bridge.cpp
  6. +25
    -25
      c++/carla-backend/carla_engine.cpp
  7. +1
    -2
      c++/carla-backend/carla_engine.h
  8. +52
    -52
      c++/carla-backend/carla_engine_jack.cpp
  9. +1
    -1
      c++/carla-backend/carla_plugin.h
  10. +2
    -4
      c++/carla-backend/fluidsynth.cpp
  11. +2
    -4
      c++/carla-backend/linuxsampler.cpp
  12. +4
    -0
      c++/carla-backend/qtcreator/carla-backend.pro
  13. +91
    -82
      c++/carla-bridge/Makefile
  14. +14
    -5
      c++/carla-bridge/carla_bridge_plugin.cpp
  15. +2
    -2
      c++/carla-bridge/carla_bridge_toolkit-gtk2.cpp
  16. +2
    -2
      c++/carla-bridge/carla_bridge_toolkit-gtk3.cpp
  17. +2
    -2
      c++/carla-bridge/carla_bridge_toolkit-qt4.cpp
  18. +19
    -29
      c++/carla-discovery/Makefile
  19. +19
    -30
      c++/carla-discovery/Makefile.dbg
  20. +1
    -1
      c++/carla-includes/carla_includes.h
  21. +61
    -0
      c++/carla-jackbridge/Makefile
  22. +239
    -0
      c++/carla-jackbridge/carla_jackbridge.cpp
  23. +61
    -0
      c++/carla-jackbridge/carla_jackbridge.h
  24. +55
    -15
      c++/carla-lilv/Makefile

+ 1
- 0
.gitignore View File

@@ -6,6 +6,7 @@
*.a *.a
*.o *.o
*.dll *.dll
*.dll.def
*.exe *.exe
*.so *.so




+ 13
- 4
Makefile View File

@@ -179,13 +179,21 @@ posix64:
$(MAKE) -C c++/carla-bridge posix64 $(MAKE) -C c++/carla-bridge posix64
$(MAKE) -C c++/carla-discovery posix64 $(MAKE) -C c++/carla-discovery posix64


win32:
$(MAKE) -C c++/carla-bridge win32
$(MAKE) -C c++/carla-discovery win32

win64:
$(MAKE) -C c++/carla-bridge win64
$(MAKE) -C c++/carla-discovery win64

wine32: wine32:
$(MAKE) -C c++/carla-bridge wine32
$(MAKE) -C c++/carla-discovery wine32
$(MAKE) -C c++/carla-jackbridge wine32
cp c++/carla-jackbridge/libcarla-jackbridge-win32.dll.so c++/carla-bridge/libcarla-jackbridge-win32.dll


wine64: wine64:
$(MAKE) -C c++/carla-bridge wine64
$(MAKE) -C c++/carla-discovery wine64
$(MAKE) -C c++/carla-jackbridge wine64
cp c++/carla-jackbridge/libcarla-jackbridge-win64.dll.so c++/carla-bridge/libcarla-jackbridge-win64.dll


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


@@ -194,6 +202,7 @@ clean:
$(MAKE) clean -C c++/carla-bridge $(MAKE) clean -C c++/carla-bridge
$(MAKE) clean -C c++/carla-discovery $(MAKE) clean -C c++/carla-discovery
$(MAKE) clean -C c++/carla-lilv $(MAKE) clean -C c++/carla-lilv
$(MAKE) clean -C c++/carla-jackbridge
$(MAKE) clean -C c++/jackmeter $(MAKE) clean -C c++/jackmeter
$(MAKE) clean -C c++/xycontroller $(MAKE) clean -C c++/xycontroller
rm -f *~ src/*~ src/*.pyc src/ui_*.py src/resources_rc.py rm -f *~ src/*~ src/*.pyc src/ui_*.py src/resources_rc.py


+ 3
- 2
c++/carla-backend/Makefile View File

@@ -13,7 +13,7 @@ HAVE_FLUIDSYNTH = $(shell pkg-config --exists fluidsynth && echo true)
HAVE_LINUXSAMPLER = $(shell pkg-config --exists linuxsampler && echo true) HAVE_LINUXSAMPLER = $(shell pkg-config --exists linuxsampler && echo true)
HAVE_SUIL = $(shell pkg-config --exists suil-0 && echo true) HAVE_SUIL = $(shell pkg-config --exists suil-0 && echo true)


BASE_FLAGS = -O2 -ffast-math -fomit-frame-pointer -fPIC -mtune=generic -msse -mfpmath=sse -Wall -I. -I../carla-includes
BASE_FLAGS = -O2 -ffast-math -fomit-frame-pointer -fPIC -mtune=generic -msse -mfpmath=sse -Wall -I. -I../carla-includes -I../carla-jackbridge


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 liblo QtCore QtGui) CARLA_CXX_FLAGS += $(shell pkg-config --cflags liblo QtCore QtGui)
@@ -65,10 +65,11 @@ OBJS = \
carla_shared.o \ carla_shared.o \
carla_threads.o \ carla_threads.o \
ladspa.o dssi.o lv2.o vst.o fluidsynth.o linuxsampler.o \ ladspa.o dssi.o lv2.o vst.o fluidsynth.o linuxsampler.o \
../carla-jackbridge/carla_jackbridge.o \
../carla-lilv/carla_lilv.a ../carla-lilv/carla_lilv.a


ifeq ($(WANT_RTAUDIO),true) ifeq ($(WANT_RTAUDIO),true)
CARLA_CXX_FLAGS += -Irtaudio-4.0.11 -Irtmidi-2.0.0 -DCARLA_ENGINE_RTAUDIO -D_FORTIFY_SOURCE=2 -DHAVE_GETTIMEOFDAY
CARLA_CXX_FLAGS += -Irtaudio-4.0.11 -Irtmidi-2.0.0 -DCARLA_ENGINE_RTAUDIO -DHAVE_GETTIMEOFDAY -D_FORTIFY_SOURCE=2
OBJS += rtaudio-4.0.11/RtAudio.o OBJS += rtaudio-4.0.11/RtAudio.o
OBJS += rtmidi-2.0.0/RtMidi.o OBJS += rtmidi-2.0.0/RtMidi.o
endif endif


+ 1
- 2
c++/carla-backend/Makefile.dbg View File

@@ -68,8 +68,7 @@ OBJS = \
../carla-lilv/carla_lilv.a ../carla-lilv/carla_lilv.a


ifeq ($(WANT_RTAUDIO),true) ifeq ($(WANT_RTAUDIO),true)
CARLA_CXX_FLAGS += -Irtaudio-4.0.11 -Irtmidi-2.0.0 -DCARLA_ENGINE_RTAUDIO -DHAVE_GETTIMEOFDAY
CARLA_CXX_FLAGS += -D__RTAUDIO_DEBUG__ -D__RTMIDI_DEBUG__
CARLA_CXX_FLAGS += -Irtaudio-4.0.11 -Irtmidi-2.0.0 -DCARLA_ENGINE_RTAUDIO -DHAVE_GETTIMEOFDAY -D__RTAUDIO_DEBUG__ -D__RTMIDI_DEBUG__
OBJS += rtaudio-4.0.11/RtAudio.o OBJS += rtaudio-4.0.11/RtAudio.o
OBJS += rtmidi-2.0.0/RtMidi.o OBJS += rtmidi-2.0.0/RtMidi.o
endif endif


+ 77
- 74
c++/carla-backend/carla_bridge.cpp View File

@@ -42,7 +42,8 @@ public:
m_type = ptype; m_type = ptype;
m_hints = PLUGIN_IS_BRIDGE; m_hints = PLUGIN_IS_BRIDGE;


initiated = saved = false;
m_initiated = false;
m_saved = false;


info.ains = 0; info.ains = 0;
info.aouts = 0; info.aouts = 0;
@@ -59,7 +60,7 @@ public:


params = nullptr; params = nullptr;


m_thread = new CarlaPluginThread(engine, this, CarlaPluginThread::PLUGIN_THREAD_BRIDGE);
osc.thread = new CarlaPluginThread(engine, this, CarlaPluginThread::PLUGIN_THREAD_BRIDGE);
} }


~BridgePlugin() ~BridgePlugin()
@@ -70,24 +71,20 @@ public:
{ {
osc_send_hide(&osc.data); osc_send_hide(&osc.data);
osc_send_quit(&osc.data); osc_send_quit(&osc.data);
osc_clear_data(&osc.data);
} }


// Wait a bit first, try safe quit else force kill
if (m_thread->isRunning())
if (osc.thread)
{ {
if (m_thread->wait(2000) == false)
m_thread->quit();

if (m_thread->isRunning() && m_thread->wait(1000) == false)
// Wait a bit first, try safe quit, then force kill
if (osc.thread->isRunning() && ! osc.thread->wait(3000))
{ {
qWarning("Failed to properly stop Bridge thread");
m_thread->terminate();
qWarning("Failed to properly stop Plugin Bridge thread");
osc.thread->terminate();
} }
}


delete m_thread;

osc_clear_data(&osc.data);
delete osc.thread;
}


if (info.name) if (info.name)
free((void*)info.name); free((void*)info.name);
@@ -159,7 +156,7 @@ public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Information (per-plugin data) // Information (per-plugin data)


double getParameterValue(uint32_t parameterId)
double getParameterValue(const uint32_t parameterId)
{ {
Q_ASSERT(parameterId < param.count); Q_ASSERT(parameterId < param.count);


@@ -515,11 +512,11 @@ public:
// } // }


case PluginBridgeUpdateNow: case PluginBridgeUpdateNow:
initiated = true;
m_initiated = true;
break; break;


case PluginBridgeSaved: case PluginBridgeSaved:
saved = true;
m_saved = true;
break; break;
} }


@@ -535,9 +532,6 @@ public:


params[parameterId].value = fixParameterValue(value, param.ranges[parameterId]); params[parameterId].value = fixParameterValue(value, param.ranges[parameterId]);


if (sendGui)
osc_send_control(&osc.data, param.data[parameterId].rindex, value);

CarlaPlugin::setParameterValue(parameterId, value, sendGui, sendOsc, sendCallback); CarlaPlugin::setParameterValue(parameterId, value, sendGui, sendOsc, sendCallback);
} }


@@ -580,30 +574,10 @@ public:
} }
} }


void setProgram(int32_t index, bool sendGui, bool sendOsc, bool sendCallback, bool block)
{
Q_ASSERT(index < (int32_t)prog.count);

if (sendGui)
osc_send_program(&osc.data, index);

CarlaPlugin::setProgram(index, sendGui, sendOsc, sendCallback, block);
}

void setMidiProgram(int32_t index, bool sendGui, bool sendOsc, bool sendCallback, bool block)
{
Q_ASSERT(index < (int32_t)midiprog.count);

if (sendGui)
osc_send_midi_program(&osc.data, index);

CarlaPlugin::setMidiProgram(index, sendGui, sendOsc, sendCallback, block);
}

// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Set gui stuff // Set gui stuff


void showGui(bool yesNo)
void showGui(const bool yesNo)
{ {
if (yesNo) if (yesNo)
osc_send_show(&osc.data); osc_send_show(&osc.data);
@@ -614,26 +588,68 @@ public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Plugin state // Plugin state


void reload()
{
}

void prepareForSave() void prepareForSave()
{ {
saved = false;
m_saved = false;
osc_send_configure(&osc.data, CARLA_BRIDGE_MSG_SAVE_NOW, ""); osc_send_configure(&osc.data, CARLA_BRIDGE_MSG_SAVE_NOW, "");


for (int i=0; i < 100; i++) for (int i=0; i < 100; i++)
{ {
if (saved)
if (m_saved)
break; break;
carla_msleep(100); carla_msleep(100);
} }


if (! saved)
if (! m_saved)
qWarning("BridgePlugin::prepareForSave() - Timeout while requesting save state"); qWarning("BridgePlugin::prepareForSave() - Timeout while requesting save state");
else else
qWarning("BridgePlugin::prepareForSave() - success!");
qDebug("BridgePlugin::prepareForSave() - success!");
}

// -------------------------------------------------------------------
// Post-poned events

void uiParameterChange(const uint32_t index, const double value)
{
Q_ASSERT(index < param.count);

osc_send_control(&osc.data, param.data[index].rindex, value);
}

void uiProgramChange(const uint32_t index)
{
Q_ASSERT(index < prog.count);

osc_send_program(&osc.data, index);
}

void uiMidiProgramChange(const uint32_t index)
{
Q_ASSERT(index < midiprog.count);

osc_send_midi_program(&osc.data, index);
}

void uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo)
{
Q_ASSERT(channel < 16);
Q_ASSERT(note < 128);
Q_ASSERT(velo > 0 && velo < 128);

// TODO
Q_UNUSED(channel);
Q_UNUSED(note);
Q_UNUSED(velo);
}

void uiNoteOff(const uint8_t channel, const uint8_t note)
{
Q_ASSERT(channel < 16);
Q_ASSERT(note < 128);

// TODO
Q_UNUSED(channel);
Q_UNUSED(note);
} }


// ------------------------------------------------------------------- // -------------------------------------------------------------------
@@ -653,9 +669,9 @@ public:


// ------------------------------------------------------------------- // -------------------------------------------------------------------


bool init(const char* filename, const char* const name, const char* label)
bool init(const char* const filename, const char* const name, const char* const label)
{ {
const char* bridgeBinary = getBinaryBidgePath(m_binary);
const char* const bridgeBinary = getBinaryBidgePath(m_binary);


if (! bridgeBinary) if (! bridgeBinary)
{ {
@@ -671,22 +687,22 @@ public:
// register plugin now so we can receive OSC (and wait for it) // register plugin now so we can receive OSC (and wait for it)
x_engine->__bridgePluginRegister(m_id, this); x_engine->__bridgePluginRegister(m_id, this);


m_thread->setOscData(bridgeBinary, label, getPluginTypeString(m_type));
m_thread->start();
osc.thread->setOscData(bridgeBinary, label, getPluginTypeString(m_type));
osc.thread->start();


for (int i=0; i < 100; i++)
for (int i=0; i < 200; i++)
{ {
if (initiated)
if (m_initiated)
break; break;
carla_msleep(50); carla_msleep(50);
} }


if (! initiated)
if (! m_initiated)
{ {
// unregister so it gets handled properly // unregister so it gets handled properly
x_engine->__bridgePluginRegister(m_id, nullptr); x_engine->__bridgePluginRegister(m_id, nullptr);


m_thread->terminate();
osc.thread->terminate();
setLastError("Timeout while waiting for a response from plugin-bridge"); setLastError("Timeout while waiting for a response from plugin-bridge");
return false; return false;
} }
@@ -695,11 +711,10 @@ public:
} }


private: private:
bool initiated;
bool saved;

const BinaryType m_binary; const BinaryType m_binary;
CarlaPluginThread* m_thread;

bool m_initiated;
bool m_saved;


struct { struct {
uint32_t ains, aouts; uint32_t ains, aouts;
@@ -736,19 +751,7 @@ CarlaPlugin* CarlaPlugin::newBridge(const initializer& init, BinaryType btype, P
return nullptr; return nullptr;
} }


plugin->reload();

if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK)
{
if (/* inputs */ ((plugin->audioInCount() != 0 && plugin->audioInCount() != 2)) || /* outputs */ ((plugin->audioOutCount() != 0 && plugin->audioOutCount() != 2)))
{
setLastError("Carla Rack Mode can only work with Stereo bridged plugins, sorry!");
delete plugin;
return nullptr;
}

}

//plugin->reload();
plugin->registerToOsc(); plugin->registerToOsc();


return plugin; return plugin;


+ 25
- 25
c++/carla-backend/carla_engine.cpp View File

@@ -79,7 +79,7 @@ int CarlaEngine::maxClientNameSize()
# ifndef BUILD_BRIDGE # ifndef BUILD_BRIDGE
if (carlaOptions.processMode != PROCESS_MODE_CONTINUOUS_RACK) if (carlaOptions.processMode != PROCESS_MODE_CONTINUOUS_RACK)
# endif # endif
return jack_client_name_size();
return jackbridge_client_name_size();
#endif #endif
return STR_MAX/2; return STR_MAX/2;
} }
@@ -90,7 +90,7 @@ int CarlaEngine::maxPortNameSize()
# ifndef BUILD_BRIDGE # ifndef BUILD_BRIDGE
if (carlaOptions.processMode != PROCESS_MODE_CONTINUOUS_RACK) if (carlaOptions.processMode != PROCESS_MODE_CONTINUOUS_RACK)
# endif # endif
return jack_port_name_size();
return jackbridge_port_name_size();
#endif #endif
return STR_MAX; return STR_MAX;
} }
@@ -572,7 +572,7 @@ CarlaEngineClient::~CarlaEngineClient()
{ {
#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
if (handle.jackClient) if (handle.jackClient)
jack_client_close(handle.jackClient);
jackbridge_client_close(handle.jackClient);
#endif #endif
#ifdef CARLA_ENGINE_RTAUDIO #ifdef CARLA_ENGINE_RTAUDIO
if (handle.rtAudioPtr) if (handle.rtAudioPtr)
@@ -594,7 +594,7 @@ void CarlaEngineClient::activate()
{ {
#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
if (handle.jackClient) if (handle.jackClient)
jack_activate(handle.jackClient);
jackbridge_activate(handle.jackClient);
#endif #endif
#ifdef CARLA_ENGINE_RTAUDIO #ifdef CARLA_ENGINE_RTAUDIO
if (handle.rtAudioPtr) if (handle.rtAudioPtr)
@@ -619,7 +619,7 @@ void CarlaEngineClient::deactivate()
{ {
#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
if (handle.jackClient) if (handle.jackClient)
jack_deactivate(handle.jackClient);
jackbridge_deactivate(handle.jackClient);
#endif #endif
#ifdef CARLA_ENGINE_RTAUDIO #ifdef CARLA_ENGINE_RTAUDIO
if (handle.rtAudioPtr) if (handle.rtAudioPtr)
@@ -672,11 +672,11 @@ const CarlaEngineBasePort* CarlaEngineClient::addPort(const CarlaEnginePortType
switch (type) switch (type)
{ {
case CarlaEnginePortTypeAudio: case CarlaEnginePortTypeAudio:
portHandle.jackPort = jack_port_register(handle.jackClient, name, JACK_DEFAULT_AUDIO_TYPE, isInput ? JackPortIsInput : JackPortIsOutput, 0);
portHandle.jackPort = jackbridge_port_register(handle.jackClient, name, JACK_DEFAULT_AUDIO_TYPE, isInput ? JackPortIsInput : JackPortIsOutput, 0);
break; break;
case CarlaEnginePortTypeControl: case CarlaEnginePortTypeControl:
case CarlaEnginePortTypeMIDI: case CarlaEnginePortTypeMIDI:
portHandle.jackPort = jack_port_register(handle.jackClient, name, JACK_DEFAULT_MIDI_TYPE, isInput ? JackPortIsInput : JackPortIsOutput, 0);
portHandle.jackPort = jackbridge_port_register(handle.jackClient, name, JACK_DEFAULT_MIDI_TYPE, isInput ? JackPortIsInput : JackPortIsOutput, 0);
break; break;
} }
} }
@@ -720,7 +720,7 @@ CarlaEngineBasePort::~CarlaEngineBasePort()
# endif # endif
{ {
if (handle.jackClient && handle.jackPort) if (handle.jackClient && handle.jackPort)
jack_port_unregister(handle.jackClient, handle.jackPort);
jackbridge_port_unregister(handle.jackClient, handle.jackPort);
} }
#endif #endif
} }
@@ -746,7 +746,7 @@ float* CarlaEngineAudioPort::getJackAudioBuffer(uint32_t nframes)
return nullptr; return nullptr;
# endif # endif
Q_ASSERT(handle.jackPort); Q_ASSERT(handle.jackPort);
return (float*)jack_port_get_buffer(handle.jackPort, nframes);
return (float*)jackbridge_port_get_buffer(handle.jackPort, nframes);
} }
#endif #endif


@@ -774,10 +774,10 @@ void CarlaEngineControlPort::initBuffer(CarlaEngine* const engine)
#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
if (handle.jackPort) if (handle.jackPort)
{ {
buffer = jack_port_get_buffer(handle.jackPort, engine->getBufferSize());
buffer = jackbridge_port_get_buffer(handle.jackPort, engine->getBufferSize());


if (! isInput) if (! isInput)
jack_midi_clear_buffer(buffer);
jackbridge_midi_clear_buffer(buffer);
} }
#endif #endif
} }
@@ -808,7 +808,7 @@ uint32_t CarlaEngineControlPort::getEventCount()
#endif #endif


#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
return jack_midi_get_event_count(buffer);
return jackbridge_midi_get_event_count(buffer);
#else #else
return 0; return 0;
#endif #endif
@@ -835,10 +835,10 @@ const CarlaEngineControlEvent* CarlaEngineControlPort::getEvent(uint32_t index)
#endif #endif


#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
static jack_midi_event_t jackEvent;
static jackbridge_midi_event_t jackEvent;
static CarlaEngineControlEvent carlaEvent; static CarlaEngineControlEvent carlaEvent;


if (jack_midi_event_get(&jackEvent, buffer, index) != 0)
if (jackbridge_midi_event_get(&jackEvent, buffer, index) != 0)
return nullptr; return nullptr;


memset(&carlaEvent, 0, sizeof(CarlaEngineControlEvent)); memset(&carlaEvent, 0, sizeof(CarlaEngineControlEvent));
@@ -934,28 +934,28 @@ void CarlaEngineControlPort::writeEvent(CarlaEngineControlEventType type, uint32
data[0] = MIDI_STATUS_CONTROL_CHANGE + channel; data[0] = MIDI_STATUS_CONTROL_CHANGE + channel;
data[1] = controller; data[1] = controller;
data[2] = value * 127; data[2] = value * 127;
jack_midi_event_write(buffer, time, data, 3);
jackbridge_midi_event_write(buffer, time, data, 3);
break; break;
case CarlaEngineEventMidiBankChange: case CarlaEngineEventMidiBankChange:
data[0] = MIDI_STATUS_CONTROL_CHANGE + channel; data[0] = MIDI_STATUS_CONTROL_CHANGE + channel;
data[1] = MIDI_CONTROL_BANK_SELECT; data[1] = MIDI_CONTROL_BANK_SELECT;
data[2] = value; data[2] = value;
jack_midi_event_write(buffer, time, data, 3);
jackbridge_midi_event_write(buffer, time, data, 3);
break; break;
case CarlaEngineEventMidiProgramChange: case CarlaEngineEventMidiProgramChange:
data[0] = MIDI_STATUS_PROGRAM_CHANGE + channel; data[0] = MIDI_STATUS_PROGRAM_CHANGE + channel;
data[1] = value; data[1] = value;
jack_midi_event_write(buffer, time, data, 2);
jackbridge_midi_event_write(buffer, time, data, 2);
break; break;
case CarlaEngineEventAllSoundOff: case CarlaEngineEventAllSoundOff:
data[0] = MIDI_STATUS_CONTROL_CHANGE + channel; data[0] = MIDI_STATUS_CONTROL_CHANGE + channel;
data[1] = MIDI_CONTROL_ALL_SOUND_OFF; data[1] = MIDI_CONTROL_ALL_SOUND_OFF;
jack_midi_event_write(buffer, time, data, 2);
jackbridge_midi_event_write(buffer, time, data, 2);
break; break;
case CarlaEngineEventAllNotesOff: case CarlaEngineEventAllNotesOff:
data[0] = MIDI_STATUS_CONTROL_CHANGE + channel; data[0] = MIDI_STATUS_CONTROL_CHANGE + channel;
data[1] = MIDI_CONTROL_ALL_NOTES_OFF; data[1] = MIDI_CONTROL_ALL_NOTES_OFF;
jack_midi_event_write(buffer, time, data, 2);
jackbridge_midi_event_write(buffer, time, data, 2);
break; break;
} }
#endif #endif
@@ -985,10 +985,10 @@ void CarlaEngineMidiPort::initBuffer(CarlaEngine* const engine)
#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
if (handle.jackPort) if (handle.jackPort)
{ {
buffer = jack_port_get_buffer(handle.jackPort, engine->getBufferSize());
buffer = jackbridge_port_get_buffer(handle.jackPort, engine->getBufferSize());


if (! isInput) if (! isInput)
jack_midi_clear_buffer(buffer);
jackbridge_midi_clear_buffer(buffer);
} }
#endif #endif
} }
@@ -1019,7 +1019,7 @@ uint32_t CarlaEngineMidiPort::getEventCount()
#endif #endif


#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
return jack_midi_get_event_count(buffer);
return jackbridge_midi_get_event_count(buffer);
#else #else
return 0; return 0;
#endif #endif
@@ -1047,10 +1047,10 @@ const CarlaEngineMidiEvent* CarlaEngineMidiPort::getEvent(uint32_t index)
#endif #endif


#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
static jack_midi_event_t jackEvent;
static jackbridge_midi_event_t jackEvent;
static CarlaEngineMidiEvent carlaEvent; static CarlaEngineMidiEvent carlaEvent;


if (jack_midi_event_get(&jackEvent, buffer, index) == 0 && jackEvent.size <= 4)
if (jackbridge_midi_event_get(&jackEvent, buffer, index) == 0 && jackEvent.size <= 4)
{ {
carlaEvent.time = jackEvent.time; carlaEvent.time = jackEvent.time;
carlaEvent.size = jackEvent.size; carlaEvent.size = jackEvent.size;
@@ -1095,7 +1095,7 @@ void CarlaEngineMidiPort::writeEvent(uint32_t time, const uint8_t* data, uint8_t
#endif #endif


#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
jack_midi_event_write(buffer, time, data, size);
jackbridge_midi_event_write(buffer, time, data, size);
#endif #endif
} }




+ 1
- 2
c++/carla-backend/carla_engine.h View File

@@ -23,8 +23,7 @@
#include "carla_threads.h" #include "carla_threads.h"


#ifdef CARLA_ENGINE_JACK #ifdef CARLA_ENGINE_JACK
#include <jack/jack.h>
#include <jack/midiport.h>
#include "carla_jackbridge.h"
#endif #endif


#ifdef CARLA_ENGINE_RTAUDIO #ifdef CARLA_ENGINE_RTAUDIO


+ 52
- 52
c++/carla-backend/carla_engine_jack.cpp View File

@@ -110,41 +110,41 @@ bool CarlaEngineJack::init(const char* const clientName)
{ {
qDebug("CarlaEngineJack::init(\"%s\")", clientName); qDebug("CarlaEngineJack::init(\"%s\")", clientName);


client = jack_client_open(clientName, JackNullOption, nullptr);
client = jackbridge_client_open(clientName, JackNullOption, nullptr);
state = JackTransportStopped; state = JackTransportStopped;
freewheel = false; freewheel = false;
procThread = nullptr; procThread = nullptr;


if (client) if (client)
{ {
sampleRate = jack_get_sample_rate(client);
bufferSize = jack_get_buffer_size(client);
sampleRate = jackbridge_get_sample_rate(client);
bufferSize = jackbridge_get_buffer_size(client);


jack_set_sample_rate_callback(client, carla_jack_srate_callback, this);
jack_set_buffer_size_callback(client, carla_jack_bufsize_callback, this);
jack_set_freewheel_callback(client, carla_jack_freewheel_callback, this);
jack_set_process_callback(client, carla_jack_process_callback, this);
jack_on_shutdown(client, carla_jack_shutdown_callback, this);
jackbridge_set_sample_rate_callback(client, carla_jack_srate_callback, this);
jackbridge_set_buffer_size_callback(client, carla_jack_bufsize_callback, this);
jackbridge_set_freewheel_callback(client, carla_jack_freewheel_callback, this);
jackbridge_set_process_callback(client, carla_jack_process_callback, this);
jackbridge_on_shutdown(client, carla_jack_shutdown_callback, this);


#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK) if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK)
{ {
rackJackPorts[rackPortAudioIn1] = jack_port_register(client, "in1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortAudioIn2] = jack_port_register(client, "in2", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortAudioOut1] = jack_port_register(client, "out1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
rackJackPorts[rackPortAudioOut2] = jack_port_register(client, "out2", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
rackJackPorts[rackPortControlIn] = jack_port_register(client, "control-in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortControlOut] = jack_port_register(client, "control-out", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
rackJackPorts[rackPortMidiIn] = jack_port_register(client, "midi-in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortMidiOut] = jack_port_register(client, "midi-out", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
rackJackPorts[rackPortAudioIn1] = jackbridge_port_register(client, "in1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortAudioIn2] = jackbridge_port_register(client, "in2", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortAudioOut1] = jackbridge_port_register(client, "out1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
rackJackPorts[rackPortAudioOut2] = jackbridge_port_register(client, "out2", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
rackJackPorts[rackPortControlIn] = jackbridge_port_register(client, "control-in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortControlOut] = jackbridge_port_register(client, "control-out", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
rackJackPorts[rackPortMidiIn] = jackbridge_port_register(client, "midi-in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
rackJackPorts[rackPortMidiOut] = jackbridge_port_register(client, "midi-out", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
} }
#endif #endif


if (jack_activate(client) == 0)
if (jackbridge_activate(client) == 0)
{ {
// set client name, fixed for OSC usage // set client name, fixed for OSC usage
// FIXME - put this in shared? // FIXME - put this in shared?
char* fixedName = strdup(jack_get_client_name(client));
char* fixedName = strdup(jackbridge_get_client_name(client));
for (size_t i=0; i < strlen(fixedName); i++) for (size_t i=0; i < strlen(fixedName); i++)
{ {
if (! (std::isalpha(fixedName[i]) || std::isdigit(fixedName[i]))) if (! (std::isalpha(fixedName[i]) || std::isdigit(fixedName[i])))
@@ -181,23 +181,23 @@ bool CarlaEngineJack::close()
name = nullptr; name = nullptr;
} }


if (jack_deactivate(client) == 0)
if (jackbridge_deactivate(client) == 0)
{ {
#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK) if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK)
{ {
jack_port_unregister(client, rackJackPorts[rackPortAudioIn1]);
jack_port_unregister(client, rackJackPorts[rackPortAudioIn2]);
jack_port_unregister(client, rackJackPorts[rackPortAudioOut1]);
jack_port_unregister(client, rackJackPorts[rackPortAudioOut2]);
jack_port_unregister(client, rackJackPorts[rackPortControlIn]);
jack_port_unregister(client, rackJackPorts[rackPortControlOut]);
jack_port_unregister(client, rackJackPorts[rackPortMidiIn]);
jack_port_unregister(client, rackJackPorts[rackPortMidiOut]);
jackbridge_port_unregister(client, rackJackPorts[rackPortAudioIn1]);
jackbridge_port_unregister(client, rackJackPorts[rackPortAudioIn2]);
jackbridge_port_unregister(client, rackJackPorts[rackPortAudioOut1]);
jackbridge_port_unregister(client, rackJackPorts[rackPortAudioOut2]);
jackbridge_port_unregister(client, rackJackPorts[rackPortControlIn]);
jackbridge_port_unregister(client, rackJackPorts[rackPortControlOut]);
jackbridge_port_unregister(client, rackJackPorts[rackPortMidiIn]);
jackbridge_port_unregister(client, rackJackPorts[rackPortMidiOut]);
} }
#endif #endif


if (jack_client_close(client) == 0)
if (jackbridge_client_close(client) == 0)
{ {
client = nullptr; client = nullptr;
return true; return true;
@@ -239,8 +239,8 @@ CarlaEngineClient* CarlaEngineJack::addClient(CarlaPlugin* const plugin)
else if (carlaOptions.processMode == PROCESS_MODE_MULTIPLE_CLIENTS) else if (carlaOptions.processMode == PROCESS_MODE_MULTIPLE_CLIENTS)
#endif #endif
{ {
handle.jackClient = jack_client_open(plugin->name(), JackNullOption, nullptr);
jack_set_process_callback(handle.jackClient, carla_jack_process_callback_plugin, plugin);
handle.jackClient = jackbridge_client_open(plugin->name(), JackNullOption, nullptr);
jackbridge_set_process_callback(handle.jackClient, carla_jack_process_callback_plugin, plugin);
} }
//else if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK) //else if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK)
//{ //{
@@ -279,7 +279,7 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
if (maxPluginNumber == 0) if (maxPluginNumber == 0)
return; return;


state = jack_transport_query(client, &pos);
state = jackbridge_transport_query(client, &pos);


timeInfo.playing = (state != JackTransportStopped); timeInfo.playing = (state != JackTransportStopped);


@@ -328,14 +328,14 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
else if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK) else if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK)
{ {
// get buffers from jack // get buffers from jack
float* audioIn1 = (float*)jack_port_get_buffer(rackJackPorts[rackPortAudioIn1], nframes);
float* audioIn2 = (float*)jack_port_get_buffer(rackJackPorts[rackPortAudioIn2], nframes);
float* audioOut1 = (float*)jack_port_get_buffer(rackJackPorts[rackPortAudioOut1], nframes);
float* audioOut2 = (float*)jack_port_get_buffer(rackJackPorts[rackPortAudioOut2], nframes);
void* controlIn = jack_port_get_buffer(rackJackPorts[rackPortControlIn], nframes);
void* controlOut = jack_port_get_buffer(rackJackPorts[rackPortControlOut], nframes);
void* midiIn = jack_port_get_buffer(rackJackPorts[rackPortMidiIn], nframes);
void* midiOut = jack_port_get_buffer(rackJackPorts[rackPortMidiOut], nframes);
float* audioIn1 = (float*)jackbridge_port_get_buffer(rackJackPorts[rackPortAudioIn1], nframes);
float* audioIn2 = (float*)jackbridge_port_get_buffer(rackJackPorts[rackPortAudioIn2], nframes);
float* audioOut1 = (float*)jackbridge_port_get_buffer(rackJackPorts[rackPortAudioOut1], nframes);
float* audioOut2 = (float*)jackbridge_port_get_buffer(rackJackPorts[rackPortAudioOut2], nframes);
void* controlIn = jackbridge_port_get_buffer(rackJackPorts[rackPortControlIn], nframes);
void* controlOut = jackbridge_port_get_buffer(rackJackPorts[rackPortControlOut], nframes);
void* midiIn = jackbridge_port_get_buffer(rackJackPorts[rackPortMidiIn], nframes);
void* midiOut = jackbridge_port_get_buffer(rackJackPorts[rackPortMidiOut], nframes);


// assert buffers // assert buffers
Q_ASSERT(audioIn1); Q_ASSERT(audioIn1);
@@ -363,14 +363,14 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
// initialize control input // initialize control input
memset(rackControlEventsIn, 0, sizeof(CarlaEngineControlEvent)*MAX_ENGINE_CONTROL_EVENTS); memset(rackControlEventsIn, 0, sizeof(CarlaEngineControlEvent)*MAX_ENGINE_CONTROL_EVENTS);
{ {
jack_midi_event_t jackEvent;
const uint32_t jackEventCount = jack_midi_get_event_count(controlIn);
jackbridge_midi_event_t jackEvent;
const uint32_t jackEventCount = jackbridge_midi_get_event_count(controlIn);


uint32_t carlaEventIndex = 0; uint32_t carlaEventIndex = 0;


for (uint32_t jackEventIndex=0; jackEventIndex < jackEventCount; jackEventIndex++) for (uint32_t jackEventIndex=0; jackEventIndex < jackEventCount; jackEventIndex++)
{ {
if (jack_midi_event_get(&jackEvent, controlIn, jackEventIndex) != 0)
if (jackbridge_midi_event_get(&jackEvent, controlIn, jackEventIndex) != 0)
continue; continue;


CarlaEngineControlEvent* const carlaEvent = &rackControlEventsIn[carlaEventIndex++]; CarlaEngineControlEvent* const carlaEvent = &rackControlEventsIn[carlaEventIndex++];
@@ -420,9 +420,9 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
memset(rackMidiEventsIn, 0, sizeof(CarlaEngineMidiEvent)*MAX_ENGINE_MIDI_EVENTS); memset(rackMidiEventsIn, 0, sizeof(CarlaEngineMidiEvent)*MAX_ENGINE_MIDI_EVENTS);
{ {
uint32_t i = 0, j = 0; uint32_t i = 0, j = 0;
jack_midi_event_t jackEvent;
jackbridge_midi_event_t jackEvent;


while (jack_midi_event_get(&jackEvent, midiIn, j++) == 0)
while (jackbridge_midi_event_get(&jackEvent, midiIn, j++) == 0)
{ {
if (i == MAX_ENGINE_MIDI_EVENTS) if (i == MAX_ENGINE_MIDI_EVENTS)
break; break;
@@ -525,7 +525,7 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)


// output control // output control
{ {
jack_midi_clear_buffer(controlOut);
jackbridge_midi_clear_buffer(controlOut);


for (unsigned short i=0; i < MAX_ENGINE_CONTROL_EVENTS; i++) for (unsigned short i=0; i < MAX_ENGINE_CONTROL_EVENTS; i++)
{ {
@@ -544,28 +544,28 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel; data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel;
data[1] = event->controller; data[1] = event->controller;
data[2] = event->value * 127; data[2] = event->value * 127;
jack_midi_event_write(controlOut, event->time, data, 3);
jackbridge_midi_event_write(controlOut, event->time, data, 3);
break; break;
case CarlaEngineEventMidiBankChange: case CarlaEngineEventMidiBankChange:
data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel; data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel;
data[1] = MIDI_CONTROL_BANK_SELECT; data[1] = MIDI_CONTROL_BANK_SELECT;
data[2] = event->value; data[2] = event->value;
jack_midi_event_write(controlOut, event->time, data, 3);
jackbridge_midi_event_write(controlOut, event->time, data, 3);
break; break;
case CarlaEngineEventMidiProgramChange: case CarlaEngineEventMidiProgramChange:
data[0] = MIDI_STATUS_PROGRAM_CHANGE + event->channel; data[0] = MIDI_STATUS_PROGRAM_CHANGE + event->channel;
data[1] = event->value; data[1] = event->value;
jack_midi_event_write(controlOut, event->time, data, 2);
jackbridge_midi_event_write(controlOut, event->time, data, 2);
break; break;
case CarlaEngineEventAllSoundOff: case CarlaEngineEventAllSoundOff:
data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel; data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel;
data[1] = MIDI_CONTROL_ALL_SOUND_OFF; data[1] = MIDI_CONTROL_ALL_SOUND_OFF;
jack_midi_event_write(controlOut, event->time, data, 2);
jackbridge_midi_event_write(controlOut, event->time, data, 2);
break; break;
case CarlaEngineEventAllNotesOff: case CarlaEngineEventAllNotesOff:
data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel; data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel;
data[1] = MIDI_CONTROL_ALL_NOTES_OFF; data[1] = MIDI_CONTROL_ALL_NOTES_OFF;
jack_midi_event_write(controlOut, event->time, data, 2);
jackbridge_midi_event_write(controlOut, event->time, data, 2);
break; break;
} }
} }
@@ -573,14 +573,14 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)


// output midi // output midi
{ {
jack_midi_clear_buffer(midiOut);
jackbridge_midi_clear_buffer(midiOut);


for (unsigned short i=0; i < MAX_ENGINE_MIDI_EVENTS; i++) for (unsigned short i=0; i < MAX_ENGINE_MIDI_EVENTS; i++)
{ {
if (rackMidiEventsOut[i].size == 0) if (rackMidiEventsOut[i].size == 0)
break; break;


jack_midi_event_write(midiOut, rackMidiEventsOut[i].time, rackMidiEventsOut[i].data, rackMidiEventsOut[i].size);
jackbridge_midi_event_write(midiOut, rackMidiEventsOut[i].time, rackMidiEventsOut[i].data, rackMidiEventsOut[i].size);
} }
} }
} }


+ 1
- 1
c++/carla-backend/carla_plugin.h View File

@@ -1654,7 +1654,7 @@ public:


if (sendGui) if (sendGui)
{ {
if (note)
if (note > 0)
uiNoteOn(channel, note, velo); uiNoteOn(channel, note, velo);
else else
uiNoteOff(channel, note); uiNoteOff(channel, note);


+ 2
- 4
c++/carla-backend/fluidsynth.cpp View File

@@ -1061,8 +1061,7 @@ public:


fluid_synth_noteoff(f_synth, channel, note); fluid_synth_noteoff(f_synth, channel, note);


if (channel == m_ctrlInChannel)
postponeEvent(PluginPostEventNoteOff, channel, note, 0.0);
postponeEvent(PluginPostEventNoteOff, channel, note, 0.0);
} }
else if (MIDI_IS_STATUS_NOTE_ON(status)) else if (MIDI_IS_STATUS_NOTE_ON(status))
{ {
@@ -1071,8 +1070,7 @@ public:


fluid_synth_noteon(f_synth, channel, note, velo); fluid_synth_noteon(f_synth, channel, note, velo);


if (channel == m_ctrlInChannel)
postponeEvent(PluginPostEventNoteOn, channel, note, velo);
postponeEvent(PluginPostEventNoteOn, channel, note, velo);
} }
else if (MIDI_IS_STATUS_AFTERTOUCH(status)) else if (MIDI_IS_STATUS_AFTERTOUCH(status))
{ {


+ 2
- 4
c++/carla-backend/linuxsampler.cpp View File

@@ -341,8 +341,7 @@ public:


midiInputPort->DispatchNoteOff(note, 0, channel, time); midiInputPort->DispatchNoteOff(note, 0, channel, time);


if (channel == m_ctrlInChannel)
postponeEvent(PluginPostEventNoteOff, channel, note, 0.0);
postponeEvent(PluginPostEventNoteOff, channel, note, 0.0);
} }
else if (MIDI_IS_STATUS_NOTE_ON(status)) else if (MIDI_IS_STATUS_NOTE_ON(status))
{ {
@@ -351,8 +350,7 @@ public:


midiInputPort->DispatchNoteOn(note, velo, channel, time); midiInputPort->DispatchNoteOn(note, velo, channel, time);


if (channel == m_ctrlInChannel)
postponeEvent(PluginPostEventNoteOn, channel, note, velo);
postponeEvent(PluginPostEventNoteOn, channel, note, velo);
} }
else if (MIDI_IS_STATUS_AFTERTOUCH(status)) else if (MIDI_IS_STATUS_AFTERTOUCH(status))
{ {


+ 4
- 0
c++/carla-backend/qtcreator/carla-backend.pro View File

@@ -29,6 +29,7 @@ SOURCES = \
../vst.cpp \ ../vst.cpp \
../fluidsynth.cpp \ ../fluidsynth.cpp \
../linuxsampler.cpp ../linuxsampler.cpp
# ../../carla-jackbridge/carla_jackbridge.cpp


HEADERS = \ HEADERS = \
../carla_backend.h \ ../carla_backend.h \
@@ -38,6 +39,7 @@ HEADERS = \
../carla_plugin.h \ ../carla_plugin.h \
../carla_shared.h \ ../carla_shared.h \
../carla_threads.h \ ../carla_threads.h \
../../carla-jackbridge/carla_jackbridge.h \
../../carla-includes/carla_includes.h \ ../../carla-includes/carla_includes.h \
../../carla-includes/carla_lib_includes.h \ ../../carla-includes/carla_lib_includes.h \
../../carla-includes/carla_osc_includes.h \ ../../carla-includes/carla_osc_includes.h \
@@ -52,6 +54,7 @@ HEADERS = \
../../carla-includes/lv2_rdf.h ../../carla-includes/lv2_rdf.h


INCLUDEPATH = .. \ INCLUDEPATH = .. \
../../carla-jackbridge \
../../carla-includes ../../carla-includes


DEFINES = QTCREATOR_TEST DEFINES = QTCREATOR_TEST
@@ -62,6 +65,7 @@ DEFINES += CARLA_ENGINE_LV2
DEFINES += HAVE_SUIL DEFINES += HAVE_SUIL
DEFINES += WANT_FLUIDSYNTH WANT_LINUXSAMPLER DEFINES += WANT_FLUIDSYNTH WANT_LINUXSAMPLER
LIBS = ../../carla-lilv/carla_lilv.a -ldl LIBS = ../../carla-lilv/carla_lilv.a -ldl
LIBS += -L../../carla-jackbridge -lcarla-jackbridge-native


INCLUDEPATH += ../rtaudio-4.0.11 INCLUDEPATH += ../rtaudio-4.0.11
INCLUDEPATH += ../rtmidi-2.0.0 INCLUDEPATH += ../rtmidi-2.0.0


+ 91
- 82
c++/carla-bridge/Makefile View File

@@ -5,15 +5,13 @@
# #


CXX ?= g++ CXX ?= g++
WINECXX ?= wineg++
STRIP ?= strip STRIP ?= strip


BASE_FLAGS = -O2 -ffast-math -fomit-frame-pointer -mtune=generic -msse -mfpmath=sse -Wall BASE_FLAGS = -O2 -ffast-math -fomit-frame-pointer -mtune=generic -msse -mfpmath=sse -Wall
BASE_FLAGS = -O0 -g


BUILD_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS) BUILD_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS)
BUILD_FLAGS += -I. -I../carla-includes $(shell pkg-config --cflags liblo QtCore) BUILD_FLAGS += -I. -I../carla-includes $(shell pkg-config --cflags liblo QtCore)
BUILD_FLAGS += -DBUILD_BRIDGE -DDEBUG #-DNDEBUG -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT
BUILD_FLAGS += -DBUILD_BRIDGE -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT # -DNDEBUG
BUILD_FLAGS += -DVESTIGE_HEADER -I../carla-includes/vestige # Comment this line to not use vestige header BUILD_FLAGS += -DVESTIGE_HEADER -I../carla-includes/vestige # Comment this line to not use vestige header


32BIT_FLAGS = -m32 32BIT_FLAGS = -m32
@@ -22,23 +20,18 @@ LINK_FLAGS = $(shell pkg-config --libs liblo QtCore) $(LDFLAGS)


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


BUILD_PLUGIN_FLAGS = $(BUILD_FLAGS) -DBUILD_BRIDGE_PLUGIN -DCARLA_ENGINE_JACK -I../carla-backend $(shell pkg-config --cflags jack)
LINK_PLUGIN_FLAGS = $(LINK_FLAGS) $(shell pkg-config --libs jack)
BUILD_PLUGIN_FLAGS = $(BUILD_FLAGS) -DBUILD_BRIDGE_PLUGIN -DCARLA_ENGINE_JACK -I../carla-backend -I../carla-jackbridge $(shell pkg-config --cflags jack QtGui)
LINK_PLUGIN_FLAGS = $(LINK_FLAGS) $(shell pkg-config --libs QtGui)


POSIX_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) $(shell pkg-config --cflags QtGui)
POSIX_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32 -L/usr/lib/i386-linux-gnu
POSIX_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu
POSIX_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) $(shell pkg-config --libs QtGui) -ldl
POSIX_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS)
POSIX_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32 -L/usr/lib/i386-linux-gnu
POSIX_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu
POSIX_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) $(shell pkg-config --libs jack) -ldl


WIN_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) $(shell pkg-config --cflags QtGui)
WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS)
WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) $(shell pkg-config --libs QtGui) -static -mwindows

WINE_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) -DQTCREATOR_TEST # -fpermissive
WINE_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32/wine -L/usr/lib/i386-linux-gnu/wine
WINE_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64/wine -L/usr/lib/x86_64-linux-gnu/wine
WINE_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -ldl
WIN_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS)
WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS)
WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -mwindows -L../carla-jackbridge


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


@@ -92,8 +85,6 @@ posix32: carla-bridge-posix32
posix64: carla-bridge-posix64 posix64: carla-bridge-posix64
win32: carla-bridge-win32.exe win32: carla-bridge-win32.exe
win64: carla-bridge-win64.exe win64: carla-bridge-win64.exe
wine32: carla-bridge-win32.exe.so
wine64: carla-bridge-win64.exe.so


# -------------------------------------------------------------- # --------------------------------------------------------------
# ui_lv2-gtk2 # ui_lv2-gtk2
@@ -201,9 +192,9 @@ carla_bridge_osc__vst-x11.o: carla_bridge_osc.cpp
# posix32 # posix32


OBJS_POSIX32 = \ OBJS_POSIX32 = \
carla_bridge_plugin__posix32.o carla_bridge_osc__posix32.o \
carla_bridge_plugin__posix32.o carla_bridge_osc__posix32.o carla_jackbridge__posix32.o \
carla_engine__posix32.o carla_engine_jack__posix32.o carla_shared__posix32.o carla_threads__posix32.o \ carla_engine__posix32.o carla_engine_jack__posix32.o carla_shared__posix32.o carla_threads__posix32.o \
ladspa__posix32.o dssi__posix32.o lv2__posix32.o vst__posix32.o ../carla-lilv/carla_lilv_32bit.a
ladspa__posix32.o dssi__posix32.o lv2__posix32.o vst__posix32.o ../carla-lilv/carla_lilv_posix32.a


carla-bridge-posix32: $(OBJS_POSIX32) carla-bridge-posix32: $(OBJS_POSIX32)
$(CXX) $^ $(POSIX_LINK_FLAGS) $(POSIX_32BIT_FLAGS) -o $@ && $(STRIP) $@ $(CXX) $^ $(POSIX_LINK_FLAGS) $(POSIX_32BIT_FLAGS) -o $@ && $(STRIP) $@
@@ -214,6 +205,9 @@ carla_bridge_plugin__posix32.o: carla_bridge_plugin.cpp
carla_bridge_osc__posix32.o: carla_bridge_osc.cpp carla_bridge_osc__posix32.o: carla_bridge_osc.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@


carla_jackbridge__posix32.o: ../carla-jackbridge/carla_jackbridge.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

carla_engine__posix32.o: ../carla-backend/carla_engine.cpp carla_engine__posix32.o: ../carla-backend/carla_engine.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@


@@ -242,9 +236,9 @@ vst__posix32.o: ../carla-backend/vst.cpp
# posix64 # posix64


OBJS_POSIX64 = \ OBJS_POSIX64 = \
carla_bridge_plugin__posix64.o carla_bridge_osc__posix64.o \
carla_bridge_plugin__posix64.o carla_bridge_osc__posix64.o carla_jackbridge__posix64.o \
carla_engine__posix64.o carla_engine_jack__posix64.o carla_shared__posix64.o carla_threads__posix64.o \ carla_engine__posix64.o carla_engine_jack__posix64.o carla_shared__posix64.o carla_threads__posix64.o \
ladspa__posix64.o dssi__posix64.o lv2__posix64.o vst__posix64.o ../carla-lilv/carla_lilv_64bit.a
ladspa__posix64.o dssi__posix64.o lv2__posix64.o vst__posix64.o ../carla-lilv/carla_lilv_posix64.a


carla-bridge-posix64: $(OBJS_POSIX64) carla-bridge-posix64: $(OBJS_POSIX64)
$(CXX) $^ $(POSIX_LINK_FLAGS) $(POSIX_64BIT_FLAGS) -o $@ && $(STRIP) $@ $(CXX) $^ $(POSIX_LINK_FLAGS) $(POSIX_64BIT_FLAGS) -o $@ && $(STRIP) $@
@@ -255,6 +249,9 @@ carla_bridge_plugin__posix64.o: carla_bridge_plugin.cpp
carla_bridge_osc__posix64.o: carla_bridge_osc.cpp carla_bridge_osc__posix64.o: carla_bridge_osc.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@


carla_jackbridge__posix64.o: ../carla-jackbridge/carla_jackbridge.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@

carla_engine__posix64.o: ../carla-backend/carla_engine.cpp carla_engine__posix64.o: ../carla-backend/carla_engine.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@


@@ -280,94 +277,106 @@ vst__posix64.o: ../carla-backend/vst.cpp
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@


# -------------------------------------------------------------- # --------------------------------------------------------------
# wine32
# win32


OBJS_WINE32 = \
carla_bridge_plugin__wine32.o carla_bridge_osc__wine32.o \
carla_engine__wine32.o carla_engine_jack__wine32.o carla_shared__wine32.o carla_threads__wine32.o \
ladspa__wine32.o dssi__wine32.o lv2__wine32.o vst__wine32.o ../carla-lilv/carla_lilv_32bit.a
OBJS_WIN32 = \
carla_bridge_plugin__win32.o carla_bridge_osc__win32.o \
carla_engine__win32.o carla_engine_jack__win32.o carla_shared__win32.o carla_threads__win32.o \
ladspa__win32.o dssi__win32.o lv2__win32.o vst__win32.o ../carla-lilv/carla_lilv_win32.a


carla-bridge-win32.exe.so: $(OBJS_WINE32)
$(WINECXX) $^ $(WINE_LINK_FLAGS) $(WINE_32BIT_FLAGS) -o carla-bridge-win32 && $(STRIP) $@
carla-bridge-win32.exe: $(OBJS_WIN32) ../carla-jackbridge/libcarla-jackbridge-win32.dll
$(CXX) $(OBJS_WIN32) $(WIN_LINK_FLAGS) $(WIN_32BIT_FLAGS) -lcarla-jackbridge-win32 -o $@ && $(STRIP) $@


carla_bridge_plugin__wine32.o: carla_bridge_plugin.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
carla_bridge_plugin__win32.o: carla_bridge_plugin.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


carla_bridge_osc__wine32.o: carla_bridge_osc.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
carla_bridge_osc__win32.o: carla_bridge_osc.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


carla_engine__wine32.o: ../carla-backend/carla_engine.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
carla_engine__win32.o: ../carla-backend/carla_engine.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


carla_engine_jack__wine32.o: ../carla-backend/carla_engine_jack.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
carla_engine_jack__win32.o: ../carla-backend/carla_engine_jack.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


carla_shared__wine32.o: ../carla-backend/carla_shared.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
carla_shared__win32.o: ../carla-backend/carla_shared.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


carla_threads__wine32.o: ../carla-backend/carla_threads.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
carla_threads__win32.o: ../carla-backend/carla_threads.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


ladspa__wine32.o: ../carla-backend/ladspa.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
ladspa__win32.o: ../carla-backend/ladspa.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


dssi__wine32.o: ../carla-backend/dssi.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
dssi__win32.o: ../carla-backend/dssi.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


lv2__wine32.o: ../carla-backend/lv2.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
lv2__win32.o: ../carla-backend/lv2.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


vst__wine32.o: ../carla-backend/vst.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) -c -o $@
vst__win32.o: ../carla-backend/vst.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@


# -------------------------------------------------------------- # --------------------------------------------------------------
# wine64
# win64


OBJS_WINE64 = \
carla_bridge_plugin__wine64.o carla_bridge_osc__wine64.o \
carla_engine__wine64.o carla_engine_jack__wine64.o carla_shared__wine64.o carla_threads__wine64.o \
ladspa__wine64.o dssi__wine64.o lv2__wine64.o vst__wine64.o ../carla-lilv/carla_lilv_64bit.a
OBJS_WIN64 = \
carla_bridge_plugin__win64.o carla_bridge_osc__win64.o \
carla_engine__win64.o carla_engine_jack__win64.o carla_shared__win64.o carla_threads__win64.o \
ladspa__win64.o dssi__win64.o lv2__win64.o vst__win64.o ../carla-lilv/carla_lilv_win64.a


carla-bridge-win64.exe.so: $(OBJS_WINE64)
$(WINECXX) $^ $(WINE_LINK_FLAGS) $(WINE_64BIT_FLAGS) -o carla-bridge-win64 && $(STRIP) $@
carla-bridge-win64.exe: $(OBJS_WIN64) ../carla-jackbridge/libcarla-jackbridge-win64.dll
$(CXX) $(OBJS_WIN64) $(WIN_LINK_FLAGS) $(WIN_64BIT_FLAGS) -lcarla-jackbridge-win64 -o $@ && $(STRIP) $@


carla_bridge_plugin__wine64.o: carla_bridge_plugin.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
carla_bridge_plugin__win64.o: carla_bridge_plugin.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


carla_bridge_osc__wine64.o: carla_bridge_osc.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
carla_bridge_osc__win64.o: carla_bridge_osc.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


carla_engine__wine64.o: ../carla-backend/carla_engine.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
carla_engine__win64.o: ../carla-backend/carla_engine.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


carla_engine_jack__wine64.o: ../carla-backend/carla_engine_jack.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
carla_engine_jack__win64.o: ../carla-backend/carla_engine_jack.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


carla_shared__wine64.o: ../carla-backend/carla_shared.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
carla_shared__win64.o: ../carla-backend/carla_shared.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


carla_threads__wine64.o: ../carla-backend/carla_threads.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
carla_threads__win64.o: ../carla-backend/carla_threads.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


ladspa__wine64.o: ../carla-backend/ladspa.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
ladspa__win64.o: ../carla-backend/ladspa.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


dssi__wine64.o: ../carla-backend/dssi.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
dssi__win64.o: ../carla-backend/dssi.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


lv2__wine64.o: ../carla-backend/lv2.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
lv2__win64.o: ../carla-backend/lv2.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


vst__wine64.o: ../carla-backend/vst.cpp
$(WINECXX) $< $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) -c -o $@
vst__win64.o: ../carla-backend/vst.cpp
$(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@


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


../carla-lilv/carla_lilv_32bit.a:
$(MAKE) -C ../carla-lilv 32bit
../carla-lilv/carla_lilv_posix32.a:
$(MAKE) -C ../carla-lilv posix32

../carla-lilv/carla_lilv_posix64.a:
$(MAKE) -C ../carla-lilv posix64

../carla-lilv/carla_lilv_win32.a:
$(MAKE) -C ../carla-lilv win32

../carla-lilv/carla_lilv_win64.a:
$(MAKE) -C ../carla-lilv win64

../carla-jackbridge/libcarla-jackbridge-win32.dll:
$(MAKE) -C ../carla-jackbridge win32


../carla-lilv/carla_lilv_64bit.a:
$(MAKE) -C ../carla-lilv 64bit
../carla-jackbridge/libcarla-jackbridge-win64.dll:
$(MAKE) -C ../carla-jackbridge win64


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




+ 14
- 5
c++/carla-bridge/carla_bridge_plugin.cpp View File

@@ -384,11 +384,16 @@ public:
Q_ASSERT(client); Q_ASSERT(client);


m_client = client; m_client = client;
m_client->sendOscUpdate();
m_client->sendOscBridgeUpdate();


if (showGui) if (showGui)
{
show(); show();
}
else
{
m_client->sendOscUpdate();
m_client->sendOscBridgeUpdate();
}


#ifdef __WINE__ #ifdef __WINE__
Q_ASSERT(! closeNow); Q_ASSERT(! closeNow);
@@ -710,6 +715,7 @@ int main(int argc, char* argv[])


/// Init plugin /// Init plugin
short id = engine.addPlugin(itype, filename, name, label); short id = engine.addPlugin(itype, filename, name, label);
int ret;


if (id >= 0 && id < CarlaBackend::MAX_PLUGINS) if (id >= 0 && id < CarlaBackend::MAX_PLUGINS)
{ {
@@ -727,14 +733,17 @@ int main(int argc, char* argv[])
plugin->setActive(true, false, false); plugin->setActive(true, false, false);
plugin->showGui(true); plugin->showGui(true);
} }

ret = 0;
} }
else else
{ {
qWarning("Plugin failed to load, error was:\n%s", CarlaBackend::getLastError()); qWarning("Plugin failed to load, error was:\n%s", CarlaBackend::getLastError());
return 1;
ret = 1;
} }


toolkit.exec(&client, !useOsc);
if (ret == 0)
toolkit.exec(&client, !useOsc);


engine.removeAllPlugins(); engine.removeAllPlugins();
engine.close(); engine.close();
@@ -749,7 +758,7 @@ int main(int argc, char* argv[])
// Close toolkit // Close toolkit
toolkit.quit(); toolkit.quit();


return 0;
return ret;
} }


#endif // BUILD_BRIDGE_PLUGIN #endif // BUILD_BRIDGE_PLUGIN

+ 2
- 2
c++/carla-bridge/carla_bridge_toolkit-gtk2.cpp View File

@@ -90,10 +90,10 @@ public:
g_timeout_add(50, gtk_ui_timeout, this); g_timeout_add(50, gtk_ui_timeout, this);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_ui_destroy), this); g_signal_connect(window, "destroy", G_CALLBACK(gtk_ui_destroy), this);


m_client->sendOscUpdate();

if (showGui) if (showGui)
show(); show();
else
m_client->sendOscUpdate();


// Main loop // Main loop
gtk_main(); gtk_main();


+ 2
- 2
c++/carla-bridge/carla_bridge_toolkit-gtk3.cpp View File

@@ -90,10 +90,10 @@ public:
g_timeout_add(50, gtk_ui_timeout, this); g_timeout_add(50, gtk_ui_timeout, this);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_ui_destroy), this); g_signal_connect(window, "destroy", G_CALLBACK(gtk_ui_destroy), this);


m_client->sendOscUpdate();

if (showGui) if (showGui)
show(); show();
else
m_client->sendOscUpdate();


// Main loop // Main loop
gtk_main(); gtk_main();


+ 2
- 2
c++/carla-bridge/carla_bridge_toolkit-qt4.cpp View File

@@ -151,10 +151,10 @@ public:


app->connect(window, SIGNAL(finished(int)), app, SLOT(quit())); app->connect(window, SIGNAL(finished(int)), app, SLOT(quit()));


m_client->sendOscUpdate();

if (showGui) if (showGui)
show(); show();
else
m_client->sendOscUpdate();


// Main loop // Main loop
app->exec(client); app->exec(client);


+ 19
- 29
c++/carla-discovery/Makefile View File

@@ -5,21 +5,19 @@
# #


CXX ?= g++ CXX ?= g++
WINECXX ?= wineg++
STRIP ?= strip STRIP ?= strip


BASE_FLAGS = -O2 -ffast-math -fomit-frame-pointer -mtune=generic -msse -mfpmath=sse
BASE_FLAGS += -Wall -I../carla-backend -I../carla-includes
BASE_FLAGS = -O2 -ffast-math -fomit-frame-pointer -mtune=generic -msse -mfpmath=sse -Wall
BASE_FLAGS += -I../carla-backend -I../carla-includes


BUILD_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS) BUILD_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS)
BUILD_FLAGS += $(shell pkg-config --cflags QtCore) BUILD_FLAGS += $(shell pkg-config --cflags QtCore)
BUILD_FLAGS += -DNDEBUG -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT
BUILD_FLAGS += -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT # -DNDEBUG
BUILD_FLAGS += -DVESTIGE_HEADER # Comment this line to not use vestige header BUILD_FLAGS += -DVESTIGE_HEADER # Comment this line to not use vestige header


32BIT_FLAGS = -m32 32BIT_FLAGS = -m32
64BIT_FLAGS = -m64 64BIT_FLAGS = -m64
LINK_FLAGS = $(LDFLAGS)
LINK_FLAGS += $(shell pkg-config --libs QtCore)
LINK_FLAGS = $(shell pkg-config --libs QtCore) $(LDFLAGS)


ifneq ($(NATIVE),) ifneq ($(NATIVE),)
BUILD_FLAGS += -DBUILD_NATIVE BUILD_FLAGS += -DBUILD_NATIVE
@@ -45,11 +43,6 @@ WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS) WIN_64BIT_FLAGS = $(64BIT_FLAGS)
WIN_LINK_FLAGS = $(LINK_FLAGS) -static -mwindows WIN_LINK_FLAGS = $(LINK_FLAGS) -static -mwindows


WINE_BUILD_FLAGS = $(BUILD_FLAGS) # -fpermissive
WINE_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32/wine -L/usr/lib/i386-linux-gnu/wine
WINE_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64/wine -L/usr/lib/x86_64-linux-gnu/wine
WINE_LINK_FLAGS = $(LINK_FLAGS) -ldl

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


all: carla-discovery-native all: carla-discovery-native
@@ -58,43 +51,40 @@ posix32: carla-discovery-posix32
posix64: carla-discovery-posix64 posix64: carla-discovery-posix64
win32: carla-discovery-win32.exe win32: carla-discovery-win32.exe
win64: carla-discovery-win64.exe win64: carla-discovery-win64.exe
wine32: carla-discovery-win32.exe.so
wine64: carla-discovery-win64.exe.so


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


32BIT_OBJS = carla-discovery.cpp ../carla-lilv/carla_lilv_32bit.a
64BIT_OBJS = carla-discovery.cpp ../carla-lilv/carla_lilv_64bit.a
OBJS = carla-discovery.cpp


carla-discovery-native: carla-discovery.cpp ../carla-lilv/carla_lilv.a carla-discovery-native: carla-discovery.cpp ../carla-lilv/carla_lilv.a
$(CXX) $^ $(BUILD_FLAGS) $(LINK_FLAGS) -o $@ && $(STRIP) $@ $(CXX) $^ $(BUILD_FLAGS) $(LINK_FLAGS) -o $@ && $(STRIP) $@


carla-discovery-posix32: $(32BIT_OBJS)
carla-discovery-posix32: $(OBJS) ../carla-lilv/carla_lilv_posix32.a
$(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@ && $(STRIP) $@ $(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@ && $(STRIP) $@


carla-discovery-posix64: $(64BIT_OBJS)
carla-discovery-posix64: $(OBJS) ../carla-lilv/carla_lilv_posix64.a
$(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@ && $(STRIP) $@ $(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@ && $(STRIP) $@


carla-discovery-win32.exe: $(32BIT_OBJS)
carla-discovery-win32.exe: $(OBJS) ../carla-lilv/carla_lilv_win32.a
$(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) $(WIN_LINK_FLAGS) -o $@ && $(STRIP) $@ $(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) $(WIN_LINK_FLAGS) -o $@ && $(STRIP) $@


carla-discovery-win64.exe: $(64BIT_OBJS)
carla-discovery-win64.exe: $(OBJS) ../carla-lilv/carla_lilv_win64.a
$(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) $(WIN_LINK_FLAGS) -o $@ && $(STRIP) $@ $(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) $(WIN_LINK_FLAGS) -o $@ && $(STRIP) $@


carla-discovery-win32.exe.so: $(32BIT_OBJS)
$(WINECXX) $^ $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) $(WINE_LINK_FLAGS) -o carla-discovery-win32.exe && $(STRIP) $@

carla-discovery-win64.exe.so: $(64BIT_OBJS)
$(WINECXX) $^ $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) $(WINE_LINK_FLAGS) -o carla-discovery-win64.exe && $(STRIP) $@

../carla-lilv/carla_lilv.a: ../carla-lilv/carla_lilv.a:
$(MAKE) -C ../carla-lilv $(MAKE) -C ../carla-lilv


../carla-lilv/carla_lilv_32bit.a:
$(MAKE) -C ../carla-lilv 32bit
../carla-lilv/carla_lilv_posix32.a:
$(MAKE) -C ../carla-lilv posix32

../carla-lilv/carla_lilv_posix64.a:
$(MAKE) -C ../carla-lilv posix64

../carla-lilv/carla_lilv_win32.a:
$(MAKE) -C ../carla-lilv win32


../carla-lilv/carla_lilv_64bit.a:
$(MAKE) -C ../carla-lilv 64bit
../carla-lilv/carla_lilv_win64.a:
$(MAKE) -C ../carla-lilv win64


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




+ 19
- 30
c++/carla-discovery/Makefile.dbg View File

@@ -5,11 +5,9 @@
# #


CXX ?= g++ CXX ?= g++
WINECXX ?= wineg++



BASE_FLAGS = -O0 -g
BASE_FLAGS += -Wall -I../carla-backend -I../carla-includes
BASE_FLAGS = -O0 -g -Wall
BASE_FLAGS += -I../carla-backend -I../carla-includes


BUILD_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS) BUILD_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS)
BUILD_FLAGS += $(shell pkg-config --cflags QtCore) BUILD_FLAGS += $(shell pkg-config --cflags QtCore)
@@ -18,8 +16,7 @@ BUILD_FLAGS += -DVESTIGE_HEADER # Comment this line to not use vestige header


32BIT_FLAGS = -m32 32BIT_FLAGS = -m32
64BIT_FLAGS = -m64 64BIT_FLAGS = -m64
LINK_FLAGS = $(LDFLAGS)
LINK_FLAGS += $(shell pkg-config --libs QtCore)
LINK_FLAGS = $(shell pkg-config --libs QtCore) $(LDFLAGS)


ifneq ($(NATIVE),) ifneq ($(NATIVE),)
BUILD_FLAGS += -DBUILD_NATIVE BUILD_FLAGS += -DBUILD_NATIVE
@@ -45,11 +42,6 @@ WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS) WIN_64BIT_FLAGS = $(64BIT_FLAGS)
WIN_LINK_FLAGS = $(LINK_FLAGS) -static -mwindows WIN_LINK_FLAGS = $(LINK_FLAGS) -static -mwindows


WINE_BUILD_FLAGS = $(BUILD_FLAGS) # -fpermissive
WINE_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32/wine -L/usr/lib/i386-linux-gnu/wine
WINE_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64/wine -L/usr/lib/x86_64-linux-gnu/wine
WINE_LINK_FLAGS = $(LINK_FLAGS) -ldl

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


all: carla-discovery-native all: carla-discovery-native
@@ -58,43 +50,40 @@ posix32: carla-discovery-posix32
posix64: carla-discovery-posix64 posix64: carla-discovery-posix64
win32: carla-discovery-win32.exe win32: carla-discovery-win32.exe
win64: carla-discovery-win64.exe win64: carla-discovery-win64.exe
wine32: carla-discovery-win32.exe.so
wine64: carla-discovery-win64.exe.so


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


32BIT_OBJS = carla-discovery.cpp ../carla-lilv/carla_lilv_32bit.a
64BIT_OBJS = carla-discovery.cpp ../carla-lilv/carla_lilv_64bit.a
OBJS = carla-discovery.cpp


carla-discovery-native: carla-discovery.cpp ../carla-lilv/carla_lilv.a carla-discovery-native: carla-discovery.cpp ../carla-lilv/carla_lilv.a
$(CXX) $^ $(BUILD_FLAGS) $(LINK_FLAGS) -o $@
$(CXX) $^ $(BUILD_FLAGS) $(LINK_FLAGS) -o $@ && $(STRIP) $@


carla-discovery-posix32: $(32BIT_OBJS)
carla-discovery-posix32: $(OBJS) ../carla-lilv/carla_lilv_posix32.a
$(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@ $(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@


carla-discovery-posix64: $(64BIT_OBJS)
carla-discovery-posix64: $(OBJS) ../carla-lilv/carla_lilv_posix64.a
$(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@ $(CXX) $^ $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) $(POSIX_LINK_FLAGS) -o $@


carla-discovery-win32.exe: $(32BIT_OBJS)
carla-discovery-win32.exe: $(OBJS) ../carla-lilv/carla_lilv_win32.a
$(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) $(WIN_LINK_FLAGS) -o $@ $(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) $(WIN_LINK_FLAGS) -o $@


carla-discovery-win64.exe: $(64BIT_OBJS)
carla-discovery-win64.exe: $(OBJS) ../carla-lilv/carla_lilv_win64.a
$(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) $(WIN_LINK_FLAGS) -o $@ $(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) $(WIN_LINK_FLAGS) -o $@


carla-discovery-win32.exe.so: $(32BIT_OBJS)
$(WINECXX) $^ $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) $(WINE_LINK_FLAGS) -o carla-discovery-win32.exe

carla-discovery-win64.exe.so: $(64BIT_OBJS)
$(WINECXX) $^ $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) $(WINE_LINK_FLAGS) -o carla-discovery-win64.exe

../carla-lilv/carla_lilv.a: ../carla-lilv/carla_lilv.a:
$(MAKE) -C ../carla-lilv $(MAKE) -C ../carla-lilv


../carla-lilv/carla_lilv_32bit.a:
$(MAKE) -C ../carla-lilv 32bit
../carla-lilv/carla_lilv_posix32.a:
$(MAKE) -C ../carla-lilv posix32

../carla-lilv/carla_lilv_posix64.a:
$(MAKE) -C ../carla-lilv posix64

../carla-lilv/carla_lilv_win32.a:
$(MAKE) -C ../carla-lilv win32


../carla-lilv/carla_lilv_64bit.a:
$(MAKE) -C ../carla-lilv 64bit
../carla-lilv/carla_lilv_win64.a:
$(MAKE) -C ../carla-lilv win64


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




+ 1
- 1
c++/carla-includes/carla_includes.h View File

@@ -93,7 +93,7 @@


// export symbols if needed // export symbols if needed
#ifdef BUILD_BRIDGE #ifdef BUILD_BRIDGE
# define CARLA_EXPORT
# define CARLA_EXPORT extern "C"
#else #else
# if defined(Q_OS_WIN) && ! defined(__WINE__) # if defined(Q_OS_WIN) && ! defined(__WINE__)
# define CARLA_EXPORT extern "C" __declspec (dllexport) # define CARLA_EXPORT extern "C" __declspec (dllexport)


+ 61
- 0
c++/carla-jackbridge/Makefile View File

@@ -0,0 +1,61 @@
#!/usr/bin/make -f
# Makefile for carla-jackbridge #
# ----------------------------------------- #
# Created by falkTX
#

CXX ?= g++
WINECXX ?= wineg++
STRIP ?= strip

BASE_FLAGS = -O2 -ffast-math -fomit-frame-pointer -fPIC -mtune=generic -msse -mfpmath=sse -Wall
BASE_FLAGS += -I../carla-includes

BUILD_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS)
BUILD_FLAGS += $(shell pkg-config --cflags jack QtCore)
BUILD_FLAGS += -DBUILD_BRIDGE -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT # -DNDEBUG


32BIT_FLAGS = -m32
64BIT_FLAGS = -m64
LINK_FLAGS = -shared $(LDFLAGS)

WIN_BUILD_FLAGS = $(BUILD_FLAGS) -DJACKBRIDGE_DUMMY -I.
WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS)
WIN_LINK_FLAGS = $(LINK_FLAGS)

WINE_BUILD_FLAGS = $(BUILD_FLAGS)
WINE_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32/wine -L/usr/lib/i386-linux-gnu/wine
WINE_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64/wine -L/usr/lib/x86_64-linux-gnu/wine
WINE_LINK_FLAGS = $(LINK_FLAGS) $(shell pkg-config --libs jack) -ldl

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

all:

win32: libcarla-jackbridge-win32.dll
win64: libcarla-jackbridge-win64.dll
wine32: libcarla-jackbridge-win32.dll.so
wine64: libcarla-jackbridge-win64.dll.so

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

OBJS = carla_jackbridge.cpp

libcarla-jackbridge-win32.dll: $(OBJS)
$(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) $(WIN_LINK_FLAGS) -Wl,--output-def,$@.def,--out-implib,$@.a -o $@ && $(STRIP) $@

libcarla-jackbridge-win64.dll: $(OBJS)
$(CXX) $^ $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) $(WIN_LINK_FLAGS) -Wl,--output-def,$@.def,--out-implib,$@.a -o $@ && $(STRIP) $@

libcarla-jackbridge-win32.dll.so: $(OBJS)
$(WINECXX) $^ libcarla-jackbridge-win32.dll.def $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) $(WINE_LINK_FLAGS) -mno-cygwin -o $@ && $(STRIP) $@

libcarla-jackbridge-win64.dll.so: $(OBJS)
$(WINECXX) $^ libcarla-jackbridge-win64.dll.def $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) $(WINE_LINK_FLAGS) -mno-cygwin -o $@ && $(STRIP) $@

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

clean:
rm -f libcarla-jackbridge-*

+ 239
- 0
c++/carla-jackbridge/carla_jackbridge.cpp View File

@@ -0,0 +1,239 @@
/*
* Carla JackBridge
* Copyright (C) 2012 Filipe Coelho <falktx@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the COPYING file
*/

#include "carla_jackbridge.h"

#ifndef JACKBRIDGE_DUMMY
#include <jack/jack.h>
#include <jack/midiport.h>
#endif

jack_client_t* jackbridge_client_open(const char* client_name, jack_options_t options, jack_status_t* status)
{
#ifndef JACKBRIDGE_DUMMY
return jack_client_open(client_name, options, status);
#else
return nullptr;
#endif
}

int jackbridge_client_close(jack_client_t* client)
{
#ifndef JACKBRIDGE_DUMMY
return jack_client_close(client);
#else
return 0;
#endif
}

int jackbridge_client_name_size()
{
#ifndef JACKBRIDGE_DUMMY
return jack_client_name_size();
#else
return 0;
#endif
}

char* jackbridge_get_client_name(jack_client_t* client)
{
#ifndef JACKBRIDGE_DUMMY
return jack_get_client_name(client);
#else
return nullptr;
#endif
}

int jackbridge_port_name_size()
{
#ifndef JACKBRIDGE_DUMMY
return jack_port_name_size();
#else
return 0;
#endif
}

int jackbridge_activate(jack_client_t* client)
{
#ifndef JACKBRIDGE_DUMMY
return jack_activate(client);
#else
return 0;
#endif
}

int jackbridge_deactivate(jack_client_t* client)
{
#ifndef JACKBRIDGE_DUMMY
return jack_deactivate(client);
#else
return 0;
#endif
}

int jackbridge_set_process_thread(jack_client_t* client, JackThreadCallback thread_callback, void *arg)
{
#ifndef JACKBRIDGE_DUMMY
return jack_set_process_thread(client, thread_callback, arg);
#else
return 0;
#endif
}

void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown_callback, void* arg)
{
#ifndef JACKBRIDGE_DUMMY
jack_on_shutdown(client, shutdown_callback, arg);
#endif
}

int jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg)
{
#ifndef JACKBRIDGE_DUMMY
return jack_set_process_callback(client, process_callback, arg);
#else
return 0;
#endif
}

int jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallback freewheel_callback, void* arg)
{
#ifndef JACKBRIDGE_DUMMY
return jack_set_freewheel_callback(client, freewheel_callback, arg);
#else
return 0;
#endif
}

int jackbridge_set_buffer_size_callback(jack_client_t* client, JackBufferSizeCallback bufsize_callback, void* arg)
{
#ifndef JACKBRIDGE_DUMMY
return jack_set_buffer_size_callback(client, bufsize_callback, arg);
#else
return 0;
#endif
}

int jackbridge_set_sample_rate_callback(jack_client_t* client, JackSampleRateCallback srate_callback, void* arg)
{
#ifndef JACKBRIDGE_DUMMY
return jack_set_sample_rate_callback(client, srate_callback, arg);
#else
return 0;
#endif
}

jack_nframes_t jackbridge_get_sample_rate(jack_client_t* client)
{
#ifndef JACKBRIDGE_DUMMY
return jack_get_sample_rate(client);
#else
return 0;
#endif
}

jack_nframes_t jackbridge_get_buffer_size(jack_client_t* client)
{
#ifndef JACKBRIDGE_DUMMY
return jack_get_buffer_size(client);
#else
return 0;
#endif
}

jack_port_t* jackbridge_port_register(jack_client_t* client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size)
{
#ifndef JACKBRIDGE_DUMMY
return jack_port_register(client, port_name, port_type, flags, buffer_size);
#else
return nullptr;
#endif
}

int jackbridge_port_unregister(jack_client_t* client, jack_port_t* port)
{
#ifndef JACKBRIDGE_DUMMY
return jack_port_unregister(client, port);
#else
return 0;
#endif
}

void* jackbridge_port_get_buffer(jack_port_t* port, jack_nframes_t nframes)
{
#ifndef JACKBRIDGE_DUMMY
return jack_port_get_buffer(port, nframes);
#else
return nullptr;
#endif
}

// -----------------------------------------------------------------------------

uint32_t jackbridge_midi_get_event_count(void* port_buffer)
{
#ifndef JACKBRIDGE_DUMMY
return jack_midi_get_event_count(port_buffer);
#else
return 0;
#endif
}

int jackbridge_midi_event_get(jackbridge_midi_event_t* event, void* port_buffer, uint32_t event_index)
{
#ifndef JACKBRIDGE_DUMMY
return jack_midi_event_get((jack_midi_event_t*)event, port_buffer, event_index);
#else
return 0;
#endif
}

void jackbridge_midi_clear_buffer(void* port_buffer)
{
#ifndef JACKBRIDGE_DUMMY
jack_midi_clear_buffer(port_buffer);
#endif
}

jackbridge_midi_data_t* jackbridge_midi_event_reserve(void* port_buffer, jack_nframes_t time, size_t data_size)
{
#ifndef JACKBRIDGE_DUMMY
return jack_midi_event_reserve(port_buffer, time, data_size);
#else
return nullptr;
#endif
}

int jackbridge_midi_event_write(void* port_buffer, jack_nframes_t time, const jackbridge_midi_data_t* data, size_t data_size)
{
#ifndef JACKBRIDGE_DUMMY
return jack_midi_event_write(port_buffer, time, (jack_midi_data_t*)data, data_size);
#else
return 0;
#endif
}

// -----------------------------------------------------------------------------

jack_transport_state_t jackbridge_transport_query(const jack_client_t* client, jack_position_t* pos)
{
#ifndef JACKBRIDGE_DUMMY
return jack_transport_query(client, pos);
#else
return JackTransportStopped;
#endif
}

+ 61
- 0
c++/carla-jackbridge/carla_jackbridge.h View File

@@ -0,0 +1,61 @@
/*
* Carla JackBridge
* Copyright (C) 2012 Filipe Coelho <falktx@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the COPYING file
*/

#ifndef CARLA_JACKBRIDGE_H
#define CARLA_JACKBRIDGE_H

#include "carla_includes.h"

#include <jack/types.h>

typedef unsigned char jackbridge_midi_data_t;

typedef struct _jackbridge_midi_event
{
jack_nframes_t time;
size_t size;
jackbridge_midi_data_t* buffer;
} jackbridge_midi_event_t;

CARLA_EXPORT jack_client_t* jackbridge_client_open(const char* client_name, jack_options_t options, jack_status_t* status);
CARLA_EXPORT int jackbridge_client_close(jack_client_t* client);
CARLA_EXPORT int jackbridge_client_name_size();
CARLA_EXPORT char* jackbridge_get_client_name(jack_client_t* client);
CARLA_EXPORT int jackbridge_port_name_size();
CARLA_EXPORT int jackbridge_activate(jack_client_t* client);
CARLA_EXPORT int jackbridge_deactivate(jack_client_t* client);
CARLA_EXPORT int jackbridge_set_process_thread(jack_client_t* client, JackThreadCallback thread_callback, void *arg);
CARLA_EXPORT void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown_callback, void* arg);
CARLA_EXPORT int jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg);
CARLA_EXPORT int jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallback freewheel_callback, void* arg);
CARLA_EXPORT int jackbridge_set_buffer_size_callback(jack_client_t* client, JackBufferSizeCallback bufsize_callback, void* arg);
CARLA_EXPORT int jackbridge_set_sample_rate_callback(jack_client_t* client, JackSampleRateCallback srate_callback, void* arg);
CARLA_EXPORT jack_nframes_t jackbridge_get_sample_rate(jack_client_t* client);
CARLA_EXPORT jack_nframes_t jackbridge_get_buffer_size(jack_client_t* client);
CARLA_EXPORT jack_port_t* jackbridge_port_register(jack_client_t* client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size);
CARLA_EXPORT int jackbridge_port_unregister(jack_client_t* client, jack_port_t* port);
CARLA_EXPORT void* jackbridge_port_get_buffer(jack_port_t* port, jack_nframes_t nframes);

CARLA_EXPORT uint32_t jackbridge_midi_get_event_count(void* port_buffer);
CARLA_EXPORT int jackbridge_midi_event_get(jackbridge_midi_event_t* event, void* port_buffer, uint32_t event_index);
CARLA_EXPORT void jackbridge_midi_clear_buffer(void* port_buffer);
CARLA_EXPORT jackbridge_midi_data_t* jackbridge_midi_event_reserve(void* port_buffer, jack_nframes_t time, size_t data_size);
CARLA_EXPORT int jackbridge_midi_event_write(void* port_buffer, jack_nframes_t time, const jackbridge_midi_data_t* data, size_t data_size);

CARLA_EXPORT jack_transport_state_t jackbridge_transport_query(const jack_client_t* client, jack_position_t* pos);

#endif // CARLA_JACKBRIDGE_H

+ 55
- 15
c++/carla-lilv/Makefile View File

@@ -18,9 +18,11 @@ BUILD_FLAGS += -Iconfig -I../carla-includes
32BIT_FLAGS = -m32 32BIT_FLAGS = -m32
64BIT_FLAGS = -m64 64BIT_FLAGS = -m64


OBJS = serd.o sord.o sratom.o lilv.o
OBJS_32bit = serd_32bit.o sord_32bit.o sratom_32bit.o lilv_32bit.o
OBJS_64bit = serd_64bit.o sord_64bit.o sratom_64bit.o lilv_64bit.o
OBJS = serd.o sord.o sratom.o lilv.o
OBJS_posix32 = serd_posix32.o sord_posix32.o sratom_posix32.o lilv_posix32.o
OBJS_posix64 = serd_posix64.o sord_posix64.o sratom_posix64.o lilv_posix64.o
OBJS_win32 = serd_win32.o sord_win32.o sratom_win32.o lilv_win32.o
OBJS_win64 = serd_win64.o sord_win64.o sratom_win64.o lilv_win64.o


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


@@ -43,40 +45,78 @@ lilv.o: lilv.c


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


32bit: carla_lilv_32bit.a
posix32: carla_lilv_posix32.a


carla_lilv_32bit.a: $(OBJS_32bit)
carla_lilv_posix32.a: $(OBJS_posix32)
$(AR) rs $@ $^ $(AR) rs $@ $^


serd_32bit.o: serd.c
serd_posix32.o: serd.c
$(CC) $< $(BUILD_FLAGS) $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_FLAGS) $(32BIT_FLAGS) -c -o $@


sord_32bit.o: sord.c
sord_posix32.o: sord.c
$(CC) $< $(BUILD_FLAGS) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_FLAGS) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@


sratom_32bit.o: sratom.c
sratom_posix32.o: sratom.c
$(CC) $< $(BUILD_FLAGS) $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_FLAGS) $(32BIT_FLAGS) -c -o $@


lilv_32bit.o: lilv.c
lilv_posix32.o: lilv.c
$(CC) $< $(BUILD_FLAGS) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_FLAGS) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@


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


64bit: carla_lilv_64bit.a
posix64: carla_lilv_posix64.a


carla_lilv_64bit.a: $(OBJS_64bit)
carla_lilv_posix64.a: $(OBJS_posix64)
$(AR) rs $@ $^ $(AR) rs $@ $^


serd_64bit.o: serd.c
serd_posix64.o: serd.c
$(CC) $< $(BUILD_FLAGS) $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_FLAGS) $(64BIT_FLAGS) -c -o $@


sord_64bit.o: sord.c
sord_posix64.o: sord.c
$(CC) $< $(BUILD_FLAGS) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_FLAGS) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@


sratom_64bit.o: sratom.c
sratom_posix64.o: sratom.c
$(CC) $< $(BUILD_FLAGS) $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_FLAGS) $(64BIT_FLAGS) -c -o $@


lilv_64bit.o: lilv.c
lilv_posix64.o: lilv.c
$(CC) $< $(BUILD_FLAGS) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@

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

win32: carla_lilv_win32.a

carla_lilv_win32.a: $(OBJS_win32)
$(AR) rs $@ $^

serd_win32.o: serd.c
$(CC) $< $(BUILD_FLAGS) $(32BIT_FLAGS) -c -o $@

sord_win32.o: sord.c
$(CC) $< $(BUILD_FLAGS) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@

sratom_win32.o: sratom.c
$(CC) $< $(BUILD_FLAGS) $(32BIT_FLAGS) -c -o $@

lilv_win32.o: lilv.c
$(CC) $< $(BUILD_FLAGS) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@

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

win64: carla_lilv_win64.a

carla_lilv_win64.a: $(OBJS_win64)
$(AR) rs $@ $^

serd_win64.o: serd.c
$(CC) $< $(BUILD_FLAGS) $(64BIT_FLAGS) -c -o $@

sord_win64.o: sord.c
$(CC) $< $(BUILD_FLAGS) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@

sratom_win64.o: sratom.c
$(CC) $< $(BUILD_FLAGS) $(64BIT_FLAGS) -c -o $@

lilv_win64.o: lilv.c
$(CC) $< $(BUILD_FLAGS) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_FLAGS) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@


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


Loading…
Cancel
Save