Skip to content

Instantly share code, notes, and snippets.

@mxmilkiib
Last active March 23, 2020 18:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mxmilkiib/e969015c453bc1bbf91d7b0cdf49ea78 to your computer and use it in GitHub Desktop.
Save mxmilkiib/e969015c453bc1bbf91d7b0cdf49ea78 to your computer and use it in GitHub Desktop.
lv2core.ttl with an empty prefix, see also zlfo.ttl https://gist.github.com/mxmilkb/6f65ee205fe84e2b166b3a38c932e785
@prefix doap: <http://usefulinc.com/ns/doap#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://lv2plug.in/ns/lv2core#> .
:Specification
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf doap:Project ;
:documentation """
<p>An LV2 specification (i.e. this specification, or an LV2 extension).</p>
<p>Specification data, like plugin data, is distributed in bundles
so hosts may discover <em>all</em> present LV2 data.</p>
""" .
:documentation
a rdf:Property ,
owl:AnnotationProperty ;
rdfs:range rdfs:Literal ;
rdfs:label "documentation" ;
rdfs:seeAlso <http://www.w3.org/TR/xhtml-basic/> ;
:documentation """
<p>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 &lt;body&gt; 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.</p>
<p>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 <a href="http://www.w3.org/TR/xhtml-basic/#s_xhtmlmodules"
>XHTML Basic, Section 3</a> for a list of legal tags.</p>
""" .
<http://lv2plug.in/ns/lv2core>
a owl:Ontology ,
:Specification ;
rdfs:seeAlso <lv2.h> ,
<lv2_util.h> ,
<lv2core.doap.ttl> ;
:documentation """
<p>LV2 is an interface for writing audio processors, or <q>plugins</q>, in
C/C++ which can be dynamically loaded into many applications, or <q>hosts</q>.
This <q>core</q> specification is simple and minimal, but is designed so that
<q>extensions</q> can be defined to add more advanced features, making it
possible to implement nearly any feature imaginable.</p>
<p>LV2 maintains a strong distinction between <q>code</q> and <q>data</q>.
Plugin code is in a shared library, while data is in a companion data file
written in <a href="http://www.w3.org/TeamSubmission/turtle/">Turtle</a>.
Code, data, and any other resources (e.g. waveforms) are shipped together in a
<q>bundle</q> directory. The code contains only the executable portions of the
plugin which inherently <em>must</em> 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.</p>
<p>An LV2 plugin library is suitable for dynamic loading (e.g. via
<code>dlopen()</code>) and provides one or more plugin descriptors via
<code>lv2_descriptor()</code> or <code>lv2_lib_descriptor()</code>. These can
be instantiated to create plugin <q>instances</q>, which can be run directly on
data or connected together to perform advanced signal processing tasks.</p>
<p>Plugins communicate via <q>ports</q>, which can transmit any type of data.
Data is processed by first <q>connecting</q> each port to a buffer, then
repeatedly calling a plugin's <code>run()</code> method to process blocks of
data.</p>
<p>This core specification defines two types of port, equivalent to those in <a
href="http://www.ladspa.org/">LADSPA</a>: :ControlPort and :AudioPort.
Audio ports contain arrays with one <code>float</code> element per sample,
allowing a block of audio to be processed in a single call to
<code>run()</code>. Control ports contain single <code>float</code> values,
which are fixed and valid for the duration of the call to <code>run()</code>.
Thus the <q>control rate</q> is determined by the block size, which is
controlled by the host (and not necessarily constant).</p>
<h3>Threading Rules</h3>
<p>To faciliate use in multi-threaded programs, LV2 functions are partitioned
into several threading classes:</p>
<table>
<tr><th>Discovery Class</th>
<th>Instantiation Class</th>
<th>Audio Class</th></tr>
<tr><td>lv2_descriptor()</td>
<td>LV2_Descriptor::instantiate()</td>
<td>LV2_Descriptor::run()</td></tr>
<tr><td>lv2_lib_descriptor()</td>
<td>LV2_Descriptor::cleanup()</td>
<td>LV2_Descriptor::connect_port()</td></tr>
<tr><td>LV2_Descriptor::extension_data()</td>
<td>LV2_Descriptor::activate()</td><td></td></tr>
<tr><td></td><td>LV2_Descriptor::deactivate()</td><td></td></tr>
</table>
<p>The rules that hosts MUST follow are:</p>
<ul>
<li>When any function is running for a plugin instance,
no other function in the same class may run for that instance.</li>
<li>When a <em>Discovery</em> function is running,
no other functions in the same shared object file may run.</li>
<li>When an <em>Instantiation</em> function is running for a plugin instance,
no other functions for that instance may run.</li>
</ul>
<p>Any simultaneous calls that are not explicitly forbidden by these rules are
allowed. For example, a host may call <code>run()</code> for two different
plugin instances simultaneously.</p>
<p>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.</p>
<p>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.</p>
""" .
:PluginBase
a rdfs:Class ,
owl:Class ;
rdfs:label "Plugin Base" ;
:documentation """
<p>An abstract plugin-like resource that MAY not actually be an LV2 plugin
(e.g. may not actually have a plugin binary).</p>
<p>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 <q>understand</q> this structure.</p>
""" .
:Plugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :PluginBase ;
rdfs:label "Plugin" ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty doap:name ;
owl:someValuesFrom rdf:PlainLiteral ;
rdfs:comment "A plugin MUST have at least one untranslated doap:name."
] , [
a owl:Restriction ;
owl:onProperty :port ;
owl:allValuesFrom :Port ;
rdfs:comment "All ports on a plugin MUST be fully specified :Port instances."
] ;
:documentation """
<p>The class which represents an LV2 plugin.</p>
<p>To be discovered by hosts, plugins MUST explicitly have rdf:type :Plugin
listed in their bundle's manifest, e.g.:</p>
<pre class="turtle-code">
&lt;http://example.org/my-plugin&gt; a :Plugin .
</pre>
<p>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. <q>Tape Delay Unit</q>. Use doap:shortdesc or doap:description for more
detailed descriptions.</p>
""" .
:PortBase
a rdfs:Class ,
owl:Class ;
rdfs:label "Port Base" ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty :symbol ;
owl:cardinality 1 ;
rdfs:comment "A port MUST have exactly one :symbol."
] ;
:documentation """
<p>Similar to :PluginBase, an abstract port-like resource that MAY not
actually be a fully specified LV2 port. For example, this is used for preset
"ports" which do not specify an index.</p>
""" .
:Port
a rdfs:Class ,
owl:Class ;
rdfs:label "Port" ;
rdfs:subClassOf :PortBase ,
[
a owl:Restriction ;
owl:onProperty :name ;
owl:minCardinality 1 ;
rdfs:comment "A port MUST have at least one :name."
] ;
:documentation """
<p>The class which represents an LV2 port.</p>
<p>All LV2 port descriptions MUST have a rdf:type that is one of :Port
:InputPort or :OutputPort. Additionally there MUST be at least one other
rdf:type which more precisely describes type of the port
(e.g. :AudioPort).</p>
<p>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 <q>connect</q> 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).</p>
<p>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).</p>
""" .
:InputPort
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :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." .
:OutputPort
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :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." .
:ControlPort
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Port ;
rdfs:label "Control Port" ;
:documentation """
<p>Ports of this type will be connected to a pointer to a single value of C
type <code>float</code>.</p>
""" .
:AudioPort
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Port ;
rdfs:label "Audio Port" ;
:documentation """
<p>Ports of this type will be connected to an array of length sample_count
with elements of C type <code>float</code>.</p>
""" .
:CVPort
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Port ;
rdfs:label "CV Port" ;
:documentation """
<p>Ports of this type have the same buffer format as an :AudioPort, except
the buffer represents audio-rate control data rather than audio. Like an
:ControlPort, a CVPort SHOULD have properties describing its value
(e.g. :minimum, :maximum, and :default), and may be presented to the
user as a control.</p>
<p>It is generally safe to connect an audio output to a CV input, but not vice
versa. Hosts SHOULD take care to prevent data from a CVPort port from being
used as audio.</p>
""" .
:port
a rdf:Property ,
owl:ObjectProperty ;
rdfs:domain :PluginBase ;
rdfs:range :PortBase ;
rdfs:label "port" ;
rdfs:comment "A port (input or output) on this plugin." .
:project
a rdf:Property ,
owl:ObjectProperty ;
rdfs:range doap:Project ;
rdfs:label "project" ;
:documentation """
<p>The project this is a component of.</p>
<p>This property provides a way to group plugins and/or related resources. A
project may have useful metadata common to all plugins (such as homepage,
author, version history) which would be wasteful to list separately for each
plugin.</p>
<p>Grouping via projects also allows users to find plugins in hosts by project,
which is often how they are remembered. For this reason, a project that
contains plugins SHOULD always have a doap:name. It is also a good idea for
each plugin and the project itself to have an :symbol property, which allows
nice quasi-global identifiers for plugins, e.g. <q>myproj.superamp</q> which
can be useful for display or fast user entry.</p>
""" .
:prototype
a rdf:Property ,
owl:ObjectProperty ;
rdfs:label "prototype" ;
:documentation """
<p>The prototype to inherit properties from.</p>
<p>This property can be used to <q>include</q> common properties in several
descriptions. If a plugin has a prototype, then the host must load all the
properties for the prototype as if they were properties of the plugin. That
is, if <code>:plug :prototype :prot</code>, then for each triple <code>:prot
p o</code>, the triple <code>:plug p o</code> should be loaded.</p>
<p>This facility is useful for distributing text-only plugins that rely on a
common binary, by referring to a prototype which is installed by the
corresponding software, along with the plugin binary.</p>
""" .
:minorVersion
a rdf:Property ,
owl:DatatypeProperty ;
rdfs:range xsd:nonNegativeInteger ;
rdfs:label "minor version" ;
:documentation """
<p>The minor version of an LV2 Resource. This, along with :microVersion, is
used to distinguish between different versions of the <q>same</q> resource,
e.g. to load only the bundle with the most recent version of a plugin. An LV2
version has a minor and micro number with the usual semantics:</p>
<ul>
<li>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.</li>
<li>The micro version is incremented for changes which do not affect
compatibility at all, e.g. bug fixes or documentation updates.</li>
</ul>
<p>Note there is deliberately no major version; all versions with the same URI
are compatible by definition. Replacing a resource with a newer version of
that resource MUST NOT break anything. If a change violates this rule, then
the URI of the resource (which serves as the major version) MUST be
changed.</p>
<p>Plugins and extensions MUST adhere to at least the following rules:</p>
<ul>
<li>All versions of a plugin with a given URI MUST have the <q>same</q> set of
mandatory (i.e. not :connectionOptional) ports with respect to :symbol
and rdf:type. In other words, every port on a particular version is guaranteed
to exist on a future version with same :symbol and at least those
rdf:types.</li>
<li>New ports MAY be added without changing the plugin URI if and only if they
are :connectionOptional and the minor version is incremented.</li>
<li>The minor version MUST be incremented if the index of any port (identified
by its symbol) is changed.</li>
<li>All versions of a specification MUST be compatible in the sense that an
implementation of the new version can interoperate with an implementation of
any previous version.</li>
</ul>
<p>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 <em>instance</em> at run-time).</p>
<p>When hosts discover several installed versions of a resource, they SHOULD
warn the user and load only the most recent version.</p>
<p>An odd minor <em>or</em> micro version, or minor version zero, indicates
that the resource is a development version. Hosts and tools SHOULD clearly
indicate this wherever appropriate. Minor version zero is a special case for
pre-release development of plugins, or experimental plugins that are not
intended for stable use at all. Hosts SHOULD NOT expect such a plugin to
remain compatible with any future version. If possible, hosts SHOULD hide such
plugins from users unless an <q>experimental</q> option is enabled.</p>
""" .
:microVersion
a rdf:Property ,
owl:DatatypeProperty ;
rdfs:range xsd:nonNegativeInteger ;
rdfs:label "micro version" ;
:documentation """
<p>The micro component of a Resource's version.</p>
<p>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.</p>
<p>This property describes half of a resource version. For detailed
documentation on LV2 resource versioning, see :minorVersion.</p>
""" .
:binary
a rdf:Property ,
owl:ObjectProperty ;
rdfs:range owl:Thing ;
rdfs:label "binary" ;
:documentation """
<p>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).</p>
<p>This is a required property of a Plugin which MUST be included in the
bundle's manifest.ttl file. The :binary of an :Plugin is the shared
object containing the <code>lv2_descriptor()</code> or
<code>lv2_lib_descriptor()</code> 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.</p>
""" .
:appliesTo
a rdf:Property ,
owl:ObjectProperty ;
rdfs:range :Plugin ;
rdfs:label "applies to" ;
:documentation """
<p>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.:</p>
<pre class="turtle-code">
&lt;thing&gt;
a ext:Thing ;
:appliesTo &lt;plugin&gt; ;
rdfs:seeAlso &lt;thing.ttl&gt; .
</pre>
<p>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.</p>
""" .
:index
a rdf:Property ,
owl:DatatypeProperty ,
owl:FunctionalProperty ;
rdfs:range xsd:unsignedInt ;
rdfs:label "index" ;
rdfs:comment "A non-negative zero-based 32-bit index." .
:Symbol
a rdfs:Datatype ;
owl:onDatatype xsd:string ;
owl:withRestrictions (
[
xsd:pattern "[_a-zA-Z][_a-zA-Z0-9]*"
]
) ;
rdfs:comment """A short restricted name used as a machine and human readable identifier.
The first character must be one of _, a-z or A-Z and subsequent characters can be from _, a-z, A-Z and 0-9. This is a valid C identifier, and compatible in most other contexts with restricted string identifiers (e.g. file paths).""" .
:symbol
a rdf:Property ,
owl:DatatypeProperty ,
owl:FunctionalProperty ;
rdfs:label "symbol" ;
rdfs:range :Symbol ,
rdf:PlainLiteral ;
:documentation """
<p>The value of this property MUST conform to the rules for :Symbol, and
MUST NOT have a language tag.</p>
<p>A symbol is a unique identifier with respect to the parent (e.g. a port's
symbol is a unique identifier with respect to its plugin). The plugin author
MUST change the plugin URI if a port symbol is changed or removed.</p>
""" .
:name
a rdf:Property ,
owl:DatatypeProperty ;
rdfs:label "name" ;
rdfs:range xsd:string ;
rdfs:comment """A display name for labeling in a user interface. Unlike :symbol this is unrestricted and may be translated. The :name MUST NOT be used as an identifier.
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.""" .
:shortName
a rdf:Property ,
owl:DatatypeProperty ;
rdfs:label "short name" ;
rdfs:range xsd:string ;
rdfs:comment """A short display name for labeling in a user interface.
The same rules for port names apply here, with the exception that short names should not be longer than 16 characters.""" .
:Designation
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf rdf:Property ;
rdfs:label "Designation" ;
:documentation """
<p>The designation (or <q>assignment</q>) of an input or output. A designation
is metadata that describes the meaning or role of data. By assigning a
designation to a port using :designation, the port's content becomes
meaningful and can be used more intelligently by the host.</p>
""" .
:Channel
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Designation ;
rdfs:label "Channel" ;
:documentation """
<p>A specific channel, e.g. <q>left</q> or <q>right</q>. A channel may be
audio, or another type such as a MIDI control stream.</p>
""" .
:Parameter
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Designation ,
rdf:Property ;
rdfs:label "Parameter" ;
:documentation """
<p>A parameter, i.e. a recognized property. A parameter is a designation for a
control.</p>
<p>A parameter defines the <em>meaning</em> of a control (not the
<em>method</em> of conveying its value). The standard way of exposing a plugin
parameter is via an :ControlPort, which can be given a parameter designation
with :designation. Other methods, such as setting dynamic parameters via
messages, are possible but not defined here.</p>
""" .
:designation
a rdf:Property ,
owl:ObjectProperty ,
owl:FunctionalProperty ;
rdfs:range rdf:Property ;
rdfs:label "designation" ;
:documentation """
<p>Indicates a channel or parameter designation.</p>
<p>This property is used to give the port's contents a well-defined meaning.
For example, if a port has :designation eg:gain, then the value of that port
represents the eg:gain of the plugin instance.</p>
<p>Ports should be given designations whenever a well-defined designation
exists. This allows the host to act more intelligently and/or provide a more
effective user interface. For example, if the plugin has a BPM parameter, the
host may automatically set that parameter to the current tempo.</p>
""" .
:latency
a rdf:Property ,
owl:DatatypeProperty ;
rdfs:range xsd:nonNegativeInteger ;
rdfs:label "latency" ;
rdfs:comment "The latency introduced, in frames." .
:freeWheeling
a rdf:Property ,
owl:DatatypeProperty ;
rdfs:label "free-wheeling" ;
rdfs:range xsd:boolean ;
:documentation """
<p>Whether or not processing is currently free-wheeling. If true, this means
that all processing is happening as quickly as possible, not in real-time.
When free-wheeling there is no relationship between the passage of real
wall-clock time and the passage of time in the data being processed (e.g. audio
frames).</p>
""" .
:enabled
a rdf:Property ,
owl:DatatypeProperty ;
rdfs:label "enabled" ;
rdfs:range xsd:int ;
:documentation """
<p>Whether or not processing is currently enabled, that is, not bypassed.</p>
<p>If this value is greater than zero, the plugin processes normally. If this
value is zero, the plugin is expected to bypass all signals unmodified. The
plugin must provide a click-free transition between the enabled and disabled
(bypassed) states.</p>
<p>Values less than zero are reserved for future use (such as click-free
insertion/removal of latent plugins), and should be treated like zero
(bypassed) by current implementations.</p>
""" .
:control
a :Channel ;
rdfs:label "control" ;
:documentation """
<p>The primary control channel. This should be used as the :designation of
ports that are used to send commands and receive responses. Typically this
will be an event port that supports some protocol, e.g. MIDI or LV2 Atoms.</p>
""" .
:Point
a rdfs:Class ,
owl:Class ;
rdfs:label "Point" ;
:documentation """
<p>A Point describes an interesting value in a Port's range (much like a labeled
<q>notch</q> on a physical knob).</p>
<ul>
<li>A Point MUST have at least one rdfs:label which is a string.</li>
<li>A Point MUST have exactly one rdf:value with a type that is compatible
with the type of the corresponding Port.</li>
</ul>
""" .
:ScalePoint
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Point ;
rdfs:label "Scale Point" ;
rdfs:comment "A single float Point (for control inputs)." .
:scalePoint
a rdf:Property ,
owl:ObjectProperty ;
rdfs:range :ScalePoint ;
rdfs:label "scale point" ;
rdfs:comment "A scale point of a port or parameter." .
:default
a rdf:Property ,
owl:DatatypeProperty ,
owl:FunctionalProperty ;
rdfs:label "default" ;
rdfs:comment "The default value that the host SHOULD set this port to when there is no other information available." .
:minimum
a rdf:Property ,
owl:DatatypeProperty ,
owl:FunctionalProperty ;
rdfs:label "minimum" ;
:documentation """
<p>A hint to the host for the minimum useful value that the port will use. This
is a <q>soft</q> limit; the plugin is required to gracefully accept all values
in the range of a port's data type.</p>
""" .
:maximum
a rdf:Property ,
owl:DatatypeProperty ,
owl:FunctionalProperty ;
rdfs:label "maximum" ;
:documentation """
<p>A hint to the host for the maximum useful value that the port will use.
This is a <q>soft</q> limit; the plugin is required to gracefully accept all
values in the range of a port's data type.</p>
""" .
:Feature
a rdfs:Class ,
owl:Class ;
rdfs:label "Feature" ;
rdfs:comment "An additional feature which a plugin or other resource may use or require." .
:optionalFeature
a rdf:Property ,
owl:ObjectProperty ;
rdfs:range :Feature ;
rdfs:label "optional feature" ;
:documentation """
<p>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.</p>
""" .
:requiredFeature
a rdf:Property ,
owl:ObjectProperty ;
rdfs:range :Feature ;
rdfs:label "required feature" ;
:documentation """
<p>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).</p>
""" .
:ExtensionData
a rdfs:Class ,
owl:Class ;
rdfs:label "Extension Data" ;
:documentation """
<p>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.</p>
""" .
:extensionData
a rdf:Property ,
owl:ObjectProperty ;
rdfs:range :ExtensionData ;
rdfs:label "extension data" ;
:documentation """
<p>Signifies that a plugin provides additional data or functions (as defined by
some extension) via LV2_Descriptor::instantiate().</p>
""" .
:isLive
a :Feature ;
rdfs:label "is live" ;
:documentation """
<p>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 <q>hard real-time</q> execution requirements (see
:hardRTCapable).</p>
""" .
:inPlaceBroken
a :Feature ;
rdfs:label "in-place broken" ;
:documentation """
<p>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 <q>in-place</q>.</p>
""" .
:hardRTCapable
a :Feature ;
rdfs:label "hard real-time capable" ;
:documentation """
<p>Indicates that the plugin is capable of running not only in a conventional
host but also in a <q>hard real-time</q> environment. To qualify for this the
plugin MUST satisfy all of the following:</p>
<ol>
<li>The plugin MUST NOT use malloc(), free() or other heap memory management
functions within its Audio class functions.</li>
<li>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.</li>
<li>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.</li>
<li>The plugin will take an amount of time to execute a run() call
approximately of form <code>A + B * sample_count</code> where <code>A</code>
and <code>B</code> depend on the machine and host in use. This amount of
time MUST NOT depend on input signals or plugin state.</li>
</ol>
<p>Note these rules apply to the connect_port() function as well as run().</p>
""" .
:PortProperty
a rdfs:Class ,
owl:Class ;
rdfs:label "Port Property" ;
rdfs:comment "A property of this port that allows a host to make more sensible decisions (e.g. to provide a better interface)." .
:portProperty
a rdf:Property ,
owl:ObjectProperty ;
rdfs:domain :Port ;
rdfs:range :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." .
:connectionOptional
a :PortProperty ;
rdfs:label "connection optional" ;
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." .
:reportsLatency
a :PortProperty ;
rdfs:label "reports latency" ;
:documentation """
<p>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
<q>correct</q> latency. In <q>fuzzy</q> 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).</p>
""" .
:toggled
a :PortProperty ;
rdfs:label "toggled" ;
:documentation """
<p>Indicates that the data item should be considered a Boolean toggle. Data
less than or equal to zero should be considered <q>off</q> or <q>false</q>, and
data above zero should be considered <q>on</q> or <q>true</q>.</p>
""" .
:sampleRate
a :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 :minimum 0.0 and :maximum 0.5. Hosts that support bounds at all MUST support this property." .
:integer
a :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.""" .
:enumeration
a :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).""" .
:isSideChain
a :PortProperty ;
rdfs:label "is side-chain" ;
rdfs:comment """Indicates that a port is a "sidechain", which affects the output somehow but should not be considered a main input. Sidechain ports should be connectionOptional, and may be ignored by hosts.""" .
:GeneratorPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Generator" ;
rdfs:comment "Any plugin that generates sound internally, rather than processing its input." .
:InstrumentPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :GeneratorPlugin ;
rdfs:label "Instrument" ;
rdfs:comment "Any plugin that is intended to be played as a musical instrument." .
:OscillatorPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :GeneratorPlugin ;
rdfs:label "Oscillator" .
:UtilityPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Utility" ;
rdfs:comment "Includes things like mathematical functions and non-musical delays." .
:ConverterPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :UtilityPlugin ;
rdfs:label "Converter" ;
rdfs:comment "Any plugin that converts some form of input into a different form of output." .
:AnalyserPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :UtilityPlugin ;
rdfs:label "Analyser" ;
rdfs:comment "Any plugin that analyses input to output some useful information." .
:MixerPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :UtilityPlugin ;
rdfs:label "Mixer" ;
rdfs:comment "A plugin which mixes some number of inputs into some number of outputs." .
:SimulatorPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Simulator" ;
rdfs:comment "Plugins that aim to duplicate the effect of some environmental effect or musical equipment." .
:DelayPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Delay" ;
rdfs:comment "Plugins that intentionally delay their input signal as an effect." .
:ModulatorPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Modulator" .
:ReverbPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ,
:SimulatorPlugin ,
:DelayPlugin ;
rdfs:label "Reverb" .
:PhaserPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :ModulatorPlugin ;
rdfs:label "Phaser" .
:FlangerPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :ModulatorPlugin ;
rdfs:label "Flanger" .
:ChorusPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :ModulatorPlugin ;
rdfs:label "Chorus" .
:FilterPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Filter" .
:LowpassPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :FilterPlugin ;
rdfs:label "Lowpass" .
:BandpassPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :FilterPlugin ;
rdfs:label "Bandpass" .
:HighpassPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :FilterPlugin ;
rdfs:label "Highpass" .
:CombPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :FilterPlugin ;
rdfs:label "Comb" .
:AllpassPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :FilterPlugin ;
rdfs:label "Allpass" .
:EQPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :FilterPlugin ;
rdfs:label "Equaliser" .
:ParaEQPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :EQPlugin ;
rdfs:label "Parametric" .
:MultiEQPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :EQPlugin ;
rdfs:label "Multiband" .
:SpatialPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Spatial" ;
rdfs:comment """Plugins that manipulate the position of audio in space (e.g. panning,
stereo width, surround encoding, etc.).""" .
:SpectralPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Spectral" ;
rdfs:comment "Plugins that alter the spectral properties (e.g. frequency) of audio." .
:PitchPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :SpectralPlugin ;
rdfs:label "Pitch Shifter" .
:AmplifierPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :DynamicsPlugin ;
rdfs:label "Amplifier" .
:EnvelopePlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :DynamicsPlugin ;
rdfs:label "Envelope" .
:DistortionPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Distortion" .
:WaveshaperPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :DistortionPlugin ;
rdfs:label "Waveshaper" .
:DynamicsPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "Dynamics" ;
rdfs:comment "Plugins that alter the envelope or dynamic range of audio." .
:CompressorPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :DynamicsPlugin ;
rdfs:label "Compressor" .
:ExpanderPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :DynamicsPlugin ;
rdfs:label "Expander" .
:LimiterPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :DynamicsPlugin ;
rdfs:label "Limiter" .
:GatePlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :DynamicsPlugin ;
rdfs:label "Gate" .
:FunctionPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :UtilityPlugin ;
rdfs:label "Function" .
:ConstantPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :GeneratorPlugin ;
rdfs:label "Constant" .
:MIDIPlugin
a rdfs:Class ,
owl:Class ;
rdfs:subClassOf :Plugin ;
rdfs:label "MIDI" .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment