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.'
2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445