aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-03-24 22:18:21 +0000
committerDavid Robillard <d@drobilla.net>2012-03-24 22:18:21 +0000
commitb260998d80fb785e33e26516b20f95739b8ce444 (patch)
tree2a7586871a235735ffe2d70703d4e83b8d1146a5
parent978d41eaad0052d3c9ef5314b98053d38bdce7bd (diff)
downloadlv2-b260998d80fb785e33e26516b20f95739b8ce444.tar.xz
Re-work port-groups to re-use new stuff in the core.
On second thought, re-add port-props extension.
-rw-r--r--lv2/lv2plug.in/ns/ext/parameters/parameters.ttl291
-rw-r--r--lv2/lv2plug.in/ns/ext/port-groups/port-groups.ttl898
l---------lv2/lv2plug.in/ns/ext/port-props/ext.pc.in1
-rw-r--r--lv2/lv2plug.in/ns/ext/port-props/manifest.ttl8
-rw-r--r--lv2/lv2plug.in/ns/ext/port-props/port-props.ttl211
l---------lv2/lv2plug.in/ns/ext/port-props/waf1
l---------lv2/lv2plug.in/ns/ext/port-props/wscript1
7 files changed, 898 insertions, 513 deletions
diff --git a/lv2/lv2plug.in/ns/ext/parameters/parameters.ttl b/lv2/lv2plug.in/ns/ext/parameters/parameters.ttl
index 4a8c3c5..013828c 100644
--- a/lv2/lv2plug.in/ns/ext/parameters/parameters.ttl
+++ b/lv2/lv2plug.in/ns/ext/parameters/parameters.ttl
@@ -18,6 +18,7 @@
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
+@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@@ -43,167 +44,139 @@
foaf:name "Krzysztof Foltman" ;
] , <http://drobilla.net/drobilla#me> ;
lv2:documentation """
-<p>This extension defines useful parameters and properties for LV2 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.</p> """ .
-
-param:trigger
- a lv2:PortProperty ;
- rdfs:label "Trigger" ;
- rdfs:comment """
-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.
-""" .
-
-param:supportsStrictBounds
- a lv2:Feature ;
- rdfs:label "Supports strict bounds" ;
- rdfs:comment """
-Indicates use of host support for param: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 param:hasStrictBounds property.
-""" .
-
-param:hasStrictBounds
- a lv2:PortProperty ;
- rdfs:label "Has strict bounds" ;
- rdfs:comment """
-For hosts that support param: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 param: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.
-""" .
-
-param:expensive
- a lv2:PortProperty ;
- rdfs:label "Changes trigger expensive calculation" ;
- rdfs:comment """
-Input ports only. Indicates that any changes to the port value may trigger
-expensive background calculation (e.g. regenerate some 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.
-""" .
-
-param:causesArtifacts
- a lv2:PortProperty ;
- rdfs:label "May cause audio artifacts when changed" ;
- rdfs:comment """
-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.
-""" .
-
-param:continuousCV
- a lv2:PortProperty ;
- rdfs:label "Carries a smooth modulation signal" ;
- rdfs:comment """
-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 (e.g. successive values may be
-considered points along a curve).
-""" .
-
-param:discreteCV
- a lv2:PortProperty ;
- rdfs:label "Carries a discrete modulation signal" ;
- rdfs:comment """
-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
-param: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).
+<p>This extension defines parameters common in audio processing software. A
+<q>parameter</q> is purely a metadata concept, unrelated to any particular code
+mechanism. Parameters are used to assign meaning to controls so they can be
+used more intelligently or presented to the user more efficiently.</p>
""" .
-param:logarithmic
- a lv2:PortProperty ;
- rdfs:label "Port value uses a logarithmic scale" ;
+param:ControlGroup
+ a rdfs:Class ;
+ rdfs:subClassOf pg:Group ;
rdfs:comment """
-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.
+A group representing a set of associated controls.
""" .
-param:notAutomatic
- a lv2:PortProperty ;
- rdfs:label "Port is not intended as a CV input" ;
- rdfs:comment """
-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.
-""" .
-
-param:notOnGUI
- a lv2:PortProperty ;
- rdfs:label "Port is not to be displayed on a GUI or equivalent" ;
- rdfs:comment """
-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.
-""" .
-
-param:priority
- a rdf:Property ;
- rdfs:domain lv2:Port ;
- rdfs:range xsd:float ;
- rdfs:label "Relative usefulness of a port" ;
- rdfs:comment """
-Indicates how (typically) useful is the port comparing to other ports with that
-property (higher value = more important). The values do not need to be unique,
-and ports can be grouped based on their priorities.
-""" .
-
-param:rangeSteps
- a rdf:Property ;
- rdfs:domain lv2:Port ;
- rdfs:range xsd:nonNegativeInteger ;
- rdfs:label "Number of value quantization steps" ;
- lv2:documentation """
-<p>This value indicates into how many evenly-divided points the (control) port
-range shoujld 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, etc.</p>
-
-<p>Note that when used with a param:logarithmic port, the steps are
-logarithmic too, and port value can be calculated as:</p>
-
-<pre class="c-code">
-value = lower * pow(upper / lower, step / (steps - 1))
-</pre>
-
-<p>and the step from value is:</p>
-
-<pre class="c-code">
-step = (steps - 1) * log(value / lower) / log(upper / lower)
-</pre>
-
-<p>where:</p>
-<ul>
-<li><code>value</code> is the port value</li>
-<li><code>step</code> is the step number (0..steps)</li>
-<li><code>steps</code> is the number of steps (= value of :rangeSteps property)</li>
-<li><code>lower</code> and <code>upper</code> are the bounds</li>
-</ul>
-""" .
+param:amplitude
+ a lv2:Parameter ;
+ rdfs:label "Amplitude" .
+
+param:attack
+ a lv2:Parameter ;
+ rdfs:label "Attack" ;
+ rdfs:comment "The duration of an envelope's attack stage." .
+
+param:cutoffFrequency
+ a lv2:Parameter ;
+ rdfs:label "Cutoff Frequency" .
+
+param:decay
+ a lv2:Parameter ;
+ rdfs:label "Decay" ;
+ rdfs:comment "The duration of an envelope's decay stage." .
+
+param:delay
+ a lv2:Parameter ;
+ rdfs:label "Delay" ;
+ rdfs:comment "The duration of an envelope's delay stage." .
+
+param:frequency
+ a lv2:Parameter ;
+ rdfs:label "Frequency" .
+
+param:hold
+ a lv2:Parameter ;
+ rdfs:label "Hold" ;
+ rdfs:comment "The duration of an envelope's hold stage." .
+
+param:pulseWidth
+ a lv2:Parameter ;
+ rdfs:label "Pulse Width" ;
+ rdfs:comment "The width of a pulse of a rectangular waveform." .
+
+param:ratio
+ a lv2:Parameter ;
+ rdfs:label "Ratio" ;
+ rdfs:comment "Compression ration." .
+
+param:release
+ a lv2:Parameter ;
+ rdfs:label "Release" ;
+ rdfs:comment "The duration of an envelope's release stage." .
+
+param:resonance
+ a lv2:Parameter ;
+ rdfs:label "Resonance" ;
+ rdfs:comment "The resonance of a filter." .
+
+param:sustain
+ a lv2:Parameter ;
+ rdfs:label "Sustain" ;
+ rdfs:comment "The level (not duration) of an envelope's sustain stage." .
+
+param:threshold
+ a lv2:Parameter ;
+ rdfs:label "Threshold" ;
+ rdfs:comment "Compression threshold." .
+
+param:waveform
+ a lv2:Parameter ;
+ rdfs:label "Waveform" .
+
+param:EnvelopeControls
+ a rdfs:Class ;
+ rdfs:subClassOf param:ControlGroup ;
+ rdfs:label "Controls for a DAHDSR envelope." ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation param:delay ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation param:attack ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation param:hold ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation param:decay ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation param:sustain ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation param:release ;
+ ] .
+
+param:OscillatorControls
+ a rdfs:Class ;
+ rdfs:subClassOf param:ControlGroup ;
+ rdfs:label "Controls for an oscillator." ;
+ pg:element [
+ lv2:designation param:frequency ;
+ ] , [
+ lv2:designation param:amplitude ;
+ ] , [
+ lv2:designation param:waveform ;
+ ] , [
+ lv2:designation param:pulseWidth ;
+ ] .
+
+param:FilterControls
+ a rdfs:Class ;
+ rdfs:subClassOf param:ControlGroup ;
+ rdfs:label "Controls for a filter." ;
+ pg:element [
+ lv2:designation param:cutoffFrequency ;
+ ] , [
+ lv2:designation param:resonance ;
+ ] .
+
+param:CompressorControls
+ a rdfs:Class ;
+ rdfs:subClassOf param:ControlGroup ;
+ rdfs:label "Controls for a compressor." ;
+ pg:element [
+ lv2:designation param:threshold ;
+ ] , [
+ lv2:designation param:ratio ;
+ ] .
diff --git a/lv2/lv2plug.in/ns/ext/port-groups/port-groups.ttl b/lv2/lv2plug.in/ns/ext/port-groups/port-groups.ttl
index edf5359..c58bbbf 100644
--- a/lv2/lv2plug.in/ns/ext/port-groups/port-groups.ttl
+++ b/lv2/lv2plug.in/ns/ext/port-groups/port-groups.ttl
@@ -1,5 +1,5 @@
# LV2 Port Groups Extension
-# Copyright 2009-2011 David Robillard <d@drobilla.net>
+# Copyright 2009-2012 David Robillard <d@drobilla.net>
# Copyright 2008-2009 Lars Luthman <lars.luthman@gmail.com>
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -14,55 +14,51 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+@prefix amb: <http://ambisonics.ch/standards/channels/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-@prefix doap: <http://usefulinc.com/ns/doap#> .
-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
-@prefix amb: <http://ambisonics.ch/standards/channels/> .
-<http://lv2plug.in/ns/ext/port-groups> a lv2:Specification ;
+<http://drobilla.net/drobilla#me>
+ a foaf:Person ;
+ foaf:name "David Robillard" ;
+ foaf:homepage <http://drobilla.net/> ;
+ foaf:mbox <mailto:d@drobilla.net> ;
+ rdfs:seeAlso <http://drobilla.net/drobilla> .
+
+<http://lv2plug.in/ns/ext/port-groups>
+ a lv2:Specification ;
doap:license <http://opensource.org/licenses/isc> ;
- doap:name "LV2 Port Groups" ;
+ doap:name "LV2 Port Groups" ;
doap:shortdesc "Multi-channel groups of LV2 ports." ;
rdfs:comment "Defines semantic groupings of LV2 ports" ;
- doap:maintainer [
+ doap:developer [
a foaf:Person ;
foaf:name "Lars Luthman" ;
- foaf:mbox <mailto:lars.luthman@gmail.com>
- ] , [
- a foaf:Person ;
- foaf:name "David Robillard" ;
- foaf:homepage <http://drobilla.net/> ;
- rdfs:seeAlso <http://drobilla.net/drobilla.rdf>
- ] .
-
-
-## Core Classes / Properties
-
-pg:Group a rdfs:Class ;
- rdfs:label "LV2 Port Group" ;
- rdfs:subClassOf [ a owl:Restriction ;
- owl:onProperty lv2:symbol ;
+ foaf:mbox <mailto:lars.luthman@gmail.com> ;
+ ] , <http://drobilla.net/drobilla#me> .
+
+pg:Group
+ a rdfs:Class ;
+ rdfs:label "A group of channels or parameters." ;
+ rdfs:subClassOf [
+ a owl:Restriction ;
+ owl:onProperty lv2:symbol ;
owl:someValuesFrom xsd:string ;
- owl:cardinality 1 ;
- rdfs:comment """
+ owl:cardinality 1 ;
+ rdfs:comment """
A pg:Group MUST have exactly one string lv2:symbol. This symbol must be
unique according to the same rules as the lv2:symbol for an lv2:Port, where
group symbols and port symbols reside in the same namespace. In other words,
a group on a plugin MUST NOT have the same symbol as another group or a port
-on that plugin. Rationale: Hosts or bindings may find it useful to construct
-an identifier to refer to groups for the same reasons this is useful for ports.
-"""
- ] ;
- rdfs:subClassOf [ a owl:Restriction ;
- owl:onProperty pg:hasRole ;
- owl:someValuesFrom pg:RoleAssignment ;
- owl:minCardinality 1 ;
- rdfs:comment "A Group MUST have at least one role assignment"
+on that plugin. This makes it possible to uniquely reference a port or group
+on a plugin with a single identifier and no context.
+""" ;
] ;
rdfs:comment """
A grouping of ports that can be logically considered a single "stream", e.g.
@@ -70,54 +66,38 @@ two audio ports in a group may form a stereo stream. The pg:source predicate
can also be used to describe this correspondence between separate ports/groups.
""" .
-pg:index a rdf:Property ;
- rdfs:domain pg:RoleAssignment ;
- rdfs:range xsd:nonNegativeInteger ;
- rdfs:label "index" ;
- rdfs:comment "Index of a role within some group" .
-
-pg:RoleAssignment a rdfs:Class ;
- rdfs:label "Role Assignment" ;
- rdfs:comment "A numbered role within some Group." ;
- rdfs:subClassOf [ a owl:Restriction ;
- owl:onProperty pg:index ;
- owl:cardinality 1 ;
- rdfs:comment """
-A RoleAssignment MUST have exactly one index.
-""" ] ;
- rdfs:subClassOf [ a owl:Restriction ;
- owl:onProperty pg:role ;
- owl:cardinality 1 ;
- rdfs:comment """
-A RoleAssignment MUST have exactly one role.
-""" ] ;
- rdfs:comment """
-All group definitions MUST define the order of channels. Note that this
-does not have anything to do with port indices, this information is only
-defined here for use by other extensions. For simply assigning groups
-and roles to a basic LV2 plugin, index is irrelevant.
-""" .
-
-pg:hasRole a rdf:Property ;
- rdfs:domain pg:Group ;
- rdfs:range pg:Role ;
- rdfs:label "Has port with role" ;
+pg:Element
+ a rdfs:Class ;
+ rdfs:label "Element" ;
+ rdfs:comment "An ordered element of a group." ;
+ rdfs:subClassOf [
+ a owl:Restriction ;
+ owl:onProperty lv2:index ;
+ owl:maxCardinality 1 ;
+ rdfs:comment "An element has at most one lv2:index." ;
+ ] , [
+ a owl:Restriction ;
+ owl:onProperty lv2:designation ;
+ owl:cardinality 1 ;
+ rdfs:comment "An element MUST have exactly one lv2:designation." ;
+ ] ;
rdfs:comment """
-Indicates that a group always has a port with a particular role.
+An element of a group, which has a designation and an optional index.
""" .
-pg:mayHaveRole a rdf:Property ;
- rdfs:domain pg:Group ;
- rdfs:range pg:Role ;
- rdfs:label "May have port with role" ;
+pg:element
+ a rdf:Property ;
+ rdfs:domain pg:Group ;
+ rdfs:range pg:Element ;
+ rdfs:label "element" ;
rdfs:comment """
-Indicates that a group may have a port with a particular role.
+Indicates that a group has a certain element (a parameter or channel
+designation with a possible index).
""" .
-pg:sideChainOf a rdf:Property ;
- rdfs:domain pg:Group , lv2:Port ;
- rdfs:range pg:Group , lv2:Port ;
- rdfs:label "Side-chain of" ;
+pg:sideChainOf
+ a rdf:Property ;
+ rdfs:label "Side-chain of" ;
rdfs:comment """
Indicates that this port or group should be considered a "side chain" of
some other port or group. The precise definition of "side chain" depends
@@ -125,74 +105,54 @@ on the plugin, but in general this group should be considered a modifier to
some other group, rather than an independent input itself.
""" .
-pg:subGroupOf a rdf:Property ;
- rdfs:domain pg:Group ;
- rdfs:range pg:Group ;
- rdfs:label "Sub-group of" ;
+pg:subGroupOf
+ a rdf:Property ;
+ rdfs:domain pg:Group ;
+ rdfs:range pg:Group ;
+ rdfs:label "Sub-group of" ;
rdfs:comment """
-Indicates that this group is a child of another group. This property has
-no meaning with respect to plugin execution, but the host may find this
-information useful (e.g. to provide a compact user interface). Note that
-all groups on a plugin MUST have a unique symbol with respect to the plugin
-as documented for pg:Group, i.e. sub-groups must have a unique symbol among
-all groups and ports on the plugin.
+Indicates that this group is a child of another group. This property has no
+meaning with respect to plugin execution, but the host may find this
+information useful (e.g. to provide a compact user interface). Note that being
+a sub-group does not relax the restriction that the group MUST have a unique
+symbol.
""" .
-pg:source a rdf:Property ;
- rdfs:domain pg:Group , lv2:Port ;
- rdfs:range pg:Group , lv2:Port ;
- rdfs:label "Source group" ;
+pg:source
+ a rdf:Property ;
+ rdfs:label "Source" ;
rdfs:comment """
Indicates that this port or group should be considered the "result" of
some other port or group. This property only makes sense on groups with
outputs when the source is a group with inputs. This can be used to convey
a relationship between corresponding input and output groups with different
-types, e.g. a mono->stereo plugin.
+types, e.g. a mono->stereo plugin.
""" .
-pg:mainGroup a rdf:Property ;
- rdfs:domain lv2:Plugin ;
- rdfs:range pg:Group ;
- rdfs:label "Main port group" ;
+pg:mainGroup
+ a rdf:Property ;
+ rdfs:domain lv2:Plugin ;
+ rdfs:range pg:Group ;
+ rdfs:label "Main port group" ;
rdfs:comment """
Indicates that this group should be considered the "main" inputs/outputs of
the plugin, e.g. it probably makes sense to just connect main groups and set
-some controls. A plugin MUST NOT have more than one :mainGroup property.
+some controls. A plugin MUST NOT have more than one pg:mainGroup property.
High-level hosts that simply want to insert an plugin in a given stream
should use this property to determine where the plugin 'fits'.
""" .
-pg:inGroup a rdf:Property ;
- rdfs:domain lv2:Port ;
- rdfs:range pg:Group ;
- rdfs:label "In port group" ;
+pg:inGroup
+ a rdf:Property ;
+ rdfs:domain lv2:Port ;
+ rdfs:range pg:Group ;
+ rdfs:label "In port group" ;
rdfs:comment """
Indicates that this port is a part of a group of ports on the plugin.
-Ports that have a meaningful "role" that may be useful to hosts SHOULD also
-have a :role property, otherwise ports in the group have no meaningful order.
""" .
-pg:Role a rdfs:Class ;
- rdfs:label "Port role" ;
- rdfs:comment """
-The role of a port with respect to its plugin or group. If the port is a
-member of a group (has an :inGroup property) the role is relevant with respect
-to that group. Otherwise the role is relevant with respect to the plugin.
-""" .
-
-pg:role a rdf:Property ;
- rdfs:range pg:Role ;
- rdfs:label "Role" ;
- rdfs:comment """
-Indicates that this port has a particular role with respect to its enclosing
-plugin or group (whichever is smaller). A port may have several roles if it
-makes sense to do so (though some Role or Group definition may forbid this).
-""" .
-
-
-# Discrete
-
-pg:DiscreteGroup a rdfs:Class ;
+pg:DiscreteGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:Group ;
rdfs:comment """
"Discrete" channel configurations. These groups are divided into channels
@@ -200,109 +160,254 @@ where each represents a particular speaker location. The position of sound
in one of these groups depends on a particular speaker configuration.
""" .
-pg:leftChannel a pg:Role ; rdfs:label "Left" .
-pg:rightChannel a pg:Role ; rdfs:label "Right" .
-pg:centerChannel a pg:Role ; rdfs:label "Center" .
-pg:sideChannel a pg:Role ; rdfs:label "Side" .
-pg:centerLeftChannel a pg:Role ; rdfs:label "Center Left" .
-pg:centerRightChannel a pg:Role ; rdfs:label "Center Right" .
-pg:sideLeftChannel a pg:Role ; rdfs:label "Side Left" .
-pg:sideRightChannel a pg:Role ; rdfs:label "Side Right" .
-pg:rearLeftChannel a pg:Role ; rdfs:label "Rear Left" .
-pg:rearRightChannel a pg:Role ; rdfs:label "Rear Right" .
-pg:rearCenterChannel a pg:Role ; rdfs:label "Rear Center" .
-pg:lfeChannel a pg:Role ; rdfs:label "Sub (LFE)" .
-
-pg:MonoGroup a rdfs:Class ;
+pg:left
+ a lv2:Channel ;
+ rdfs:label "Left" .
+
+pg:right
+ a lv2:Channel ;
+ rdfs:label "Right" .
+
+pg:center
+ a lv2:Channel ;
+ rdfs:label "Center" .
+
+pg:side
+ a lv2:Channel ;
+ rdfs:label "Side" .
+
+pg:centerLeft
+ a lv2:Channel ;
+ rdfs:label "Center Left" .
+
+pg:centerRight
+ a lv2:Channel ;
+ rdfs:label "Center Right" .
+
+pg:sideLeft
+ a lv2:Channel ;
+ rdfs:label "Side Left" .
+
+pg:sideRight
+ a lv2:Channel ;
+ rdfs:label "Side Right" .
+
+pg:rearLeft
+ a lv2:Channel ;
+ rdfs:label "Rear Left" .
+
+pg:rearRight
+ a lv2:Channel ;
+ rdfs:label "Rear Right" .
+
+pg:rearCenter
+ a lv2:Channel ;
+ rdfs:label "Rear Center" .
+
+pg:lowFrequencyEffects
+ a lv2:Channel ;
+ rdfs:label "Low-Frequency Effects (LFE)" .
+
+pg:MonoGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "Mono" ;
- pg:hasRole [ pg:index 0; pg:role pg:centerChannel ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:center ;
+ ] .
-pg:StereoGroup a rdfs:Class ;
+pg:StereoGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "Stereo" ;
- pg:hasRole [ pg:index 0; pg:role pg:leftChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:rightChannel ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:left ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:right ;
+ ] .
-pg:MidSideGroup a rdfs:Class ;
+pg:MidSideGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "Mid-Side Stereo" ;
- pg:hasRole [ pg:index 0; pg:role pg:centerChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:sideChannel ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:center ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:side ;
+ ] .
-pg:ThreePointZeroGroup a rdfs:Class ;
+pg:ThreePointZeroGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "3.0 Surround" ;
- pg:hasRole [ pg:index 0; pg:role pg:leftChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:rightChannel ] ;
- pg:hasRole [ pg:index 2; pg:role pg:rearCenterChannel ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:left ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:right ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation pg:rearCenter ;
+ ] .
-pg:FourPointZeroGroup a rdfs:Class ;
+pg:FourPointZeroGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "4.0 Surround (Quadraphonic)" ;
- pg:hasRole [ pg:index 0; pg:role pg:leftChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:centerChannel ] ;
- pg:hasRole [ pg:index 2; pg:role pg:rightChannel ] ;
- pg:hasRole [ pg:index 3; pg:role pg:rearCenterChannel ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:left ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:center ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation pg:right ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation pg:rearCenter ;
+ ] .
-pg:FivePointZeroGroup a rdfs:Class ;
+pg:FivePointZeroGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "5.0 Surround (3-2 stereo)" ;
- pg:hasRole [ pg:index 0; pg:role pg:leftChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:centerChannel ] ;
- pg:hasRole [ pg:index 2; pg:role pg:rightChannel ] ;
- pg:hasRole [ pg:index 3; pg:role pg:rearLeftChannel ] ;
- pg:hasRole [ pg:index 4; pg:role pg:rearRightChannel ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:left ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:center ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation pg:right ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation pg:rearLeft ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation pg:rearRight ;
+ ] .
-pg:FivePointOneGroup a rdfs:Class ;
+pg:FivePointOneGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "5.1 Surround (3-2 stereo)" ;
- pg:hasRole [ pg:index 0; pg:role pg:leftChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:centerChannel ] ;
- pg:hasRole [ pg:index 2; pg:role pg:rightChannel ] ;
- pg:hasRole [ pg:index 3; pg:role pg:rearLeftChannel ] ;
- pg:hasRole [ pg:index 4; pg:role pg:rearRightChannel ] ;
- pg:hasRole [ pg:index 5; pg:role pg:lfeChannel ] .
-
-pg:SixPointOneGroup a rdfs:Class ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:left ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:center ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation pg:right ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation pg:rearLeft ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation pg:rearRight ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation pg:lowFrequencyEffects ;
+ ] .
+
+pg:SixPointOneGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "6.1 Surround" ;
- pg:hasRole [ pg:index 0; pg:role pg:leftChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:centerChannel ] ;
- pg:hasRole [ pg:index 2; pg:role pg:rightChannel ] ;
- pg:hasRole [ pg:index 3; pg:role pg:sideLeftChannel ] ;
- pg:hasRole [ pg:index 4; pg:role pg:sideRightChannel ] ;
- pg:hasRole [ pg:index 5; pg:role pg:rearCenterChannel ] ;
- pg:hasRole [ pg:index 6; pg:role pg:lfeChannel ] .
-
-pg:SevenPointOneGroup a rdfs:Class ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:left ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:center ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation pg:right ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation pg:sideLeft ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation pg:sideRight ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation pg:rearCenter ;
+ ] , [
+ lv2:index 6 ;
+ lv2:designation pg:lowFrequencyEffects ;
+ ] .
+
+pg:SevenPointOneGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "7.1 Surround" ;
- pg:hasRole [ pg:index 0; pg:role pg:leftChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:centerChannel ] ;
- pg:hasRole [ pg:index 2; pg:role pg:rightChannel ] ;
- pg:hasRole [ pg:index 3; pg:role pg:sideLeftChannel ] ;
- pg:hasRole [ pg:index 4; pg:role pg:sideRightChannel ] ;
- pg:hasRole [ pg:index 5; pg:role pg:rearLeftChannel ] ;
- pg:hasRole [ pg:index 6; pg:role pg:rearRightChannel ] ;
- pg:hasRole [ pg:index 7; pg:role pg:lfeChannel ] .
-
-pg:SevenPointOneWideGroup a rdfs:Class ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:left ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:center ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation pg:right ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation pg:sideLeft ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation pg:sideRight ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation pg:rearLeft ;
+ ] , [
+ lv2:index 6 ;
+ lv2:designation pg:rearRight ;
+ ] , [
+ lv2:index 7 ;
+ lv2:designation pg:lowFrequencyEffects ;
+ ] .
+
+pg:SevenPointOneWideGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:DiscreteGroup ;
rdfs:label "7.1 Surround (Wide)" ;
- pg:hasRole [ pg:index 0; pg:role pg:leftChannel ] ;
- pg:hasRole [ pg:index 1; pg:role pg:centerLeftChannel ] ;
- pg:hasRole [ pg:index 2; pg:role pg:centerChannel ] ;
- pg:hasRole [ pg:index 3; pg:role pg:centerRightChannel ] ;
- pg:hasRole [ pg:index 4; pg:role pg:rightChannel ] ;
- pg:hasRole [ pg:index 5; pg:role pg:rearLeftChannel ] ;
- pg:hasRole [ pg:index 6; pg:role pg:rearRightChannel ] ;
- pg:hasRole [ pg:index 7; pg:role pg:lfeChannel ] .
-
-
-# Ambisonic
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation pg:left ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation pg:centerLeft ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation pg:center ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation pg:centerRight ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation pg:right ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation pg:rearLeft ;
+ ] , [
+ lv2:index 6 ;
+ lv2:designation pg:rearRight ;
+ ] , [
+ lv2:index 7 ;
+ lv2:designation pg:lowFrequencyEffects ;
+ ] .
-pg:AmbisonicGroup a rdfs:Class ;
+pg:AmbisonicGroup
+ a rdfs:Class ;
rdfs:subClassOf pg:Group ;
rdfs:comment """
"Ambisonic" channel configurations. These groups are divided into channels
@@ -312,179 +417,264 @@ speaker configuration; a decoder can be used to convert an ambisonic stream
for any speaker configuration.
""" .
-#amb:ACN0 a pg:Role ; rdfs:label "ACN 0 (W)" .
-#amb:ACN1 a pg:Role ; rdfs:label "ACN 1 (Y)" .
-#amb:ACN2 a pg:Role ; rdfs:label "ACN 2 (Z)" .
-#amb:ACN3 a pg:Role ; rdfs:label "ACN 3 (X)" .
-#amb:ACN4 a pg:Role ; rdfs:label "ACN 4 (V)" .
-#amb:ACN5 a pg:Role ; rdfs:label "ACN 5 (T)" .
-#amb:ACN6 a pg:Role ; rdfs:label "ACN 6 (R)" .
-#amb:ACN7 a pg:Role ; rdfs:label "ACN 7 (S)" .
-#amb:ACN8 a pg:Role ; rdfs:label "ACN 8 (U)" .
-#amb:ACN9 a pg:Role ; rdfs:label "ACN 9 (Q)" .
-#amb:ACN10 a pg:Role ; rdfs:label "ACN 10 (O)" .
-#amb:ACN11 a pg:Role ; rdfs:label "ACN 11 (M)" .
-#amb:ACN12 a pg:Role ; rdfs:label "ACN 12 (K)" .
-#amb:ACN13 a pg:Role ; rdfs:label "ACN 13 (L)" .
-#amb:ACN14 a pg:Role ; rdfs:label "ACN 14 (N)" .
-#amb:ACN15 a pg:Role ; rdfs:label "ACN 15 (P)" .
-
-pg:AmbisonicBH1P0Group a rdfs:Class ;
+pg:AmbisonicBH1P0Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 1 and peripheral order 0." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN3 ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN3 ;
+ ] .
-pg:AmbisonicBH1P1Group a rdfs:Class ;
+pg:AmbisonicBH1P1Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 1 and peripheral order 1." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN2 ] ;
- pg:hasRole [ pg:index 3; pg:role amb:ACN3 ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN2 ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation amb:ACN3 ;
+ ] .
-pg:AmbisonicBH2P0Group a rdfs:Class ;
+pg:AmbisonicBH2P0Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 2 and peripheral order 0." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN3 ] ;
- pg:hasRole [ pg:index 3; pg:role amb:ACN4 ] ;
- pg:hasRole [ pg:index 4; pg:role amb:ACN8 ] .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN3 ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation amb:ACN4 ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation amb:ACN8 ;
+ ] .
-pg:AmbisonicBH2P1Group a rdfs:Class ;
+pg:AmbisonicBH2P1Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 2 and peripheral order 1." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN2 ] ;
- pg:hasRole [ pg:index 3; pg:role amb:ACN3 ] ;
- pg:hasRole [ pg:index 4; pg:role amb:ACN4 ] ;
- pg:hasRole [ pg:index 5; pg:role amb:ACN8 ] .
-
-pg:AmbisonicBH2P2Group a rdfs:Class ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN2 ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation amb:ACN3 ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation amb:ACN4 ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation amb:ACN8 ;
+ ] .
+
+pg:AmbisonicBH2P2Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 2 and peripheral order 2." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN2 ] ;
- pg:hasRole [ pg:index 3; pg:role amb:ACN3 ] ;
- pg:hasRole [ pg:index 4; pg:role amb:ACN4 ] ;
- pg:hasRole [ pg:index 5; pg:role amb:ACN5 ] ;
- pg:hasRole [ pg:index 6; pg:role amb:ACN6 ] ;
- pg:hasRole [ pg:index 7; pg:role amb:ACN7 ] ;
- pg:hasRole [ pg:index 8; pg:role amb:ACN8 ] .
-
-pg:AmbisonicBH3P0Group a rdfs:Class ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN2 ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation amb:ACN3 ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation amb:ACN4 ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation amb:ACN5 ;
+ ] , [
+ lv2:index 6 ;
+ lv2:designation amb:ACN6 ;
+ ] , [
+ lv2:index 7 ;
+ lv2:designation amb:ACN7 ;
+ ] , [
+ lv2:index 8 ;
+ lv2:designation amb:ACN8 ;
+ ] .
+
+pg:AmbisonicBH3P0Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 3 and peripheral order 0." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN3 ] ;
- pg:hasRole [ pg:index 3; pg:role amb:ACN4 ] ;
- pg:hasRole [ pg:index 4; pg:role amb:ACN8 ] ;
- pg:hasRole [ pg:index 5; pg:role amb:ACN9 ] ;
- pg:hasRole [ pg:index 6; pg:role amb:ACN15 ] .
-
-pg:AmbisonicBH3P1Group a rdfs:Class ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN3 ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation amb:ACN4 ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation amb:ACN8 ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation amb:ACN9 ;
+ ] , [
+ lv2:index 6 ;
+ lv2:designation amb:ACN15 ;
+ ] .
+
+pg:AmbisonicBH3P1Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 3 and peripheral order 1." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN2 ] ;
- pg:hasRole [ pg:index 3; pg:role amb:ACN3 ] ;
- pg:hasRole [ pg:index 4; pg:role amb:ACN4 ] ;
- pg:hasRole [ pg:index 5; pg:role amb:ACN8 ] ;
- pg:hasRole [ pg:index 6; pg:role amb:ACN9 ] ;
- pg:hasRole [ pg:index 7; pg:role amb:ACN15 ] .
-
-pg:AmbisonicBH3P2Group a rdfs:Class ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN2 ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation amb:ACN3 ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation amb:ACN4 ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation amb:ACN8 ;
+ ] , [
+ lv2:index 6 ;
+ lv2:designation amb:ACN9 ;
+ ] , [
+ lv2:index 7 ;
+ lv2:designation amb:ACN15 ;
+ ] .
+
+pg:AmbisonicBH3P2Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 3 and peripheral order 2." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN2 ] ;
- pg:hasRole [ pg:index 3; pg:role amb:ACN3 ] ;
- pg:hasRole [ pg:index 4; pg:role amb:ACN4 ] ;
- pg:hasRole [ pg:index 5; pg:role amb:ACN5 ] ;
- pg:hasRole [ pg:index 6; pg:role amb:ACN6 ] ;
- pg:hasRole [ pg:index 7; pg:role amb:ACN7 ] ;
- pg:hasRole [ pg:index 8; pg:role amb:ACN8 ] ;
- pg:hasRole [ pg:index 9; pg:role amb:ACN9 ] ;
- pg:hasRole [ pg:index 10; pg:role amb:ACN15 ] .
-
-pg:AmbisonicBH3P3Group a rdfs:Class ;
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN2 ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation amb:ACN3 ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation amb:ACN4 ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation amb:ACN5 ;
+ ] , [
+ lv2:index 6 ;
+ lv2:designation amb:ACN6 ;
+ ] , [
+ lv2:index 7 ;
+ lv2:designation amb:ACN7 ;
+ ] , [
+ lv2:index 8 ;
+ lv2:designation amb:ACN8 ;
+ ] , [
+ lv2:index 9 ;
+ lv2:designation amb:ACN9 ;
+ ] , [
+ lv2:index 10 ;
+ lv2:designation amb:ACN15 ;
+ ] .
+
+pg:AmbisonicBH3P3Group
+ a rdfs:Class ;
rdfs:subClassOf pg:AmbisonicGroup ;
rdfs:label "Ambisonic B stream of horizontal order 3 and peripheral order 3." ;
- pg:hasRole [ pg:index 0; pg:role amb:ACN0 ] ;
- pg:hasRole [ pg:index 1; pg:role amb:ACN1 ] ;
- pg:hasRole [ pg:index 2; pg:role amb:ACN2 ] ;
- pg:hasRole [ pg:index 3; pg:role amb:ACN3 ] ;
- pg:hasRole [ pg:index 4; pg:role amb:ACN4 ] ;
- pg:hasRole [ pg:index 5; pg:role amb:ACN5 ] ;
- pg:hasRole [ pg:index 6; pg:role amb:ACN6 ] ;
- pg:hasRole [ pg:index 7; pg:role amb:ACN7 ] ;
- pg:hasRole [ pg:index 8; pg:role amb:ACN8 ] ;
- pg:hasRole [ pg:index 9; pg:role amb:ACN9 ] ;
- pg:hasRole [ pg:index 10; pg:role amb:ACN10 ] ;
- pg:hasRole [ pg:index 11; pg:role amb:ACN11 ] ;
- pg:hasRole [ pg:index 12; pg:role amb:ACN12 ] ;
- pg:hasRole [ pg:index 13; pg:role amb:ACN13 ] ;
- pg:hasRole [ pg:index 14; pg:role amb:ACN14 ] ;
- pg:hasRole [ pg:index 15; pg:role amb:ACN15 ] .
-
-
-# Controls
-
-pg:ControlGroup a rdfs:Class ;
- rdfs:subClassOf pg:Group ;
- rdfs:comment """
-A group representing a set of associated controls.
-""" .
-
-pg:amplitude a pg:Role ; rdfs:label "Amplitude" .
-pg:attack a pg:Role ; rdfs:label "Attack" .
-pg:cutoffFrequency a pg:Role ; rdfs:label "Cutoff Frequency" .
-pg:decay a pg:Role ; rdfs:label "Decay" .
-pg:delay a pg:Role ; rdfs:label "Delay" .
-pg:frequency a pg:Role ; rdfs:label "Frequency" .
-pg:hold a pg:Role ; rdfs:label "Hold" .
-pg:pulseWidth a pg:Role ; rdfs:label "Pulse Width" .
-pg:ratio a pg:Role ; rdfs:label "Ratio" .
-pg:release a pg:Role ; rdfs:label "Release" .
-pg:resonance a pg:Role ; rdfs:label "Resonance" .
-pg:sustain a pg:Role ; rdfs:label "Sustain" .
-pg:threshold a pg:Role ; rdfs:label "Threshold" .
-pg:waveform a pg:Role ; rdfs:label "Waveform" .
-
-pg:EnvelopeControlGroup a rdfs:Class ;
- rdfs:subClassOf pg:ControlGroup ;
- rdfs:label "Controls for a DAHDSR envelope." ;
- pg:mayHaveRole pg:delay ;
- pg:mayHaveRole pg:attack ;
- pg:mayHaveRole pg:hold ;
- pg:mayHaveRole pg:decay ;
- pg:mayHaveRole pg:sustain ;
- pg:mayHaveRole pg:release .
-
-pg:OscillatorControlGroup a rdfs:Class ;
- rdfs:subClassOf pg:ControlGroup ;
- rdfs:label "Controls for an oscillator." ;
- pg:mayHaveRole pg:frequency ;
- pg:mayHaveRole pg:amplitude ;
- pg:mayHaveRole pg:waveform ;
- pg:mayHaveRole pg:pulseWidth .
-
-pg:FilterControlGroup a rdfs:Class ;
- rdfs:subClassOf pg:ControlGroup ;
- rdfs:label "Controls for a filter." ;
- pg:mayHaveRole pg:cutoffFrequency ;
- pg:mayHaveRole pg:resonance .
-
-pg:CompressorControlGroup a rdfs:Class ;
- rdfs:subClassOf pg:ControlGroup ;
- rdfs:label "Controls for a compressor." ;
- pg:mayHaveRole pg:threshold ;
- pg:mayHaveRole pg:ratio .
+ pg:element [
+ lv2:index 0 ;
+ lv2:designation amb:ACN0 ;
+ ] , [
+ lv2:index 1 ;
+ lv2:designation amb:ACN1 ;
+ ] , [
+ lv2:index 2 ;
+ lv2:designation amb:ACN2 ;
+ ] , [
+ lv2:index 3 ;
+ lv2:designation amb:ACN3 ;
+ ] , [
+ lv2:index 4 ;
+ lv2:designation amb:ACN4 ;
+ ] , [
+ lv2:index 5 ;
+ lv2:designation amb:ACN5 ;
+ ] , [
+ lv2:index 6 ;
+ lv2:designation amb:ACN6 ;
+ ] , [
+ lv2:index 7 ;
+ lv2:designation amb:ACN7 ;
+ ] , [
+ lv2:index 8 ;
+ lv2:designation amb:ACN8 ;
+ ] , [
+ lv2:index 9 ;
+ lv2:designation amb:ACN9 ;
+ ] , [
+ lv2:index 10 ;
+ lv2:designation amb:ACN10 ;
+ ] , [
+ lv2:index 11 ;
+ lv2:designation amb:ACN11 ;
+ ] , [
+ lv2:index 12 ;
+ lv2:designation amb:ACN12 ;
+ ] , [
+ lv2:index 13 ;
+ lv2:designation amb:ACN13 ;
+ ] , [
+ lv2:index 14 ;
+ lv2:designation amb:ACN14 ;
+ ] , [
+ lv2:index 15 ;
+ lv2:designation amb:ACN15 ;
+ ] .
diff --git a/lv2/lv2plug.in/ns/ext/port-props/ext.pc.in b/lv2/lv2plug.in/ns/ext/port-props/ext.pc.in
new file mode 120000
index 0000000..03dd044
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/port-props/ext.pc.in
@@ -0,0 +1 @@
+../../../../../ext.pc.in \ No newline at end of file
diff --git a/lv2/lv2plug.in/ns/ext/port-props/manifest.ttl b/lv2/lv2plug.in/ns/ext/port-props/manifest.ttl
new file mode 100644
index 0000000..b88a0c7
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/port-props/manifest.ttl
@@ -0,0 +1,8 @@
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+<http://lv2plug.in/ns/ext/port-props>
+ a lv2:Specification ;
+ lv2:minorVersion 0 ;
+ lv2:microVersion 2 ;
+ rdfs:seeAlso <port-props.ttl> .
diff --git a/lv2/lv2plug.in/ns/ext/port-props/port-props.ttl b/lv2/lv2plug.in/ns/ext/port-props/port-props.ttl
new file mode 100644
index 0000000..9f4542d
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/port-props/port-props.ttl
@@ -0,0 +1,211 @@
+# LV2 Port Properties Extension
+# Copyright 2011-2012 David Robillard <d@drobilla.net>
+# Copyright 2009 Krzysztof Foltman
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix pprops: <http://lv2plug.in/ns/ext/port-props#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+<http://drobilla.net/drobilla#me>
+ a foaf:Person ;
+ foaf:name "David Robillard" ;
+ foaf:homepage <http://drobilla.net/> ;
+ foaf:mbox <mailto:d@drobilla.net> ;
+ rdfs:seeAlso <http://drobilla.net/drobilla> .
+
+<http://lv2plug.in/ns/ext/port-props>
+ a lv2:Specification ;
+ doap:name "LV2 Port Properties" ;
+ doap:release [
+ doap:revision "0.2" ;
+ doap:created "2012-03-23" ;
+ ] ;
+ doap:created "2009-01-01" ;
+ doap:shortdesc "Various port properties." ;
+ doap:maintainer [
+ a foaf:Person ;
+ foaf:name "Krzysztof Foltman" ;
+ ] , <http://drobilla.net/drobilla#me> ;
+ lv2:documentation """
+<p>This extension 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.</p>
+""" .
+
+pprops:trigger
+ a lv2:PortProperty ;
+ rdfs:label "Trigger" ;
+ rdfs:comment """
+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.
+""" .
+
+pprops:supportsStrictBounds
+ a lv2:Feature ;
+ rdfs:label "Supports strict bounds" ;
+ rdfs:comment """
+Indicates use of host support for pprops: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 pprops:hasStrictBounds property.
+""" .
+
+pprops:hasStrictBounds
+ a lv2:PortProperty ;
+ rdfs:label "Has strict bounds" ;
+ rdfs:comment """
+For hosts that support pprops: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 pprops: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.
+""" .
+
+pprops:expensive
+ a lv2:PortProperty ;
+ rdfs:label "Changes trigger expensive calculation" ;
+ rdfs:comment """
+Input ports only. Indicates that any changes to the port value may trigger
+expensive background calculation (e.g. regenerate some 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.
+""" .
+
+pprops:causesArtifacts
+ a lv2:PortProperty ;
+ rdfs:label "May cause audio artifacts when changed" ;
+ rdfs:comment """
+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.
+""" .
+
+pprops:continuousCV
+ a lv2:PortProperty ;
+ rdfs:label "Carries a smooth modulation signal" ;
+ rdfs:comment """
+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 (e.g. successive values may be
+considered points along a curve).
+""" .
+
+pprops:discreteCV
+ a lv2:PortProperty ;
+ rdfs:label "Carries a discrete modulation signal" ;
+ rdfs:comment """
+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
+pprops: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).
+""" .
+
+pprops:logarithmic
+ a lv2:PortProperty ;
+ rdfs:label "Port value uses a logarithmic scale" ;
+ rdfs:comment """
+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.
+""" .
+
+pprops:notAutomatic
+ a lv2:PortProperty ;
+ rdfs:label "Port is not intended as a CV input" ;
+ rdfs:comment """
+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.
+""" .
+
+pprops:notOnGUI
+ a lv2:PortProperty ;
+ rdfs:label "Port is not to be displayed on a GUI or equivalent" ;
+ rdfs:comment """
+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.
+""" .
+
+pprops:displayPriority
+ a rdf:Property ;
+ rdfs:domain lv2:Port ;
+ rdfs:range xsd:nonNegativeInteger ;
+ rdfs:label "Display priority" ;
+ rdfs:comment """
+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.
+""" .
+
+pprops:rangeSteps
+ a rdf:Property ;
+ rdfs:domain lv2:Port ;
+ rdfs:range xsd:nonNegativeInteger ;
+ rdfs:label "Number of value quantization steps" ;
+ lv2:documentation """
+<p>This value indicates into how many evenly-divided points the (control) port
+range shoujld 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, etc.</p>
+
+<p>Note that when used with a pprops:logarithmic port, the steps are
+logarithmic too, and port value can be calculated as:</p>
+
+<pre class="c-code">
+value = lower * pow(upper / lower, step / (steps - 1))
+</pre>
+
+<p>and the step from value is:</p>
+
+<pre class="c-code">
+step = (steps - 1) * log(value / lower) / log(upper / lower)
+</pre>
+
+<p>where:</p>
+<ul>
+<li><code>value</code> is the port value</li>
+<li><code>step</code> is the step number (0..steps)</li>
+<li><code>steps</code> is the number of steps (= value of :rangeSteps property)</li>
+<li><code>lower</code> and <code>upper</code> are the bounds</li>
+</ul>
+""" .
diff --git a/lv2/lv2plug.in/ns/ext/port-props/waf b/lv2/lv2plug.in/ns/ext/port-props/waf
new file mode 120000
index 0000000..5235032
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/port-props/waf
@@ -0,0 +1 @@
+../../../../../waf \ No newline at end of file
diff --git a/lv2/lv2plug.in/ns/ext/port-props/wscript b/lv2/lv2plug.in/ns/ext/port-props/wscript
new file mode 120000
index 0000000..7e2c01b
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/port-props/wscript
@@ -0,0 +1 @@
+../../../../../ext.wscript \ No newline at end of file