# LV2 Port Properties

Various properties for LV2 plugin ports.

ID | http://lv2plug.in/ns/ext/port-props
Version | 1.2
Date | 2020-04-26
Discuss | devel@lists.lv2plug.in (subscribe)

- Index
- History
- API

This vocabulary defines various properties for plugin ports, which can be used to better describe how a plugin can be controlled. Using this metadata, hosts can build better UIs for plugins, and provide more advanced automatic functionality.

## Index

Properties | Instances
--- | ---
displayPriority rangeSteps | causesArtifacts continuousCV discreteCV expensive hasStrictBounds logarithmic notAutomatic notOnGUI supportsStrictBounds trigger

## Properties

### displayPriority

Property

Label | display priority
Domain | lv2:Port
Range | xsd:nonNegativeInteger
Type | Datatype Property

A priority ranking this port in importance to its plugin.

Indicates how important a port is to controlling the plugin. If a host can only display some ports of a plugin, it should prefer ports with a higher display priority. Priorities do not need to be unique, and are only meaningful when compared to each other.

### rangeSteps

Property

Label | range steps
Domain | lv2:Port
Range | xsd:nonNegativeInteger
Type | Datatype Property

The number of even steps the range should be divided into.

This value indicates into how many evenly-divided points the (control) port range should be divided for step-wise control. This may be used for changing the value with step-based controllers like arrow keys, mouse wheel, rotary encoders, and so on.

Note that when used with a logarithmic port, the steps are logarithmic too, and port value can be calculated as:

    value = lower * pow(upper / lower, step / (steps - 1))

and the step from value is:

    step = (steps - 1) * log(value / lower) / log(upper / lower)

where:

- `value` is the port value.

- `step` is the step number (0..steps).

- `steps` is the number of steps (= value of :rangeSteps property).

- `lower` and `upper` are the bounds.

## Instances

### causesArtifacts

Instance

Label | changes cause artifacts
Type | lv2:PortProperty

Input port causes audible artifacts when changed.

Input ports only. Indicates that any changes to the port value may produce slight artifacts to produced audio signals (zipper noise and other results of signal discontinuities). Connecting ports of this type to continuous signals is not recommended, and when presenting a list of automation targets, those ports may be marked as artifact-producing.

### continuousCV

Instance

Label | smooth modulation signal
Type | lv2:PortProperty

Port carries a smooth modulation signal.

Indicates that the port carries a "smooth" modulation signal. Control input ports of this type are well-suited for being connected to sources of smooth signals (knobs with smoothing, modulation rate oscillators, output ports with continuousCV type, etc.). Typically, the plugin with ports which have this property will implement appropriate smoothing to avoid audio artifacts. For output ports, this property suggests the value of the port is likely to change frequently, and describes a smooth signal (so successive values may be considered points along a curve).

### discreteCV

Instance

Label | discrete modulation signal
Type | lv2:PortProperty

Port carries a discrete modulation signal.

Indicates that the port carries a "discrete" modulation signal. Input ports of this type are well-suited for being connected to sources of discrete signals (switches, buttons, classifiers, event detectors, etc.). May be combined with trigger property. For output ports, this property suggests the value of the port describe discrete values that should be interpreted as steps (and not points along a curve).

### expensive

Instance

Label | changes are expensive
Type | lv2:PortProperty

Input port is expensive to change.

Input ports only. Indicates that any changes to the port value may trigger expensive background calculation (for example, regeneration of lookup tables in a background thread). Any value changes may have not have immediate effect, or may cause silence or diminished-quality version of the output until background processing is finished. Ports having this property are typically not well suited for connection to outputs of other plugins, and should not be offered as connection targets or for automation by default.

### hasStrictBounds

Instance

Label | has strict bounds
Type | lv2:PortProperty

Port has strict bounds which are not internally clamped.

For hosts that support supportsStrictBounds, this indicates that the value of the port should never exceed the port's minimum and maximum control points. For input ports, it moves the responsibility for limiting the range of values to host, if it supports supportsStrictBounds. For output ports, it indicates that values within specified range are to be expected, and breaking that should be considered by the host as error in plugin implementation.

### logarithmic

Instance

Label | logarithmic
Type | lv2:PortProperty

Port value is logarithmic.

Indicates that port value behaviour within specified range (bounds) is a value using logarithmic scale. The lower and upper bounds must be specified, and must be of the same sign.

### notAutomatic

Instance

Label | not automatic
Type | lv2:PortProperty

Port that is not intended to be fed with a modulation signal.

Indicates that the port is not primarily intended to be fed with modulation signals from external sources (other plugins, etc.). It is merely a UI hint and hosts may allow the user to override it.

### notOnGUI

Instance

Label | not on GUI
Type | lv2:PortProperty

Port that should not be displayed on a GUI.

Indicates that the port is not primarily intended to be represented by a separate control in the user interface window (or any similar mechanism used for direct, immediate control of control ports). It is merely a UI hint and hosts may allow the user to override it.

### supportsStrictBounds

Instance

Label | supports strict bounds
Type | lv2:Feature

A feature indicating plugin support for strict port bounds.

Indicates use of host support for hasStrictBounds port property. A plugin that specifies it as optional feature can omit value clamping for hasStrictBounds ports, if the feature is supported by the host. When specified as required feature, it indicates that the plugin does not do any clamping for input ports that have a hasStrictBounds property.

### trigger

Instance

Label | trigger
Type | lv2:PortProperty

Port is a momentary trigger.

Indicates that the data item corresponds to a momentary event that has been detected (control output ports) or is to be triggered (control input ports). For input ports, the port needs to be reset to lv2:default value after run() function of the plugin has returned. If the control port is assigned a GUI widget by the host, the widget should be of auto-off (momentary, one-shot) type - for example, a push button if the port is also declared as lv2:toggled, or a series of push button or auto-clear input box with a "Send" button if the port is also lv2:integer.

## History

Version 1.2 (2012-10-14)
  - Use consistent label style.
Version 1.0 (2012-04-17)
  - Initial release.