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
*.o
*.dll
*.dll.def
*.exe
*.so



+ 13
- 4
Makefile View File

@@ -179,13 +179,21 @@ posix64:
$(MAKE) -C c++/carla-bridge 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:
$(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:
$(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-discovery
$(MAKE) clean -C c++/carla-lilv
$(MAKE) clean -C c++/carla-jackbridge
$(MAKE) clean -C c++/jackmeter
$(MAKE) clean -C c++/xycontroller
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_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 += $(shell pkg-config --cflags liblo QtCore QtGui)
@@ -65,10 +65,11 @@ OBJS = \
carla_shared.o \
carla_threads.o \
ladspa.o dssi.o lv2.o vst.o fluidsynth.o linuxsampler.o \
../carla-jackbridge/carla_jackbridge.o \
../carla-lilv/carla_lilv.a

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 += rtmidi-2.0.0/RtMidi.o
endif


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

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

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 += rtmidi-2.0.0/RtMidi.o
endif


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

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

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

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

params = nullptr;

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

~BridgePlugin()
@@ -70,24 +71,20 @@ public:
{
osc_send_hide(&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)
free((void*)info.name);
@@ -159,7 +156,7 @@ public:
// -------------------------------------------------------------------
// Information (per-plugin data)

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

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

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

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

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

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);
}

@@ -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

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

void reload()
{
}

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

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

if (! saved)
if (! m_saved)
qWarning("BridgePlugin::prepareForSave() - Timeout while requesting save state");
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)
{
@@ -671,22 +687,22 @@ public:
// register plugin now so we can receive OSC (and wait for it)
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;
carla_msleep(50);
}

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

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

private:
bool initiated;
bool saved;

const BinaryType m_binary;
CarlaPluginThread* m_thread;

bool m_initiated;
bool m_saved;

