Abstract all RDF stuff into 3 functions.
[lv2.git] / core.lv2 / lv2.ttl
blobc3abdbff0af3795b2d1c3b1527544f0839de1a2e
1 # RDF Schema for LV2 plugins
2 # PROVISIONAL Revision 4
4 # This document describes the classes and properties that are defined by the
5 # core LV2 specification.  See <http://lv2plug.in> for more information.
6
7 # Copyright (C) 2006-2009 Steve Harris, David Robillard
8
9 # Permission is hereby granted, free of charge, to any person obtaining a
10 # copy of this software and associated documentation files (the "Software"),
11 # to deal in the Software without restriction, including without limitation
12 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 # and/or sell copies of the Software, and to permit persons to whom the
14 # Software is furnished to do so, subject to the following conditions:
15
16 # The above copyright notice and this permission notice shall be included
17 # in all copies or substantial portions of the Software.
18
19 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 # OTHER DEALINGS IN THE SOFTWARE.
27 @prefix lv2:  <http://lv2plug.in/ns/lv2core#> .
28 @prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
29 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
30 @prefix owl:  <http://www.w3.org/2002/07/owl#> .
31 @prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
32 @prefix doap: <http://usefulinc.com/ns/doap#> .
33 @prefix foaf: <http://xmlns.com/foaf/0.1/> .
35 ####################
36 ## Resource Class ##
37 ####################
39 lv2:Resource a rdfs:Class ;
40     rdfs:comment """
41 An LV2 Resource (e.g. plugin, specification, or any other LV2 related thing)
42 """ .
45 #########################
46 ## Specification Class ##
47 #########################
49 lv2:Specification a rdfs:Class ;
50     rdfs:subClassOf lv2:Resource ;
51     rdfs:comment """
52 An LV2 specification (i.e. this specification, or an LV2 "extension").
54 Specification data, like plugin data, is distributed in standardized bundles
55 so hosts may discover all present LV2 data.  See http://lv2plug.in/docs for
56 more details.
57 """ .
60 #######################
61 ## LV2 Specification ##
62 #######################
64 <http://lv2plug.in/ns/lv2core>
65     a doap:Project , lv2:Specification ;
66     doap:license <http://usefulinc.com/doap/licenses/mit> ;
67     doap:name "LV2" ;
68     doap:homepage <http://lv2plug.in> ;
69     doap:created "2004-04-21" ;
70     doap:shortdesc "An audio plugin interface specification" ;
71     doap:programming-language "C" ;
72     doap:release [
73         doap:revision "4" ;
74         doap:created "2009-08-16"
75     ] ;
76     doap:maintainer [
77         a foaf:Person ;
78         foaf:name "Steve Harris" ;
79         foaf:homepage <http://plugin.org.uk/> ;
80         rdfs:seeAlso <http://plugin.org.uk/swh.xrdf>
81     ] , [
82         a foaf:Person ;
83         foaf:name "David Robillard" ;
84         foaf:homepage <http://drobilla.net/> ;
85         rdfs:seeAlso <http://drobilla.net/drobilla.rdf>
86     ] ; rdfs:comment """
87 <h4>Overview</h4>
88 There are a large number of open source and free software synthesis packages in
89 use or development at this time. This API ("LV2") attempts to give programmers
90 the ability to write simple "plugin" audio processors in C/C++ and link
91 them dynamically ("plug" them) into a range of these packages ("hosts").
92 It should be possible for any host and any plugin to communicate completely
93 through this interface.
95 This API is deliberately as short and simple as possible.  The information
96 required to use a plugin is in a companion data (RDF) file.  The shared
97 library portion of the API does not contain enough information to make use
98 of the plugin possible; the data file is mandatory.
100 Plugins can operate on any type of data.  Plugins have "ports" that are
101 inputs or outputs and each plugin is "run" for a "block" corresponding to
102 a short time interval measured in samples.  The plugin may assume that all
103 its input and output ports have been connected to the relevant data location
104 (using the connect_port() function) before it is asked to run, unless the
105 port has been set "connection optional" in the plugin's data file.
107 This "core" specification defines two types of port data, equivalent to those
108 in LADSPA: control rate and audio rate.  Audio rate data is communicated using
109 arrays with one <code>float</code> element per sample processed, allowing
110 a block of audio to be processed by the plugin in a single pass. Control
111 rate data is communicated using single <code>float</code> values. Control
112 rate data has a single value at the start of a call to the run() function
113 which is considered valid for the duration of the call to run().  Thus the
114 "control rate" is determined by the block size, controlled by the host.
116 Plugins reside in shared object files suitable for dynamic linking (e.g. by
117 dlopen() and family). This file provides one or many plugins via the
118 lv2_descriptor() function.  These plugins can be instantiated to create
119 "plugin instances", which can be connected together to perform tasks.
121 This API contains very limited error-handling.
123 <h4>Threading Rules</h4> Certain hosts may need to call the functions
124 provided by a plugin from multiple threads. For this to be safe, the plugin
125 must be written so that those functions can be executed simultaneously
126 without problems.  To facilitate this, the functions provided by a plugin
127 are divided into classes:
129 <dl>
130 <dt>Discovery Class</dt>
131 <dd>lv2_descriptor(), extension_data()</dd>
132 <dt>Instantiation Class</dt>
133 <dd>instantiate(), cleanup(), activate(), deactivate()</dd>
134 <dt>Audio Class</dt>
135 <dd>run(), connect_port()</dd>
136 </dl>
138 Extensions to this specification which add new functions MUST declare in
139 which of these classes the functions belong, or define new classes for them.
140 The rules that hosts MUST follow are:
142 <ul>
143 <li>When a function is running for a plugin instance, no other
144    function in the same class may run for that instance.</li>
145 <li>When a function from the Discovery class is running, no other
146    functions in the same shared object file may run.</li>
147 <li>When a function from the Instantiation class is running for a plugin
148    instance, no other functions for that instance may run.</li>
149 </ul>
150 Any simultaneous calls that are not explicitly forbidden by these rules
151 are allowed. For example, a host may call run() for two different plugin
152 instances simultaneously.
153 """ .
157 #############################
158 ## Template/Plugin Classes ##
159 #############################
161 lv2:Template a rdfs:Class ;
162     rdfs:subClassOf lv2:Resource ;
163     rdfs:comment """
164 An abstract plugin-like resource that may not actually be an LV2 plugin
165 (e.g. may not actually have a plugin binary).  A Template is a Resource
166 that may have ports, and otherwise mimic the structure of a plugin.
167 This should be subclassed by extensions that define such things.
168 """ .
169     
170 lv2:Plugin a rdfs:Class ;
171     rdfs:subClassOf lv2:Template ;
172     rdfs:label "Plugin" ;
173     rdfs:subClassOf [
174         a                  owl:Restriction ;
175         owl:onProperty     rdf:type ;
176         owl:hasValue       lv2:Plugin ;
177         rdfs:comment """
178 A Plugin MUST have at least one rdf:type that is lv2:Plugin.
179 """ ] , [
180         a                  owl:Restriction ;
181         owl:onProperty     doap:name ;
182         owl:someValuesFrom xsd:string ;
183         rdfs:comment """
184 A Plugin MUST have at least one doap:name that is a string
185 with no language tag.
186 """ ] ;
187     rdfs:comment """
188 The class which represents an LV2 plugin.
190 Plugins SHOULD have a doap:license property whenever possible.
191 The doap:name property should be at most a few words in length using title
192 capitalization, e.g. "Tape Delay Unit".  Use doap:shortdesc or
193 doap:description for more detailed descriptions.
194 """ .
198 ##################
199 ## Port Classes ##
200 ##################
202 lv2:Port a rdfs:Class ;
203     rdfs:subClassOf lv2:Resource ;
204     rdfs:label   "Port" ;
205     rdfs:subClassOf [
206         a                  owl:Restriction ;
207         owl:onProperty     rdf:type ;
208         owl:someValuesFrom [
209             a         owl:DataRange ;
210             owl:oneOf ( lv2:Port lv2:InputPort lv2:OutputPort )
211         ] ;
212         rdfs:comment """
213 A Port MUST have at least one rdf:type with object either lv2:Port,
214 lv2:InputPort, or lv2:OutputPort.
215 """ ] , [
216         a                  owl:Restriction ;
217         owl:onProperty     rdf:type ;
218         owl:minCardinality 2 ;
219         rdfs:comment """
220 A Port MUST have at least two rdf:type properties with objects that are some
221 subclass of lv2:Port (one for lv2:Port, lv2:InputPort, or lv2:OutputPort,
222 and another to describe the specific data type, e.g. lv2:AudioPort).
223 """  ] , [
224          a                  owl:Restriction ;
225          owl:onProperty     lv2:index ;
226          owl:someValuesFrom xsd:decimal ;
227          owl:cardinality    1 ;
228          rdfs:comment """
229 A port MUST have a single lv2:index which is of type xsd:decimal (e.g. a
230 literal integer in Turtle).
231 """  ] , [
232          a                  owl:Restriction ;
233          owl:onProperty     lv2:symbol ;
234          owl:someValuesFrom xsd:string ;
235          rdfs:comment """
236 A port MUST have a single lv2:symbol which is of type xsd:string with no
237 language tag.
238 """  ] , [
239          a                  owl:Restriction ;
240          owl:onProperty     lv2:name ;
241          owl:someValuesFrom xsd:string ;
242          rdfs:comment """
243 A port MUST have at least one lv2:name which is of type xsd:string.
244 """ ] ;
245     rdfs:comment """
246 The class which represents an LV2 port.
248 In order for it to be used by a host it MUST have at least 
249 the following properties:
250     rdf:type (with object one of lv2:Port, lv2:InputPort, lv2:OutputPort)
251     rdf:type (more specific port class, see below)
252     lv2:index
253     lv2:symbol
254     lv2:name
256 All LV2 port descriptions MUST have a property rdf:type where the object is
257 one of lv2:Port lv2:InputPort or lv2:OutputPort.  Additionally there MUST
258 be at least one other rdf:type property which more specifically describes
259 type of the port (e.g. lv2:AudioPort).
261 Hosts that do not support a specific port class MUST NOT instantiate the
262 plugin, unless that port has the connectionOptional property set (in which case
263 the host can simply "connect" that port to NULL).  If a host is interested
264 in plugins to insert in a certain signal path (e.g. stereo audio), it SHOULD
265 consider all the classes of a port to determine which ports are most suitable
266 for connection (e.g. by ignoring ports with additional classes the host does
267 not recognize).
269 A port has two identifiers - a (numeric) index, and a (textual) symbol.
270 The index can be used as an identifier at run-time, but persistent references
271 to ports (e.g. in a saved preset) MUST use the symbol.  A symbol is guaranteed
272 to refer to the same port on all plugins with a given URI.  An index does NOT
273 necessarily refer to the same port on all plugins with a given URI (i.e. the
274 index for a port may differ between plugin binaries).
275 """ .
277 lv2:InputPort a rdfs:Class ;
278     rdfs:subClassOf lv2:Port ;
279     rdfs:label      "Input port" ;
280     rdfs:comment    """
281 Ports of this type will be connected to a pointer to some value, which will
282 be read by the plugin during their run method.
283 """ .
285 lv2:OutputPort a rdfs:Class ;
286     rdfs:subClassOf lv2:Port ;
287     rdfs:label      "Output port" ;
288     rdfs:comment    """
289 Ports of this type will be connected to a pointer to some value, which will
290 be written to by the plugin during their run method.
291 """ .
293 lv2:ControlPort a rdfs:Class ;
294     rdfs:subClassOf lv2:Port ;
295     rdfs:label      "Control port" ;
296     rdfs:comment    """
297 Ports of this type will be connected to a pointer to a single value conforming
298 to the 32bit IEEE-754 floating point specification.
299 """ .
301 lv2:AudioPort a rdfs:Class ;
302     rdfs:subClassOf lv2:Port ;
303     rdfs:label      "Audio port" ;
304     rdfs:comment    """
305 Ports of this type will be connected to an array of length SampleCount
306 conforming to the 32bit IEEE-754 floating point specification.
307 """ .
310 #####################################
311 ## Mandatory Plugin RDF Properties ##
312 #####################################
314 lv2:port a rdf:Property ;
315     rdfs:domain  lv2:Template ;
316     rdfs:range   lv2:Port ;
317     rdfs:label   "port" ;
318     rdfs:comment "Relates a Template or Plugin to the Ports it contains" .
320 lv2:revision a rdf:Property ;
321     rdfs:domain lv2:Resource ;
322     rdfs:range  xsd:nonNegativeInteger ;
323     rdfs:label  "revision" ;
324     rdfs:comment """
325 The revision of an LV2 Resource.  If a plugin's port indices change, the
326 revision of the plugin MUST be increased.  Note that if port symbols
327 change or are removed, the plugin URI MUST be changed, the revision acts
328 as a 'minor version' to distinguish otherwise compatible revisions of
329 a plugin.  A plugin that has changed indices MUST have a lv2:revision
330 property, if a plugin has no revision property it is assumed to be 0.
332 Anything that refers to a specific revision of a plugin (e.g. a serialisation
333 that depends on specific port indices) MUST refer to the plugin by URI along
334 with the revision.
336 This property may be used for other objects, in this case it should be
337 used in a similar way to represent a 'minor version', and NOT as a major
338 version to distinguish incompatible objects (use the URI for that).
339 """ .
342 ####################################
343 ## Optional Plugin RDF Properties ##
344 ####################################
346 lv2:basicXHTML a rdfs:Class ;
347     rdfs:seeAlso <http://www.w3.org/TR/xhtml1/> ;
348     rdfs:seeAlso <http://www.w3.org/TR/xhtml-modularization/> ;
349     rdfs:comment """
350 A very basic subset of XHTML for use with lv2:documentation, intended to be
351 reasonable for hosts to support for styled inline documentation.
353 A literal with this data type is an XHTML 1.0 fragment containing only
354 tags from the following XHTML modules: text, hypertext, list, basic tables,
355 image, presentation.  See the XHTML and XHTML Modularization specifications
356 for details.  A literal with this data type must be legal to insert as the
357 body of a &lt;div&gt; tag (free text is allowed).
359 If only basicXHTML documentation is given but a host has no facilities for
360 handling tags, simply stripping tags and inserting newlines after appropriate
361 tags will yield a somewhat readable plain text version of the documentation.
362 """ .
364 lv2:documentation a rdf:Property ;
365     rdfs:domain  lv2:Resource ;
366     rdfs:label   "documentation" ;
367     rdfs:comment """
368 Relates a Plugin to some text/audio/video documentation either online or
369 included with the plugin package.  The value of this property may be either a
370 URL, or a literal of any type.  Literal documentation SHOULD be either plain
371 text, or lv2:basicXHTML.  More advanced documentation should be linked to instead.
372 """ .
376 ###################################
377 ## Mandatory Port RDF Properties ##
378 ###################################
380 lv2:index a rdf:Property ;
381     rdfs:domain  lv2:Port ;
382     rdfs:range   xsd:nonNegativeInteger ;
383     rdfs:label   "index" ;
384     rdfs:comment """
385 Specifies the index of the port, passed as an argument to the connect port
386 function. The index uniqely identifies the port on an instance of the plugin.
387 """ .
389 lv2:symbol a rdf:Property ;
390     rdfs:domain  lv2:Resource ;
391     rdfs:label   "symbol" ;
392     rdfs:comment """
393 A short name used as a machine and human readable identifier.
395 The first character must be one of _, a-z or A-Z and subsequenct characters can
396 be from _, a-z, A-Z and 0-9.
398 A language tag MUST NOT be used on this property.  The symbol uniquely
399 identifies the port on a plugin with a given URI (i.e. the plugin author MUST
400 change the plugin URI if a port symbol is changed or removed).
401 """ .
403 lv2:name a rdf:Property ;
404     rdfs:domain  lv2:Port ;
405     rdfs:label   "name" ;
406     rdfs:comment """
407 A display name for labeling the Port in a user interface.
409 This property is required for Ports, but MUST NOT be used by the host for
410 port identification. The plugin author may change the values of this
411 property without changing the Plugin URI.
412 """ .
416 ##################################
417 ## Optional Port RDF Properties ##
418 ##################################
420 lv2:Point a rdfs:Class ;
421     rdfs:label   "Port value point" ;
422     rdfs:comment """
423 Used to describe interesting values in a Port's range.  To be valid it
424 requires two properties: rdfs:label and rdf:value.
426 There are 3 specially defined Points in the LV2 specification (default,
427 minimum, and maximum), though future extensions may define more.
428 """ .
430 lv2:ScalePoint a rdfs:Class ;
431     rdfs:subClassOf lv2:Point ;
432     rdfs:comment "A single lv2:float Point (for control inputs)" .
434 lv2:scalePoint a rdf:Property ;
435     rdfs:domain  lv2:Port ;
436     rdfs:range   lv2:ScalePoint ;
437     rdfs:label   "Scale point" ;
438     rdfs:comment "Relates a Port to its ScalePoints." .
440 lv2:default a rdf:Property ;
441     rdfs:subPropertyOf lv2:scalePoint ;
442     rdfs:label         "Default value" ;
443     rdfs:comment """
444 The default value that the host SHOULD set this port to when there is no
445 other information available.
446 """ .
448 lv2:minimum a rdf:Property ;
449     rdfs:subPropertyOf lv2:scalePoint ;
450     rdfs:label         "Minimum value" ;
451     rdfs:comment """
452 A hint to the host for the minimum useful value that the port will use.
453 This is a "soft" limit - the plugin is required to gracefully accept all
454 values in the range of lv2:float.
455 """ .
457 lv2:maximum a rdf:Property ;
458     rdfs:subPropertyOf lv2:scalePoint ;
459     rdfs:label         "Maximum value" ;
460     rdfs:comment """
461 A hint to the host for the maximum useful value that the port will use.
462 This is a "soft" limit - the plugin is required to gracefully accept all
463 values in the range of lv2:float.
464 """ .
468 ##############
469 ## Features ##
470 ##############
472 lv2:Feature a rdfs:Class ;
473     rdfs:subClassOf lv2:Resource ;
474     rdfs:label   "Feature" ;
475     rdfs:comment "An additional feature which a plugin may use or require.".
477 lv2:optionalFeature a rdf:Property ;
478     rdfs:domain  lv2:Resource ;
479     rdfs:range   lv2:Feature ;
480     rdfs:label   "Optional feature" ;
481     rdfs:comment """
482 Signifies that a plugin or other resource supports a certain features.
483 If the host supports this feature, it MUST pass its URI and any additional
484 data to the plugin in the instantiate() function. The plugin MUST NOT fail to
485 instantiate if an optional feature is not supported by the host.
486 This predicate may be used by extensions for any type of subject.
487 """ .
489 lv2:requiredFeature a rdf:Property ;
490     rdfs:domain  lv2:Resource ;
491     rdfs:range   lv2:Feature ;
492     rdfs:label   "Required feature" ;
493     rdfs:comment """
494 Signifies that a plugin or other resource requires a certain feature.
495 If the host supports this feature, it MUST pass its URI and any additional
496 data to the plugin in the instantiate() function. The plugin MUST fail to 
497 instantiate if a required feature is not present; hosts SHOULD always check 
498 this before attempting to instantiate a plugin (i.e. discovery by attempting 
499 to instantiate is strongly discouraged).
500 This predicate may be used by extensions for any type of subject.
501 """ .
504 ####################
505 ## PortProperties ##
506 ####################
508 lv2:PortProperty a rdfs:Class ;
509     rdfs:label "Port property" ;
510     rdfs:comment """
511 A port property - a useful piece of information that allows a host to make more
512 sensible decisions (e.g. to provide a better interface).
513 """ .
515 lv2:portProperty a rdf:Property ;
516     rdfs:domain  lv2:Port ;
517     rdfs:range   lv2:PortProperty ;
518     rdfs:label   "Port property" ;
519     rdfs:comment """
520 Relates Ports to PortProperties. The PortProperty may be ignored without 
521 catastrophic effects, though it may be useful e.g. for providing a sensible
522 interface for the port.
523 """ .
526 #######################
527 ## Standard Features ##
528 #######################
530 lv2:isLive a lv2:Feature ;
531     rdfs:label   "Has a live (realtime) dependency" ;
532     rdfs:comment """
533 Indicates that the plugin has a real-time dependency (e.g. queues data from
534 a socket) and so its output must not be cached or subject to significant
535 latency, and calls to the run method should be done in rapid succession.
536 This property is not related to "hard real-time" execution requirements
537 (see lv2:hardRTCapable).
538 """ .
540 lv2:inPlaceBroken a lv2:Feature ;
541     rdfs:label   "in-place broken" ;
542     rdfs:comment """
543 Indicates that the plugin may cease to work correctly if the host elects
544 to use the same data location for both audio input and audio output.
545 Plugins that will fail to work correctly if ANY input buffer for a port of
546 the class lv2:AudioPort is set to the same location as ANY output buffer for
547 a port of the same class (with connect_port()) MUST require this Feature.
548 Doing so should be avoided as it makes it impossible for hosts to use the
549 plugin to process audio "in-place".
550 """ .
552 lv2:hardRTCapable a lv2:Feature ;
553     rdfs:label   "Hard realtime capable" ;
554     rdfs:comment """
555 Indicates that the plugin is capable of running not only in a conventional host
556 but also in a "hard real-time" environment. To qualify for this the plugin MUST
557 satisfy all of the following:
559     (1) The plugin must not use malloc(), free() or other heap memory
560     management within its Audio class functions. All new memory used in 
561     Audio class functions must be managed via the stack. These restrictions 
562     only apply to the Audio class functions.
564     (2) The plugin will not attempt to make use of any library
565     functions in its Audio class functions, with the exceptions of functions 
566     in the ANSI standard C and C maths libraries, which the host is expected to
567     provide.
569     (3) The plugin will not access files, devices, pipes, sockets, IPC
570     or any other mechanism that might result in process or thread
571     blocking within its Audio class functions.
572       
573     (4) The plugin will take an amount of time to execute a run() call 
574     approximately of form (A+B*SampleCount) where A and B depend on the 
575     machine and host in use. This amount of time may not depend on input
576     signals or plugin state. The host is left the responsibility to perform 
577     timings to estimate upper bounds for A and B. The plugin will also take an
578     approximately constant amount of time to execute a connect_port() call.
579 """ .
582 #############################
583 ## Standard PortProperties ##
584 #############################
586 lv2:connectionOptional a lv2:PortProperty ;
587     rdfs:label   "Optionally connected port" ;
588     rdfs:comment """
589 Indicates that this port does not have to be connected to valid data by the
590 host. If it is to be disconnected then the port MUST set to NULL with a call
591 to the connectPort method.
592 """ .
594 lv2:reportsLatency a lv2:PortProperty ;
595     rdfs:label   "Latency reporting port" ;
596     rdfs:comment """
597 Indicates that the port is used to express the processing latency incurred by
598 the plugin, expressed in samples.  The latency may be affected by the current
599 sample rate, plugin settings, or other factors, and may be changed by the
600 plugin at any time.  Where the latency is frequency dependent the plugin may
601 choose any appropriate value.  If a plugin introduces latency it MUST provide
602 EXACTLY ONE port with this property set which informs the host of the "correct" 
603 latency.  In "fuzzy" cases the value output should be the most reasonable based
604 on user expectation of input/output alignment (eg. musical delay/echo plugins
605 should not report their delay as latency, as it is an intentional effect).
606 """ .
608 lv2:toggled a lv2:PortProperty ;
609     rdfs:label   "Toggled" ;
610     rdfs:comment """
611 Indicates that the data item should be considered a Boolean toggle. Data less
612 than or equal to zero should be considered "off" or "false", and data above
613 zero should be considered "on" or "true".
614 """ .
616 lv2:sampleRate a lv2:PortProperty ;
617     rdfs:label   "Sample rate" ;
618     rdfs:comment """
619 Indicates that any bounds specified should be interpreted as multiples of the
620 sample rate. For instance, a frequency range from 0Hz to the Nyquist frequency
621 (half the sample rate) could be requested by this property in conjunction with
622 lv2:minimum 0.0 and lv2:maximum 0.5.
623 Hosts that support bounds at all MUST support this property.
624 """ .
626 lv2:integer a lv2:PortProperty ;
627     rdfs:label   "Integer" ;
628     rdfs:comment """
629 Indicates that a port's reasonable values are integers (eg. a user interface
630 would likely wish to provide a stepped control allowing only integer input).
631 A plugin MUST operate reasonably even if such a port has a non-integer input.
632 """ .
634 lv2:enumeration a lv2:PortProperty ;
635     rdfs:label   "Enumeration" ;
636     rdfs:comment """
637 Indicates that a port's only reasonable values are the scale points defined for
638 that port.  Though a host SHOULD NOT allow a user to set the value of such a 
639 port to anything other than a scale point.  A plugin MUST operate reasonably
640 even if such a port has an input that is not a scale point, preferably by
641 simply choosing the largest enumeration value less than or equal to the
642 actual input value (i.e. round the input value down).
643 """ .
647 ####################
648 ## Plugin Classes ##
649 ####################
651 lv2:GeneratorPlugin a rdfs:Class ;
652     rdfs:subClassOf lv2:Plugin ;
653     rdfs:label "Generator" ;
654     rdfs:comment """
655 Any plugin that generates sound internally, rather than processing its input.
656 """ .
658 lv2:InstrumentPlugin a rdfs:Class ;
659     rdfs:subClassOf lv2:GeneratorPlugin ;
660     rdfs:label "Instrument" ;
661     rdfs:comment """
662 Any plugin that is intended to be played as a musical instrument.
663 """ .
665 lv2:OscillatorPlugin a rdfs:Class ;
666     rdfs:subClassOf lv2:GeneratorPlugin ;
667     rdfs:label "Oscillator" .
669 lv2:UtilityPlugin a rdfs:Class ;
670     rdfs:subClassOf lv2:Plugin ;
671     rdfs:label "Utility" ;
672     rdfs:comment """
673 Includes things like mathematical functions and non-musical delays.
674 """ .
676 lv2:ConverterPlugin a rdfs:Class ;
677     rdfs:subClassOf lv2:UtilityPlugin ;
678     rdfs:label "Converter" ;
679     rdfs:comment """
680 Any plugin that converts some form of input into a different form of output.
681 """ .
683 lv2:AnalyserPlugin a rdfs:Class ;
684     rdfs:subClassOf lv2:UtilityPlugin ;
685     rdfs:label "Analyser" ;
686     rdfs:comment """
687 Any plugin that analyses input to output some useful information.
688 """ .
690 lv2:MixerPlugin a rdfs:Class ;
691     rdfs:subClassOf lv2:UtilityPlugin ;
692     rdfs:label "Mixer" ;
693     rdfs:comment """
694 A plugin which mixes some number of inputs into some number of outputs.
695 """ .
697 lv2:SimulatorPlugin a rdfs:Class ;
698     rdfs:subClassOf lv2:Plugin ;
699     rdfs:label "Simulator" ;
700     rdfs:comment """
701 Plugins that aim to duplicate the effect of some environmental effect or
702 musical equipment.
703 """ .
705 lv2:DelayPlugin a rdfs:Class ;
706     rdfs:subClassOf lv2:Plugin ;
707     rdfs:label "Delay" ;
708     rdfs:comment """
709 Plugins that intentionally delay their input signal as an effect.
710 """ .
712 lv2:ModulatorPlugin a rdfs:Class ;
713     rdfs:subClassOf lv2:Plugin ;
714     rdfs:label "Modulator" .
716 lv2:ReverbPlugin a rdfs:Class ;
717     rdfs:subClassOf lv2:Plugin ;
718     rdfs:subClassOf lv2:SimulatorPlugin ;
719     rdfs:subClassOf lv2:DelayPlugin ;
720     rdfs:label "Reverb" .
722 lv2:PhaserPlugin a rdfs:Class ;
723     rdfs:subClassOf lv2:ModulatorPlugin ;
724     rdfs:label "Phaser" .
726 lv2:FlangerPlugin a rdfs:Class ;
727     rdfs:subClassOf lv2:ModulatorPlugin ;
728     rdfs:label "Flanger" .
730 lv2:ChorusPlugin a rdfs:Class ;
731     rdfs:subClassOf lv2:ModulatorPlugin ;
732     rdfs:label "Chorus" .
734 lv2:FilterPlugin a rdfs:Class ;
735     rdfs:subClassOf lv2:Plugin ;
736     rdfs:label "Filter" .
738 lv2:LowpassPlugin a rdfs:Class ;
739     rdfs:subClassOf lv2:FilterPlugin ;
740     rdfs:label "Lowpass" .
742 lv2:BandpassPlugin a rdfs:Class ;
743     rdfs:subClassOf lv2:FilterPlugin ;
744     rdfs:label "Bandpass" .
746 lv2:HighpassPlugin a rdfs:Class ;
747     rdfs:subClassOf lv2:FilterPlugin ;
748     rdfs:label "Highpass" .
750 lv2:CombPlugin a rdfs:Class ;
751     rdfs:subClassOf lv2:FilterPlugin ;
752     rdfs:label "Comb" .
754 lv2:AllpassPlugin a rdfs:Class ;
755     rdfs:subClassOf lv2:FilterPlugin ;
756     rdfs:label "Allpass" .
758 lv2:EQPlugin a rdfs:Class ;
759     rdfs:subClassOf lv2:FilterPlugin ;
760     rdfs:label "Equaliser" .
762 lv2:ParaEQPlugin a rdfs:Class ;
763     rdfs:subClassOf lv2:EQPlugin ;
764     rdfs:label "Parametric" .
766 lv2:MultiEQPlugin a rdfs:Class ;
767     rdfs:subClassOf lv2:EQPlugin ;
768     rdfs:label "Multiband" .
770 lv2:SpectralPlugin a rdfs:Class ;
771     rdfs:subClassOf lv2:Plugin ;
772     rdfs:label "Spectral Processor" .
774 lv2:PitchPlugin a rdfs:Class ;
775     rdfs:subClassOf lv2:SpectralPlugin ;
776     rdfs:label "Pitch Shifter" .
778 lv2:AmplifierPlugin a rdfs:Class ;
779     rdfs:subClassOf lv2:Plugin ;
780     rdfs:label "Amplifier" .
782 lv2:DistortionPlugin a rdfs:Class ;
783     rdfs:subClassOf lv2:Plugin ;
784     rdfs:label "Distortion" .
786 lv2:WaveshaperPlugin a rdfs:Class ;
787     rdfs:subClassOf lv2:DistortionPlugin ;
788     rdfs:label "Waveshaper" .
790 lv2:DynamicsPlugin a rdfs:Class ;
791     rdfs:subClassOf lv2:Plugin ;
792     rdfs:label "Dynamics Processor" ;
793     rdfs:comment """
794 Plugins that alter the envelope or dynamic range of the processed audio.
795 """ .
797 lv2:CompressorPlugin a rdfs:Class ;
798     rdfs:subClassOf lv2:DynamicsPlugin ;
799     rdfs:label "Compressor" .
801 lv2:ExpanderPlugin a rdfs:Class ;
802     rdfs:subClassOf lv2:DynamicsPlugin ;
803     rdfs:label "Expander" .
805 lv2:LimiterPlugin a rdfs:Class ;
806     rdfs:subClassOf lv2:DynamicsPlugin ;
807     rdfs:label "Limiter" .
809 lv2:GatePlugin a rdfs:Class ;
810     rdfs:subClassOf lv2:DynamicsPlugin ;
811     rdfs:label "Gate" .