1@prefix lv2: <http://lv2plug.in/ns/lv2core#> . 2@prefix dcs: <http://ontologi.es/doap-changeset#> . 3@prefix doap: <http://usefulinc.com/ns/doap#> . 4@prefix foaf: <http://xmlns.com/foaf/0.1/> . 5@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 6 7<http://lv2plug.in/ns/lv2core> 8 a doap:Project ; 9 doap:license <http://opensource.org/licenses/isc> ; 10 doap:name "LV2" ; 11 doap:homepage <http://lv2plug.in> ; 12 doap:created "2004-04-21" ; 13 doap:shortdesc "An extensible open standard for audio plugins" ; 14 doap:programming-language "C" ; 15 doap:developer <http://plugin.org.uk/swh.xrdf#me> , 16 <http://drobilla.net/drobilla#me> ; 17 doap:maintainer <http://drobilla.net/drobilla#me> ; 18 doap:release [ 19 doap:revision "18.0" ; 20 doap:created "2020-04-26" ; 21 doap:file-release <http://lv2plug.in/spec/lv2-1.18.0.tar.bz2> ; 22 dcs:blame <http://drobilla.net/drobilla#me> ; 23 dcs:changeset [ 24 dcs:item [ 25 rdfs:label "Add lv2:Markdown datatype." 26 ] , [ 27 rdfs:label "Deprecate lv2:reportsLatency." 28 ] 29 ] 30 ] , [ 31 doap:revision "16.0" ; 32 doap:created "2019-02-03" ; 33 doap:file-release <http://lv2plug.in/spec/lv2-1.16.0.tar.bz2> ; 34 dcs:blame <http://drobilla.net/drobilla#me> ; 35 dcs:changeset [ 36 dcs:item [ 37 rdfs:label "Add lv2:MIDIPlugin class." 38 ] , [ 39 rdfs:label "Rework port restrictions so that presets can be validated." 40 ] 41 ] 42 ] , [ 43 doap:revision "14.0" ; 44 doap:created "2016-09-18" ; 45 doap:file-release <http://lv2plug.in/spec/lv2-1.14.0.tar.bz2> ; 46 dcs:blame <http://drobilla.net/drobilla#me> ; 47 dcs:changeset [ 48 dcs:item [ 49 rdfs:label "Add lv2_util.h with lv2_features_data() and lv2_features_query()." 50 ] , [ 51 rdfs:label "Add lv2:enabled designation." 52 ] 53 ] 54 ] , [ 55 doap:revision "12.4" ; 56 doap:created "2015-04-07" ; 57 doap:file-release <http://lv2plug.in/spec/lv2-1.12.0.tar.bz2> ; 58 dcs:blame <http://drobilla.net/drobilla#me> ; 59 dcs:changeset [ 60 dcs:item [ 61 rdfs:label "Relax domain of lv2:minimum lv2:maximum and lv2:default so they can be used to describe properties/parameters as well." 62 ] , [ 63 rdfs:label "Add extern C and visibility attribute to LV2_SYMBOL_EXPORT." 64 ] , [ 65 rdfs:label "Add lv2:isSideChain port property." 66 ] 67 ] 68 ] , [ 69 doap:revision "12.2" ; 70 doap:created "2014-08-08" ; 71 doap:file-release <http://lv2plug.in/spec/lv2-1.10.0.tar.bz2> ; 72 dcs:blame <http://drobilla.net/drobilla#me> ; 73 dcs:changeset [ 74 dcs:item [ 75 rdfs:label "Clarify lv2_descriptor() and lv2_lib_descriptor() documentation." 76 ] 77 ] 78 ] , [ 79 doap:revision "12.0" ; 80 doap:created "2014-01-04" ; 81 doap:file-release <http://lv2plug.in/spec/lv2-1.8.0.tar.bz2> ; 82 dcs:blame <http://drobilla.net/drobilla#me> ; 83 dcs:changeset [ 84 dcs:item [ 85 rdfs:label "Add lv2:prototype for property inheritance." 86 ] 87 ] 88 ] , [ 89 doap:revision "10.0" ; 90 doap:created "2013-02-17" ; 91 doap:file-release <http://lv2plug.in/spec/lv2-1.4.0.tar.bz2> ; 92 dcs:blame <http://drobilla.net/drobilla#me> ; 93 dcs:changeset [ 94 dcs:item [ 95 rdfs:label "Add lv2:EnvelopePlugin class." 96 ] , [ 97 rdfs:label "Add lv2:control for designating primary event-based control ports." 98 ] , [ 99 rdfs:label "Set range of lv2:designation to lv2:Designation." 100 ] , [ 101 rdfs:label "Make lv2:Parameter rdfs:subClassOf rdf:Property." 102 ] , [ 103 rdfs:label "Reserve minor version 0 for unstable development plugins." 104 ] 105 ] 106 ] , [ 107 doap:revision "8.2" ; 108 doap:created "2012-10-14" ; 109 doap:file-release <http://lv2plug.in/spec/lv2-1.2.0.tar.bz2> ; 110 dcs:blame <http://drobilla.net/drobilla#me> ; 111 dcs:changeset [ 112 dcs:item [ 113 rdfs:label "Use consistent label style." 114 ] 115 ] 116 ] , [ 117 doap:revision "8.0" ; 118 doap:created "2012-04-17" ; 119 doap:file-release <http://lv2plug.in/spec/lv2-1.0.0.tar.bz2> ; 120 dcs:blame <http://drobilla.net/drobilla#me> ; 121 dcs:changeset [ 122 dcs:item [ 123 rdfs:label "Fix LV2_SYMBOL_EXPORT and lv2_descriptor prototype for Windows." 124 ] , [ 125 rdfs:label "Add metadata concept of a designation, a channel or parameter description which can be assigned to ports for more intelligent use by hosts." 126 ] , [ 127 rdfs:label "Add new discovery API which allows libraries to read bundle files during discovery, makes library construction/destruction explicit, and adds extensibility to prevent future breakage." 128 ] , [ 129 rdfs:label "Relax the range of lv2:index so it can be used for things other than ports." 130 ] , [ 131 rdfs:label "Remove lv2:Resource, which turned out to be meaningless." 132 ] , [ 133 rdfs:label "Add lv2:CVPort." 134 ] , [ 135 rdfs:label "Merge with unified LV2 package." 136 ] 137 ] 138 ] , [ 139 doap:revision "6.0" ; 140 doap:created "2011-11-21" ; 141 doap:file-release <http://lv2plug.in/spec/lv2core-6.0.tar.bz2> ; 142 dcs:blame <http://drobilla.net/drobilla#me> ; 143 dcs:changeset [ 144 dcs:item [ 145 rdfs:label "Rename core.lv2 and lv2.ttl to lv2core.lv2 and lv2core.ttl to adhere to modern conventions." 146 ] , [ 147 rdfs:label "Add lv2:extensionData and lv2:ExtensionData for plugins to indicate that they support some URI for extension_data()." 148 ] , [ 149 rdfs:label "Remove lv2config in favour of the simple convention that specifications install headers to standard URI-based paths." 150 ] , [ 151 rdfs:label "Switch to the ISC license, a simple BSD-style license (with permission of all contributors to lv2.h and its ancestor, ladspa.h)." 152 ] , [ 153 rdfs:label "Make lv2core.ttl a valid OWL 2 DL ontology." 154 ] , [ 155 rdfs:label "Improve documentation." 156 ] 157 ] 158 ] , [ 159 doap:revision "4.0" ; 160 doap:created "2011-03-18" ; 161 doap:file-release <http://lv2plug.in/spec/lv2core-4.0.tar.bz2> ; 162 dcs:blame <http://drobilla.net/drobilla#me> ; 163 dcs:changeset [ 164 dcs:item [ 165 rdfs:label "Make doap:license suggested, but not required (for wrappers)." 166 ] , [ 167 rdfs:label "Define lv2:binary (MUST be in manifest.ttl)." 168 ] , [ 169 rdfs:label "Define lv2:minorVersion and lv2:microVersion (MUST be in manifest.ttl)." 170 ] , [ 171 rdfs:label "Define lv2:documentation and use it to document lv2core." 172 ] , [ 173 rdfs:label "Add lv2:FunctionPlugin and lv2:ConstantPlugin classes." 174 ] , [ 175 rdfs:label "Move lv2:AmplifierPlugin under lv2:DynamicsPlugin." 176 ] , [ 177 rdfs:label "Loosen domain of lv2:optionalFeature and lv2:requiredFeature (to allow re-use in extensions)." 178 ] , [ 179 rdfs:label "Add generic lv2:Resource and lv2:PluginBase classes." 180 ] , [ 181 rdfs:label "Fix definition of lv2:minimum etc. (used for values, not scale points)." 182 ] , [ 183 rdfs:label "More precisely define properties with OWL." 184 ] , [ 185 rdfs:label "Move project metadata to manifest." 186 ] , [ 187 rdfs:label "Add lv2:enumeration port property." 188 ] , [ 189 rdfs:label "Define run() pre-roll special case (sample_count == 0)." 190 ] 191 ] 192 ] , [ 193 doap:revision "3.0" ; 194 doap:created "2008-11-08" ; 195 doap:file-release <http://lv2plug.in/spec/lv2core-3.0.tar.bz2> ; 196 dcs:blame <http://drobilla.net/drobilla#me> ; 197 dcs:changeset [ 198 dcs:item [ 199 rdfs:label "Require that serialisations refer to ports by symbol rather than index." 200 ] , [ 201 rdfs:label "Minor stylistic changes to lv2.ttl." 202 ] , [ 203 rdfs:label "No header changes." 204 ] 205 ] 206 ] , [ 207 doap:revision "2.0" ; 208 doap:created "2008-02-10" ; 209 doap:file-release <http://lv2plug.in/spec/lv2core-2.0.tar.gz> ; 210 dcs:blame <http://drobilla.net/drobilla#me> ; 211 dcs:changeset [ 212 dcs:item [ 213 rdfs:label "Initial release." 214 ] 215 ] 216 ] ; 217 lv2:documentation """ 218 219LV2 is an interface for writing audio plugins in C or compatible languages, 220which can be dynamically loaded into many _host_ applications. This core 221specification is simple and minimal, but is designed so that _extensions_ can 222be defined to add more advanced features, making it possible to implement 223nearly any feature. 224 225LV2 maintains a strong distinction between code and data. Plugin code is in a 226shared library, while data is in a companion data file written in 227[Turtle](https://www.w3.org/TR/turtle/). Code, data, and any other resources 228(such as waveforms) are shipped together in a bundle directory. The code 229contains only the executable portions of the plugin. All other data is 230provided in the data file(s). This makes plugin data flexible and extensible, 231and allows the host to do everything but run the plugin without loading or 232executing any code. Among other advantages, this makes hosts more robust 233(broken plugins can't crash a host during discovery) and allows generic tools 234written in any language to work with LV2 data. The LV2 specification itself is 235distributed in a similar way. 236 237An LV2 plugin library is suitable for dynamic loading (for example with 238`dlopen()`) and provides one or more plugin descriptors via `lv2_descriptor()` 239or `lv2_lib_descriptor()`. These can be instantiated to create plugin 240instances, which can be run directly on data or connected together to perform 241advanced signal processing tasks. 242 243Plugins communicate via _ports_, which can transmit any type of data. Data is 244processed by first connecting each port to a buffer, then repeatedly calling 245the `run()` method to process blocks of data. 246 247This core specification defines two types of port, equivalent to those in 248[LADSPA](http://www.ladspa.org/), lv2:ControlPort and lv2:AudioPort, as well as 249lv2:CVPort which has the same format as an audio port but is interpreted as 250non-audible control data. Audio ports contain arrays with one `float` element 251per sample, allowing a block of audio to be processed in a single call to 252`run()`. Control ports contain single `float` values, which are fixed and 253valid for the duration of the call to `run()`. Thus the _control rate_ is 254determined by the block size, which is controlled by the host (and not 255necessarily constant). 256 257### Threading Rules 258 259To faciliate use in multi-threaded programs, LV2 functions are partitioned into 260several threading classes: 261 262| Discovery Class | Instantiation Class | Audio Class | 263|----------------------------------|-------------------------------|------------------------------- | 264| lv2_descriptor() | LV2_Descriptor::instantiate() | LV2_Descriptor::run() | 265| lv2_lib_descriptor() | LV2_Descriptor::cleanup() | LV2_Descriptor::connect_port() | 266| LV2_Descriptor::extension_data() | LV2_Descriptor::activate() | | 267| | LV2_Descriptor::deactivate() | | 268 269Hosts MUST guarantee that: 270 271 * A function in any class is never called concurrently with another function 272 in that class. 273 274 * A _Discovery_ function is never called concurrently with any other fuction 275 in the same shared object file. 276 277 * An _Instantiation_ function for an instance is never called concurrently 278 with any other function for that instance. 279 280Any simultaneous calls that are not explicitly forbidden by these rules are 281allowed. For example, a host may call `run()` for two different plugin 282instances simultaneously. 283 284Plugin functions in any class MUST NOT manipulate any state which might affect 285other plugins or the host (beyond the contract of that function), for example 286by using non-reentrant global functions. 287 288Extensions to this specification which add new functions MUST declare in which 289of these classes the functions belong, define new classes for them, or 290otherwise precisely describe their threading rules. 291 292"""^^lv2:Markdown . 293 294lv2:Specification 295 lv2:documentation """ 296 297An LV2 specification typically contains a vocabulary description, C headers to 298define an API, and any other resources that may be useful. Specifications, 299like plugins, are distributed and installed as bundles so that hosts may 300discover them. 301 302"""^^lv2:Markdown . 303 304lv2:Markdown 305 lv2:documentation """ 306 307This datatype is typically used for documentation in 308[Markdown](https://daringfireball.net/projects/markdown/syntax) syntax. 309 310Generally, documentation with this datatype should stay as close to readable 311plain text as possible, but may use core Markdown syntax for nicer 312presentation. Documentation can assume that basic extensions like codehilite 313and tables are available. 314 315"""^^lv2:Markdown . 316 317lv2:documentation 318 lv2:documentation """ 319 320Relates a Resource to extended documentation. 321 322LV2 specifications are documented using this property with an lv2:Markdown 323datatype. 324 325If the value has no explicit datatype, it is assumed to be a valid XHTML Basic 3261.1 fragment suitable for use as the content of the `body` element of a page. 327 328XHTML Basic is a W3C Recommendation which defines a simplified subset of XHTML 329intended to be reasonable to implement with limited resources, for exampe on 330embedded devices. See [XHTML Basic, Section 3313](http://www.w3.org/TR/xhtml-basic/#s_xhtmlmodules) for a list of valid tags. 332 333"""^^lv2:Markdown . 334 335lv2:PluginBase 336 lv2:documentation """ 337 338An abstract plugin-like resource that may not actually be an LV2 plugin, for 339example that may not have a lv2:binary. This is useful for describing things 340that share common structure with a plugin, but are not themselves an actul 341plugin, such as presets. 342 343"""^^lv2:Markdown . 344 345lv2:Plugin 346 lv2:documentation """ 347 348To be discovered by hosts, plugins MUST explicitly have an rdf:type of lv2:Plugin 349in their bundle's manifest, for example: 350 351 :::turtle 352 <http://example.org/my-plugin> a lv2:Plugin . 353 354Plugins should have a doap:name property that is at most a few words in length 355using title capitalization, for example <q>Tape Delay Unit</q>. 356 357"""^^lv2:Markdown . 358 359lv2:PortBase 360 lv2:documentation """ 361 362Similar to lv2:PluginBase, this is an abstract port-like resource that may not 363be a fully specified LV2 port. For example, this is used for preset "ports" 364which do not specify an index. 365 366"""^^lv2:Markdown . 367 368lv2:Port 369 lv2:documentation """ 370 371All LV2 port descriptions MUST have a rdf:type that is one of lv2:Port, 372lv2:InputPort or lv2:OutputPort. Additionally, there MUST be at least one 373other rdf:type which more precisely describes type of the port, for example 374lv2:AudioPort. 375 376Hosts that do not support a specific port class MUST NOT instantiate the 377plugin, unless that port has the lv2:connectionOptional property set. 378 379A port has two identifiers: a (numeric) index, and a (textual) symbol. The 380index can be used as an identifier at run-time, but persistent references to 381ports (for example in presets or save files) MUST use the symbol. Only the 382symbol is guaranteed to refer to the same port on all plugins with a given URI, 383that is the index for a port may differ between plugin binaries. 384 385"""^^lv2:Markdown . 386 387lv2:AudioPort 388 lv2:documentation """ 389 390Ports of this type are connected to a buffer of `float` audio samples, which 391the host guarantees have `sample_count` elements in any call to 392LV2_Descriptor::run(). 393 394Audio samples are normalized between -1.0 and 1.0, though there is no 395requirement for samples to be strictly within this range. 396 397"""^^lv2:Markdown . 398 399lv2:CVPort 400 lv2:documentation """ 401 402Ports of this type have the same buffer format as an lv2:AudioPort, except the 403buffer represents audio-rate control data rather than audio. Like a 404lv2:ControlPort, a CV port SHOULD have properties describing its value, in 405particular lv2:minimum, lv2:maximum, and lv2:default. 406 407Hosts may present CV ports to users as controls in the same way as control 408ports. Conceptually, aside from the buffer format, a CV port is the same as a 409control port, so hosts can use all the same properties and expectations. 410 411In particular, this port type does not imply any range, unit, or meaning for 412its values. However, if there is no inherent unit to the values, for example 413if the port is used to modulate some other value, then plugins SHOULD use a 414normalized range, either from -1.0 to 1.0, or from 0.0 to 1.0. 415 416It is generally safe to connect an audio output to a CV input, but not 417vice-versa. Hosts must take care to prevent data from a CVPort port from being 418used as audio. 419 420"""^^lv2:Markdown . 421 422lv2:project 423 lv2:documentation """ 424 425This property provides a way to group plugins and/or related resources. A 426project may have useful metadata common to all plugins (such as homepage, 427author, version history) which would be wasteful to list separately for each 428plugin. 429 430Grouping via projects also allows users to find plugins in hosts by project, 431which is often how they are remembered. For this reason, a project that 432contains plugins SHOULD always have a doap:name. It is also a good idea for 433each plugin and the project itself to have an lv2:symbol property, which allows 434nice quasi-global identifiers for plugins, for example `myproj.superamp` which 435can be useful for display or fast user entry. 436 437"""^^lv2:Markdown . 438 439lv2:prototype 440 lv2:documentation """ 441 442This property can be used to <q>include</q> common properties in several 443descriptions, serving as a sort of template mechanism. If a plugin has a 444prototype, then the host must load all the properties for the prototype as if 445they were properties of the plugin. That is, if `:plug lv2:prototype :prot`, 446then for each triple `:prot p o`, the triple `:plug p o` should be loaded. 447 448This facility is useful for distributing data-only plugins that rely on a 449common binary, for example those where the internal state is loaded from some 450other file. Such plugins can refer to a prototype in a template LV2 bundle 451which is installed by the corresponding software. 452 453"""^^lv2:Markdown . 454 455lv2:minorVersion 456 lv2:documentation """ 457 458This, along with lv2:microVersion, is used to distinguish between different 459versions of the <q>same</q> resource, for example to load only the bundle with 460the most recent version of a plugin. An LV2 version has a minor and micro 461number with the usual semantics: 462 463 * The minor version MUST be incremented when backwards (but not forwards) 464 compatible additions are made, for example the addition of a port to a 465 plugin. 466 467 * The micro version is incremented for changes which do not affect 468 compatibility at all, for example bug fixes or documentation updates. 469 470Note that there is deliberately no major version: all versions with the same 471URI are compatible by definition. Replacing a resource with a newer version of 472that resource MUST NOT break anything. If a change violates this rule, then 473the URI of the resource (which serves as the major version) MUST be changed. 474 475Plugins and extensions MUST adhere to at least the following rules: 476 477 * All versions of a plugin with a given URI MUST have the <q>same</q> set of 478 mandatory (not lv2:connectionOptional) ports with respect to lv2:symbol and 479 rdf:type. In other words, every port on a particular version is guaranteed 480 to exist on a future version with same lv2:symbol and at least those 481 rdf:types. 482 483 * New ports MAY be added without changing the plugin URI if and only if they 484 are lv2:connectionOptional and the minor version is incremented. 485 486 * The minor version MUST be incremented if the index of any port (identified 487 by its symbol) is changed. 488 489 * All versions of a specification MUST be compatible in the sense that an 490 implementation of the new version can interoperate with an implementation 491 of any previous version. 492 493Anything that depends on a specific version of a plugin (including referencing 494ports by index) MUST refer to the plugin by both URI and version. However, 495implementations should be tolerant where possible. 496 497When hosts discover several installed versions of a resource, they SHOULD warn 498the user and load only the most recent version. 499 500An odd minor _or_ micro version, or minor version zero, indicates that the 501resource is a development version. Hosts and tools SHOULD clearly indicate 502this wherever appropriate. Minor version zero is a special case for 503pre-release development of plugins, or experimental plugins that are not 504intended for stable use at all. Hosts SHOULD NOT expect such a plugin to 505remain compatible with any future version. Where feasible, hosts SHOULD NOT 506expose such plugins to users by default, but may provide an option to display 507them. 508 509"""^^lv2:Markdown . 510 511lv2:microVersion 512 lv2:documentation """ 513 514Releases of plugins and extensions MUST be explicitly versioned. Correct 515version numbers MUST always be maintained for any versioned resource that is 516published. For example, after a release, if a change is made in the development 517version in source control, the micro version MUST be incremented (to an odd 518number) to distinguish this modified version from the previous release. 519 520This property describes half of a resource version. For detailed documentation 521on LV2 resource versioning, see lv2:minorVersion. 522 523"""^^lv2:Markdown . 524 525lv2:binary 526 lv2:documentation """ 527 528The value of this property must be the URI of a shared library object, 529typically in the same bundle as the data file which contains this property. 530The actual type of the library is platform specific. 531 532This is a required property of a lv2:Plugin which MUST be included in the 533bundle's `manifest.ttl` file. The lv2:binary of a lv2:Plugin is the shared 534object containing the lv2_descriptor() or lv2_lib_descriptor() function. This 535probably may also be used similarly by extensions to relate other resources to 536their implementations (it is not implied that a lv2:binary on an arbitrary 537resource is an LV2 plugin library). 538 539"""^^lv2:Markdown . 540 541lv2:appliesTo 542 lv2:documentation """ 543 544This is primarily intended for discovery purposes: bundles that describe 545resources that work with particular plugins (like presets or user interfaces) 546SHOULD specify this in their `manifest.ttl` so the host can associate them with 547the correct plugin. For example: 548 549 :::turtle 550 <thing> 551 a ext:Thing ; 552 lv2:appliesTo <plugin> ; 553 rdfs:seeAlso <thing.ttl> . 554 555Using this pattern is preferable for large amounts of data, since the host may 556choose whether/when to load the data. 557 558"""^^lv2:Markdown . 559 560lv2:Symbol 561 lv2:documentation """ 562 563The first character of a symbol must be one of `_`, `a-z` or `A-Z`, and 564subsequent characters may additionally be `0-9`. This is, among other things, 565a valid C identifier, and generally compatible in most contexts which have 566restrictions on string identifiers, such as file paths. 567 568"""^^lv2:Markdown . 569 570lv2:symbol 571 lv2:documentation """ 572 573The value of this property MUST be a valid lv2:Symbol, and MUST NOT have a 574language tag. 575 576A symbol is a unique identifier with respect to the parent, for example a 577port's symbol is a unique identifiers with respect to its plugin. The plugin 578author MUST change the plugin URI if any port symbol is changed or removed. 579 580"""^^lv2:Markdown . 581 582lv2:name 583 lv2:documentation """ 584 585Unlike lv2:symbol, this is unrestricted, may be translated, and is not relevant 586for compatibility. The name is not necessarily unique and MUST NOT be used as 587an identifier. 588 589"""^^lv2:Markdown . 590 591lv2:shortName 592 lv2:documentation """ 593 594This is the same as lv2:name, with the additional requirement that the value is 595shorter than 16 characters. 596 597"""^^lv2:Markdown . 598 599lv2:Designation 600 lv2:documentation """ 601 602A designation is metadata that describes the meaning or role of something. By 603assigning a designation to a port using lv2:designation, the port's content 604becomes meaningful and can be used more intelligently by the host. 605 606"""^^lv2:Markdown . 607 608lv2:Channel 609 lv2:documentation """ 610 611A specific channel, for example the <q>left</q> channel of a stereo stream. A 612channel may be audio, or another type such as a MIDI control stream. 613 614"""^^lv2:Markdown . 615 616lv2:Parameter 617 lv2:documentation """ 618 619A parameter is a designation for a control. 620 621A parameter defines the meaning of a control, not the method of conveying its 622value. For example, a parameter could be controlled via a lv2:ControlPort, 623messages, or both. 624 625A lv2:ControlPort can be associated with a parameter using lv2:designation. 626 627"""^^lv2:Markdown . 628 629lv2:designation 630 lv2:documentation """ 631 632This property is used to give a port's contents a well-defined meaning. For 633example, if a port has the designation `eg:gain`, then the value of that port 634represents the `eg:gain` of the plugin instance. 635 636Ports should be given designations whenever possible, particularly if a 637suitable designation is already defined. This allows the host to act more 638intelligently and provide a more effective user interface. For example, if the 639plugin has a BPM parameter, the host may automatically set that parameter to 640the current tempo. 641 642"""^^lv2:Markdown . 643 644lv2:freeWheeling 645 lv2:documentation """ 646 647If true, this means that all processing is happening as quickly as possible, 648not in real-time. When free-wheeling there is no relationship between the 649passage of real wall-clock time and the passage of time in the data being 650processed. 651 652"""^^lv2:Markdown . 653 654lv2:enabled 655 lv2:documentation """ 656 657If this value is greater than zero, the plugin processes normally. If this 658value is zero, the plugin is expected to bypass all signals unmodified. The 659plugin must provide a click-free transition between the enabled and disabled 660(bypassed) states. 661 662Values less than zero are reserved for future use (such as click-free 663insertion/removal of latent plugins), and should be treated like zero 664(bypassed) by current implementations. 665 666"""^^lv2:Markdown . 667 668lv2:control 669 lv2:documentation """ 670 671This should be used as the lv2:designation of ports that are used to send 672commands and receive responses. Typically this will be an event port that 673supports some protocol, for example MIDI or LV2 Atoms. 674 675"""^^lv2:Markdown . 676 677lv2:Point 678 lv2:documentation """ 679 680 * A Point MUST have at least one rdfs:label which is a string. 681 682 * A Point MUST have exactly one rdf:value with a type that is compatible with 683 the type of the corresponding Port. 684 685"""^^lv2:Markdown . 686 687lv2:default 688 lv2:documentation """ 689 690The host SHOULD set the port to this value initially, and in any situation 691where the port value should be cleared or reset. 692 693"""^^lv2:Markdown . 694 695lv2:minimum 696 lv2:documentation """ 697 698This is a soft limit: the plugin is required to gracefully accept all values in 699the range of a port's data type. 700 701"""^^lv2:Markdown . 702 703lv2:maximum 704 lv2:documentation """ 705 706This is a soft limit: the plugin is required to gracefully accept all values in 707the range of a port's data type. 708 709"""^^lv2:Markdown . 710 711lv2:optionalFeature 712 lv2:documentation """ 713 714To support this feature, the host MUST pass its URI and any additional data to 715the plugin in LV2_Descriptor::instantiate(). 716 717The plugin MUST NOT fail to instantiate if an optional feature is not supported 718by the host. 719 720"""^^lv2:Markdown . 721 722lv2:requiredFeature 723 lv2:documentation """ 724 725To support this feature, the host MUST pass its URI and any additional data to 726the plugin in LV2_Descriptor::instantiate(). 727 728The host MUST check this property before attempting to instantiate a plugin, 729and not attempt to instantiate plugins which require features it does not 730support. The plugin MUST fail to instantiate if a required feature is not 731supported by the host. Note that these rules are intentionally redundant for 732resilience: neither host nor plugin should assume that the other does not 733violate them. 734 735"""^^lv2:Markdown . 736 737lv2:ExtensionData 738 lv2:documentation """ 739 740This is additional data that a plugin may return from 741LV2_Descriptor::extension_data(). This is generally used to add APIs to extend 742that defined by LV2_Descriptor. 743 744"""^^lv2:Markdown . 745 746lv2:extensionData 747 lv2:documentation """ 748 749If a plugin has a value for this property, it must be a URI that defines the 750extension data. The plugin should return the appropriate data when 751LV2_Descriptor::extension_data() is called with that URI as a parameter. 752 753"""^^lv2:Markdown . 754 755lv2:isLive 756 lv2:documentation """ 757 758This feature is for plugins that have time-sensitive internals, for example 759communicating in real time over a socket. It indicates to the host that its 760input and output must not be cached or subject to significant latency, and that 761calls to LV2_Descriptor::run() should be made at a rate that roughly 762corresponds to wall clock time (according to the `sample_count` parameter). 763 764Note that this feature is not related to <q>hard real-time</q> execution 765requirements (see lv2:hardRTCapable). 766 767"""^^lv2:Markdown . 768 769lv2:inPlaceBroken 770 lv2:documentation """ 771 772This feature indicates that the plugin may not work correctly if the host 773elects to use the same data location for both input and output. Plugins that 774will fail to work correctly if ANY input port is connected to the same location 775as ANY output port MUST require this feature. Doing so should be avoided 776whenever possible since it prevents hosts from running the plugin on data 777<q>in-place</q>. 778 779"""^^lv2:Markdown . 780 781lv2:hardRTCapable 782 lv2:documentation """ 783 784This feature indicates that the plugin is capable of running in a <q>hard 785real-time</q> environment. This should be the case for most audio processors, 786so most plugins are expected to have this feature. 787 788To support this feature, plugins MUST adhere to the following in all of their 789audio class functions (LV2_Descriptor::run() and 790LV2_Descriptor::connect_port()): 791 792 * There is no use of `malloc()`, `free()` or any other heap memory management 793 functions. 794 795 * There is no use of any library functions which do not adhere to these 796 rules. The plugin may assume that the standard C math library functions 797 are safe. 798 799 * There is no access to files, devices, pipes, sockets, system calls, or any 800 other mechanism that might result in the process or thread blocking. 801 802 * The maximum amount of time for a `run()` call is bounded by some expression 803 of the form `A + B * sample_count`, where `A` and `B` are platform specific 804 constants. Note that this bound does not depend on input signals or plugin 805 state. 806 807"""^^lv2:Markdown . 808 809lv2:portProperty 810 lv2:documentation """ 811 812States that a port has a particular lv2:PortProperty. This may be ignored 813without catastrophic effects, though it may be useful, for example to provide a 814sensible user interface for the port. 815 816"""^^lv2:Markdown . 817 818lv2:connectionOptional 819 lv2:documentation """ 820 821This property means that the port does not have to be connected to valid data 822by the host. To leave a port <q>unconnected</q>, the host MUST explicitly 823connect the port to `NULL`. 824 825"""^^lv2:Markdown . 826 827lv2:reportsLatency 828 lv2:documentation """ 829 830This property indicates that the port is used to express the processing latency 831incurred by the plugin, expressed in samples. The latency may be affected by 832the current sample rate, plugin settings, or other factors, and may be changed 833by the plugin at any time. Where the latency is frequency dependent the plugin 834may choose any appropriate value. If a plugin introduces latency it MUST 835provide EXACTLY ONE port with this property set. In <q>fuzzy</q> cases the 836value should be the most reasonable one based on user expectation of 837input/output alignment. For example, musical delay plugins should not report 838their delay as latency, since it is an intentional effect that the host should 839not compensate for. 840 841This property is deprecated, use a lv2:designation of lv2:latency instead, 842following the same rules as above: 843 844 :::turtle 845 <http://example.org/plugin> 846 lv2:port [ 847 a lv2:OutputPort , lv2:ControlPort ; 848 lv2:designation lv2:latency ; 849 lv2:symbol "latency" ; 850 ] 851 852"""^^lv2:Markdown . 853 854lv2:toggled 855 lv2:documentation """ 856 857Indicates that the data item should be considered a boolean toggle. Data less 858than or equal to zero should be considered <q>off</q> or <q>false</q>, and data 859above zero should be considered <q>on</q> or <q>true</q>. 860 861"""^^lv2:Markdown . 862 863lv2:sampleRate 864 lv2:documentation """ 865 866Indicates that any specified bounds should be interpreted as multiples of the 867sample rate. For example, a frequency range from 0 Hz to the Nyquist frequency 868(half the sample rate) can be specified by using this property with lv2:minimum 8690.0 and lv2:maximum 0.5. Hosts that support bounds at all MUST support this 870property. 871 872"""^^lv2:Markdown . 873 874lv2:integer 875 lv2:documentation """ 876 877Indicates that all the reasonable values for a port are integers. For such 878ports, a user interface should provide a stepped control that only allows 879choosing integer values. 880 881Note that this is only a hint, and that the plugin MUST operate reasonably even 882if such a port has a non-integer value. 883 884"""^^lv2:Markdown . 885 886lv2:enumeration 887 lv2:documentation """ 888 889Indicates that all the rasonable values for a port are defined by 890lv2:scalePoint properties. For such ports, a user interface should provide a selector that allows the user to choose any of the scale point values by name. It is recommended to show the value as well if possible. 891 892Note that this is only a hint, and that the plugin MUST operate reasonably even 893if such a port has a value that does not correspond to a scale point. 894 895"""^^lv2:Markdown . 896 897lv2:isSideChain 898 lv2:documentation """ 899 900Indicates that a port is a <q>sidechain</q>, which affects the output somehow 901but should not be considered a part of the main signal chain. Sidechain ports 902SHOULD be lv2:connectionOptional, and may be ignored by hosts. 903 904"""^^lv2:Markdown . 905 906