From ed78bbe5ba12be1f9bcc736f14c51da6b4f639f3 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 8 Feb 2012 04:56:24 +0000 Subject: Rearrange tree so top level can be used as an include path for standard style LV2 includes. --- lv2/ns/lv2core/AUTHORS | 13 - lv2/ns/lv2core/COPYING | 16 - lv2/ns/lv2core/INSTALL | 41 -- lv2/ns/lv2core/README | 42 -- lv2/ns/lv2core/lv2.h | 299 -------------- lv2/ns/lv2core/lv2core.doap.ttl | 117 ------ lv2/ns/lv2core/lv2core.pc.in | 10 - lv2/ns/lv2core/lv2core.ttl | 883 ---------------------------------------- lv2/ns/lv2core/manifest.ttl | 10 - lv2/ns/lv2core/waf | Bin 91475 -> 0 bytes lv2/ns/lv2core/wscript | 134 ------ 11 files changed, 1565 deletions(-) delete mode 100644 lv2/ns/lv2core/AUTHORS delete mode 100644 lv2/ns/lv2core/COPYING delete mode 100644 lv2/ns/lv2core/INSTALL delete mode 100644 lv2/ns/lv2core/README delete mode 100644 lv2/ns/lv2core/lv2.h delete mode 100644 lv2/ns/lv2core/lv2core.doap.ttl delete mode 100644 lv2/ns/lv2core/lv2core.pc.in delete mode 100644 lv2/ns/lv2core/lv2core.ttl delete mode 100644 lv2/ns/lv2core/manifest.ttl delete mode 100755 lv2/ns/lv2core/waf delete mode 100644 lv2/ns/lv2core/wscript (limited to 'lv2/ns/lv2core') diff --git a/lv2/ns/lv2core/AUTHORS b/lv2/ns/lv2core/AUTHORS deleted file mode 100644 index 64febf8..0000000 --- a/lv2/ns/lv2core/AUTHORS +++ /dev/null @@ -1,13 +0,0 @@ -LV2 is written and maintained by: - -David Robillard -Steve Harris - -with the input and help of many others. - -LV2 is based on LADSPA, which was by: - Paul Barton-Davis - Richard W.E. Furse - Stefan Westerfeld - -Thanks to all members of the free software community who made LV2 possible. diff --git a/lv2/ns/lv2core/COPYING b/lv2/ns/lv2core/COPYING deleted file mode 100644 index c46d5dd..0000000 --- a/lv2/ns/lv2core/COPYING +++ /dev/null @@ -1,16 +0,0 @@ -Copyright 2006-2011 Steve Harris, David Robillard. - -Based on LADSPA, Copyright 2000-2002 Richard W.E. Furse, -Paul Barton-Davis, Stefan Westerfeld. - -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. \ No newline at end of file diff --git a/lv2/ns/lv2core/INSTALL b/lv2/ns/lv2core/INSTALL deleted file mode 100644 index 16b1427..0000000 --- a/lv2/ns/lv2core/INSTALL +++ /dev/null @@ -1,41 +0,0 @@ -This software requires only Python to build. The build system, based on waf, -is included in this source distribution. - - -LV2Core -======= - -This package contains everything necessary to compile against and/or use LV2 -plugins and extensions: a header file, pkg-config file, and LV2 bundle (with -Turtle files). - -The configure option --bundle-only can be used to install only the lv2core.lv2 -bundle. This is useful for installing the bundle to a project-specific or -user-specific location (e.g. ~/.lv2). - -See README for details on how to correctly package LV2, and how to depend on -LV2 in other projects. - - -Generic Waf Instructions -======================== - -As with most build systems, building and installing a project with waf is done -in three separate stages: - - 1. ./waf configure [OPTIONS] - 2. ./waf build - 3. ./waf install - -The default command is build. For example: - - ./waf configure --prefix=/some/where - ./waf -j2 - sudo ./waf install - -The environment variable DESTDIR can be used to add a prefix to all install -paths (useful for packaging), for example: - - DESTDIR=./lv2core.pkg ./waf install - -Run './waf --help' for detailed option information. diff --git a/lv2/ns/lv2core/README b/lv2/ns/lv2core/README deleted file mode 100644 index f49513f..0000000 --- a/lv2/ns/lv2core/README +++ /dev/null @@ -1,42 +0,0 @@ -LV2 -=== - -LV2 gives programmers the ability to write audio processors (or "plugins") in -C/C++ which can be dynamically loaded into a range of applications (or -"hosts"). - -This core specification is deliberately as short and simple as possible, but is -designed so that extensions can be defined to add more advanced features. - -More information about LV2 can be found at . - - -Using LV2 ---------- - -Applications that use LV2 plugins should depend on this package. It includes a -header, LV2 bundle, and a pkg-config file. To compile against LV2, build -scripts should check for the pkg-config package "lv2core", or simply check for -the header "lv2/lv2plug.in/ns/lv2core/lv2.h". - -The appropriate C include for LV2 specifications is based on their URI, e.g.: - - #include "lv2/lv2plug.in/ns/lv2core/lv2.h" - -Is how code should include the header "lv2.h" in this bundle, which defines the -specification with URI "http://lv2plug.in/ns/lv2core". Other specifications -should follow this convention, e.g. the correct way to include the header -"foo.h" in the extension "http://example.org/foo" is: - - #include "lv2/example.org/foo/foo.h" - - -Packaging ---------- - -Please package these components in a single package (i.e. do not split the -headers, data, and program into separate packages). This package, in its -entirety, is a build and run time dependency of any code that uses LV2. -Distributions are encouraged to include it with package name "lv2core". - - -- David Robillard diff --git a/lv2/ns/lv2core/lv2.h b/lv2/ns/lv2core/lv2.h deleted file mode 100644 index 29adf7b..0000000 --- a/lv2/ns/lv2core/lv2.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - LV2 - An audio plugin interface specification. - Copyright 2006-2012 Steve Harris, David Robillard. - - Based on LADSPA, Copyright 2000-2002 Richard W.E. Furse, - Paul Barton-Davis, Stefan Westerfeld. - - 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. -*/ - -/** - @file lv2.h - API for the LV2 specification . - Revision: 6.1 -*/ - -#ifndef LV2_H_INCLUDED -#define LV2_H_INCLUDED - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - Plugin Instance Handle. - - This is a handle for one particular instance of a plugin. It is valid to - compare to NULL (or 0 for C++) but otherwise the host MUST NOT attempt to - interpret it. -*/ -typedef void * LV2_Handle; - -/** - Feature. - - Features allow hosts to make additional functionality available to plugins - without requiring modification to the LV2 API. Extensions may define new - features and specify the @ref URI and @ref data to be used if necessary. - Some features, such as lv2:isLive, do not require the host to pass data. -*/ -typedef struct _LV2_Feature { - /** - A globally unique, case-sensitive identifier (URI) for this feature. - - This MUST be a valid URI string as defined by RFC 3986. - */ - const char * URI; - - /** - Pointer to arbitrary data. - - The format of this data is defined by the extension which describes the - feature with the given @ref URI. - */ - void * data; -} LV2_Feature; - -/** - Plugin Descriptor. - - This structure provides the core functions necessary to instantiate and use - a plugin. -*/ -typedef struct _LV2_Descriptor { - /** - A globally unique, case-sensitive identifier for this plugin. - - This MUST be a valid URI string as defined by RFC 3986. All plugins with - the same URI MUST be compatible to some degree, see - http://lv2plug.in/ns/lv2core for details. - */ - const char * URI; - - /** - Instantiate the plugin. - - Note that instance initialisation should generally occur in activate() - rather than here. If a host calls instantiate(), it MUST call cleanup() - at some point in the future. - - @param descriptor Descriptor of the plugin to instantiate. - - @param sample_rate Sample rate, in Hz, for the new plugin instance. - - @param bundle_path Path to the LV2 bundle which contains this plugin - binary. It MUST include the trailing directory separator (e.g. '/') so - that simply appending a filename will yield the path to that file in the - bundle. - - @param features A NULL terminated array of LV2_Feature structs which - represent the features the host supports. Plugins may refuse to - instantiate if required features are not found here. However, hosts MUST - NOT use this as a discovery mechanism: instead, use the RDF data to - determine which features are required and do not attempt to instantiate - unsupported plugins at all. This parameter MUST NOT be NULL, i.e. a host - that supports no features MUST pass a single element array containing - NULL. - - @return A handle for the new plugin instance, or NULL if instantiation - has failed. - */ - LV2_Handle (*instantiate)(const struct _LV2_Descriptor * descriptor, - double sample_rate, - const char * bundle_path, - const LV2_Feature *const * features); - - /** - Connect a port on a plugin instance to a memory location. - - Plugin writers should be aware that the host may elect to use the same - buffer for more than one port and even use the same buffer for both - input and output (see lv2:inPlaceBroken in lv2.ttl). - - If the plugin has the feature lv2:hardRTCapable then there are various - things that the plugin MUST NOT do within the connect_port() function; - see lv2core.ttl for details. - - connect_port() MUST be called at least once for each port before run() - is called, unless that port is lv2:connectionOptional. The plugin must - pay careful attention to the block size passed to run() since the block - allocated may only just be large enough to contain the data, and is not - guaranteed to remain constant between run() calls. - - connect_port() may be called more than once for a plugin instance to - allow the host to change the buffers that the plugin is reading or - writing. These calls may be made before or after activate() or - deactivate() calls. - - @param instance Plugin instance containing the port. - - @param port Index of the port to connect. The host MUST NOT try to - connect a port index that is not defined in the plugin's RDF data. If - it does, the plugin's behaviour is undefined (a crash is likely). - - @param data_location Pointer to data of the type defined by the port - type in the plugin's RDF data (e.g. an array of float for an - lv2:AudioPort). This pointer must be stored by the plugin instance and - used to read/write data when run() is called. Data present at the time - of the connect_port() call MUST NOT be considered meaningful. - */ - void (*connect_port)(LV2_Handle instance, - uint32_t port, - void * data_location); - - /** - Initialise a plugin instance and activate it for use. - - This is separated from instantiate() to aid real-time support and so - that hosts can reinitialise a plugin instance by calling deactivate() - and then activate(). In this case the plugin instance MUST reset all - state information dependent on the history of the plugin instance except - for any data locations provided by connect_port(). If there is nothing - for activate() to do then this field may be NULL. - - When present, hosts MUST call this function once before run() is called - for the first time. This call SHOULD be made as close to the run() call - as possible and indicates to real-time plugins that they are now live, - however plugins MUST NOT rely on a prompt call to run() after - activate(). - - The host MUST NOT call activate() again until deactivate() has been - called first. If a host calls activate(), it MUST call deactivate() at - some point in the future. Note that connect_port() may be called before - or after activate(). - */ - void (*activate)(LV2_Handle instance); - - /** - Run a plugin instance for a block. - - Note that if an activate() function exists then it must be called before - run(). If deactivate() is called for a plugin instance then run() may - not be called until activate() has been called again. - - If the plugin has the feature lv2:hardRTCapable then there are various - things that the plugin MUST NOT do within the run() function (see - lv2core.ttl for details). - - As a special case, when @c sample_count == 0, the plugin should update - any output ports that represent a single instant in time (e.g. control - ports, but not audio ports). This is particularly useful for latent - plugins, which should update their latency output port so hosts can - pre-roll plugins to compute latency. Plugins MUST NOT crash when - @c sample_count == 0. - - @param instance Instance to be run. - - @param sample_count The block size (in samples) for which the plugin - instance must run. - */ - void (*run)(LV2_Handle instance, - uint32_t sample_count); - - /** - Deactivate a plugin instance (counterpart to activate()). - - Hosts MUST deactivate all activated instances after they have been run() - for the last time. This call SHOULD be made as close to the last run() - call as possible and indicates to real-time plugins that they are no - longer live, however plugins MUST NOT rely on prompt deactivation. If - there is nothing for deactivate() to do then this field may be NULL - - Deactivation is not similar to pausing since the plugin instance will be - reinitialised by activate(). However, deactivate() itself MUST NOT fully - reset plugin state. For example, the host may deactivate a plugin, then - store its state (using some extension to do so). - - Hosts MUST NOT call deactivate() unless activate() was previously - called. Note that connect_port() may be called before or after - deactivate(). - */ - void (*deactivate)(LV2_Handle instance); - - /** - Clean up a plugin instance (counterpart to instantiate()). - - Once an instance of a plugin has been finished with it must be deleted - using this function. The instance handle passed ceases to be valid after - this call. - - If activate() was called for a plugin instance then a corresponding call - to deactivate() MUST be made before cleanup() is called. Hosts MUST NOT - call cleanup() unless instantiate() was previously called. - */ - void (*cleanup)(LV2_Handle instance); - - /** - Return additional plugin data defined by some extenion. - - A typical use of this facility is to return a struct containing function - pointers to extend the LV2_Descriptor API. - - The actual type and meaning of the returned object MUST be specified - precisely by the extension. This function MUST return NULL for any - unsupported URI. If a plugin does not support any extension data, this - field may be NULL. - - The host is never responsible for freeing the returned value. - */ - const void * (*extension_data)(const char * uri); -} LV2_Descriptor; - -/** - Put this (LV2_SYMBOL_EXPORT) before any functions that are to be loaded - by the host as a symbol from the dynamic library. -*/ -#ifdef _WIN32 -# define LV2_SYMBOL_EXPORT __declspec(dllexport) -#else -# define LV2_SYMBOL_EXPORT -#endif - -/** - Prototype for plugin accessor function. - - Plugins are discovered by hosts using RDF data (not by loading libraries). - See http://lv2plug.in for details on the discovery process, though most - hosts should use an existing library to implement this functionality. - - A plugin library MUST include a function called "lv2_descriptor" with this - prototype. This function MUST have C-style linkage (if you are using C++ - this is taken care of by the 'extern "C"' clause at the top of this file). - - When it is time to load a plugin (designated by its URI), the host loads the - plugin's library, gets the lv2_descriptor() function from it, and uses this - function to find the LV2_Descriptor for the desired plugin. Plugins are - accessed by index using values from 0 upwards. This function MUST return - NULL for out of range indices, so the host can enumerate plugins by - increasing @c index until NULL is returned. - - Note that @c index has no meaning, hosts MUST NOT depend on it remaining - consistent between loads of the plugin library. -*/ -LV2_SYMBOL_EXPORT -const LV2_Descriptor * lv2_descriptor(uint32_t index); - -/** - Type of the lv2_descriptor() function in a plugin library. -*/ -typedef const LV2_Descriptor * -(*LV2_Descriptor_Function)(uint32_t index); - -#ifdef __cplusplus -} -#endif - -#endif /* LV2_H_INCLUDED */ diff --git a/lv2/ns/lv2core/lv2core.doap.ttl b/lv2/ns/lv2core/lv2core.doap.ttl deleted file mode 100644 index 33048a2..0000000 --- a/lv2/ns/lv2core/lv2core.doap.ttl +++ /dev/null @@ -1,117 +0,0 @@ -@prefix dcs: . -@prefix doap: . -@prefix foaf: . -@prefix rdfs: . - - - a foaf:Person ; - foaf:name "Steve Harris" ; - foaf:homepage ; - rdfs:seeAlso . - - - a foaf:Person ; - foaf:name "David Robillard" ; - foaf:homepage ; - foaf:mbox ; - rdfs:seeAlso . - - - a doap:Project ; - doap:license ; - doap:name "LV2" ; - doap:homepage ; - doap:created "2004-04-21" ; - doap:shortdesc "An audio plugin interface specification." ; - doap:programming-language "C" ; - doap:release [ - doap:revision "6.1" ; - doap:created "2012-02-01" ; - dcs:blame ; - dcs:changeset [ - dcs:item [ - rdfs:label "Fix LV2_SYMBOL_EXPORT and lv2_descriptor prototype for Windows." - ] - ] - ] , [ - doap:revision "6.0" ; - doap:created "2011-11-21" ; - doap:file-release ; - dcs:blame ; - dcs:changeset [ - dcs:item [ - rdfs:label "Rename core.lv2 and lv2.ttl to lv2core.lv2 and lv2core.ttl to adhere to modern conventions." - ] , [ - rdfs:label "Add lv2:extensionData and lv2:ExtensionData for plugins to indicate that they support some URI for extension_data()." - ] , [ - rdfs:label "Remove lv2config in favour of the simple convention that specifications install headers to standard URI-based paths." - ] , [ - rdfs:label "Switch to the ISC license, a simple BSD-style license (with permission of all contributors to lv2.h and its ancestor, ladspa.h)." - ] , [ - rdfs:label "Make lv2core.ttl a valid OWL 2 DL ontology." - ] , [ - rdfs:label "Improve documentation." - ] - ] - ] , [ - doap:revision "4.0" ; - doap:created "2011-03-18" ; - doap:file-release ; - dcs:blame ; - dcs:changeset [ - dcs:item [ - rdfs:label "Make doap:license suggested, but not required (for wrappers)." - ] , [ - rdfs:label "Define lv2:binary (MUST be in manifest.ttl)." - ] , [ - rdfs:label "Define lv2:minorVersion and lv2:microVersion (MUST be in manifest.ttl)." - ] , [ - rdfs:label "Define lv2:documentation and use it to document lv2core." - ] , [ - rdfs:label "Add lv2:FunctionPlugin and lv2:ConstantPlugin classes." - ] , [ - rdfs:label "Move lv2:AmplifierPlugin under lv2:DynamicsPlugin." - ] , [ - rdfs:label "Loosen domain of lv2:optionalFeature and lv2:requiredFeature (to allow re-use in extensions)." - ] , [ - rdfs:label "Add generic lv2:Resource and lv2:PluginBase classes." - ] , [ - rdfs:label "Fix definition of lv2:minimum etc. (used for values, not scale points)." - ] , [ - rdfs:label "More precisely define properties with OWL." - ] , [ - rdfs:label "Move project metadata to manifest." - ] , [ - rdfs:label "Add lv2:enumeration port property." - ] , [ - rdfs:label "Define run() pre-roll special case (sample_count == 0)." - ] - ] - ] , [ - doap:revision "3.0" ; - doap:created "2008-11-08" ; - doap:file-release ; - dcs:blame ; - dcs:changeset [ - dcs:item [ - rdfs:label "Require that serialisations refer to ports by symbol rather than index." - ] , [ - rdfs:label "Minor stylistic changes to lv2.ttl." - ] , [ - rdfs:label "No header changes." - ] - ] - ] , [ - doap:revision "2.0" ; - doap:created "2008-02-10" ; - doap:file-release ; - dcs:blame ; - dcs:changeset [ - dcs:item [ - rdfs:label "Initial release." - ] - ] - ] ; - doap:developer , - ; - doap:maintainer . diff --git a/lv2/ns/lv2core/lv2core.pc.in b/lv2/ns/lv2core/lv2core.pc.in deleted file mode 100644 index 96e5169..0000000 --- a/lv2/ns/lv2core/lv2core.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@PREFIX@ -exec_prefix=@EXEC_PREFIX@ -libdir=@LIBDIR@ -includedir=@INCLUDEDIR@ - -Name: lv2core -Version: @LV2CORE_VERSION@ -Description: An audio plugin interface specification. -Libs: -Cflags: -I${includedir} diff --git a/lv2/ns/lv2core/lv2core.ttl b/lv2/ns/lv2core/lv2core.ttl deleted file mode 100644 index 0ab56c5..0000000 --- a/lv2/ns/lv2core/lv2core.ttl +++ /dev/null @@ -1,883 +0,0 @@ -# This document describes LV2, a plugin interface. -# See for more information. -# -# Copyright 2006-2011 Steve Harris, David Robillard -# -# 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. - -@prefix doap: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -########################### -## General LV2 Resources ## -########################### - -lv2:Resource a rdfs:Class , owl:Class ; - rdfs:comment """ -An LV2 Resource (e.g. plugin, specification, or any other LV2 related thing). -""" . - -lv2:Specification a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Resource ; - lv2:documentation """ -

