[LV2] Thoughts on a clearer atom forge API

Kaspar Emanuel kaspar.emanuel at gmail.com
Sun Jan 12 18:49:10 PST 2014

On 12 January 2014 23:25, David Robillard <d at drobilla.net> wrote:
> []
>     a my:Message ;
>     rdfs:label "A wild message appears!" ;
>     my:intensity 9000 .
> this would get you something like:
> frame = forge.object(uris.my_Message);
> frame.key(uris.rdfs_label);
> frame.string("A wild message appears!");
> frame.key(uris.my_intensity)
> frame.value(9000)
> frame.end();

This looks quite nice (or am I just getting used to the terminology?).
Would you really need the end() ? Then end is implied when you send

I suppose you are proposing this as C++ only. What could be done to
make the C API more beginner friendly?

> That's my best proposal so far.  Do better.

Pie in the sky I can do! Viable is another thing. As I have a very
limited understanding of the LV2 internals, take this with a grain of

Following on from the Protobuf discussions we had in the other thread:
my ideal at the moment would be if I could define my message in ttl
with something like:

    a patch:Message ;
    rdf:property [
        a xsd:String;
        lv2:name "label"
        xsd:maxLength 256
    ] , [
        a xsd:Integer;
        lv2:name "intensity"
        lv2:maximum 9001
        lv2:minum 0
    ] ;

(not sure about a lot of the URIs here, rdfs has range properties as well)

Which then generates a header to include and use like so:

#include "MyMessage.h"
MyMessage* msg = MyMessage_get();
msg->label = "A wild message appears!";
msg->intensity = 9000;
lv2_port_write(0, msg);

and on the other end:

#include "MyMessage.h"
    MyMessage* msg = MyMessage_decode(ev)
    if ((msg->intensity) > 9000)
        exclaim("It's Over 9000!!!");

As I said before, I don't have a very good understanding of LV2
internals and host implementations so I can't say where the memory
allocation could happen exactly. The limits are well-defined at least.

Totally pie in the sky. Probably loads of work.

More information about the Devel mailing list