diff options
author | David Robillard <d@drobilla.net> | 2012-06-01 04:13:44 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-06-01 04:13:44 +0000 |
commit | 9680cb0fd0fae53cfa93b8524cd25b551a07d25d (patch) | |
tree | 9436362d8cdc9c50d8767ebd49ec32c888a6cc47 | |
parent | 31c80e3d4d222ddd8dfaceff9b84308e99a05df4 (diff) | |
download | ingen-9680cb0fd0fae53cfa93b8524cd25b551a07d25d.tar.gz ingen-9680cb0fd0fae53cfa93b8524cd25b551a07d25d.tar.bz2 ingen-9680cb0fd0fae53cfa93b8524cd25b551a07d25d.zip |
Functioning MIDI input and internals when running as an LV2.
Ingen can now be used to build working LV2 synthesizers.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4491 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r-- | src/server/NodeFactory.cpp | 1 | ||||
-rw-r--r-- | src/server/events/CreatePort.cpp | 1 | ||||
-rw-r--r-- | src/server/ingen_lv2.cpp | 12 | ||||
-rw-r--r-- | src/shared/AtomReader.cpp | 8 |
4 files changed, 19 insertions, 3 deletions
diff --git a/src/server/NodeFactory.cpp b/src/server/NodeFactory.cpp index c0b4d1e9..f42d32c8 100644 --- a/src/server/NodeFactory.cpp +++ b/src/server/NodeFactory.cpp @@ -43,6 +43,7 @@ NodeFactory::NodeFactory(Ingen::Shared::World* world) , _lv2_info(new LV2Info(world)) , _has_loaded(false) { + load_internal_plugins(); } NodeFactory::~NodeFactory() diff --git a/src/server/events/CreatePort.cpp b/src/server/events/CreatePort.cpp index ca16ef8f..684e2fb0 100644 --- a/src/server/events/CreatePort.cpp +++ b/src/server/events/CreatePort.cpp @@ -49,6 +49,7 @@ CreatePort::CreatePort(Engine& engine, , _patch(NULL) , _patch_port(NULL) , _ports_array(NULL) + , _old_ports_array(NULL) , _engine_port(NULL) , _properties(properties) , _is_output(is_output) diff --git a/src/server/ingen_lv2.cpp b/src/server/ingen_lv2.cpp index c9c6907e..a4cd4247 100644 --- a/src/server/ingen_lv2.cpp +++ b/src/server/ingen_lv2.cpp @@ -101,9 +101,17 @@ public: AudioBuffer* patch_buf = (AudioBuffer*)_patch_port->buffer(0).get(); patch_buf->copy((Sample*)_buffer, 0, context.nframes() - 1); } else { - LV2_Atom_Sequence* seq = (LV2_Atom_Sequence*)_buffer; - bool enqueued = false; + LV2_Atom_Sequence* seq = (LV2_Atom_Sequence*)_buffer; + bool enqueued = false; + Buffer* patch_buf = _patch_port->buffer(0).get(); + patch_buf->prepare_write(context); LV2_ATOM_SEQUENCE_FOREACH(seq, ev) { + if (!patch_buf->append_event( + ev->time.frames, ev->body.size, ev->body.type, + (const uint8_t*)LV2_ATOM_BODY(&ev->body))) { + Raul::warn("Failed to write to MIDI buffer, events lost!\n"); + } + // TODO: Only enqueue appropriate atoms enqueue_message(context, _driver, &ev->body); enqueued = true; diff --git a/src/shared/AtomReader.cpp b/src/shared/AtomReader.cpp index c6ff7e18..cd871079 100644 --- a/src/shared/AtomReader.cpp +++ b/src/shared/AtomReader.cpp @@ -39,7 +39,13 @@ AtomReader::get_atom(const LV2_Atom* in, Raul::Atom& out) if (in) { if (in->type == _uris.atom_URID) { const LV2_Atom_URID* urid = (const LV2_Atom_URID*)in; - out = _forge.alloc_uri(_map.unmap_uri(urid->body)); + const char* uri = _map.unmap_uri(urid->body); + if (uri) { + out = _forge.alloc_uri(_map.unmap_uri(urid->body)); + } else { + Raul::error(Raul::fmt("Unable to unmap URID %1%\n") + % urid->body); + } } else { out = _forge.alloc(in->size, in->type, LV2_ATOM_BODY(in)); } |