struct {
uint32_t ains, aouts;
@@ -736,19 +751,7 @@ CarlaPlugin* CarlaPlugin::newBridge(const initializer& init, BinaryType btype, P
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();

return plugin;


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

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

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

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

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

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

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

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

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

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

#ifdef CARLA_ENGINE_JACK
static jack_midi_event_t jackEvent;
static jackbridge_midi_event_t jackEvent;
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.size = jackEvent.size;
@@ -1095,7 +1095,7 @@ void CarlaEngineMidiPort::writeEvent(uint32_t time, const uint8_t* data, uint8_t
#endif

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



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

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

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

#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);

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

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
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

if (jack_activate(client) == 0)
if (jackbridge_activate(client) == 0)
{
// set client name, fixed for OSC usage
// 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++)
{
if (! (std::isalpha(fixedName[i]) || std::isdigit(fixedName[i])))
@@ -181,23 +181,23 @@ bool CarlaEngineJack::close()
name = nullptr;
}

if (jack_deactivate(client) == 0)
if (jackbridge_deactivate(client) == 0)
{
#ifndef BUILD_BRIDGE
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

if (jack_client_close(client) == 0)
if (jackbridge_client_close(client) == 0)
{
client = nullptr;
return true;
@@ -239,8 +239,8 @@ CarlaEngineClient* CarlaEngineJack::addClient(CarlaPlugin* const plugin)
else if (carlaOptions.processMode == PROCESS_MODE_MULTIPLE_CLIENTS)
#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)
//{
@@ -279,7 +279,7 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
if (maxPluginNumber == 0)
return;

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

timeInfo.playing = (state != JackTransportStopped);

@@ -328,14 +328,14 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
else if (carlaOptions.processMode == PROCESS_MODE_CONTINUOUS_RACK)
{
// 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
Q_ASSERT(audioIn1);
@@ -363,14 +363,14 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
// initialize control input
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;

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;

CarlaEngineControlEvent* const carlaEvent = &rackControlEventsIn[carlaEventIndex++];
@@ -420,9 +420,9 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)
memset(rackMidiEventsIn, 0, sizeof(CarlaEngineMidiEvent)*MAX_ENGINE_MIDI_EVENTS);
{
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)
break;
@@ -525,7 +525,7 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)

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

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[1] = event->controller;
data[2] = event->value * 127;
jack_midi_event_write(controlOut, event->time, data, 3);
jackbridge_midi_event_write(controlOut, event->time, data, 3);
break;
case CarlaEngineEventMidiBankChange:
data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel;
data[1] = MIDI_CONTROL_BANK_SELECT;
data[2] = event->value;
jack_midi_event_write(controlOut, event->time, data, 3);
jackbridge_midi_event_write(controlOut, event->time, data, 3);
break;
case CarlaEngineEventMidiProgramChange:
data[0] = MIDI_STATUS_PROGRAM_CHANGE + event->channel;
data[1] = event->value;
jack_midi_event_write(controlOut, event->time, data, 2);
jackbridge_midi_event_write(controlOut, event->time, data, 2);
break;
case CarlaEngineEventAllSoundOff:
data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel;
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;
case CarlaEngineEventAllNotesOff:
data[0] = MIDI_STATUS_CONTROL_CHANGE + event->channel;
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;
}
}
@@ -573,14 +573,14 @@ void CarlaEngineJack::handleProcessCallback(uint32_t nframes)

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

for (unsigned short i=0; i < MAX_ENGINE_MIDI_EVENTS; i++)
{
if (rackMidiEventsOut[i].size == 0)
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 (note)
if (note > 0)
uiNoteOn(channel, note, velo);
else
uiNoteOff(channel, note);


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

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

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))
{
@@ -1071,8 +1070,7 @@ public:

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))
{


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

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

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))
{
@@ -351,8 +350,7 @@ public:

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))
{


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

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

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

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

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

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


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

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

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

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 += -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

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
win32: carla-bridge-win32.exe
win64: carla-bridge-win64.exe
wine32: carla-bridge-win32.exe.so
wine64: carla-bridge-win64.exe.so

# --------------------------------------------------------------
# ui_lv2-gtk2
@@ -201,9 +192,9 @@ carla_bridge_osc__vst-x11.o: carla_bridge_osc.cpp
# 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 \
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)
$(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
$(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
$(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@

@@ -242,9 +236,9 @@ vst__posix32.o: ../carla-backend/vst.cpp
# 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 \
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)
$(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
$(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
$(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 $@

# --------------------------------------------------------------
# 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);

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

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

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

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

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

ret = 0;
}
else
{
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.close();
@@ -749,7 +758,7 @@ int main(int argc, char* argv[])
// Close toolkit
toolkit.quit();

return 0;
return ret;
}

#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_signal_connect(window, "destroy", G_CALLBACK(gtk_ui_destroy), this);

m_client->sendOscUpdate();

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

// Main loop
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_signal_connect(window, "destroy", G_CALLBACK(gtk_ui_destroy), this);

m_client->sendOscUpdate();

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

// Main loop
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()));

m_client->sendOscUpdate();

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

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


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

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

CXX ?= g++
WINECXX ?= wineg++
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 += $(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

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

ifneq ($(NATIVE),)
BUILD_FLAGS += -DBUILD_NATIVE
@@ -45,11 +43,6 @@ WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS)
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
@@ -58,43 +51,40 @@ posix32: carla-discovery-posix32
posix64: carla-discovery-posix64
win32: carla-discovery-win32.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
$(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) $@

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) $@

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) $@

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) $@

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:
$(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++
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 += $(shell pkg-config --cflags QtCore)
@@ -18,8 +16,7 @@ BUILD_FLAGS += -DVESTIGE_HEADER # Comment this line to not use vestige header

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

ifneq ($(NATIVE),)
BUILD_FLAGS += -DBUILD_NATIVE
@@ -45,11 +42,6 @@ WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS)
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
@@ -58,43 +50,40 @@ posix32: carla-discovery-posix32
posix64: carla-discovery-posix64
win32: carla-discovery-win32.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
$(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 $@

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 $@

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 $@

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 $@

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:
$(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
#ifdef BUILD_BRIDGE
# define CARLA_EXPORT
# define CARLA_EXPORT extern "C"
#else
# if defined(Q_OS_WIN) && ! defined(__WINE__)
# 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
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 $@ $^

serd_32bit.o: serd.c
serd_posix32.o: serd.c
$(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 $@

sratom_32bit.o: sratom.c
sratom_posix32.o: sratom.c
$(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 $@

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

64bit: carla_lilv_64bit.a
posix64: carla_lilv_posix64.a

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

serd_64bit.o: serd.c
serd_posix64.o: serd.c
$(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 $@

sratom_64bit.o: sratom.c
sratom_posix64.o: sratom.c
$(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 $@

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


Loading…
Cancel
Save