From 725d4a404b838da6b67d9da66228a1125bddef57 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 20 Nov 2011 23:08:57 +0000 Subject: Lay out repository structure to match include and URI structure. Treat lv2core like all the other specifications in gendoc.py. --- ns/lv2core/lv2core.ttl | 883 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 883 insertions(+) create mode 100644 ns/lv2core/lv2core.ttl (limited to 'ns/lv2core/lv2core.ttl') diff --git a/ns/lv2core/lv2core.ttl b/ns/lv2core/lv2core.ttl new file mode 100644 index 0000000..0ab56c5 --- /dev/null +++ b/ns/lv2core/lv2core.ttl @@ -0,0 +1,883 @@ +# 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" . -- cgit v1.2.1