summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/engine/JackAudioDriver.cpp5
-rw-r--r--src/engine/JackMidiDriver.cpp17
-rw-r--r--src/engine/JackMidiDriver.hpp5
3 files changed, 17 insertions, 10 deletions
diff --git a/src/engine/JackAudioDriver.cpp b/src/engine/JackAudioDriver.cpp
index 3f39f363..19a66281 100644
--- a/src/engine/JackAudioDriver.cpp
+++ b/src/engine/JackAudioDriver.cpp
@@ -171,13 +171,10 @@ JackAudioDriver::activate()
exit(EXIT_FAILURE);
} else {
cout << "[JackAudioDriver] Activated Jack client." << endl;
-/*#ifdef HAVE_LASH
- _engine.lash_driver()->set_jack_client_name(jack_client_get_name(_client));
-#endif*/
}
if (!_engine.midi_driver() || dynamic_cast<DummyMidiDriver*>(_engine.midi_driver()))
- _engine.set_midi_driver(new JackMidiDriver(_client));
+ _engine.set_midi_driver(new JackMidiDriver(_engine, _client));
}
diff --git a/src/engine/JackMidiDriver.cpp b/src/engine/JackMidiDriver.cpp
index ecdbd098..0101212c 100644
--- a/src/engine/JackMidiDriver.cpp
+++ b/src/engine/JackMidiDriver.cpp
@@ -20,6 +20,9 @@
#include <pthread.h>
#include "raul/Maid.hpp"
#include "raul/midi_events.h"
+#include "module/World.hpp"
+#include "lv2ext/lv2_event_helpers.h"
+#include "shared/LV2URIMap.hpp"
#include "types.hpp"
#include "JackMidiDriver.hpp"
#include "JackAudioDriver.hpp"
@@ -28,6 +31,7 @@
#include "EventBuffer.hpp"
#include "DuplexPort.hpp"
#include "ProcessContext.hpp"
+#include "Engine.hpp"
#include "jack_compat.h"
using namespace std;
@@ -89,9 +93,8 @@ JackMidiPort::pre_process(ProcessContext& context)
jack_midi_event_t ev;
jack_midi_event_get(&ev, jack_buffer, i);
- // FIXME: type is hardcoded for now, we should get it from
- // the type map instead
- const bool success = patch_buf->append(ev.time, 0, 1, ev.size, ev.buffer);
+ const bool success = patch_buf->append(ev.time, 0, _driver->_midi_event_type,
+ ev.size, ev.buffer);
if (!success)
cerr << "WARNING: Failed to write MIDI to port buffer, event(s) lost!" << endl;
}
@@ -144,11 +147,15 @@ JackMidiPort::post_process(ProcessContext& context)
bool JackMidiDriver::_midi_thread_exit_flag = true;
-JackMidiDriver::JackMidiDriver(jack_client_t* client)
- : _client(client)
+JackMidiDriver::JackMidiDriver(Engine& engine, jack_client_t* client)
+ : _engine(engine)
+ , _client(client)
, _is_activated(false)
, _is_enabled(false)
{
+ const Shared::LV2Features::Feature* f = engine.world()->lv2_features->feature(LV2_URI_MAP_URI);
+ Shared::LV2URIMap* map = (Shared::LV2URIMap*)f->controller;
+ _midi_event_type = map->uri_to_id(NULL, "http://lv2plug.in/ns/ext/midi#MidiEvent");
}
diff --git a/src/engine/JackMidiDriver.hpp b/src/engine/JackMidiDriver.hpp
index 0b155450..2c78c439 100644
--- a/src/engine/JackMidiDriver.hpp
+++ b/src/engine/JackMidiDriver.hpp
@@ -63,7 +63,7 @@ private:
class JackMidiDriver : public MidiDriver
{
public:
- JackMidiDriver(jack_client_t* client);
+ JackMidiDriver(Engine& engine, jack_client_t* client);
~JackMidiDriver();
void activate();
@@ -88,6 +88,9 @@ public:
jack_client_t* jack_client() { return _client; }
private:
+ Engine& _engine;
+ uint32_t _midi_event_type;
+
Raul::List<JackMidiPort*> _in_ports;
Raul::List<JackMidiPort*> _out_ports;