Description

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

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

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

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

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

Threading Rules

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

Discovery Class Instantiation Class Audio Class
lv2_descriptor() LV2_Descriptor::instantiate() LV2_Descriptor::run()
lv2_lib_descriptor() LV2_Descriptor::cleanup() LV2_Descriptor::connect_port()
LV2_Descriptor::extension_data() LV2_Descriptor::activate()
LV2_Descriptor::deactivate()

The rules that hosts MUST follow are:

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

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

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

Index

Classes
Properties
appliesTo, binary, default, designation, documentation, extensionData, freeWheeling, index, latency, maximum, microVersion, minimum, minorVersion, name, optionalFeature, port, portProperty, project, prototype, requiredFeature, scalePoint, symbol
Instances
connectionOptional, control, enumeration, hardRTCapable, inPlaceBroken, integer, isLive, reportsLatency, sampleRate, toggled

Reference

Class lv2:AllpassPlugin

Allpass
Sub-class oflv2:FilterPlugin

Class lv2:AmplifierPlugin

Amplifier
Sub-class oflv2:DynamicsPlugin

Class lv2:AnalyserPlugin

Analyser

Any plugin that analyses input to output some useful information.

Sub-class oflv2:UtilityPlugin

Class lv2:AudioPort

Audio Port

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

Sub-class oflv2:Port

Class lv2:BandpassPlugin

Bandpass
Sub-class oflv2:FilterPlugin

Class lv2:CVPort

CV Port

Ports of this type have the same buffer format as an lv2:AudioPort, except the buffer represents audio-rate control data rather than audio. Like an lv2:ControlPort, a CVPort SHOULD have properties describing its value (e.g. lv2:minimum, lv2:maximum, and lv2:default), and may be presented to the user as a control.

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.

Sub-class oflv2:Port

Class lv2:Channel

Channel

A specific channel, e.g. left or right. A channel may be audio, or another type such as a MIDI control stream.

Sub-class oflv2:Designation

Class lv2:ChorusPlugin

Chorus
Sub-class oflv2:ModulatorPlugin

Class lv2:CombPlugin

Comb
Sub-class oflv2:FilterPlugin

Class lv2:CompressorPlugin

Compressor
Sub-class oflv2:DynamicsPlugin

Class lv2:ConstantPlugin

Constant
Sub-class oflv2:GeneratorPlugin

Class lv2:ControlPort

Control Port

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

Sub-class oflv2:Port

Class lv2:ConverterPlugin

Converter

Any plugin that converts some form of input into a different form of output.

Sub-class oflv2:UtilityPlugin

Class lv2:DelayPlugin

Delay

Plugins that intentionally delay their input signal as an effect.

Sub-class oflv2:Plugin

Class lv2:Designation

Designation

The designation (or assignment) 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 lv2:designation, the port's content becomes meaningful and can be used more intelligently by the host.

In range oflv2:designation

Class lv2:DistortionPlugin

Distortion
Sub-class oflv2:Plugin

Class lv2:DynamicsPlugin

Dynamics

Plugins that alter the envelope or dynamic range of audio.

Sub-class oflv2:Plugin

Class lv2:EQPlugin

Equaliser
Sub-class oflv2:FilterPlugin

Class lv2:EnvelopePlugin

Envelope
Sub-class oflv2:DynamicsPlugin

Class lv2:ExpanderPlugin

Expander
Sub-class oflv2:DynamicsPlugin

Class lv2:ExtensionData

Extension Data

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.

In range oflv2:extensionData

Class lv2:Feature

Feature

An additional feature which a plugin or other resource may use or require.

In range oflv2:requiredFeature
lv2:optionalFeature

Class lv2:FilterPlugin

Filter
Sub-class oflv2:Plugin

Class lv2:FlangerPlugin

Flanger
Sub-class oflv2:ModulatorPlugin

Class lv2:FunctionPlugin

Function
Sub-class oflv2:UtilityPlugin

Class lv2:GatePlugin

Gate
Sub-class oflv2:DynamicsPlugin

Class lv2:GeneratorPlugin

Generator

Any plugin that generates sound internally, rather than processing its input.

Sub-class oflv2:Plugin

Class lv2:HighpassPlugin

Highpass
Sub-class oflv2:FilterPlugin