An LV2 specification (i.e. this specification, or an LV2 extension).

- -

Specification data, like plugin data, is distributed in bundles -so hosts may discover all present LV2 data.

-""" . - -lv2:documentation a rdf:Property , owl:AnnotationProperty ; - rdfs:range rdfs:Literal ; - rdfs:label "documentation" ; - rdfs:seeAlso ; - lv2:documentation """ -

Relates a Resource to documentation markup. The value of this property -MUST be a string literal which is a valid XHTML Basic 1.1 fragment suitable -for use as the content of the <body> element. This can be used by -hosts to provide rich online documentation or by tools to generate external -documentation pages. The standard language tagging facility of RDF can be -used to provide multi-lingual documentation.

-

XHTML Basic is a W3C Recommendation which defines a basic subset of XHTML -intended to be reasonable to implement with limited resources (e.g. on embedded -devices). See XHTML Basic, Section 3 for a list of legal tags.

-""" . - - - a owl:Ontology ; - owl:imports ; - lv2:documentation """ -

LV2 is an interface for writing audio processors, or plugins, in -C/C++ which can be dynamically loaded into many applications, or hosts. -This core specification is simple and minimal, but is designed so that -extensions can be defined to add more advanced features, making it -possibly to implement nearly any feature imaginable.

- -

