aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2019-03-30 22:52:14 +0100
committerDavid Robillard <d@drobilla.net>2019-03-31 16:13:25 +0200
commit4a49e65f82b8206c1a5f71484e66a191a62c63ad (patch)
tree521faf63e3ca3ff43a10bd8b0aabdc5c226a3dfb
parentc0a3fc67642385626e1b6093844272cee0a3ea77 (diff)
downloadlv2-4a49e65f82b8206c1a5f71484e66a191a62c63ad.tar.xz
EXPERIMENT: Add unified static ID headerstatic-urids
-rw-r--r--lv2/urid/check-static-ids.c135
-rw-r--r--lv2/urid/sid.h927
-rw-r--r--lv2/urid/urid.h17
-rw-r--r--plugins/eg-metro.lv2/metro.c52
-rw-r--r--wscript38
5 files changed, 1121 insertions, 48 deletions
diff --git a/lv2/urid/check-static-ids.c b/lv2/urid/check-static-ids.c
new file mode 100644
index 0000000..d87e12a
--- /dev/null
+++ b/lv2/urid/check-static-ids.c
@@ -0,0 +1,135 @@
+/*
+ Copyright 2012-2015 David Robillard <http://drobilla.net>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include "lv2/core/lv2.h"
+#include "lv2/urid/sid.h"
+
+#include <serd/serd.h>
+
+#include <assert.h>
+
+int n_errors = 0;
+
+static int
+on_node(const SerdEnv* env, const SerdNode* node)
+{
+ const SerdNode* base_uri = serd_env_get_base_uri(env);
+ const char* base_uri_str = serd_node_get_string(base_uri);
+ const size_t base_uri_len = serd_node_get_length(base_uri);
+
+ if (serd_node_get_type(node) == SERD_URI ||
+ serd_node_get_type(node) == SERD_CURIE) {
+
+ SerdNode* expanded = serd_env_expand(env, node);
+ if (!expanded) {
+ fprintf(stderr,
+ "error: Failed to expand <%s>\n",
+ serd_node_get_string(node));
+ return 1;
+ }
+
+ assert(serd_node_get_type(expanded) == SERD_URI);
+
+ const char* uri = serd_node_get_string(expanded);
+ if (!strcmp(uri, base_uri_str)) {
+ return 0; // Ignore ontology itself
+ } else if (strncmp(uri, base_uri_str, base_uri_len)) {
+ fprintf(stderr,
+ "warning: Subject <%s> not within prefix <%s>\n",
+ uri,
+ serd_node_get_string(base_uri));
+ return 0;
+ }
+
+ const LV2_URID id = lv2_urid_static_map(uri);
+ const char* out = lv2_urid_static_unmap(id);
+
+ if (!id) {
+ fprintf(stderr, "error: Failed to map <%s>\n", uri);
+ return 1; // SERD_ERR_INTERNAL;
+ }
+
+ assert(out);
+ if (strcmp(uri, out)) {
+ fprintf(stderr,
+ "error: <%s> (%d) unmapped to <%s>\n",
+ uri,
+ id,
+ out);
+ return 1; // SERD_ERR_INTERNAL;
+ }
+
+ printf("OK %s %s\n", uri, out);
+ serd_node_free(expanded);
+ }
+
+ return 0;
+}
+
+static SerdStatus
+on_statement(void* handle,
+ SerdStatementFlags flags,
+ const SerdStatement* statement)
+{
+ (void)flags;
+
+ const SerdEnv* env = (const SerdEnv*)handle;
+
+ n_errors += on_node(env, serd_statement_get_subject(statement));
+ /* on_node(env, serd_statement_get_predicate(statement)); */
+ /* on_node(env, serd_statement_get_object(statement)); */
+
+ return SERD_SUCCESS;
+}
+
+int
+main(int argc, char** argv)
+{
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s SCHEMA SCHEMA_URI\n", argv[0]);
+ return 1;
+ }
+
+ const char* const filename = argv[1];
+ const char* const schema_uri = argv[2];
+
+ SerdWorld* world = serd_world_new();
+ SerdNode* base_uri = serd_new_uri(schema_uri);
+ SerdEnv* env = serd_env_new(base_uri);
+ SerdSink* sink = serd_sink_new(env, env);
+ SerdReader* reader = serd_reader_new(world, SERD_TURTLE, sink, 1 << 20);
+
+ serd_env_set_base_uri(env, base_uri);
+ serd_sink_set_statement_func(sink, on_statement);
+
+ SerdStatus st = SERD_SUCCESS;
+ if ((st = serd_reader_start_file(reader, filename, true))) {
+ fprintf(stderr, "error: %s\n", serd_strerror(st));
+ return st;
+ } else if ((st = serd_reader_read_document(reader))) {
+ fprintf(stderr, "error: %s\n", serd_strerror(st));
+ return st;
+ }
+
+ serd_node_free(base_uri);
+ serd_reader_free(reader);
+ serd_sink_free(sink);
+ serd_env_free(env);
+ serd_node_free(base_uri);
+ serd_world_free(world);
+
+ return n_errors;
+}
diff --git a/lv2/urid/sid.h b/lv2/urid/sid.h
new file mode 100644
index 0000000..536b965
--- /dev/null
+++ b/lv2/urid/sid.h
@@ -0,0 +1,927 @@
+/*
+ Copyright 2019 David Robillard <http://drobilla.net>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+/**
+ @defgroup sid Static URIDs
+ @ingroup URID
+ @{
+*/
+
+#ifndef LV2_URID_SID_H
+#define LV2_URID_SID_H
+
+#include "lv2/urid/urid.h"
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static const char* const lv2_urid_static_uris[] = {
+ NULL,
+ "http://lv2plug.in/ns/ext/atom#Atom",
+ "http://lv2plug.in/ns/ext/atom#AtomPort",
+ "http://lv2plug.in/ns/ext/atom#Blank",
+ "http://lv2plug.in/ns/ext/atom#Bool",
+ "http://lv2plug.in/ns/ext/atom#Chunk",
+ "http://lv2plug.in/ns/ext/atom#Double",
+ "http://lv2plug.in/ns/ext/atom#Event",
+ "http://lv2plug.in/ns/ext/atom#Float",
+ "http://lv2plug.in/ns/ext/atom#Int",
+ "http://lv2plug.in/ns/ext/atom#Literal",
+ "http://lv2plug.in/ns/ext/atom#Long",
+ "http://lv2plug.in/ns/ext/atom#Number",
+ "http://lv2plug.in/ns/ext/atom#Object",
+ "http://lv2plug.in/ns/ext/atom#Path",
+ "http://lv2plug.in/ns/ext/atom#Property",
+ "http://lv2plug.in/ns/ext/atom#Resource",
+ "http://lv2plug.in/ns/ext/atom#Sequence",
+ "http://lv2plug.in/ns/ext/atom#Sound",
+ "http://lv2plug.in/ns/ext/atom#String",
+ "http://lv2plug.in/ns/ext/atom#Tuple",
+ "http://lv2plug.in/ns/ext/atom#URI",
+ "http://lv2plug.in/ns/ext/atom#URID",
+ "http://lv2plug.in/ns/ext/atom#Vector",
+ "http://lv2plug.in/ns/ext/atom#atomTransfer",
+ "http://lv2plug.in/ns/ext/atom#beatTime",
+ "http://lv2plug.in/ns/ext/atom#bufferType",
+ "http://lv2plug.in/ns/ext/atom#cType",
+ "http://lv2plug.in/ns/ext/atom#childType",
+ "http://lv2plug.in/ns/ext/atom#eventTransfer",
+ "http://lv2plug.in/ns/ext/atom#frameTime",
+ "http://lv2plug.in/ns/ext/atom#supports",
+ "http://lv2plug.in/ns/ext/atom#timeUnit",
+ "http://lv2plug.in/ns/ext/buf-size#boundedBlockLength",
+ "http://lv2plug.in/ns/ext/buf-size#coarseBlockLength",
+ "http://lv2plug.in/ns/ext/buf-size#fixedBlockLength",
+ "http://lv2plug.in/ns/ext/buf-size#maxBlockLength",
+ "http://lv2plug.in/ns/ext/buf-size#minBlockLength",
+ "http://lv2plug.in/ns/ext/buf-size#nominalBlockLength",
+ "http://lv2plug.in/ns/ext/buf-size#powerOf2BlockLength",
+ "http://lv2plug.in/ns/ext/buf-size#sequenceSize",
+ "http://lv2plug.in/ns/ext/dynmanifest#DynManifest",
+ "http://lv2plug.in/ns/ext/event#Event",
+ "http://lv2plug.in/ns/ext/event#EventPort",
+ "http://lv2plug.in/ns/ext/event#FrameStamp",
+ "http://lv2plug.in/ns/ext/event#TimeStamp",
+ "http://lv2plug.in/ns/ext/event#generatesTimeStamp",
+ "http://lv2plug.in/ns/ext/event#generic",
+ "http://lv2plug.in/ns/ext/event#inheritsEvent",
+ "http://lv2plug.in/ns/ext/event#inheritsTimeStamp",
+ "http://lv2plug.in/ns/ext/event#supportsEvent",
+ "http://lv2plug.in/ns/ext/event#supportsTimeStamp",
+ "http://lv2plug.in/ns/ext/log#Entry",
+ "http://lv2plug.in/ns/ext/log#Error",
+ "http://lv2plug.in/ns/ext/log#Note",
+ "http://lv2plug.in/ns/ext/log#Trace",
+ "http://lv2plug.in/ns/ext/log#Warning",
+ "http://lv2plug.in/ns/ext/log#log",
+ "http://lv2plug.in/ns/ext/midi#ActiveSense",
+ "http://lv2plug.in/ns/ext/midi#Aftertouch",
+ "http://lv2plug.in/ns/ext/midi#Bender",
+ "http://lv2plug.in/ns/ext/midi#ChannelPressure",
+ "http://lv2plug.in/ns/ext/midi#Chunk",
+ "http://lv2plug.in/ns/ext/midi#Clock",
+ "http://lv2plug.in/ns/ext/midi#Continue",
+ "http://lv2plug.in/ns/ext/midi#Controller",
+ "http://lv2plug.in/ns/ext/midi#HexByte",
+ "http://lv2plug.in/ns/ext/midi#MidiEvent",
+ "http://lv2plug.in/ns/ext/midi#NoteOff",
+ "http://lv2plug.in/ns/ext/midi#NoteOn",
+ "http://lv2plug.in/ns/ext/midi#ProgramChange",
+ "http://lv2plug.in/ns/ext/midi#QuarterFrame",
+ "http://lv2plug.in/ns/ext/midi#Reset",
+ "http://lv2plug.in/ns/ext/midi#SongPosition",
+ "http://lv2plug.in/ns/ext/midi#SongSelect",
+ "http://lv2plug.in/ns/ext/midi#Start",
+ "http://lv2plug.in/ns/ext/midi#Stop",
+ "http://lv2plug.in/ns/ext/midi#SystemCommon",
+ "http://lv2plug.in/ns/ext/midi#SystemExclusive",
+ "http://lv2plug.in/ns/ext/midi#SystemMessage",
+ "http://lv2plug.in/ns/ext/midi#SystemRealtime",
+ "http://lv2plug.in/ns/ext/midi#Tick",
+ "http://lv2plug.in/ns/ext/midi#TuneRequest",
+ "http://lv2plug.in/ns/ext/midi#VoiceMessage",
+ "http://lv2plug.in/ns/ext/midi#benderValue",
+ "http://lv2plug.in/ns/ext/midi#binding",
+ "http://lv2plug.in/ns/ext/midi#byteNumber",
+ "http://lv2plug.in/ns/ext/midi#channel",
+ "http://lv2plug.in/ns/ext/midi#chunk",
+ "http://lv2plug.in/ns/ext/midi#controllerNumber",
+ "http://lv2plug.in/ns/ext/midi#controllerValue",
+ "http://lv2plug.in/ns/ext/midi#noteNumber",
+ "http://lv2plug.in/ns/ext/midi#pressure",
+ "http://lv2plug.in/ns/ext/midi#programNumber",
+ "http://lv2plug.in/ns/ext/midi#property",
+ "http://lv2plug.in/ns/ext/midi#songNumber",
+ "http://lv2plug.in/ns/ext/midi#songPosition",
+ "http://lv2plug.in/ns/ext/midi#status",
+ "http://lv2plug.in/ns/ext/midi#statusMask",
+ "http://lv2plug.in/ns/ext/midi#velocity",
+ "http://lv2plug.in/ns/ext/morph#AutoMorphPort",
+ "http://lv2plug.in/ns/ext/morph#MorphPort",
+ "http://lv2plug.in/ns/ext/morph#currentType",
+ "http://lv2plug.in/ns/ext/morph#interface",
+ "http://lv2plug.in/ns/ext/morph#supportsType",
+ "http://lv2plug.in/ns/ext/options#Option",
+ "http://lv2plug.in/ns/ext/options#interface",
+ "http://lv2plug.in/ns/ext/options#options",
+ "http://lv2plug.in/ns/ext/options#requiredOption",
+ "http://lv2plug.in/ns/ext/options#supportedOption",
+ "http://lv2plug.in/ns/ext/parameters#CompressorControls",
+ "http://lv2plug.in/ns/ext/parameters#ControlGroup",
+ "http://lv2plug.in/ns/ext/parameters#EnvelopeControls",
+ "http://lv2plug.in/ns/ext/parameters#FilterControls",
+ "http://lv2plug.in/ns/ext/parameters#OscillatorControls",
+ "http://lv2plug.in/ns/ext/parameters#amplitude",
+ "http://lv2plug.in/ns/ext/parameters#attack",
+ "http://lv2plug.in/ns/ext/parameters#bypass",
+ "http://lv2plug.in/ns/ext/parameters#cutoffFrequency",
+ "http://lv2plug.in/ns/ext/parameters#decay",
+ "http://lv2plug.in/ns/ext/parameters#delay",
+ "http://lv2plug.in/ns/ext/parameters#dryLevel",
+ "http://lv2plug.in/ns/ext/parameters#frequency",
+ "http://lv2plug.in/ns/ext/parameters#gain",
+ "http://lv2plug.in/ns/ext/parameters#hold",
+ "http://lv2plug.in/ns/ext/parameters#pulseWidth",
+ "http://lv2plug.in/ns/ext/parameters#ratio",
+ "http://lv2plug.in/ns/ext/parameters#release",
+ "http://lv2plug.in/ns/ext/parameters#resonance",
+ "http://lv2plug.in/ns/ext/parameters#sampleRate",
+ "http://lv2plug.in/ns/ext/parameters#sustain",
+ "http://lv2plug.in/ns/ext/parameters#threshold",
+ "http://lv2plug.in/ns/ext/parameters#waveform",
+ "http://lv2plug.in/ns/ext/parameters#wetDryRatio",
+ "http://lv2plug.in/ns/ext/parameters#wetLevel",
+ "http://lv2plug.in/ns/ext/patch#Ack",
+ "http://lv2plug.in/ns/ext/patch#Copy",
+ "http://lv2plug.in/ns/ext/patch#Delete",
+ "http://lv2plug.in/ns/ext/patch#Error",
+ "http://lv2plug.in/ns/ext/patch#Get",
+ "http://lv2plug.in/ns/ext/patch#Insert",
+ "http://lv2plug.in/ns/ext/patch#Message",
+ "http://lv2plug.in/ns/ext/patch#Move",
+ "http://lv2plug.in/ns/ext/patch#Patch",
+ "http://lv2plug.in/ns/ext/patch#Post",
+ "http://lv2plug.in/ns/ext/patch#Put",
+ "http://lv2plug.in/ns/ext/patch#Request",
+ "http://lv2plug.in/ns/ext/patch#Response",
+ "http://lv2plug.in/ns/ext/patch#Set",
+ "http://lv2plug.in/ns/ext/patch#accept",
+ "http://lv2plug.in/ns/ext/patch#add",
+ "http://lv2plug.in/ns/ext/patch#body",
+ "http://lv2plug.in/ns/ext/patch#context",
+ "http://lv2plug.in/ns/ext/patch#destination",
+ "http://lv2plug.in/ns/ext/patch#property",
+ "http://lv2plug.in/ns/ext/patch#readable",
+ "http://lv2plug.in/ns/ext/patch#remove",
+ "http://lv2plug.in/ns/ext/patch#request",
+ "http://lv2plug.in/ns/ext/patch#sequenceNumber",
+ "http://lv2plug.in/ns/ext/patch#subject",
+ "http://lv2plug.in/ns/ext/patch#value",
+ "http://lv2plug.in/ns/ext/patch#wildcard",
+ "http://lv2plug.in/ns/ext/patch#writable",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH1P0Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH1P1Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH2P0Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH2P1Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH2P2Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH3P0Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH3P1Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH3P2Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicBH3P3Group",
+ "http://lv2plug.in/ns/ext/port-groups#AmbisonicGroup",
+ "http://lv2plug.in/ns/ext/port-groups#DiscreteGroup",
+ "http://lv2plug.in/ns/ext/port-groups#Element",
+ "http://lv2plug.in/ns/ext/port-groups#FivePointOneGroup",
+ "http://lv2plug.in/ns/ext/port-groups#FivePointZeroGroup",
+ "http://lv2plug.in/ns/ext/port-groups#FourPointZeroGroup",
+ "http://lv2plug.in/ns/ext/port-groups#Group",
+ "http://lv2plug.in/ns/ext/port-groups#InputGroup",
+ "http://lv2plug.in/ns/ext/port-groups#MidSideGroup",
+ "http://lv2plug.in/ns/ext/port-groups#MonoGroup",
+ "http://lv2plug.in/ns/ext/port-groups#OutputGroup",
+ "http://lv2plug.in/ns/ext/port-groups#SevenPointOneGroup",
+ "http://lv2plug.in/ns/ext/port-groups#SevenPointOneWideGroup",
+ "http://lv2plug.in/ns/ext/port-groups#SixPointOneGroup",
+ "http://lv2plug.in/ns/ext/port-groups#StereoGroup",
+ "http://lv2plug.in/ns/ext/port-groups#ThreePointZeroGroup",
+ "http://lv2plug.in/ns/ext/port-groups#center",
+ "http://lv2plug.in/ns/ext/port-groups#centerLeft",
+ "http://lv2plug.in/ns/ext/port-groups#centerRight",
+ "http://lv2plug.in/ns/ext/port-groups#element",
+ "http://lv2plug.in/ns/ext/port-groups#group",
+ "http://lv2plug.in/ns/ext/port-groups#left",
+ "http://lv2plug.in/ns/ext/port-groups#lowFrequencyEffects",
+ "http://lv2plug.in/ns/ext/port-groups#mainInput",
+ "http://lv2plug.in/ns/ext/port-groups#mainOutput",
+ "http://lv2plug.in/ns/ext/port-groups#rearCenter",
+ "http://lv2plug.in/ns/ext/port-groups#rearLeft",
+ "http://lv2plug.in/ns/ext/port-groups#rearRight",
+ "http://lv2plug.in/ns/ext/port-groups#right",
+ "http://lv2plug.in/ns/ext/port-groups#side",
+ "http://lv2plug.in/ns/ext/port-groups#sideChainOf",
+ "http://lv2plug.in/ns/ext/port-groups#sideLeft",
+ "http://lv2plug.in/ns/ext/port-groups#sideRight",
+ "http://lv2plug.in/ns/ext/port-groups#source",
+ "http://lv2plug.in/ns/ext/port-groups#subGroupOf",
+ "http://lv2plug.in/ns/ext/port-props#causesArtifacts",
+ "http://lv2plug.in/ns/ext/port-props#continuousCV",
+ "http://lv2plug.in/ns/ext/port-props#discreteCV",
+ "http://lv2plug.in/ns/ext/port-props#displayPriority",
+ "http://lv2plug.in/ns/ext/port-props#expensive",
+ "http://lv2plug.in/ns/ext/port-props#hasStrictBounds",
+ "http://lv2plug.in/ns/ext/port-props#logarithmic",
+ "http://lv2plug.in/ns/ext/port-props#notAutomatic",
+ "http://lv2plug.in/ns/ext/port-props#notOnGUI",
+ "http://lv2plug.in/ns/ext/port-props#rangeSteps",
+ "http://lv2plug.in/ns/ext/port-props#supportsStrictBounds",
+ "http://lv2plug.in/ns/ext/port-props#trigger",
+ "http://lv2plug.in/ns/ext/presets#Bank",
+ "http://lv2plug.in/ns/ext/presets#Preset",
+ "http://lv2plug.in/ns/ext/presets#bank",
+ "http://lv2plug.in/ns/ext/presets#preset",
+ "http://lv2plug.in/ns/ext/presets#value",
+ "http://lv2plug.in/ns/ext/resize-port#asLargeAs",
+ "http://lv2plug.in/ns/ext/resize-port#minimumSize",
+ "http://lv2plug.in/ns/ext/resize-port#resize",
+ "http://lv2plug.in/ns/ext/state#Changed",
+ "http://lv2plug.in/ns/ext/state#State",
+ "http://lv2plug.in/ns/ext/state#interface",
+ "http://lv2plug.in/ns/ext/state#loadDefaultState",
+ "http://lv2plug.in/ns/ext/state#makePath",
+ "http://lv2plug.in/ns/ext/state#mapPath",
+ "http://lv2plug.in/ns/ext/state#state",
+ "http://lv2plug.in/ns/ext/state#threadSafeRestore",
+ "http://lv2plug.in/ns/ext/time#Position",
+ "http://lv2plug.in/ns/ext/time#Rate",
+ "http://lv2plug.in/ns/ext/time#Time",
+ "http://lv2plug.in/ns/ext/time#bar",
+ "http://lv2plug.in/ns/ext/time#barBeat",
+ "http://lv2plug.in/ns/ext/time#beat",
+ "http://lv2plug.in/ns/ext/time#beatUnit",
+ "http://lv2plug.in/ns/ext/time#beatsPerBar",
+ "http://lv2plug.in/ns/ext/time#beatsPerMinute",
+ "http://lv2plug.in/ns/ext/time#frame",
+ "http://lv2plug.in/ns/ext/time#framesPerSecond",
+ "http://lv2plug.in/ns/ext/time#position",
+ "http://lv2plug.in/ns/ext/time#speed",
+ "http://lv2plug.in/ns/ext/urid#map",
+ "http://lv2plug.in/ns/ext/urid#unmap",
+ "http://lv2plug.in/ns/ext/worker#interface",
+ "http://lv2plug.in/ns/ext/worker#schedule",
+ "http://lv2plug.in/ns/extensions/ui#CocoaUI",
+ "http://lv2plug.in/ns/extensions/ui#Gtk3UI",
+ "http://lv2plug.in/ns/extensions/ui#GtkUI",
+ "http://lv2plug.in/ns/extensions/ui#PortNotification",
+ "http://lv2plug.in/ns/extensions/ui#PortProtocol",
+ "http://lv2plug.in/ns/extensions/ui#Qt4UI",
+ "http://lv2plug.in/ns/extensions/ui#Qt5UI",
+ "http://lv2plug.in/ns/extensions/ui#UI",
+ "http://lv2plug.in/ns/extensions/ui#WindowsUI",
+ "http://lv2plug.in/ns/extensions/ui#X11UI",
+ "http://lv2plug.in/ns/extensions/ui#binary",
+ "http://lv2plug.in/ns/extensions/ui#fixedSize",
+ "http://lv2plug.in/ns/extensions/ui#floatProtocol",
+ "http://lv2plug.in/ns/extensions/ui#idleInterface",
+ "http://lv2plug.in/ns/extensions/ui#makeSONameResident",
+ "http://lv2plug.in/ns/extensions/ui#noUserResize",
+ "http://lv2plug.in/ns/extensions/ui#notifyType",
+ "http://lv2plug.in/ns/extensions/ui#parent",
+ "http://lv2plug.in/ns/extensions/ui#peakProtocol",
+ "http://lv2plug.in/ns/extensions/ui#plugin",
+ "http://lv2plug.in/ns/extensions/ui#portIndex",
+ "http://lv2plug.in/ns/extensions/ui#portMap",
+ "http://lv2plug.in/ns/extensions/ui#portNotification",
+ "http://lv2plug.in/ns/extensions/ui#portSubscribe",
+ "http://lv2plug.in/ns/extensions/ui#protocol",
+ "http://lv2plug.in/ns/extensions/ui#resize",
+ "http://lv2plug.in/ns/extensions/ui#showInterface",
+ "http://lv2plug.in/ns/extensions/ui#touch",
+ "http://lv2plug.in/ns/extensions/ui#ui",
+ "http://lv2plug.in/ns/extensions/ui#updateRate",
+ "http://lv2plug.in/ns/extensions/ui#windowTitle",
+ "http://lv2plug.in/ns/extensions/units#Conversion",
+ "http://lv2plug.in/ns/extensions/units#Unit",
+ "http://lv2plug.in/ns/extensions/units#bar",
+ "http://lv2plug.in/ns/extensions/units#beat",
+ "http://lv2plug.in/ns/extensions/units#bpm",
+ "http://lv2plug.in/ns/extensions/units#cent",
+ "http://lv2plug.in/ns/extensions/units#cm",
+ "http://lv2plug.in/ns/extensions/units#coef",
+ "http://lv2plug.in/ns/extensions/units#conversion",
+ "http://lv2plug.in/ns/extensions/units#db",
+ "http://lv2plug.in/ns/extensions/units#degree",
+ "http://lv2plug.in/ns/extensions/units#factor",
+ "http://lv2plug.in/ns/extensions/units#frame",
+ "http://lv2plug.in/ns/extensions/units#hz",
+ "http://lv2plug.in/ns/extensions/units#inch",
+ "http://lv2plug.in/ns/extensions/units#khz",
+ "http://lv2plug.in/ns/extensions/units#km",
+ "http://lv2plug.in/ns/extensions/units#m",
+ "http://lv2plug.in/ns/extensions/units#mhz",
+ "http://lv2plug.in/ns/extensions/units#midiNote",
+ "http://lv2plug.in/ns/extensions/units#mile",
+ "http://lv2plug.in/ns/extensions/units#min",
+ "http://lv2plug.in/ns/extensions/units#mm",
+ "http://lv2plug.in/ns/extensions/units#ms",
+ "http://lv2plug.in/ns/extensions/units#name",
+ "http://lv2plug.in/ns/extensions/units#oct",
+ "http://lv2plug.in/ns/extensions/units#pc",
+ "http://lv2plug.in/ns/extensions/units#prefixConversion",
+ "http://lv2plug.in/ns/extensions/units#render",
+ "http://lv2plug.in/ns/extensions/units#s",
+ "http://lv2plug.in/ns/extensions/units#semitone12TET",
+ "http://lv2plug.in/ns/extensions/units#symbol",
+ "http://lv2plug.in/ns/extensions/units#to",
+ "http://lv2plug.in/ns/extensions/units#unit",
+ "http://lv2plug.in/ns/lv2core#AllpassPlugin",
+ "http://lv2plug.in/ns/lv2core#AmplifierPlugin",
+ "http://lv2plug.in/ns/lv2core#AnalyserPlugin",
+ "http://lv2plug.in/ns/lv2core#AudioPort",
+ "http://lv2plug.in/ns/lv2core#BandpassPlugin",
+ "http://lv2plug.in/ns/lv2core#CVPort",
+ "http://lv2plug.in/ns/lv2core#Channel",
+ "http://lv2plug.in/ns/lv2core#ChorusPlugin",
+ "http://lv2plug.in/ns/lv2core#CombPlugin",
+ "http://lv2plug.in/ns/lv2core#CompressorPlugin",
+ "http://lv2plug.in/ns/lv2core#ConstantPlugin",
+ "http://lv2plug.in/ns/lv2core#ControlPort",
+ "http://lv2plug.in/ns/lv2core#ConverterPlugin",
+ "http://lv2plug.in/ns/lv2core#DelayPlugin",
+ "http://lv2plug.in/ns/lv2core#Designation",
+ "http://lv2plug.in/ns/lv2core#DistortionPlugin",
+ "http://lv2plug.in/ns/lv2core#DynamicsPlugin",
+ "http://lv2plug.in/ns/lv2core#EQPlugin",
+ "http://lv2plug.in/ns/lv2core#EnvelopePlugin",
+ "http://lv2plug.in/ns/lv2core#ExpanderPlugin",
+ "http://lv2plug.in/ns/lv2core#ExtensionData",
+ "http://lv2plug.in/ns/lv2core#Feature",
+ "http://lv2plug.in/ns/lv2core#FilterPlugin",
+ "http://lv2plug.in/ns/lv2core#FlangerPlugin",
+ "http://lv2plug.in/ns/lv2core#FunctionPlugin",
+ "http://lv2plug.in/ns/lv2core#GatePlugin",
+ "http://lv2plug.in/ns/lv2core#GeneratorPlugin",
+ "http://lv2plug.in/ns/lv2core#HighpassPlugin",
+ "http://lv2plug.in/ns/lv2core#InputPort",
+ "http://lv2plug.in/ns/lv2core#InstrumentPlugin",
+ "http://lv2plug.in/ns/lv2core#LimiterPlugin",
+ "http://lv2plug.in/ns/lv2core#LowpassPlugin",
+ "http://lv2plug.in/ns/lv2core#MIDIPlugin",
+ "http://lv2plug.in/ns/lv2core#MixerPlugin",
+ "http://lv2plug.in/ns/lv2core#ModulatorPlugin",
+ "http://lv2plug.in/ns/lv2core#MultiEQPlugin",
+ "http://lv2plug.in/ns/lv2core#OscillatorPlugin",
+ "http://lv2plug.in/ns/lv2core#OutputPort",
+ "http://lv2plug.in/ns/lv2core#ParaEQPlugin",
+ "http://lv2plug.in/ns/lv2core#Parameter",
+ "http://lv2plug.in/ns/lv2core#PhaserPlugin",
+ "http://lv2plug.in/ns/lv2core#PitchPlugin",
+ "http://lv2plug.in/ns/lv2core#Plugin",
+ "http://lv2plug.in/ns/lv2core#PluginBase",
+ "http://lv2plug.in/ns/lv2core#Point",
+ "http://lv2plug.in/ns/lv2core#Port",
+ "http://lv2plug.in/ns/lv2core#PortBase",
+ "http://lv2plug.in/ns/lv2core#PortProperty",
+ "http://lv2plug.in/ns/lv2core#Resource",
+ "http://lv2plug.in/ns/lv2core#ReverbPlugin",
+ "http://lv2plug.in/ns/lv2core#ScalePoint",
+ "http://lv2plug.in/ns/lv2core#ShortName",
+ "http://lv2plug.in/ns/lv2core#SimulatorPlugin",
+ "http://lv2plug.in/ns/lv2core#SpatialPlugin",
+ "http://lv2plug.in/ns/lv2core#Specification",
+ "http://lv2plug.in/ns/lv2core#SpectralPlugin",
+ "http://lv2plug.in/ns/lv2core#Symbol",
+ "http://lv2plug.in/ns/lv2core#UtilityPlugin",
+ "http://lv2plug.in/ns/lv2core#WaveshaperPlugin",
+ "http://lv2plug.in/ns/lv2core#appliesTo",
+ "http://lv2plug.in/ns/lv2core#binary",
+ "http://lv2plug.in/ns/lv2core#connectionOptional",
+ "http://lv2plug.in/ns/lv2core#control",
+ "http://lv2plug.in/ns/lv2core#default",
+ "http://lv2plug.in/ns/lv2core#designation",
+ "http://lv2plug.in/ns/lv2core#documentation",
+ "http://lv2plug.in/ns/lv2core#enabled",
+ "http://lv2plug.in/ns/lv2core#enumeration",
+ "http://lv2plug.in/ns/lv2core#extensionData",
+ "http://lv2plug.in/ns/lv2core#freeWheeling",
+ "http://lv2plug.in/ns/lv2core#hardRTCapable",
+ "http://lv2plug.in/ns/lv2core#inPlaceBroken",
+ "http://lv2plug.in/ns/lv2core#index",
+ "http://lv2plug.in/ns/lv2core#integer",
+ "http://lv2plug.in/ns/lv2core#isLive",
+ "http://lv2plug.in/ns/lv2core#isSideChain",
+ "http://lv2plug.in/ns/lv2core#latency",
+ "http://lv2plug.in/ns/lv2core#maximum",
+ "http://lv2plug.in/ns/lv2core#microVersion",
+ "http://lv2plug.in/ns/lv2core#minimum",
+ "http://lv2plug.in/ns/lv2core#minorVersion",
+ "http://lv2plug.in/ns/lv2core#name",
+ "http://lv2plug.in/ns/lv2core#optionalFeature",
+ "http://lv2plug.in/ns/lv2core#port",
+ "http://lv2plug.in/ns/lv2core#portProperty",
+ "http://lv2plug.in/ns/lv2core#project",
+ "http://lv2plug.in/ns/lv2core#prototype",
+ "http://lv2plug.in/ns/lv2core#reportsLatency",
+ "http://lv2plug.in/ns/lv2core#requiredFeature",
+ "http://lv2plug.in/ns/lv2core#sampleRate",
+ "http://lv2plug.in/ns/lv2core#scalePoint",
+ "http://lv2plug.in/ns/lv2core#shortName",
+ "http://lv2plug.in/ns/lv2core#symbol",
+ "http://lv2plug.in/ns/lv2core#toggled",
+ NULL
+};
+
+enum LV2_URID_ID {
+ LV2_URID_ATOM_Atom = 1,
+ LV2_URID_ATOM_AtomPort,
+ LV2_URID_ATOM_Blank,
+ LV2_URID_ATOM_Bool,
+ LV2_URID_ATOM_Chunk,
+ LV2_URID_ATOM_Double,
+ LV2_URID_ATOM_Event,
+ LV2_URID_ATOM_Float,
+ LV2_URID_ATOM_Int,
+ LV2_URID_ATOM_Literal,
+ LV2_URID_ATOM_Long,
+ LV2_URID_ATOM_Number,
+ LV2_URID_ATOM_Object,
+ LV2_URID_ATOM_Path,
+ LV2_URID_ATOM_Property,
+ LV2_URID_ATOM_Resource,
+ LV2_URID_ATOM_Sequence,
+ LV2_URID_ATOM_Sound,
+ LV2_URID_ATOM_String,
+ LV2_URID_ATOM_Tuple,
+ LV2_URID_ATOM_URI,
+ LV2_URID_ATOM_URID,
+ LV2_URID_ATOM_Vector,
+ LV2_URID_ATOM_atomTransfer,
+ LV2_URID_ATOM_beatTime,
+ LV2_URID_ATOM_bufferType,
+ LV2_URID_ATOM_cType,
+ LV2_URID_ATOM_childType,
+ LV2_URID_ATOM_eventTransfer,
+ LV2_URID_ATOM_frameTime,
+ LV2_URID_ATOM_supports,
+ LV2_URID_ATOM_timeUnit,
+
+ LV2_URID_BUFSZ_boundedBlockLength,
+ LV2_URID_BUFSZ_coarseBlockLength,
+ LV2_URID_BUFSZ_fixedBlockLength,
+ LV2_URID_BUFSZ_maxBlockLength,
+ LV2_URID_BUFSZ_minBlockLength,
+ LV2_URID_BUFSZ_nominalBlockLength,
+ LV2_URID_BUFSZ_powerOf2BlockLength,
+ LV2_URID_BUFSZ_sequenceSize,
+
+ LV2_URID_DMAN_DynManifest,
+
+ LV2_URID_EVENT_Event,
+ LV2_URID_EVENT_EventPort,
+ LV2_URID_EVENT_FrameStamp,
+ LV2_URID_EVENT_TimeStamp,
+ LV2_URID_EVENT_generatesTimeStamp,
+ LV2_URID_EVENT_generic,
+ LV2_URID_EVENT_inheritsEvent,
+ LV2_URID_EVENT_inheritsTimeStamp,
+ LV2_URID_EVENT_supportsEvent,
+ LV2_URID_EVENT_supportsTimeStamp,
+
+ LV2_URID_LOG_Entry,
+ LV2_URID_LOG_Error,
+ LV2_URID_LOG_Note,
+ LV2_URID_LOG_Trace,
+ LV2_URID_LOG_Warning,
+ LV2_URID_LOG_log,
+
+ LV2_URID_MIDI_ActiveSense,
+ LV2_URID_MIDI_Aftertouch,
+ LV2_URID_MIDI_Bender,
+ LV2_URID_MIDI_ChannelPressure,
+ LV2_URID_MIDI_Chunk,
+ LV2_URID_MIDI_Clock,
+ LV2_URID_MIDI_Continue,
+ LV2_URID_MIDI_Controller,
+ LV2_URID_MIDI_HexByte,
+ LV2_URID_MIDI_MidiEvent,
+ LV2_URID_MIDI_NoteOff,
+ LV2_URID_MIDI_NoteOn,
+ LV2_URID_MIDI_ProgramChange,
+ LV2_URID_MIDI_QuarterFrame,
+ LV2_URID_MIDI_Reset,
+ LV2_URID_MIDI_SongPosition,
+ LV2_URID_MIDI_SongSelect,
+ LV2_URID_MIDI_Start,
+ LV2_URID_MIDI_Stop,
+ LV2_URID_MIDI_SystemCommon,
+ LV2_URID_MIDI_SystemExclusive,
+ LV2_URID_MIDI_SystemMessage,
+ LV2_URID_MIDI_SystemRealtime,
+ LV2_URID_MIDI_Tick,
+ LV2_URID_MIDI_TuneRequest,
+ LV2_URID_MIDI_VoiceMessage,
+ LV2_URID_MIDI_benderValue,
+ LV2_URID_MIDI_binding,
+ LV2_URID_MIDI_byteNumber,
+ LV2_URID_MIDI_channel,
+ LV2_URID_MIDI_chunk,
+ LV2_URID_MIDI_controllerNumber,
+ LV2_URID_MIDI_controllerValue,
+ LV2_URID_MIDI_noteNumber,
+ LV2_URID_MIDI_pressure,
+ LV2_URID_MIDI_programNumber,
+ LV2_URID_MIDI_property,
+ LV2_URID_MIDI_songNumber,
+ LV2_URID_MIDI_songPosition,
+ LV2_URID_MIDI_status,
+ LV2_URID_MIDI_statusMask,
+ LV2_URID_MIDI_velocity,
+
+ LV2_URID_MORPH_AutoMorphPort,
+ LV2_URID_MORPH_MorphPort,
+ LV2_URID_MORPH_currentType,
+ LV2_URID_MORPH_interface,
+ LV2_URID_MORPH_supportsType,
+
+ LV2_URID_OPTIONS_Option,
+ LV2_URID_OPTIONS_interface,
+ LV2_URID_OPTIONS_options,
+ LV2_URID_OPTIONS_requiredOption,
+ LV2_URID_OPTIONS_supportedOption,
+
+ LV2_URID_PARAMETERS_CompressorControls,
+ LV2_URID_PARAMETERS_ControlGroup,
+ LV2_URID_PARAMETERS_EnvelopeControls,
+ LV2_URID_PARAMETERS_FilterControls,
+ LV2_URID_PARAMETERS_OscillatorControls,
+ LV2_URID_PARAMETERS_amplitude,
+ LV2_URID_PARAMETERS_attack,
+ LV2_URID_PARAMETERS_bypass,
+ LV2_URID_PARAMETERS_cutoffFrequency,
+ LV2_URID_PARAMETERS_decay,
+ LV2_URID_PARAMETERS_delay,
+ LV2_URID_PARAMETERS_dryLevel,
+ LV2_URID_PARAMETERS_frequency,
+ LV2_URID_PARAMETERS_gain,
+ LV2_URID_PARAMETERS_hold,
+ LV2_URID_PARAMETERS_pulseWidth,
+ LV2_URID_PARAMETERS_ratio,
+ LV2_URID_PARAMETERS_release,
+ LV2_URID_PARAMETERS_resonance,
+ LV2_URID_PARAMETERS_sampleRate,
+ LV2_URID_PARAMETERS_sustain,
+ LV2_URID_PARAMETERS_threshold,
+ LV2_URID_PARAMETERS_waveform,
+ LV2_URID_PARAMETERS_wetDryRatio,
+ LV2_URID_PARAMETERS_wetLevel,
+
+ LV2_URID_PATCH_Ack,
+ LV2_URID_PATCH_Copy,
+ LV2_URID_PATCH_Delete,
+ LV2_URID_PATCH_Error,
+ LV2_URID_PATCH_Get,
+ LV2_URID_PATCH_Insert,
+ LV2_URID_PATCH_Message,
+ LV2_URID_PATCH_Move,
+ LV2_URID_PATCH_Patch,
+ LV2_URID_PATCH_Post,
+ LV2_URID_PATCH_Put,
+ LV2_URID_PATCH_Request,
+ LV2_URID_PATCH_Response,
+ LV2_URID_PATCH_Set,
+ LV2_URID_PATCH_accept,
+ LV2_URID_PATCH_add,
+ LV2_URID_PATCH_body,
+ LV2_URID_PATCH_context,
+ LV2_URID_PATCH_destination,
+ LV2_URID_PATCH_property,
+ LV2_URID_PATCH_readable,
+ LV2_URID_PATCH_remove,
+ LV2_URID_PATCH_request,
+ LV2_URID_PATCH_sequenceNumber,
+ LV2_URID_PATCH_subject,
+ LV2_URID_PATCH_value,
+ LV2_URID_PATCH_wildcard,
+ LV2_URID_PATCH_writable,
+
+ LV2_URID_PORT_GROUPS_AmbisonicBH1P0Group,
+ LV2_URID_PORT_GROUPS_AmbisonicBH1P1Group,
+ LV2_URID_PORT_GROUPS_AmbisonicBH2P0Group,
+ LV2_URID_PORT_GROUPS_AmbisonicBH2P1Group,
+ LV2_URID_PORT_GROUPS_AmbisonicBH2P2Group,
+ LV2_URID_PORT_GROUPS_AmbisonicBH3P0Group,
+ LV2_URID_PORT_GROUPS_AmbisonicBH3P1Group,
+ LV2_URID_PORT_GROUPS_AmbisonicBH3P2Group,
+ LV2_URID_PORT_GROUPS_AmbisonicBH3P3Group,
+ LV2_URID_PORT_GROUPS_DiscreteGroup,
+ LV2_URID_PORT_GROUPS_Element,
+ LV2_URID_PORT_GROUPS_FivePointOneGroup,
+ LV2_URID_PORT_GROUPS_FivePointZeroGroup,
+ LV2_URID_PORT_GROUPS_FourPointZeroGroup,
+ LV2_URID_PORT_GROUPS_Group,
+ LV2_URID_PORT_GROUPS_InputGroup,
+ LV2_URID_PORT_GROUPS_MidSideGroup,
+ LV2_URID_PORT_GROUPS_MonoGroup,
+ LV2_URID_PORT_GROUPS_OutputGroup,
+ LV2_URID_PORT_GROUPS_SevenPointOneGroup,
+ LV2_URID_PORT_GROUPS_SevenPointOneWideGroup,
+ LV2_URID_PORT_GROUPS_SixPointOneGroup,
+ LV2_URID_PORT_GROUPS_StereoGroup,
+ LV2_URID_PORT_GROUPS_ThreePointZeroGroup,
+ LV2_URID_PORT_GROUPS_center,
+ LV2_URID_PORT_GROUPS_centerLeft,
+ LV2_URID_PORT_GROUPS_centerRight,
+ LV2_URID_PORT_GROUPS_element,
+ LV2_URID_PORT_GROUPS_group,
+ LV2_URID_PORT_GROUPS_left,
+ LV2_URID_PORT_GROUPS_lowFrequencyEffects,
+ LV2_URID_PORT_GROUPS_mainInput,
+ LV2_URID_PORT_GROUPS_mainOutput,
+ LV2_URID_PORT_GROUPS_rearCenter,
+ LV2_URID_PORT_GROUPS_rearLeft,
+ LV2_URID_PORT_GROUPS_rearRight,
+ LV2_URID_PORT_GROUPS_right,
+ LV2_URID_PORT_GROUPS_side,
+ LV2_URID_PORT_GROUPS_sideChainOf,
+ LV2_URID_PORT_GROUPS_sideLeft,
+ LV2_URID_PORT_GROUPS_sideRight,
+ LV2_URID_PORT_GROUPS_source,
+ LV2_URID_PORT_GROUPS_subGroupOf,
+
+ LV2_URID_PORT_PROPS_causesArtifacts,
+ LV2_URID_PORT_PROPS_continuousCV,
+ LV2_URID_PORT_PROPS_discreteCV,
+ LV2_URID_PORT_PROPS_displayPriority,
+ LV2_URID_PORT_PROPS_expensive,
+ LV2_URID_PORT_PROPS_hasStrictBounds,
+ LV2_URID_PORT_PROPS_logarithmic,
+ LV2_URID_PORT_PROPS_notAutomatic,
+ LV2_URID_PORT_PROPS_notOnGUI,
+ LV2_URID_PORT_PROPS_rangeSteps,
+ LV2_URID_PORT_PROPS_supportsStrictBounds,
+ LV2_URID_PORT_PROPS_trigger,
+
+ LV2_URID_PRESETS_Bank,
+ LV2_URID_PRESETS_Preset,
+ LV2_URID_PRESETS_bank,
+ LV2_URID_PRESETS_preset,
+ LV2_URID_PRESETS_value,
+
+ LV2_URID_RSZ_asLargeAs,
+ LV2_URID_RSZ_minimumSize,
+ LV2_URID_RSZ_resize,
+
+ LV2_URID_STATE_Changed,
+ LV2_URID_STATE_State,
+ LV2_URID_STATE_interface,
+ LV2_URID_STATE_loadDefaultState,
+ LV2_URID_STATE_makePath,
+ LV2_URID_STATE_mapPath,
+ LV2_URID_STATE_state,
+ LV2_URID_STATE_threadSafeRestore,
+
+ LV2_URID_TIME_Position,
+ LV2_URID_TIME_Rate,
+ LV2_URID_TIME_Time,
+ LV2_URID_TIME_bar,
+ LV2_URID_TIME_barBeat,
+ LV2_URID_TIME_beat,
+ LV2_URID_TIME_beatUnit,
+ LV2_URID_TIME_beatsPerBar,
+ LV2_URID_TIME_beatsPerMinute,
+ LV2_URID_TIME_frame,
+ LV2_URID_TIME_framesPerSecond,
+ LV2_URID_TIME_position,
+ LV2_URID_TIME_speed,
+
+ LV2_URID_URID_map,
+ LV2_URID_URID_unmap,
+
+ LV2_URID_WORKER_interface,
+ LV2_URID_WORKER_schedule,
+
+ LV2_URID_UI_CocoaUI,
+ LV2_URID_UI_Gtk3UI,
+ LV2_URID_UI_GtkUI,
+ LV2_URID_UI_PortNotification,
+ LV2_URID_UI_PortProtocol,
+ LV2_URID_UI_Qt4UI,
+ LV2_URID_UI_Qt5UI,
+ LV2_URID_UI_UI,
+ LV2_URID_UI_WindowsUI,
+ LV2_URID_UI_X11UI,
+ LV2_URID_UI_binary,
+ LV2_URID_UI_fixedSize,
+ LV2_URID_UI_floatProtocol,
+ LV2_URID_UI_idleInterface,
+ LV2_URID_UI_makeSONameResident,
+ LV2_URID_UI_noUserResize,
+ LV2_URID_UI_notifyType,
+ LV2_URID_UI_parent,
+ LV2_URID_UI_peakProtocol,
+ LV2_URID_UI_plugin,
+ LV2_URID_UI_portIndex,
+ LV2_URID_UI_portMap,
+ LV2_URID_UI_portNotification,
+ LV2_URID_UI_portSubscribe,
+ LV2_URID_UI_protocol,
+ LV2_URID_UI_resize,
+ LV2_URID_UI_showInterface,
+ LV2_URID_UI_touch,
+ LV2_URID_UI_ui,
+ LV2_URID_UI_updateRate,
+ LV2_URID_UI_windowTitle,
+
+ LV2_URID_UNITS_Conversion,
+ LV2_URID_UNITS_Unit,
+ LV2_URID_UNITS_bar,
+ LV2_URID_UNITS_beat,
+ LV2_URID_UNITS_bpm,
+ LV2_URID_UNITS_cent,
+ LV2_URID_UNITS_cm,
+ LV2_URID_UNITS_coef,
+ LV2_URID_UNITS_conversion,
+ LV2_URID_UNITS_db,
+ LV2_URID_UNITS_degree,
+ LV2_URID_UNITS_factor,
+ LV2_URID_UNITS_frame,
+ LV2_URID_UNITS_hz,
+ LV2_URID_UNITS_inch,
+ LV2_URID_UNITS_khz,
+ LV2_URID_UNITS_km,
+ LV2_URID_UNITS_m,
+ LV2_URID_UNITS_mhz,
+ LV2_URID_UNITS_midiNote,
+ LV2_URID_UNITS_mile,
+ LV2_URID_UNITS_min,
+ LV2_URID_UNITS_mm,
+ LV2_URID_UNITS_ms,
+ LV2_URID_UNITS_name,
+ LV2_URID_UNITS_oct,
+ LV2_URID_UNITS_pc,
+ LV2_URID_UNITS_prefixConversion,
+ LV2_URID_UNITS_render,
+ LV2_URID_UNITS_s,
+ LV2_URID_UNITS_semitone12TET,
+ LV2_URID_UNITS_symbol,
+ LV2_URID_UNITS_to,
+ LV2_URID_UNITS_unit,
+
+ LV2_URID_LV2_AllpassPlugin,
+ LV2_URID_LV2_AmplifierPlugin,
+ LV2_URID_LV2_AnalyserPlugin,
+ LV2_URID_LV2_AudioPort,
+ LV2_URID_LV2_BandpassPlugin,
+ LV2_URID_LV2_CVPort,
+ LV2_URID_LV2_Channel,
+ LV2_URID_LV2_ChorusPlugin,
+ LV2_URID_LV2_CombPlugin,
+ LV2_URID_LV2_CompressorPlugin,
+ LV2_URID_LV2_ConstantPlugin,
+ LV2_URID_LV2_ControlPort,
+ LV2_URID_LV2_ConverterPlugin,
+ LV2_URID_LV2_DelayPlugin,
+ LV2_URID_LV2_Designation,
+ LV2_URID_LV2_DistortionPlugin,
+ LV2_URID_LV2_DynamicsPlugin,
+ LV2_URID_LV2_EQPlugin,
+ LV2_URID_LV2_EnvelopePlugin,
+ LV2_URID_LV2_ExpanderPlugin,
+ LV2_URID_LV2_ExtensionData,
+ LV2_URID_LV2_Feature,
+ LV2_URID_LV2_FilterPlugin,
+ LV2_URID_LV2_FlangerPlugin,
+ LV2_URID_LV2_FunctionPlugin,
+ LV2_URID_LV2_GatePlugin,
+ LV2_URID_LV2_GeneratorPlugin,
+ LV2_URID_LV2_HighpassPlugin,
+ LV2_URID_LV2_InputPort,
+ LV2_URID_LV2_InstrumentPlugin,
+ LV2_URID_LV2_LimiterPlugin,
+ LV2_URID_LV2_LowpassPlugin,
+ LV2_URID_LV2_MIDIPlugin,
+ LV2_URID_LV2_MixerPlugin,
+ LV2_URID_LV2_ModulatorPlugin,
+ LV2_URID_LV2_MultiEQPlugin,
+ LV2_URID_LV2_OscillatorPlugin,
+ LV2_URID_LV2_OutputPort,
+ LV2_URID_LV2_ParaEQPlugin,
+ LV2_URID_LV2_Parameter,
+ LV2_URID_LV2_PhaserPlugin,
+ LV2_URID_LV2_PitchPlugin,
+ LV2_URID_LV2_Plugin,
+ LV2_URID_LV2_PluginBase,
+ LV2_URID_LV2_Point,
+ LV2_URID_LV2_Port,
+ LV2_URID_LV2_PortBase,
+ LV2_URID_LV2_PortProperty,
+ LV2_URID_LV2_Resource,
+ LV2_URID_LV2_ReverbPlugin,
+ LV2_URID_LV2_ScalePoint,
+ LV2_URID_LV2_ShortName,
+ LV2_URID_LV2_SimulatorPlugin,
+ LV2_URID_LV2_SpatialPlugin,
+ LV2_URID_LV2_Specification,
+ LV2_URID_LV2_SpectralPlugin,
+ LV2_URID_LV2_Symbol,
+ LV2_URID_LV2_UtilityPlugin,
+ LV2_URID_LV2_WaveshaperPlugin,
+ LV2_URID_LV2_appliesTo,
+ LV2_URID_LV2_binary,
+ LV2_URID_LV2_connectionOptional,
+ LV2_URID_LV2_control,
+ LV2_URID_LV2_default,
+ LV2_URID_LV2_designation,
+ LV2_URID_LV2_documentation,
+ LV2_URID_LV2_enabled,
+ LV2_URID_LV2_enumeration,
+ LV2_URID_LV2_extensionData,
+ LV2_URID_LV2_freeWheeling,
+ LV2_URID_LV2_hardRTCapable,
+ LV2_URID_LV2_inPlaceBroken,
+ LV2_URID_LV2_index,
+ LV2_URID_LV2_integer,
+ LV2_URID_LV2_isLive,
+ LV2_URID_LV2_isSideChain,
+ LV2_URID_LV2_latency,
+ LV2_URID_LV2_maximum,
+ LV2_URID_LV2_microVersion,
+ LV2_URID_LV2_minimum,
+ LV2_URID_LV2_minorVersion,
+ LV2_URID_LV2_name,
+ LV2_URID_LV2_optionalFeature,
+ LV2_URID_LV2_port,
+ LV2_URID_LV2_portProperty,
+ LV2_URID_LV2_project,
+ LV2_URID_LV2_prototype,
+ LV2_URID_LV2_reportsLatency,
+ LV2_URID_LV2_requiredFeature,
+ LV2_URID_LV2_sampleRate,
+ LV2_URID_LV2_scalePoint,
+ LV2_URID_LV2_shortName,
+ LV2_URID_LV2_symbol,
+ LV2_URID_LV2_toggled,
+
+ LV2_URID_STATIC_END,
+};
+
+#define LV2_URID_NUM_STATIC_IDS (LV2_URID_STATIC_END - 1)
+
+static inline int
+lv2_urid_static_cmp(const void* lhs, const void* rhs)
+{
+ const char* key = *(const char**)lhs;
+ const char* element = *(const char**)rhs;
+
+ return strcmp(key, element);
+}
+
+static inline LV2_URID
+lv2_urid_static_map(const char* const uri)
+{
+ const char** p = (const char**)bsearch(&uri,
+ lv2_urid_static_uris + 1,
+ LV2_URID_STATIC_END,
+ sizeof(char*),
+ lv2_urid_static_cmp);
+
+ assert(!p || (!strcmp(uri, *p) && p >= lv2_urid_static_uris &&
+ p <= lv2_urid_static_uris + LV2_URID_STATIC_END));
+
+ return p ? (p - lv2_urid_static_uris) : 0;
+}
+
+static inline const char*
+lv2_urid_static_unmap(const LV2_URID urid)
+{
+ assert(urid <= LV2_URID_STATIC_END);
+ return urid && urid <= LV2_URID_STATIC_END ? lv2_urid_static_uris[urid]
+ : NULL;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif // LV2_URID_SID_H
+
+/**
+ @}
+*/
diff --git a/lv2/urid/urid.h b/lv2/urid/urid.h
index c9ee2e0..3706007 100644
--- a/lv2/urid/urid.h
+++ b/lv2/urid/urid.h
@@ -125,6 +125,23 @@ typedef struct _LV2_URID_Unmap {
LV2_URID urid);
} LV2_URID_Unmap;
+#if 0
+/**
+ Static URIDs Feature (LV2_URID__staticURIDs)
+*/
+typedef struct _LV2_URID_Static_URIDs {
+ /**
+ Opaque pointer to host data.
+
+ This MUST be passed to unmap() whenever it is called.
+ Otherwise, it must not be interpreted in any way.
+ */
+ LV2_URID_Static_URIDs_Handle handle;
+
+ int max_static_id;
+} LV2_URID_Static_URIDs;
+#endif
+
#ifdef __cplusplus
} /* extern "C" */
#endif
diff --git a/plugins/eg-metro.lv2/metro.c b/plugins/eg-metro.lv2/metro.c
index a7231d2..cf6bccf 100644
--- a/plugins/eg-metro.lv2/metro.c
+++ b/plugins/eg-metro.lv2/metro.c
@@ -22,6 +22,7 @@
#include "lv2/log/log.h"
#include "lv2/log/logger.h"
#include "lv2/time/time.h"
+#include "lv2/urid/sid.h"
#include "lv2/urid/urid.h"
#include <math.h>
@@ -37,19 +38,6 @@
#define EG_METRO_URI "http://lv2plug.in/plugins/eg-metro"
-typedef struct {
- LV2_URID atom_Blank;
- LV2_URID atom_Float;
- LV2_URID atom_Object;
- LV2_URID atom_Path;
- LV2_URID atom_Resource;
- LV2_URID atom_Sequence;
- LV2_URID time_Position;
- LV2_URID time_barBeat;
- LV2_URID time_beatsPerMinute;
- LV2_URID time_speed;
-} MetroURIs;
-
static const double attack_s = 0.005;
static const double decay_s = 0.075;
@@ -79,7 +67,6 @@ typedef enum {
typedef struct {
LV2_URID_Map* map; // URID map feature
LV2_Log_Logger logger; // Logger API
- MetroURIs uris; // Cache of mapped URIDs
struct {
LV2_Atom_Sequence* control;
@@ -167,20 +154,6 @@ instantiate(const LV2_Descriptor* descriptor,
return NULL;
}
- // Map URIS
- MetroURIs* const uris = &self->uris;
- LV2_URID_Map* const map = self->map;
- uris->atom_Blank = map->map(map->handle, LV2_ATOM__Blank);
- uris->atom_Float = map->map(map->handle, LV2_ATOM__Float);
- uris->atom_Object = map->map(map->handle, LV2_ATOM__Object);
- uris->atom_Path = map->map(map->handle, LV2_ATOM__Path);
- uris->atom_Resource = map->map(map->handle, LV2_ATOM__Resource);
- uris->atom_Sequence = map->map(map->handle, LV2_ATOM__Sequence);
- uris->time_Position = map->map(map->handle, LV2_TIME__Position);
- uris->time_barBeat = map->map(map->handle, LV2_TIME__barBeat);
- uris->time_beatsPerMinute = map->map(map->handle, LV2_TIME__beatsPerMinute);
- uris->time_speed = map->map(map->handle, LV2_TIME__speed);
-
// Initialise instance fields
self->rate = rate;
self->bpm = 120.0f;
@@ -263,24 +236,22 @@ play(Metro* self, uint32_t begin, uint32_t end)
static void
update_position(Metro* self, const LV2_Atom_Object* obj)
{
- const MetroURIs* uris = &self->uris;
-
// Received new transport position/speed
LV2_Atom *beat = NULL, *bpm = NULL, *speed = NULL;
lv2_atom_object_get(obj,
- uris->time_barBeat, &beat,
- uris->time_beatsPerMinute, &bpm,
- uris->time_speed, &speed,
+ LV2_URID_TIME_barBeat, &beat,
+ LV2_URID_TIME_beatsPerMinute, &bpm,
+ LV2_URID_TIME_speed, &speed,
NULL);
- if (bpm && bpm->type == uris->atom_Float) {
+ if (bpm && bpm->type == LV2_URID_ATOM_Float) {
// Tempo changed, update BPM
self->bpm = ((LV2_Atom_Float*)bpm)->body;
}
- if (speed && speed->type == uris->atom_Float) {
+ if (speed && speed->type == LV2_URID_ATOM_Float) {
// Speed changed, e.g. 0 (stop) to 1 (play)
self->speed = ((LV2_Atom_Float*)speed)->body;
}
- if (beat && beat->type == uris->atom_Float) {
+ if (beat && beat->type == LV2_URID_ATOM_Float) {
// Received a beat position, synchronise
// This hard sync may cause clicks, a real plugin would be more graceful
const float frames_per_beat = 60.0f / self->bpm * self->rate;
@@ -300,8 +271,7 @@ update_position(Metro* self, const LV2_Atom_Object* obj)
static void
run(LV2_Handle instance, uint32_t sample_count)
{
- Metro* self = (Metro*)instance;
- const MetroURIs* uris = &self->uris;
+ Metro* self = (Metro*)instance;
// Work forwards in time frame by frame, handling events as we go
const LV2_Atom_Sequence* in = self->ports.control;
@@ -315,10 +285,10 @@ run(LV2_Handle instance, uint32_t sample_count)
// Check if this event is an Object
// (or deprecated Blank to tolerate old hosts)
- if (ev->body.type == uris->atom_Object ||
- ev->body.type == uris->atom_Blank) {
+ if (ev->body.type == LV2_URID_ATOM_Object ||
+ ev->body.type == LV2_URID_ATOM_Blank) {
const LV2_Atom_Object* obj = (const LV2_Atom_Object*)&ev->body;
- if (obj->body.otype == uris->time_Position) {
+ if (obj->body.otype == LV2_URID_TIME_Position) {
// Received position information, update
update_position(self, obj);
}
diff --git a/wscript b/wscript
index cb97c54..7a74205 100644
--- a/wscript
+++ b/wscript
@@ -88,6 +88,10 @@ def configure(conf):
var='LINKCHECKER', mandatory=False):
Logs.warn('Documentation will not be checked for broken links')
+ if conf.env.BUILD_TESTS:
+ autowaf.check_pkg(conf, 'serd-1', uselib_store='SERD',
+ atleast_version='1.0.0', mandatory=False)
+
# Check for gcov library (for test coverage)
if (conf.env.BUILD_TESTS
and not Options.options.no_coverage
@@ -226,13 +230,13 @@ def build_spec(bld, path):
test_linkflags += ['--coverage']
# Unit test program
- bld(features = 'c cprogram',
- source = test,
- lib = test_lib,
- target = os.path.splitext(str(test.get_bld()))[0],
- install_path = None,
- cflags = test_cflags,
- linkflags = test_linkflags)
+ obj = bld(features = 'c cprogram',
+ source = test,
+ lib = test_lib,
+ target = os.path.splitext(str(test.get_bld()))[0],
+ install_path = None,
+ cflags = test_cflags,
+ linkflags = test_linkflags)
# Install bundle
bld.install_files(bundle_dir,
@@ -411,6 +415,14 @@ def build(bld):
target = 'build-test',
install_path = None)
+ # Unit test program
+ if bld.env.HAVE_SERD:
+ obj = bld(features = 'c cprogram',
+ source = 'lv2/urid/check-static-ids.c',
+ target = 'lv2/urid/check-static-ids',
+ install_path = None,
+ use = 'SERD')
+
if bld.env.BUILD_BOOK:
# Build "Programming LV2 Plugins" book from plugin examples
bld.recurse('plugins')
@@ -438,6 +450,18 @@ def test(tst):
test = './' + i.path_from(tst.path.find_node('build'))
check([test])
+ with tst.group('URID') as check:
+ specs = (tst.path.ant_glob('lv2/*', dir=True))
+
+ for name, path in spec_map.items():
+ if name == 'core':
+ schema = tst.path.find_node('lv2/core/lv2core.ttl')
+ else:
+ schema = tst.path.find_node('lv2/%s/%s.ttl' % (name, name))
+
+ uri = path.replace('lv2/lv2plug.in/', 'http://lv2plug.in/')
+ check(['lv2/urid/check-static-ids', str(schema), uri])
+
class Dist(Scripting.Dist):
def execute(self):
'Execute but do not call archive() since dist() has already done so.'