Class lv2:InputPort

Input Port

Ports of this type will be connected to a pointer to some value, which will be read by the plugin during their run method.

Sub-class oflv2:Port

Class lv2:InstrumentPlugin

Instrument

Any plugin that is intended to be played as a musical instrument.

Sub-class oflv2:GeneratorPlugin

Class lv2:LimiterPlugin

Limiter
Sub-class oflv2:DynamicsPlugin

Class lv2:LowpassPlugin

Lowpass
Sub-class oflv2:FilterPlugin

Class lv2:MixerPlugin

Mixer

A plugin which mixes some number of inputs into some number of outputs.

Sub-class oflv2:UtilityPlugin

Class lv2:ModulatorPlugin

Modulator
Sub-class oflv2:Plugin

Class lv2:MultiEQPlugin

Multiband
Sub-class oflv2:EQPlugin

Class lv2:OscillatorPlugin

Oscillator
Sub-class oflv2:GeneratorPlugin

Class lv2:OutputPort

Output Port

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.

Sub-class oflv2:Port

Class lv2:ParaEQPlugin

Parametric
Sub-class oflv2:EQPlugin

Class lv2:Parameter

Parameter

A parameter, i.e. a recognized property. A parameter is a designation for a control.

A parameter defines the meaning of a control (not the method of conveying its value). The standard way of exposing a plugin parameter is via an lv2:ControlPort, which can be given a parameter designation with lv2:designation. Other methods, such as setting dynamic parameters via messages, are possible but not defined here.

Sub-class oflv2:Designation
rdf:Property

Class lv2:PhaserPlugin

Phaser
Sub-class oflv2:ModulatorPlugin

Class lv2:PitchPlugin

Pitch Shifter
Sub-class oflv2:SpectralPlugin

Class lv2:Plugin

Plugin

The class which represents an LV2 plugin.

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

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

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

Sub-class oflv2:PluginBase
Restriction on doap:name
owl:someValuesFrom rdf:PlainLiteral
A Plugin MUST have at least one doap:name that is a string with no language tag.
In range oflv2:appliesTo

Class lv2:PluginBase

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

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

In domain oflv2:port

Class lv2:Point

Point

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

  • A Point MUST have at least one rdfs:label which is a string.
  • A Point MUST have exactly one rdf:value with a type that is compatible with the type of the corresponding Port.

Class lv2:Port

Port

The class which represents an LV2 port.

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

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

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

Restriction on lv2:symbol
owl:allValuesFrom rdf:PlainLiteral
owl:cardinality 1
A port MUST have a single lv2:symbol which is of type xsd:string with no language tag.
Restriction on lv2:name
owl:someValuesFrom xsd:string
A port MUST have at least one lv2:name which is of type xsd:string.
Restriction on lv2:index
owl:allValuesFrom xsd:unsignedInt
owl:cardinality 1
A port MUST have a single lv2:index which is of type xsd:unsignedInt. The explicit RDF datatype of the index MAY be something else (typically xsd:integer for pretty Turtle numeric literals), but the value itself MUST be a valid xsd:unsignedInt (i.e. a non-negative 32-bit integer).
In domain oflv2:default
lv2:minimum
lv2:scalePoint
lv2:maximum
lv2:portProperty
In range oflv2:port

Class lv2:PortProperty

Port Property

A port property - a useful piece of information that allows a host to make more sensible decisions (e.g. to provide a better interface).

In range oflv2:portProperty

Class lv2:ReverbPlugin

Class lv2:ScalePoint

Scale Point

A single float Point (for control inputs).

Sub-class oflv2:Point
In range oflv2:scalePoint

Class lv2:SimulatorPlugin

Simulator

Plugins that aim to duplicate the effect of some environmental effect or musical equipment.

Sub-class oflv2:Plugin

Class lv2:SpatialPlugin

Spatial

Plugins that manipulate the position of audio in space (e.g. panning, stereo width, surround encoding, etc.).

Sub-class oflv2:Plugin

Class lv2:Specification

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

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

Sub-class ofdoap:Project

Class lv2:SpectralPlugin

Spectral

Plugins that alter the spectral properties (e.g. frequency) of audio.

Sub-class oflv2:Plugin

Class lv2:Symbol

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).

