From ccb7d738d37fb21245a563cd41727f2609f0bc07 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 25 May 2015 09:12:44 +0000 Subject: Use ingen:/ as base URI on the wire. This allows referring to non-graph items, which are converted to bundle-relative URIs on save, resolving issue #1049. Change root graph URI to ingen:/graph. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5687 a436a847-0d15-0410-975c-d299462d15a1 --- ingen/Node.hpp | 12 ++++----- scripts/ingen.py | 18 ++++++------- src/Configuration.cpp | 1 + src/Serialiser.cpp | 20 ++++++++++++--- src/SocketReader.cpp | 5 ++-- src/SocketWriter.cpp | 4 +-- src/gui/ConnectWindow.cpp | 2 +- src/gui/GraphCanvas.cpp | 4 +-- src/gui/ingen_gui_lv2.cpp | 4 +-- src/ingen/ingen.cpp | 2 +- src/server/events/Copy.cpp | 2 +- tests/connect_disconnect_node_node.ttl | 14 +++++----- tests/connect_disconnect_node_patch.ttl | 44 ++++++++++++++++---------------- tests/connect_disconnect_patch_patch.ttl | 14 +++++----- tests/create_delete_node.ttl | 4 +-- tests/create_delete_patch.ttl | 4 +-- tests/create_delete_poly_patch.ttl | 4 +-- tests/create_delete_port.ttl | 16 ++++++------ tests/disconnect_all_node.ttl | 20 +++++++-------- tests/enable_graph.ttl | 4 +-- tests/get_node.ttl | 4 +-- tests/get_patch.ttl | 14 +++++----- tests/get_port.ttl | 4 +-- tests/move_node.ttl | 6 ++--- tests/move_port.ttl | 6 ++--- tests/move_root_port.ttl | 8 +++--- tests/poly.ttl | 6 ++--- tests/put_audio_in.ttl | 2 +- tests/set_graph_poly.ttl | 4 +-- tests/set_patch_port_value.ttl | 4 +-- 30 files changed, 134 insertions(+), 122 deletions(-) diff --git a/ingen/Node.hpp b/ingen/Node.hpp index 4964b99e..181a9c53 100644 --- a/ingen/Node.hpp +++ b/ingen/Node.hpp @@ -80,21 +80,21 @@ public: return Raul::URI(uri() + '/'); } - static Raul::URI root_uri() { return Raul::URI("ingen:/root"); } + static Raul::URI root_graph_uri() { return Raul::URI("ingen:/graph"); } static bool uri_is_path(const Raul::URI& uri) { - return uri == root_uri() || - uri.substr(0, root_uri().length() + 1) == root_uri() + "/"; + return uri == root_graph_uri() || + uri.substr(0, root_graph_uri().length() + 1) == root_graph_uri() + "/"; } static Raul::Path uri_to_path(const Raul::URI& uri) { - return (uri == root_uri()) + return (uri == root_graph_uri()) ? Raul::Path("/") - : Raul::Path(uri.substr(root_uri().length())); + : Raul::Path(uri.substr(root_graph_uri().length())); } static Raul::URI path_to_uri(const Raul::Path& path) { - return Raul::URI(root_uri() + path.c_str()); + return Raul::URI(root_graph_uri() + path.c_str()); } protected: diff --git a/scripts/ingen.py b/scripts/ingen.py index 12f52e92..de1c8ec2 100644 --- a/scripts/ingen.py +++ b/scripts/ingen.py @@ -220,14 +220,14 @@ class Remote(Interface): return self.send(''' [] a patch:Get ; - patch:subject . + patch:subject . ''' % path) def put(self, path, body): return self.send(''' [] a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ %s ] . @@ -237,7 +237,7 @@ class Remote(Interface): return self.send(''' [] a patch:Set ; - patch:subject ; + patch:subject ; patch:body [ %s ] . @@ -247,11 +247,11 @@ class Remote(Interface): return self.send(''' [] a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head ; + ingen:tail ; + ingen:head ; ] . ''' % (os.path.commonprefix([tail, head]), tail, head)) @@ -261,8 +261,8 @@ class Remote(Interface): a patch:Delete ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head ; + ingen:tail ; + ingen:head ; ] . ''' % (tail, head)) @@ -270,5 +270,5 @@ class Remote(Interface): return self.send(''' [] a patch:Delete ; - patch:subject . + patch:subject . ''' % path) diff --git a/src/Configuration.cpp b/src/Configuration.cpp index f2d47674..a2d70dc4 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -59,6 +59,7 @@ Configuration::Configuration(Forge& forge) add("jackServer", "jack-server", 's', "JACK server name", GLOBAL, forge.String, forge.alloc("")); add("uuid", "uuid", 'u', "JACK session UUID", SESSION, forge.String, Atom()); add("load", "load", 'l', "Load graph", SESSION, forge.String, Atom()); + add("execute", "execute", 'x', "File of commands to execute", SESSION, forge.String, Atom()); add("path", "path", 'L', "Target path for loaded graph", SESSION, forge.String, Atom()); add("queueSize", "queue-size", 'q', "Event queue size", GLOBAL, forge.Int, forge.make(4096)); add("humanNames", "human-names", 0, "Show human names in GUI", GUI, forge.Bool, forge.make(true)); diff --git a/src/Serialiser.cpp b/src/Serialiser.cpp index d5e54f3d..4ef8eaed 100644 --- a/src/Serialiser.cpp +++ b/src/Serialiser.cpp @@ -516,10 +516,22 @@ Serialiser::Impl::serialise_properties(Sord::Node id, for (const auto& p : props) { const Sord::URI key(_model->world(), p.first); if (!skip_property(_world.uris(), key)) { - sratom_write(_sratom, unmap, 0, - sord_node_to_serd_node(id.c_obj()), - sord_node_to_serd_node(key.c_obj()), - p.second.type(), p.second.size(), p.second.get_body()); + if (p.second.type() == _world.uris().atom_URI && + !strncmp((const char*)p.second.get_body(), "ingen:/", 7)) { + /* Value is an ingen:/ URI, relative to the running engine. + Chop the prefix and save the path relative to the bundle. + This allows saving references to bundle resources. */ + sratom_write(_sratom, unmap, 0, + sord_node_to_serd_node(id.c_obj()), + sord_node_to_serd_node(key.c_obj()), + p.second.type(), p.second.size(), + (const char*)p.second.get_body() + 7); + } else { + sratom_write(_sratom, unmap, 0, + sord_node_to_serd_node(id.c_obj()), + sord_node_to_serd_node(key.c_obj()), + p.second.type(), p.second.size(), p.second.get_body()); + } } } diff --git a/src/SocketReader.cpp b/src/SocketReader.cpp index 85f55f08..d57cda29 100644 --- a/src/SocketReader.cpp +++ b/src/SocketReader.cpp @@ -113,9 +113,8 @@ SocketReader::run() // Lock RDF world std::lock_guard lock(_world.rdf_mutex()); - // Use as base URI so e.g. will be a path - base_uri = sord_new_uri( - world->c_obj(), (const uint8_t*)"ingen:/root/"); + // Use as base URI, so relative URIs are like bundle paths + base_uri = sord_new_uri(world->c_obj(), (const uint8_t*)"ingen:/"); // Make a model and reader to parse the next Turtle message _env = world->prefixes().c_obj(); diff --git a/src/SocketWriter.cpp b/src/SocketWriter.cpp index 4d9e7405..23c28394 100644 --- a/src/SocketWriter.cpp +++ b/src/SocketWriter.cpp @@ -48,8 +48,8 @@ SocketWriter::SocketWriter(URIMap& map, , _uri(uri) , _socket(sock) { - // Use as base URI so e.g. will be a path - _base = serd_node_from_string(SERD_URI, (const uint8_t*)"ingen:/root/"); + // Use as base URI, so relative URIs are like bundle paths + _base = serd_node_from_string(SERD_URI, (const uint8_t*)"ingen:/"); serd_uri_parse(_base.buf, &_base_uri); diff --git a/src/gui/ConnectWindow.cpp b/src/gui/ConnectWindow.cpp index 6555ce35..cb3012c3 100644 --- a/src/gui/ConnectWindow.cpp +++ b/src/gui/ConnectWindow.cpp @@ -482,7 +482,7 @@ ConnectWindow::gtk_callback() } } } else if (_connect_stage == 3) { - _app->interface()->get(Raul::URI(Node::root_uri() + "/")); + _app->interface()->get(Raul::URI(Node::root_graph_uri() + "/")); next_stage(); } else if (_connect_stage == 4) { if (_app->store()->size() > 0) { diff --git a/src/gui/GraphCanvas.cpp b/src/gui/GraphCanvas.cpp index 0725aa67..9987e0b8 100644 --- a/src/gui/GraphCanvas.cpp +++ b/src/gui/GraphCanvas.cpp @@ -635,12 +635,12 @@ GraphCanvas::paste() // Make a client store to serve as clipboard ClientStore clipboard(_app.world()->uris(), _app.log()); clipboard.set_plugins(_app.store()->plugins()); - clipboard.put(Node::root_uri(), + clipboard.put(Node::root_graph_uri(), {{uris.rdf_type, Resource::Property(uris.ingen_Graph)}}); // Parse clipboard text into clipboard store boost::optional base_uri = parser->parse_string( - _app.world(), &clipboard, str, Node::root_uri()); + _app.world(), &clipboard, str, Node::root_graph_uri()); // Figure out the copy graph base path Raul::Path copy_root("/"); diff --git a/src/gui/ingen_gui_lv2.cpp b/src/gui/ingen_gui_lv2.cpp index 386f30c0..c81d48a0 100644 --- a/src/gui/ingen_gui_lv2.cpp +++ b/src/gui/ingen_gui_lv2.cpp @@ -148,7 +148,7 @@ instantiate(const LV2UI_Descriptor* descriptor, props.insert(std::make_pair(ui->app->uris().rdf_type, Ingen::Resource::Property( ui->app->uris().ingen_Graph))); - ui->app->store()->put(Ingen::Node::root_uri(), props); + ui->app->store()->put(Ingen::Node::root_graph_uri(), props); // Create a GraphBox for the root and set as the UI widget SPtr root = @@ -159,7 +159,7 @@ instantiate(const LV2UI_Descriptor* descriptor, *widget = ui->view->gobj(); // Request the actual root graph - ui->world->interface()->get(Ingen::Node::root_uri()); + ui->world->interface()->get(Ingen::Node::root_graph_uri()); return ui; } diff --git a/src/ingen/ingen.cpp b/src/ingen/ingen.cpp index 357f42b5..24cfb029 100644 --- a/src/ingen/ingen.cpp +++ b/src/ingen/ingen.cpp @@ -176,7 +176,7 @@ main(int argc, char** argv) const string graph = conf.option("load").ptr(); engine_interface->get(Raul::URI("ingen:/plugins")); - engine_interface->get(Node::root_uri()); + engine_interface->get(Node::root_graph_uri()); std::lock_guard lock(world->rdf_mutex()); world->parser()->parse_file( diff --git a/src/server/events/Copy.cpp b/src/server/events/Copy.cpp index 92d3b3ec..14009163 100644 --- a/src/server/events/Copy.cpp +++ b/src/server/events/Copy.cpp @@ -48,7 +48,7 @@ Copy::pre_process() { if (_old_path.empty() || !Node::uri_is_path(_new_uri) || - _new_uri == Node::root_uri()) { + _new_uri == Node::root_graph_uri()) { return Event::pre_process_done(Status::BAD_REQUEST); } diff --git a/tests/connect_disconnect_node_node.ttl b/tests/connect_disconnect_node_node.ttl index 9bf91ec8..d5a8084d 100644 --- a/tests/connect_disconnect_node_node.ttl +++ b/tests/connect_disconnect_node_node.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -12,7 +12,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -20,17 +20,17 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Delete ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . diff --git a/tests/connect_disconnect_node_patch.ttl b/tests/connect_disconnect_node_patch.ttl index 0c740fe8..c87dca2f 100644 --- a/tests/connect_disconnect_node_patch.ttl +++ b/tests/connect_disconnect_node_patch.ttl @@ -5,7 +5,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -13,7 +13,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -21,7 +21,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:OutputPort , lv2:AudioPort @@ -29,7 +29,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:AudioPort @@ -37,7 +37,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , atom:AtomPort ; @@ -46,7 +46,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:ControlPort @@ -54,52 +54,52 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Delete ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Delete ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . diff --git a/tests/connect_disconnect_patch_patch.ttl b/tests/connect_disconnect_patch_patch.ttl index 4b349fc1..7d46a5f2 100644 --- a/tests/connect_disconnect_patch_patch.ttl +++ b/tests/connect_disconnect_patch_patch.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:AudioPort @@ -12,7 +12,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:AudioPort @@ -20,17 +20,17 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Delete ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . diff --git a/tests/create_delete_node.ttl b/tests/create_delete_node.ttl index 1b6cac09..ec14ec13 100644 --- a/tests/create_delete_node.ttl +++ b/tests/create_delete_node.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -12,4 +12,4 @@ a patch:Delete ; - patch:subject . + patch:subject . diff --git a/tests/create_delete_patch.ttl b/tests/create_delete_patch.ttl index 474a15a2..5ee49d26 100644 --- a/tests/create_delete_patch.ttl +++ b/tests/create_delete_patch.ttl @@ -4,11 +4,11 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Graph ; ] . a patch:Delete ; - patch:subject . + patch:subject . diff --git a/tests/create_delete_poly_patch.ttl b/tests/create_delete_poly_patch.ttl index 5bc1108a..692facf6 100644 --- a/tests/create_delete_poly_patch.ttl +++ b/tests/create_delete_poly_patch.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Graph ; ingen:polyphony 8 ; @@ -12,4 +12,4 @@ a patch:Delete ; - patch:subject . + patch:subject . diff --git a/tests/create_delete_port.ttl b/tests/create_delete_port.ttl index c7aefecb..5025497f 100644 --- a/tests/create_delete_port.ttl +++ b/tests/create_delete_port.ttl @@ -5,7 +5,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:AudioPort @@ -13,7 +13,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:ControlPort @@ -21,7 +21,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:CVPort @@ -29,7 +29,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , atom:AtomPort ; @@ -38,16 +38,16 @@ a patch:Delete ; - patch:subject . + patch:subject . a patch:Delete ; - patch:subject . + patch:subject . a patch:Delete ; - patch:subject . + patch:subject . a patch:Delete ; - patch:subject . + patch:subject . diff --git a/tests/disconnect_all_node.ttl b/tests/disconnect_all_node.ttl index 852be608..ecf8ce66 100644 --- a/tests/disconnect_all_node.ttl +++ b/tests/disconnect_all_node.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -12,7 +12,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -20,26 +20,26 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Delete ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:incidentTo + ingen:incidentTo ] . diff --git a/tests/enable_graph.ttl b/tests/enable_graph.ttl index 7d34db68..b16a0332 100644 --- a/tests/enable_graph.ttl +++ b/tests/enable_graph.ttl @@ -4,14 +4,14 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ ingen:enabled true ] . a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ ingen:enabled false ] . diff --git a/tests/get_node.ttl b/tests/get_node.ttl index f024c7d4..23b35e9a 100644 --- a/tests/get_node.ttl +++ b/tests/get_node.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -12,4 +12,4 @@ a patch:Get ; - patch:subject . + patch:subject . diff --git a/tests/get_patch.ttl b/tests/get_patch.ttl index 26718173..56389803 100644 --- a/tests/get_patch.ttl +++ b/tests/get_patch.ttl @@ -4,14 +4,14 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Graph ] . a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -19,7 +19,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -27,13 +27,13 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Arc ; - ingen:tail ; - ingen:head + ingen:tail ; + ingen:head ] . a patch:Get ; - patch:subject . + patch:subject . diff --git a/tests/get_port.ttl b/tests/get_port.ttl index 079000f6..b2b0a319 100644 --- a/tests/get_port.ttl +++ b/tests/get_port.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:AudioPort @@ -12,4 +12,4 @@ a patch:Get ; - patch:subject . + patch:subject . diff --git a/tests/move_node.ttl b/tests/move_node.ttl index 23ee0ebd..337eac33 100644 --- a/tests/move_node.ttl +++ b/tests/move_node.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -12,5 +12,5 @@ a patch:Move ; - patch:subject ; - patch:destination . + patch:subject ; + patch:destination . diff --git a/tests/move_port.ttl b/tests/move_port.ttl index bf0636cb..cb458c77 100644 --- a/tests/move_port.ttl +++ b/tests/move_port.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:AudioPort @@ -12,5 +12,5 @@ a patch:Move ; - patch:subject ; - patch:destination . + patch:subject ; + patch:destination . diff --git a/tests/move_root_port.ttl b/tests/move_root_port.ttl index b9e6bd86..b9c1b6f9 100644 --- a/tests/move_root_port.ttl +++ b/tests/move_root_port.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:AudioPort @@ -12,9 +12,9 @@ a patch:Move ; - patch:subject ; - patch:destination . + patch:subject ; + patch:destination . a patch:Delete ; - patch:subject . + patch:subject . diff --git a/tests/poly.ttl b/tests/poly.ttl index e81eeda6..5a70f349 100644 --- a/tests/poly.ttl +++ b/tests/poly.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a ingen:Block ; lv2:prototype @@ -12,12 +12,12 @@ a patch:Set ; - patch:subject ; + patch:subject ; patch:property ingen:polyphony ; patch:value 4 . a patch:Set ; - patch:subject ; + patch:subject ; patch:property ingen:polyphonic ; patch:value true . \ No newline at end of file diff --git a/tests/put_audio_in.ttl b/tests/put_audio_in.ttl index fb0cd7d6..f021ee2b 100644 --- a/tests/put_audio_in.ttl +++ b/tests/put_audio_in.ttl @@ -3,7 +3,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:AudioPort diff --git a/tests/set_graph_poly.ttl b/tests/set_graph_poly.ttl index 27114d90..0e830c4a 100644 --- a/tests/set_graph_poly.ttl +++ b/tests/set_graph_poly.ttl @@ -4,14 +4,14 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ ingen:polyphony 4 ] . a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ ingen:polyphony 1 ] . diff --git a/tests/set_patch_port_value.ttl b/tests/set_patch_port_value.ttl index 507f72d4..a9621d83 100644 --- a/tests/set_patch_port_value.ttl +++ b/tests/set_patch_port_value.ttl @@ -4,7 +4,7 @@ a patch:Put ; - patch:subject ; + patch:subject ; patch:body [ a lv2:InputPort , lv2:ControlPort @@ -12,6 +12,6 @@ a patch:Set ; - patch:subject ; + patch:subject ; patch:property ingen:value ; patch:value 0.5 . \ No newline at end of file -- cgit v1.2.1