LV2 maintains a strong distinction between code and data. -Plugin code is in a shared library, while data is in a companion data file -written in Turtle. -Code, data, and any other resources (e.g. waveforms) are shipped together in a -bundle directory. The code contains only the executable portions of the -plugin which inherently must be written in code. All other data is -provided in the data file(s). This makes plugin data flexible and extensible, -and allows the host to do everything but run the plugin without loading or -executing any code. Among other advantages, this makes hosts more robust -(broken plugins can't crash a host during discovery) and allows generic tools -and non-C programs to work with LV2 data. LV2 itself and extensions are -distributed in a similar way.

- -

An LV2 plugin library is suitable for dynamic loading (e.g. via -dlopen()) and provides one or more plugin descriptors via the -lv2_descriptor() function. These can be instantiated to create -plugin instances, which can be run directly on data or connected -together to perform advanced signal processing tasks.

- -

Plugins communicate via ports, which can transmit any type of data. -Data is processed by first connecting each port to a buffer, then -repeatedly calling a plugin's run() method to process blocks of -data.

- -

This core specification defines two types of port, equivalent to those in LADSPA: lv2:ControlPort and lv2:AudioPort. -Audio ports contain arrays with one float element per sample, -allowing a block of audio to be processed in a single call to -run(). Control ports contain single float values, -which are fixed and valid for the duration of the call to run(). -Thus the control rate is determined by the block size, which is -controlled by the host (and not necessarily constant).

- -

Threading Rules

- -

To faciliate use in multi-threaded programs, LV2 functions are partitioned -into several threading classes:

- - - - - - - - - - - - - -
Discovery ClassInstantiation ClassAudio Class
lv2_descriptor()LV2_Descriptor::instantiate()LV2_Descriptor::run()
LV2_Descriptor::extension_data()LV2_Descriptor::cleanup()LV2_Descriptor::connect_port()
LV2_Descriptor::activate()
LV2_Descriptor::deactivate()
- -

The rules that hosts MUST follow are:

-
    -
  • When any function is running for a plugin instance, -no other function in the same class may run for that instance.
  • -
  • When a Discovery function is running, -no other functions in the same shared object file may run.
  • -
  • When an Instantiation function is running for a plugin instance, -no other functions for that instance may run.
  • -
- -

Any simultaneous calls that are not explicitly forbidden by these rules are -allowed. For example, a host may call run() for two different -plugin instances simultaneously.

- -

Plugin functions in any class MUST NOT manipulate any state which might -affect other plugin or host code, e.g. by using non-reentrant global -functions.

- -

Extensions to this specification which add new functions MUST declare in -which of these classes the functions belong, define new classes for them, or -otherwise precisely describe their threading rules.

-""" . - -############ -## Plugin ## -############ - -lv2:PluginBase a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Resource ; - lv2:documentation """ -

An abstract plugin-like resource that MAY not actually be an LV2 plugin -(e.g. may not actually have a plugin binary).

- -

PluginBase SHOULD be used as a base type for any resource that may have -ports or otherwise mimic the structure of a Plugin (e.g. a preset), since -hosts and other tools already understand this structure.

-""" . - -lv2:Plugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:PluginBase ; - rdfs:label "Plugin" ; - rdfs:subClassOf [ - a owl:Restriction ; - owl:onProperty doap:name ; - owl:someValuesFrom xsd:string ; - rdfs:comment """ -A Plugin MUST have at least one doap:name that is a string -with no language tag. -""" ] ; - lv2:documentation """ -

The class which represents an LV2 plugin.

- -

To be discovered by hosts, plugins MUST explicitly have rdf:type lv2:Plugin -listed in their bundle's manifest, e.g.:

-
-<http://example.org/my-plugin> a lv2:Plugin .
-
- -

Plugins SHOULD have a doap:license property whenever possible. The doap:name -property should be at most a few words in length using title capitalization, -e.g. Tape Delay Unit. Use doap:shortdesc or doap:description for more -detailed descriptions.

-""" . - -########## -## Port ## -########## - -lv2:Port a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Resource ; - rdfs:label "Port" ; - rdfs:subClassOf [ - a owl:Restriction ; - owl:onProperty lv2:index ; - owl:allValuesFrom xsd:nonNegativeInteger ; - owl:cardinality 1 ; - rdfs:comment """ -A port MUST have a single lv2:index which is of type xsd:nonNegativeInteger -(e.g. a non-negative integer literal in Turtle). The actual RDF datatype -of the index MAY be xsd:integer (which is what a generic Turtle parser -will do), but the value itself MUST be non-negative. -""" ] , [ - a owl:Restriction ; - owl:onProperty lv2:symbol ; - owl:someValuesFrom xsd:string ; - rdfs:comment """ -A port MUST have a single lv2:symbol which is of type xsd:string with no -language tag. -""" ] , [ - a owl:Restriction ; - owl:onProperty lv2:name ; - owl:someValuesFrom xsd:string ; - rdfs:comment """ -A port MUST have at least one lv2:name which is of type xsd:string. -""" ] ; - lv2:documentation """ -

The class which represents an LV2 port.

- -

All LV2 port descriptions MUST have a rdf:type that is one of lv2:Port -lv2:InputPort or lv2:OutputPort. Additionally there MUST be at least one other -rdf:type which more precisely describes type of the port -(e.g. lv2:AudioPort).

- -

Hosts that do not support a specific port class MUST NOT instantiate the -plugin, unless that port has the connectionOptional property set (in which case -the host can simply connect that port to NULL). If a host is interested -in plugins to insert in a certain signal path (e.g. stereo audio), it SHOULD -consider all the classes of a port to determine which ports are most suitable -for connection (e.g. by ignoring ports with additional classes the host does -not recognize).

- -

A port has two identifiers: a (numeric) index, and a (textual) symbol. -The index can be used as an identifier at run-time, but persistent references -to ports (e.g. in a saved preset) MUST use the symbol. A symbol is guaranteed -to refer to the same port on all plugins with a given URI. An index does NOT -necessarily refer to the same port on all plugins with a given URI (i.e. the -index for a port may differ between plugin binaries).

-""" . - -lv2:InputPort a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Port ; - rdfs:label "Input port" ; - rdfs:comment """ -Ports of this type will be connected to a pointer to some value, which will -be read by the plugin during their run method. -""" . - -lv2:OutputPort a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Port ; - rdfs:label "Output port" ; - rdfs:comment """ -Ports of this type will be connected to a pointer to some value, which will -be written to by the plugin during their run method. -""" . - -lv2:ControlPort a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Port ; - rdfs:label "Control port" ; - lv2:documentation """ -

Ports of this type will be connected to a pointer to a single value of C -type float.

- -""" . - -lv2:AudioPort a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Port ; - rdfs:label "Audio port" ; - lv2:documentation """ -

Ports of this type will be connected to an array of length sample_count -with elements of C type float.

-""" . - -####################### -## Plugin Properties ## -####################### - -lv2:port a rdf:Property , owl:ObjectProperty ; - rdfs:domain lv2:PluginBase ; - rdfs:range lv2:Port ; - rdfs:label "port" ; - rdfs:comment "Relates a Plugin to the Ports it contains" . - -lv2:minorVersion a rdf:Property , owl:DatatypeProperty ; - rdfs:domain lv2:Resource ; - rdfs:range xsd:nonNegativeInteger ; - rdfs:label "minor version" ; - lv2:documentation """ -

The minor version of an LV2 Resource. This property is used (along with -lv2:microVersion) by hosts to distinguish different versions of a compatible -resource, e.g. to load only the bundle with the most recent version.

- -

The version of an LV2 resource is composed of two fields: minor version, -and micro version. These have the usual semantics:

- -
    -
  • The minor version MUST be incremented when backwards (but not -forwards) compatible additions are made, e.g. the addition of a port to a -plugin.
  • - -
  • The micro version is incremented for changes which do not affect -compatibility at all, e.g. bug fixes or documentation updates.
  • -
- -

Note there is deliberately no concept of a major version: all versions of an -LV2 resource with a given URI are by definition backwards compatible. More -precisely: replacing a resource with a newer version of that resource MUST NOT -break anything. If a change is made which breaks this rule, the URI -of the resource MUST be changed. In contexts where a full (e.g. SemVer conformant) version number is required, the -major version of all released LV2 resources is 1.

- -

Plugins and extensions MUST adhere to the following rules:

-
    -
  • All versions of a plugin with a given URI MUST have the same set of -mandatory (i.e. not lv2:connectionOptional) ports with respect to lv2:symbol -and rdf:type. In other words, every port on a specific version of a plugin has -a lv2:symbol and a set of rdf:types; all future versions of that plugin are -guaranteed to have a port with the same lv2:symbol and at least those -rdf:types. New types may be added only if doing so does not break -compatibility, i.e. if old hosts will continue to work correctly with the new -plugin.
  • - -
  • New ports MAY be added without changing the plugin URI if and only if they -are lv2:connectionOptional and the minor version is incremented.
  • - -
  • The minor version MUST be incremented if the index of any port (identified -by its symbol) is changed.
  • - -
  • All versions of an extension MUST be compatible in the sense that an -implementation of the new version can interoperate with an implementation of -any previous version.
  • -
- -

(Note these rules are not necessarily exhaustive)

- -

Anything that depends on a specific version of a plugin (e.g. a -serialisation that references ports by index) MUST refer to the plugin by both -URI and version. However, implementations should be tolerant and extensions -should be designed such that there is no need to do this (e.g. indices should -only be meaningful for a particular plugin instance at run-time).

- -

When hosts discover several installed versions of a resource, they SHOULD -warn the user and load only the most recent version.

- -

An odd minor or micro version indicates that the resource is a -possibly unstable development version. Hosts and tools SHOULD clearly indicate -this wherever appropriate. Several versions of a resource with an odd version -may exist; i.e. it is acceptable to work on a development version of a resource -(e.g. in source control) without worrying about version numbers as long as -either the minor or micro version is odd.

- -

This property describes half of a resource version. See also lv2:minorVersion, the -property which describes the other half.

-""" . - -lv2:microVersion a rdf:Property , owl:DatatypeProperty ; - rdfs:domain lv2:Resource ; - rdfs:range xsd:nonNegativeInteger ; - rdfs:label "micro version" ; - lv2:documentation """ -

The micro component of a Resource's version.

- -

Releases of plugins and extensions MUST be explicitly versioned. Correct -version numbers MUST always be maintained for any versioned resource that is -published. For example, after a release, if a change is made in the development -version in source control, the micro version MUST be incremented (to an odd -number) to distinguish this modified version from the previous release.

- -

This property describes half of a resource version. For detailed -documentation on LV2 resource versioning, see lv2:minorVersion.

-""" . - -lv2:binary a rdf:Property , owl:ObjectProperty ; - rdfs:domain lv2:Resource ; - rdfs:range owl:Thing ; - rdfs:label "binary" ; - lv2:documentation """ -

The binary of an LV2 resource. The value of this property must be a URI that -resolves to a shared library object (the actual type of this library is system -specific).

- -

This is a required property of a Plugin which MUST be included in the -bundle's manifest.ttl file. The lv2:binary of an lv2:Plugin is the -shared object containing the lv2_descriptor() function which can -be used to access the descriptor for that plugin. This property may be used -similarly by extensions to relate other resources to their implementations.

-""" . - -lv2:appliesTo a rdf:Property , owl:ObjectProperty ; - rdfs:domain lv2:Resource ; - rdfs:range lv2:Plugin ; - rdfs:label "Applies to" ; - lv2:documentation """ -

Specifies that a resource is related to a plugin. This is primarily intended -for discovery purposes: bundles that describe resources that work with -particular plugins (e.g. presets or user interfaces) SHOULD use this predicate -in manifest.ttl to relate the resource to the applicable -plugin(s), e.g.:

-
-<thing>
-    a             ext:Thing ;
-    lv2:appliesTo <plugin> ;
-    rdfs:seeAlso  <thing.ttl> .
-
- -

Particularly for large amounts of data, this is preferable to -extending the plugin description with rdfs:seeAlso since the host may choose -if/when to load the data, knowing that it describes an additional resource and -not the plugin itself.

-""" . - -##################### -## Port Properties ## -##################### - -lv2:index a rdf:Property , owl:DatatypeProperty ; - rdfs:domain lv2:Port ; - rdfs:range xsd:nonNegativeInteger ; - rdfs:label "index" ; - rdfs:comment """ -Specifies the index of the port, passed as an argument to the connect port -function. The index uniqely identifies the port on an instance of the plugin. -""" . - -lv2:symbol a rdf:Property , owl:DatatypeProperty ; - rdfs:label "symbol" ; - rdfs:comment """ -A short name used as a machine and human readable identifier. - -The first character must be one of _, a-z or A-Z and subsequenct characters can -be from _, a-z, A-Z and 0-9. - -A language tag MUST NOT be used on this property. The symbol uniquely -identifies the port on a plugin with a given URI (i.e. the plugin author MUST -change the plugin URI if a port symbol is changed or removed). -""" . - -lv2:name a rdf:Property , owl:DatatypeProperty ; - rdfs:domain lv2:Port ; - rdfs:label "name" ; - rdfs:comment """ -A display name for labeling the Port in a user interface. - -This property is required for Ports, but MUST NOT be used by the host for -port identification. The plugin author may change the values of this -property without changing the Plugin URI. -""" . - -########################### -## Port Range and Points ## -########################### - -lv2:Point a rdfs:Class , owl:Class ; - rdfs:label "Port value point" ; - # Unfortunately, it is illegal to specify restrictions on rdfs:label or - # rdf:value. If the migration can be handled gracefully, it would be - # good to switch to more appropriate predicates here for validators. - lv2:documentation """ -

A Point describes an interesting value in a Port's range (much like a labeled -notch on a physical knob).

-
    -
  • A Point MUST have at least one rdfs:label which is a string.
  • -
  • A Point MUST have exactly one rdf:value with a type that is compatible - with the type of the corresponding Port.
  • -
-""" . - -lv2:ScalePoint a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Point ; - rdfs:comment "A single float Point (for control inputs)." . - -lv2:scalePoint a rdf:Property , owl:ObjectProperty ; - rdfs:domain lv2:Port ; - rdfs:range lv2:ScalePoint ; - rdfs:label "Scale point" ; - rdfs:comment "Relates a Port to its ScalePoints." . - -lv2:default a rdf:Property , owl:DatatypeProperty ; - rdfs:domain lv2:Port ; - rdfs:label "Default value" ; - rdfs:comment """ -The default value that the host SHOULD set this port to when there is no -other information available. -""" . - -lv2:minimum a rdf:Property , owl:DatatypeProperty ; - rdfs:domain lv2:Port ; - rdfs:label "Minimum value" ; - lv2:documentation """ -

A hint to the host for the minimum useful value that the port will use. This -is a soft limit; the plugin is required to gracefully accept all values -in the range of a port's data type.

-""" . - -lv2:maximum a rdf:Property , owl:DatatypeProperty ; - rdfs:domain lv2:Port ; - rdfs:label "Maximum value" ; - lv2:documentation """ -

A hint to the host for the maximum useful value that the port will use. -This is a soft limit; the plugin is required to gracefully accept all -values in the range of a port's data type.

-""" . - -############# -## Feature ## -############# - -lv2:Feature a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Resource ; - rdfs:label "Feature" ; - rdfs:comment """ -An additional feature which a plugin or other resource may use or require. -""". - -lv2:optionalFeature a rdf:Property , owl:ObjectProperty ; - rdfs:domain lv2:Resource ; - rdfs:range lv2:Feature ; - rdfs:label "Optional feature" ; - lv2:documentation """ -

Signifies that a plugin or other resource supports a certain feature. If -the host supports this feature, it MUST pass its URI and any additional data to -the plugin in LV2_Descriptor::instantiate(). The plugin MUST NOT fail to -instantiate if an optional feature is not supported by the host.

-""" . - -lv2:requiredFeature a rdf:Property , owl:ObjectProperty ; - rdfs:domain lv2:Resource ; - rdfs:range lv2:Feature ; - rdfs:label "Required feature" ; - lv2:documentation """ -

Signifies that a plugin or other resource requires a certain feature. If -the host supports this feature, it MUST pass its URI and any additional data to -the plugin in LV2_Descriptor::instantiate(). The plugin MUST fail to -instantiate if a required feature is not present; hosts SHOULD always check -this before attempting to instantiate a plugin (i.e. discovery by attempting to -instantiate is strongly discouraged).

-""" . - -#################### -## Extension Data ## -#################### - -lv2:ExtensionData a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Resource ; - rdfs:label "Extension Data" ; - rdfs:comment """ -Additional data and/or functions a plugin may return from -LV2_Descriptor:extension_data() which can be used to add additional API beyond -that defined by LV2_Descriptor. -""". - -lv2:extensionData a rdf:Property , owl:ObjectProperty ; - rdfs:domain lv2:Resource ; - rdfs:range lv2:ExtensionData ; - rdfs:label "Available extension data" ; - lv2:documentation """ -

Signifies that a plugin provides additional data or functions (as defined by -some extension) via LV2:Descriptor::instantiate().

-""" . - -####################### -## Standard Features ## -####################### - -lv2:isLive a lv2:Feature ; - rdfs:label "Has a live (realtime) dependency" ; - lv2:documentation """ -

Indicates that the plugin has a real-time dependency (e.g. queues data from -a socket) and so its output must not be cached or subject to significant -latency, and calls to the run method should be done in rapid succession. This -property is not related to hard real-time execution requirements (see -lv2:hardRTCapable).

-""" . - -lv2:inPlaceBroken a lv2:Feature ; - rdfs:label "In-place broken" ; - lv2:documentation """ -

Indicates that the plugin may cease to work correctly if the host elects to -use the same data location for both input and output. Plugins that will fail -to work correctly if ANY input port is connected to the same location as ANY -output port MUST require this Feature. Doing so should be avoided as it makes -it impossible for hosts to use the plugin to process data in-place.

-""" . - -lv2:hardRTCapable a lv2:Feature ; - rdfs:label "Hard realtime capable" ; - lv2:documentation """ -

Indicates that the plugin is capable of running not only in a conventional -host but also in a hard real-time environment. To qualify for this the -plugin MUST satisfy all of the following:

-
    -
  1. The plugin MUST NOT use malloc(), free() or other heap memory management - functions within its Audio class functions.
  2. - -
  3. The plugin MUST NOT attempt to make use of any library functions in its - Audio class functions, unless those functions themselves adhere to these - rules (i.e. are hard realtime safe). The plugin MAY assume the standard C - and C math library functions are safe.
  4. - -
  5. The plugin will not access files, devices, pipes, sockets, IPC or any other - mechanism that might result in process or thread blocking within its Audio - class functions.
  6. - -
  7. The plugin will take an amount of time to execute a run() call - approximately of form A + B * sample_count where A - and B depend on the machine and host in use. This amount of - time MUST NOT depend on input signals or plugin state.
  8. -
-

Note these rules apply to the connect_port() function as well as run().

-""" . - -################## -## PortProperty ## -################## - -lv2:PortProperty a rdfs:Class , owl:Class ; - rdfs:label "Port property" ; - rdfs:comment """ -A port property - a useful piece of information that allows a host to make more -sensible decisions (e.g. to provide a better interface). -""" . - -lv2:portProperty a rdf:Property , owl:ObjectProperty ; - rdfs:domain lv2:Port ; - rdfs:range lv2:PortProperty ; - rdfs:label "Port property" ; - rdfs:comment """ -Relates Ports to PortProperties. The PortProperty may be ignored without -catastrophic effects, though it may be useful e.g. for providing a sensible -interface for the port. -""" . - -############################# -## Standard PortProperties ## -############################# - -lv2:connectionOptional a lv2:PortProperty ; - rdfs:label "Optionally connected port" ; - rdfs:comment """ -Indicates that this port does not have to be connected to valid data by the -host. If it is to be disconnected then the port MUST set to NULL with a call -to the connectPort method. -""" . - -lv2:reportsLatency a lv2:PortProperty ; - rdfs:label "Latency reporting port" ; - lv2:documentation """ -

Indicates that the port is used to express the processing latency incurred -by the plugin, expressed in samples. The latency may be affected by the current -sample rate, plugin settings, or other factors, and may be changed by the -plugin at any time. Where the latency is frequency dependent the plugin may -choose any appropriate value. If a plugin introduces latency it MUST provide -EXACTLY ONE port with this property set which informs the host of the -correct latency. In fuzzy cases the value output should be the -most reasonable based on user expectation of input/output alignment -(eg. musical delay/echo plugins should not report their delay as latency, as it -is an intentional effect).

-""" . - -lv2:toggled a lv2:PortProperty ; - rdfs:label "Toggled" ; - lv2:documentation """ -

Indicates that the data item should be considered a Boolean toggle. Data -less than or equal to zero should be considered off or false, and -data above zero should be considered on or true.

-""" . - -lv2:sampleRate a lv2:PortProperty ; - rdfs:label "Sample rate" ; - rdfs:comment """ -Indicates that any bounds specified should be interpreted as multiples of the -sample rate. For instance, a frequency range from 0Hz to the Nyquist frequency -(half the sample rate) could be requested by this property in conjunction with -lv2:minimum 0.0 and lv2:maximum 0.5. -Hosts that support bounds at all MUST support this property. -""" . - -lv2:integer a lv2:PortProperty ; - rdfs:label "Integer" ; - rdfs:comment """ -Indicates that a port's reasonable values are integers (eg. a user interface -would likely wish to provide a stepped control allowing only integer input). -A plugin MUST operate reasonably even if such a port has a non-integer input. -""" . - -lv2:enumeration a lv2:PortProperty ; - rdfs:label "Enumeration" ; - rdfs:comment """ -Indicates that a port's only reasonable values are the scale points defined for -that port. A host SHOULD NOT allow a user to set the value of such a port to -anything other than a scale point. However, a plugin MUST operate reasonably -even if such a port has an input that is not a scale point, preferably by -simply choosing the largest enumeration value less than or equal to the actual -input value (i.e. round the input value down). -""" . - -#################### -## Plugin Classes ## -#################### - -lv2:GeneratorPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Generator" ; - rdfs:comment """ -Any plugin that generates sound internally, rather than processing its input. -""" . - -lv2:InstrumentPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:GeneratorPlugin ; - rdfs:label "Instrument" ; - rdfs:comment """ -Any plugin that is intended to be played as a musical instrument. -""" . - -lv2:OscillatorPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:GeneratorPlugin ; - rdfs:label "Oscillator" . - -lv2:UtilityPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Utility" ; - rdfs:comment """ -Includes things like mathematical functions and non-musical delays. -""" . - -lv2:ConverterPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:UtilityPlugin ; - rdfs:label "Converter" ; - rdfs:comment """ -Any plugin that converts some form of input into a different form of output. -""" . - -lv2:AnalyserPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:UtilityPlugin ; - rdfs:label "Analyser" ; - rdfs:comment """ -Any plugin that analyses input to output some useful information. -""" . - -lv2:MixerPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:UtilityPlugin ; - rdfs:label "Mixer" ; - rdfs:comment """ -A plugin which mixes some number of inputs into some number of outputs. -""" . - -lv2:SimulatorPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Simulator" ; - rdfs:comment """ -Plugins that aim to duplicate the effect of some environmental effect or -musical equipment. -""" . - -lv2:DelayPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Delay" ; - rdfs:comment """ -Plugins that intentionally delay their input signal as an effect. -""" . - -lv2:ModulatorPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Modulator" . - -lv2:ReverbPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:subClassOf lv2:SimulatorPlugin ; - rdfs:subClassOf lv2:DelayPlugin ; - rdfs:label "Reverb" . - -lv2:PhaserPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:ModulatorPlugin ; - rdfs:label "Phaser" . - -lv2:FlangerPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:ModulatorPlugin ; - rdfs:label "Flanger" . - -lv2:ChorusPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:ModulatorPlugin ; - rdfs:label "Chorus" . - -lv2:FilterPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Filter" . - -lv2:LowpassPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:FilterPlugin ; - rdfs:label "Lowpass" . - -lv2:BandpassPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:FilterPlugin ; - rdfs:label "Bandpass" . - -lv2:HighpassPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:FilterPlugin ; - rdfs:label "Highpass" . - -lv2:CombPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:FilterPlugin ; - rdfs:label "Comb" . - -lv2:AllpassPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:FilterPlugin ; - rdfs:label "Allpass" . - -lv2:EQPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:FilterPlugin ; - rdfs:label "Equaliser" . - -lv2:ParaEQPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:EQPlugin ; - rdfs:label "Parametric" . - -lv2:MultiEQPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:EQPlugin ; - rdfs:label "Multiband" . - -lv2:SpatialPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Spatial" ; - rdfs:comment """ -Plugins that manipulate the position of audio in space (e.g. panning, -stereo width, surround encoding, etc.). -""" . - -lv2:SpectralPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Spectral" ; - rdfs:comment """ -Plugins that alter the spectral properties (e.g. frequency) of audio. -""" . - -lv2:PitchPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:SpectralPlugin ; - rdfs:label "Pitch Shifter" . - -lv2:AmplifierPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:DynamicsPlugin ; - rdfs:label "Amplifier" . - -lv2:DistortionPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Distortion" . - -lv2:WaveshaperPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:DistortionPlugin ; - rdfs:label "Waveshaper" . - -lv2:DynamicsPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:Plugin ; - rdfs:label "Dynamics" ; - rdfs:comment """ -Plugins that alter the envelope or dynamic range of audio. -""" . - -lv2:CompressorPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:DynamicsPlugin ; - rdfs:label "Compressor" . - -lv2:ExpanderPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:DynamicsPlugin ; - rdfs:label "Expander" . - -lv2:LimiterPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:DynamicsPlugin ; - rdfs:label "Limiter" . - -lv2:GatePlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:DynamicsPlugin ; - rdfs:label "Gate" . - -lv2:FunctionPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:UtilityPlugin ; - rdfs:label "Function" . - -lv2:ConstantPlugin a rdfs:Class , owl:Class ; - rdfs:subClassOf lv2:GeneratorPlugin ; - rdfs:label "Constant" . diff --git a/lv2/ns/lv2core/manifest.ttl b/lv2/ns/lv2core/manifest.ttl deleted file mode 100644 index 5733b55..0000000 --- a/lv2/ns/lv2core/manifest.ttl +++ /dev/null @@ -1,10 +0,0 @@ -@prefix doap: . -@prefix lv2: . -@prefix owl: . -@prefix rdfs: . - - - a doap:Project , lv2:Specification , owl:Ontology ; - lv2:minorVersion 6 ; - lv2:microVersion 1 ; - rdfs:seeAlso , . \ No newline at end of file diff --git a/lv2/ns/lv2core/waf b/lv2/ns/lv2core/waf deleted file mode 100755 index 907b984..0000000 Binary files a/lv2/ns/lv2core/waf and /dev/null differ diff --git a/lv2/ns/lv2core/wscript b/lv2/ns/lv2core/wscript deleted file mode 100644 index af4045a..0000000 --- a/lv2/ns/lv2core/wscript +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python -import os - -from waflib.extras import autowaf as autowaf -import waflib.Options as Options -import waflib.Scripting as Scripting - -# Version of this package (even if built as a child) -LV2CORE_VERSION = '6.1' - -# Variables for 'waf dist' -APPNAME = 'lv2core' -VERSION = LV2CORE_VERSION - -# Mandatory variables -top = '.' -out = 'build' - -def options(opt): - opt.load('compiler_c') - autowaf.set_options(opt) - opt.add_option('--bundle-only', action='store_true', default=False, - dest='bundle_only', - help="Only install bundle (not header or pkg-config file)") - opt.add_option('--copy-headers', action='store_true', default=False, - dest='copy_headers', - help='Copy headers instead of linking to bundle') - -def configure(conf): - if not hasattr(os.path, 'relpath') and not Options.options.copy_headers: - conf.fatal( - 'os.path.relpath missing, get Python 2.6 or use --copy-headers') - - conf.load('compiler_c') - autowaf.configure(conf) - - autowaf.display_msg(conf, "LV2 bundle directory", conf.env['LV2DIR']) - print('') - -def write_news(doap_file): - import rdflib - import textwrap - from time import strftime, strptime - - doap = rdflib.Namespace('http://usefulinc.com/ns/doap#') - dcs = rdflib.Namespace('http://ontologi.es/doap-changeset#') - rdfs = rdflib.Namespace('http://www.w3.org/2000/01/rdf-schema#') - foaf = rdflib.Namespace('http://xmlns.com/foaf/0.1/') - rdf = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') - - m = rdflib.ConjunctiveGraph() - - try: - m.parse(doap_file, format='n3') - except: - print('warning: no DOAP file found, unable to generate NEWS') - return - - spec = m.value(None, rdf.type, doap.Project) - - entries = {} - for r in m.triples([spec, doap.release, None]): - release = r[2] - revision = m.value(release, doap.revision, None) or '9999' - date = m.value(release, doap.created, None) or '9999-01-01' - blamee = m.value(release, dcs.blame, None) - changeset = m.value(release, dcs.changeset, None) - - entry = '%s (%s) stable;\n' % (APPNAME, revision) - - if changeset: - for i in m.triples([changeset, dcs.item, None]): - entry += '\n * ' + '\n '.join( - textwrap.wrap(m.value(i[2], rdfs.label, None), width=79)) - - entry += '\n\n -- %s <%s> %s\n\n' % ( - m.value(blamee, foaf.name, None), - m.value(blamee, foaf.mbox, None).replace('mailto:', ''), - strftime('%a, %d %b %Y %H:%M:%S +0000', strptime(date, '%Y-%m-%d'))) - - entries[revision] = entry - - news = open('NEWS', 'w') - for e in sorted(entries.keys(), reverse=True): - news.write(entries[e]) - news.close() - -def build(bld): - # Header "library" - obj = bld(export_includes = ['.'], - name = 'liblv2core', - target = 'lv2core') - - # Bundle (data) - bld.install_files('${LV2DIR}/lv2core.lv2', bld.path.ant_glob('*.ttl')) - - if not Options.options.bundle_only: - # Header - bld.install_files('${INCLUDEDIR}', 'lv2.h') - bld.install_files('${LV2DIR}/lv2core.lv2', 'lv2.h') - - # Pkgconfig file - autowaf.build_pc(bld, 'LV2CORE', LV2CORE_VERSION, '', []) - - # URI-like header include - include_dir = os.path.join(bld.env['INCLUDEDIR'], 'lv2/lv2plug.in/ns') - bundle_dir = os.path.join(bld.env['LV2DIR'], 'lv2core.lv2') - if bld.env['COPY_HEADERS']: - bld.install_files(os.path.join(include_dir, 'lv2core'), - bld.path.ant_glob('*.h')) - else: - bld.symlink_as(os.path.join(include_dir, 'lv2core'), - os.path.relpath(bundle_dir, include_dir)) - -class Dist(Scripting.Dist): - fun = 'dist' - cmd = 'dist' - - def archive(self): - # Write NEWS file - write_news('lv2core.doap.ttl') - - # Build distribution - Scripting.Dist.archive(self) - - # Delete generated NEWS file - os.remove('NEWS') - -class DistCheck(Dist, Scripting.DistCheck): - fun = 'distcheck' - cmd = 'distcheck' - - def archive(self): - Dist.archive(self) -- cgit v1.2.1