In range oflv2:symbol
owl:onDatatype xsd:string
owl:withRestrictions
rdf:rest rdf:nil
rdf:first
xsd:pattern [_a-zA-Z][_a-zA-Z0-9]*

Class lv2:UtilityPlugin

Utility

Includes things like mathematical functions and non-musical delays.

Sub-class oflv2:Plugin

Class lv2:WaveshaperPlugin

Waveshaper
Sub-class oflv2:DistortionPlugin

Property lv2:appliesTo

applies to

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

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

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

OWL TypeObject Property
Rangelv2:Plugin

Property lv2:binary

binary

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

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

OWL TypeObject Property
Rangeowl:Thing

Property lv2:default

default

The default value that the host SHOULD set this port to when there is no other information available.

OWL TypeDatatype Property
Domainlv2:Port

Property lv2:designation

designation

Indicates a channel or parameter designation.

This property is used to give the port's contents a well-defined meaning. For example, if a port has lv2:designation eg:gain, then the value of that port represents the eg:gain of the plugin instance.

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.

OWL TypeObject Property
Rangelv2:Designation

Property lv2:documentation

documentation

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

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

OWL TypeAnnotation Property
Rangerdfs:Literal
rdfs:seeAlso http://www.w3.org/TR/xhtml-basic/

Property lv2:extensionData

extension data

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

OWL TypeObject Property
Rangelv2:ExtensionData

Property lv2:freeWheeling

free-wheeling

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).

OWL TypeDatatype Property
Rangexsd:boolean

Property lv2:index

index

A non-negative zero-based 32-bit index.

OWL TypeDatatype Property
Rangexsd:unsignedInt

Property lv2:latency

latency

The latency introduced by the plugin (or similar), in frames.

OWL TypeDatatype Property

Property lv2:maximum

maximum

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

OWL TypeDatatype Property
Domainlv2:Port

Property lv2:microVersion

micro version

The micro component of a Resource's version.

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

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

OWL TypeDatatype Property
Rangexsd:nonNegativeInteger

Property lv2:minimum

minimum

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

OWL TypeDatatype Property
Domainlv2:Port

Property lv2:minorVersion

minor version

The minor version of an LV2 Resource. This, along with lv2:microVersion, is used to distinguish between different versions of the same 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:

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

Note there is deliberately no 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.

Plugins and extensions MUST adhere to at least the following rules:

  • All versions of a plugin with a given URI MUST have the same set of mandatory (i.e. not lv2:connectionOptional) ports with respect to lv2:symbol and rdf:type. In other words, every port on a particular version is guaranteed to exist on a future version with same lv2:symbol and at least those rdf:types.
  • New ports MAY be added without changing the plugin URI if and only if they are lv2:connectionOptional and the minor version is incremented.
  • The minor version MUST be incremented if the index of any port (identified by its symbol) is changed.
  • All versions of a specification MUST be compatible in the sense that an implementation of the new version can interoperate with an implementation of any previous version.

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

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

An odd minor or micro version, 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 experimental option is enabled.

OWL TypeDatatype Property
Rangexsd:nonNegativeInteger

Property lv2:name

name

A display name for labeling in a user interface. Unlike lv2:symbol this is unrestricted and may be translated. The lv2: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.

OWL TypeDatatype Property

Property lv2:optionalFeature

optional feature

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.

OWL TypeObject Property
Rangelv2:Feature

Property lv2:port

port

Relates a Plugin to the Ports it contains

OWL TypeObject Property
Domainlv2:PluginBase
Rangelv2:Port

Property lv2:portProperty

port property

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.

OWL TypeObject Property
Domainlv2:Port
Rangelv2:PortProperty

Property lv2:project

project

The project this is a component of.

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.

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 lv2:symbol property, which allows nice quasi-global identifiers for plugins, e.g. myproj.superamp which can be useful for display or fast user entry.

OWL TypeObject Property
Rangedoap:Project

Property lv2:prototype

prototype

The prototype to inherit properties from.

This property can be used to include 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 :plug lv2:prototype :prot, then for each triple :prot p o, the triple :plug p o should be loaded.

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.

OWL TypeObject Property

Property lv2:requiredFeature

required feature

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).

OWL TypeObject Property
Rangelv2:Feature

Property lv2:scalePoint

scale point

Relates a Port to its ScalePoints.

OWL TypeObject Property
Domainlv2:Port
Rangelv2:ScalePoint

Property lv2:symbol

symbol

The value of this property MUST conform to the rules for lv2:Symbol, and MUST NOT have a language tag.

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.

OWL TypeDatatype Property
Rangelv2:Symbol

Instance lv2:connectionOptional

connection optional

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.

Typelv2:PortProperty

Instance lv2:control

control

The primary control channel. This should be used as the lv2: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.

Typelv2:Channel

Instance lv2:enumeration

enumeration

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).

Typelv2:PortProperty

Instance lv2:hardRTCapable

hard real-time capable

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

  1. The plugin MUST NOT use malloc(), free() or other heap memory management functions within its Audio class functions.
  2. 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.
  3. 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.
  4. The plugin will take an amount of time to execute a run() call approximately of form A + B * sample_count where A and B depend on the machine and host in use. This amount of time MUST NOT depend on input signals or plugin state.

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

Typelv2:Feature

Instance lv2:inPlaceBroken

in-place broken

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

Typelv2:Feature

Instance lv2:integer

integer

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.

Typelv2:PortProperty

Instance lv2:isLive

is live

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

Typelv2:Feature

Instance lv2:reportsLatency

reports latency

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

Typelv2:PortProperty

Instance lv2:sampleRate

sample rate

Indicates that any bounds specified should be interpreted as multiples of the sample rate. For instance, a frequency range from 0Hz to the Nyquist frequency (half the sample rate) could be requested by this property in conjunction with lv2:minimum 0.0 and lv2:maximum 0.5. Hosts that support bounds at all MUST support this property.

Typelv2:PortProperty

Instance lv2:toggled

toggled

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

Typelv2:PortProperty

History

Version 12.2 (2014-08-08)
  • Clarify lv2_descriptor() and lv2_lib_descriptor() documentation.
Version 12.0 (2014-01-04)
  • Add lv2:prototype for property inheritance.
Version 1.6 (2013-05-26)
  • Fix crash in forge.h when pushing atoms to a full buffer.
Version 2.14 (2013-03-18)
  • Add idle interface so native UIs and foreign toolkits can drive their event loops.
  • Add ui:updateRate property.
Version 10.0 (2013-02-17)
  • Add lv2:control for designating primary event-based control ports.
  • Add lv2:EnvelopePlugin class.
  • Set range of lv2:designation to lv2:Designation.
  • Make lv2:Parameter rdfs:subClassOf rdf:Property.
  • Reserve minor version 0 for unstable development plugins.
Version 1.4 (2013-01-27)
  • Fix lv2_atom_sequence_end().
  • Remove atom:stringType in favour of owl:onDatatype so generic tools can understand and validate atom literals.
  • Improve atom documentation.
Version 2.0 (2013-01-16)
  • Add state:loadDefaultState feature so plugins can have their default state loaded without hard-coding default state as a special case.
Version 1.10 (2013-01-13)
  • Fix incorrect return type in lv2_event_get().
Version 2.0 (2013-01-10)
  • Make patch:Set a compact message for setting one property.
  • Add patch:readable and patch:writable for describing available properties.
Version 2.0 (2013-01-08)
  • Add logger convenience API.
Version 1.2 (2012-12-21)
  • Fix typo in bufsz:sequenceSize label.
Version 2.12 (2012-12-01)
  • Fix incorrect linker flag in ui:makeSONameResident documentation.
Version 8.2 (2012-10-14)
  • Use consistent label style.
Version 8.0 (2012-04-17)
  • Remove lv2:Resource, which turned out to be meaningless.
  • Fix LV2_SYMBOL_EXPORT and lv2_descriptor prototype for Windows.
  • Add metadata concept of a designation, a channel or parameter description which can be assigned to ports for more intelligent use by hosts.
  • Merge with unified LV2 package.
  • 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.
  • Relax the range of lv2:index so it can be used for things other than ports.
  • Add lv2:CVPort.
Version 6.0 (2011-11-21)
  • Remove lv2config in favour of the simple convention that specifications install headers to standard URI-based paths.
  • Make lv2core.ttl a valid OWL 2 DL ontology.
  • Switch to the ISC license, a simple BSD-style license (with permission of all contributors to lv2.h and its ancestor, ladspa.h).
  • Improve documentation.
  • Add lv2:extensionData and lv2:ExtensionData for plugins to indicate that they support some URI for extension_data().
  • Rename core.lv2 and lv2.ttl to lv2core.lv2 and lv2core.ttl to adhere to modern conventions.
Version 1.0 (2011-11-21)
  • Initial release.
Version 1.4 (2011-11-21)
  • Update packaging.
  • Deprecate uri-map in favour of urid.
Version 5.4 (2011-11-21)
  • Improve documentation.
  • Define used but undefined resources (units:name, units:render, units:symbol, units:Conversion, units:conversion, units:prefixConversion, units:to, and units:factor).
  • Make units.ttl a valid OWL 2 DL ontology.
  • Update packaging.
Version 2.4 (2011-11-21)
  • Install header to URI-based system path.
  • Add Qt4 and X11 widget types.
  • Make ui.ttl a valid OWL 2 DL ontology.
  • Add pkg-config file.
  • Deprecate ui:makeSONameResident.
Version 2.2 (2011-11-21)
  • Update packaging.
  • Improve documentation.
Version 1.4 (2011-11-21)
  • Improve documentation.
  • Update packaging.
Version 1.4 (2011-11-21)
  • Improve documentation.
  • Update packaging.
Version 1.4 (2011-11-21)
  • Update packaging.
Version 1.4 (2011-11-21)
  • Improve documentation.
  • Update packaging.
Version 1.2 (2011-05-26)
  • Mark up documentation in HTML using lv2:documentation.
  • Add build system (for installation).
Version 2.2 (2011-05-26)
  • Convert documentation to HTML and use lv2:documentation.
  • Add build system (for installation).
  • Use lv2:Specification to be discovered as an extension.
Version 1.2 (2011-05-26)
  • Switch to ISC license.
  • Add build system for installation.
Version 1.2 (2011-05-26)
  • Switch to ISC license.
  • Add build system for installation.
Version 1.2 (2011-05-26)
  • Use lv2:Specification to be discovered as an extension.
  • Add build system (for installation).
  • Convert documentation to HTML and use lv2:documentation.
Version 1.2 (2011-05-26)
  • Switch to ISC license.
  • Add build system for installation.
Version 4.0 (2011-03-18)
  • Define lv2:binary (MUST be in manifest.ttl).
  • Define lv2:minorVersion and lv2:microVersion (MUST be in manifest.ttl).
  • More precisely define properties with OWL.
  • Add generic lv2:Resource and lv2:PluginBase classes.
  • Move lv2:AmplifierPlugin under lv2:DynamicsPlugin.
  • Define lv2:documentation and use it to document lv2core.
  • Make doap:license suggested, but not required (for wrappers).
  • Add lv2:FunctionPlugin and lv2:ConstantPlugin classes.
  • Loosen domain of lv2:optionalFeature and lv2:requiredFeature (to allow re-use in extensions).
  • Add lv2:enumeration port property.
  • Move project metadata to manifest.
  • Fix definition of lv2:minimum etc. (used for values, not scale points).
  • Define run() pre-roll special case (sample_count == 0).
Version 1.0 (2010-11-24)
  • Initial release.
Version 1.0 (2010-10-18)
  • Initial release.
Version 2.0 (2010-10-06)
  • Initial release.
Version 5.2 (2010-10-05)
  • Add build system (for installation).
  • Convert documentation to HTML and use lv2:documentation.
Version 5.0 (2010-10-05)
  • Initial release.
  • Define used but undefined resources (units:name, units:render, units:symbol, units:Conversion, units:conversion, units:prefixConversion, units:to, and units:factor).
  • Update packaging.
  • Improve documentation.
Version 2.0 (2010-10-04)
  • Initial release.
Version 1.0 (2010-10-04)
  • Initial release.
Version 1.0 (2010-10-04)
  • Initial release.
Version 1.0 (2010-10-04)
  • Initial release.
Version 3.0 (2008-11-08)
  • Minor stylistic changes to lv2.ttl.
  • Require that serialisations refer to ports by symbol rather than index.
  • No header changes.
Version 2.0 (2008-02-10)
  • Initial release.