aboutsummaryrefslogtreecommitdiffstats
path: root/blop.lv2
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-05-31 06:03:45 +0000
committerDavid Robillard <d@drobilla.net>2012-05-31 06:03:45 +0000
commit8b46fd1ff51b29cded517c9c2d166611e8c453fc (patch)
tree14a338294d302e663818570796bb5311297a9748 /blop.lv2
parent9529f203c09d6dc8f4c2f12c3add9ec906f4bdba (diff)
downloadblop.lv2-8b46fd1ff51b29cded517c9c2d166611e8c453fc.tar.gz
blop.lv2-8b46fd1ff51b29cded517c9c2d166611e8c453fc.tar.bz2
blop.lv2-8b46fd1ff51b29cded517c9c2d166611e8c453fc.zip
Blip => Blop. I give up trying to give ports new names.
git-svn-id: http://svn.drobilla.net/lad/trunk/plugins/blop.lv2@4484 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'blop.lv2')
-rw-r--r--blop.lv2/adsr.ttl80
-rw-r--r--blop.lv2/adsr_gt.ttl89
-rw-r--r--blop.lv2/amp.ttl47
-rw-r--r--blop.lv2/branch.ttl39
-rw-r--r--blop.lv2/dahdsr.ttl124
-rw-r--r--blop.lv2/difference.ttl47
-rw-r--r--blop.lv2/fmod.ttl58
-rw-r--r--blop.lv2/interpolator.ttl31
-rw-r--r--blop.lv2/lp4pole.ttl61
-rw-r--r--blop.lv2/manifest.ttl.in155
-rw-r--r--blop.lv2/product.ttl48
-rw-r--r--blop.lv2/pulse.ttl56
-rw-r--r--blop.lv2/quantiser_100.ttl718
-rw-r--r--blop.lv2/quantiser_20.ttl238
-rw-r--r--blop.lv2/quantiser_50.ttl418
-rw-r--r--blop.lv2/random.ttl59
-rw-r--r--blop.lv2/ratio.ttl48
-rw-r--r--blop.lv2/sawtooth.ttl42
-rw-r--r--blop.lv2/sequencer_16.ttl166
-rw-r--r--blop.lv2/sequencer_32.ttl262
-rw-r--r--blop.lv2/sequencer_64.ttl454
-rw-r--r--blop.lv2/square.ttl42
-rw-r--r--blop.lv2/sum.ttl48
-rw-r--r--blop.lv2/sync_pulse.ttl59
-rw-r--r--blop.lv2/sync_square.ttl51
-rw-r--r--blop.lv2/tracker.ttl120
-rw-r--r--blop.lv2/triangle.ttl57
27 files changed, 3617 insertions, 0 deletions
diff --git a/blop.lv2/adsr.ttl b/blop.lv2/adsr.ttl
new file mode 100644
index 0000000..8fb8a1d
--- /dev/null
+++ b/blop.lv2/adsr.ttl
@@ -0,0 +1,80 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+
+blop:adsr
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Driving Signal" ;
+ lv2:symbol "drive"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Trigger Threshold" ;
+ lv2:symbol "thresh"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Attack Time" ;
+ lv2:symbol "attack" ;
+ units:unit units:s
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:minimum 0 ;
+ lv2:name "Decay Time" ;
+ lv2:symbol "decay" ;
+ units:unit units:s
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 1 ;
+ lv2:index 4 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Sustain Level" ;
+ lv2:symbol "sustain"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 5 ;
+ lv2:minimum 0 ;
+ lv2:name "Release Time" ;
+ lv2:symbol "release" ;
+ units:unit units:s
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 6 ;
+ lv2:name "Envelope Out" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1653> ;
+ doap:name "ADSR Envelope" ;
+ lv2:documentation """
+<p>Generates an ADSR (Attack, Decay, Sustain and Release) envelope.</p>
+
+<p>Driven by a gate signal - if the level of the signal goes higher than the
+Trigger Threshold, the attack stage begins, proceeds to the decay stage and
+then holds at the sustain level. The release stage begins when the gate falls
+below this theshold - even if the previous stages have not completed.</p>
+
+<p>The output is a signal between 0.0 (rest) and 1.0 (peak) and the transitions
+are linear.</p>
+""" .
diff --git a/blop.lv2/adsr_gt.ttl b/blop.lv2/adsr_gt.ttl
new file mode 100644
index 0000000..4daae58
--- /dev/null
+++ b/blop.lv2/adsr_gt.ttl
@@ -0,0 +1,89 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+
+blop:adsr_gt
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Gate" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Trigger" ;
+ lv2:portProperty lv2:toggled ,
+ <http://lv2plug.in/ns/ext/port-props#trigger> ;
+ lv2:symbol "trigger"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Attack Time" ;
+ lv2:symbol "attack" ;
+ units:unit units:s
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:minimum 0 ;
+ lv2:name "Decay Time" ;
+ lv2:symbol "decay" ;
+ units:unit units:s
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 1 ;
+ lv2:index 4 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Sustain Level" ;
+ lv2:symbol "sustain"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 5 ;
+ lv2:minimum 0 ;
+ lv2:name "Release Time" ;
+ lv2:symbol "release" ;
+ units:unit units:s
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 6 ;
+ lv2:name "Envelope Out" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1680> ;
+ doap:name "ADSR Envelope with Gate and Trigger" ;
+ lv2:documentation """
+<p>Generates an ADSR (Attack, Decay, Sustain and Release)
+envelope.</p>
+
+<p>Does the same thing as the other ADSR (1658) above, except the
+Trigger Threshold is fixed at zero, and the additional Trigger
+input allows retriggering whilst the gate is still high.</p>
+
+<p>The reasoning behind this design is to remove the need for a keyboard player
+to release a key before pressing another when using with a monosynth. <a
+href="http://www.sospubs.co.uk/sos/nov99/articles/synthsecrets.htm">The
+&lsquo;Synth Secrets&rsquo; article in the November 1999 issue of &lsquo;Sound
+on Sound&rsquo;</a> explains this in detail.</p>
+
+<p>The output is a signal between 0.0 (rest) and 1.0 (peak) and the
+transitions are linear.</p>
+""" .
diff --git a/blop.lv2/amp.ttl b/blop.lv2/amp.ttl
new file mode 100644
index 0000000..5b0a7c7
--- /dev/null
+++ b/blop.lv2/amp.ttl
@@ -0,0 +1,47 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:amp
+ a lv2:Plugin ,
+ lv2:AmplifierPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:maximum 96 ;
+ lv2:minimum -96 ;
+ lv2:name "Gain" ;
+ lv2:symbol "gain" ;
+ units:unit units:db ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:AudioPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Input" ;
+ lv2:symbol "in"
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 2 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1654> ,
+ <urn:ladspa:1655> ;
+ doap:name "Amplifier" ;
+ lv2:documentation """
+<p>A simple monophonic amplifier.</p>
+""" .
diff --git a/blop.lv2/branch.ttl b/blop.lv2/branch.ttl
new file mode 100644
index 0000000..75e2ccc
--- /dev/null
+++ b/blop.lv2/branch.ttl
@@ -0,0 +1,39 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+
+blop:branch
+ a lv2:Plugin ,
+ lv2:UtilityPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Input" ;
+ lv2:symbol "in"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ;
+ lv2:index 1 ;
+ lv2:name "Output 1" ;
+ lv2:symbol "out1"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ;
+ lv2:index 2 ;
+ lv2:name "Output 2" ;
+ lv2:symbol "out2"
+ ] ;
+ dct:replaces <urn:ladspa:1673> ,
+ <urn:ladspa:1674> ;
+ doap:name "Signal Branch" ;
+ lv2:documentation """
+<p>Splits an input signal into two identical signals. Somewhat redundant, as
+most modular synth hosts allow you to connect an output to more than one input.
+If your host of choice does not allow this, this plugin will do the job...</p>
+""" .
diff --git a/blop.lv2/dahdsr.ttl b/blop.lv2/dahdsr.ttl
new file mode 100644
index 0000000..055af15
--- /dev/null
+++ b/blop.lv2/dahdsr.ttl
@@ -0,0 +1,124 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+
+blop:dahdsr
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Gate" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Trigger" ;
+ lv2:portProperty lv2:toggled ,
+ <http://lv2plug.in/ns/ext/port-props#trigger> ;
+ lv2:symbol "trigger"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0 ;
+ lv2:index 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Delay Time" ;
+ lv2:symbol "delay" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:minimum 0 ;
+ lv2:name "Attack Time" ;
+ lv2:symbol "attack" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0 ;
+ lv2:index 4 ;
+ lv2:minimum 0 ;
+ lv2:name "Hold Time" ;
+ lv2:symbol "hold" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0 ;
+ lv2:index 5 ;
+ lv2:minimum 0 ;
+ lv2:name "Decay Time" ;
+ lv2:symbol "decay" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 1 ;
+ lv2:index 6 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Sustain Level" ;
+ lv2:symbol "sustain" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0 ;
+ lv2:index 7 ;
+ lv2:minimum 0 ;
+ lv2:name "Release Time" ;
+ lv2:symbol "release" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 8 ;
+ lv2:name "Envelope Out" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:2021> ,
+ <urn:ladspa:2022> ,
+ <urn:ladspa:2038> ;
+ doap:name "DAHDSR Envelope with Gate and Trigger" ;
+ lv2:documentation """
+<p>Generates a DAHDSR (Delay, Attack, Hold, Decay, Sustain, Release)
+envelope.</p>
+
+<p>Another envelope generator, this time with two additional stages - Delay,
+which delays the onset of the Attack stage, and Hold, which holds the output at
+maximum before the Decay stage begins.</p>
+
+<p>Triggering works in subtly different ways to the <a href="#adsr_gnt">ADSR
+(1680)</a> - the Trigger will restart the envelope even if the Gate is closed -
+the effect of this is to proceed through the stages and begin the release stage
+immediately after the decay stage.</p>
+
+<p>The final variant (ID 2038) uses control-rate gate and trigger, which is a
+little less CPU hungry, but will cause timing errors that are dependent on the
+block size being used by the host.</p>
+""" .
diff --git a/blop.lv2/difference.ttl b/blop.lv2/difference.ttl
new file mode 100644
index 0000000..c817cd8
--- /dev/null
+++ b/blop.lv2/difference.ttl
@@ -0,0 +1,47 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:difference
+ a lv2:Plugin ,
+ lv2:UtilityPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:name "Minuend" ;
+ lv2:symbol "minuend" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 1 ;
+ lv2:name "Subtrahend" ;
+ lv2:symbol "subtrahend" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ,
+ morph:AutoMorphPort ;
+ lv2:index 2 ;
+ lv2:name "Difference" ;
+ lv2:symbol "difference" ;
+ morph:supportsType lv2:CVPort
+ ] ;
+ dct:replaces <urn:ladspa:2030> ,
+ <urn:ladspa:2031> ,
+ <urn:ladspa:2032> ,
+ <urn:ladspa:2033> ;
+ doap:name "Signal Difference" ;
+ lv2:documentation """
+<p>Subtract two signals.</p>
+""" .
diff --git a/blop.lv2/fmod.ttl b/blop.lv2/fmod.ttl
new file mode 100644
index 0000000..6098be5
--- /dev/null
+++ b/blop.lv2/fmod.ttl
@@ -0,0 +1,58 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:fmod
+ a lv2:Plugin ,
+ lv2:SpectralPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.00001 ;
+ lv2:name "Frequency" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 1 ;
+ lv2:name "Modulation" ;
+ lv2:symbol "mod" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:oct
+ ] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ,
+ morph:AutoMorphPort ;
+ lv2:index 2 ;
+ lv2:name "Modulated Frequency" ;
+ lv2:symbol "out" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] ;
+ dct:replaces <urn:ladspa:1656> ,
+ <urn:ladspa:1657> ,
+ <urn:ladspa:1658> ,
+ <urn:ladspa:1659> ;
+ doap:name "Frequency Modulator" ;
+ lv2:documentation """
+<p>Modulates an input frequency by a driving signal, transposing the frequency
+by &#177;1 Octave per unit amplitude of signal.</p>
+""" .
diff --git a/blop.lv2/interpolator.ttl b/blop.lv2/interpolator.ttl
new file mode 100644
index 0000000..005c29c
--- /dev/null
+++ b/blop.lv2/interpolator.ttl
@@ -0,0 +1,31 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+
+blop:interpolator
+ a lv2:Plugin ,
+ lv2:UtilityPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Control Input" ;
+ lv2:symbol "in"
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 1 ;
+ lv2:name "Interpolated Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1660> ;
+ doap:name "Control to Audio Interpolator" ;
+ lv2:documentation """
+<p>Interpolates a control-rate (per-block) signal into a smooth audio
+(per-sample) signal.</p>
+""" .
diff --git a/blop.lv2/lp4pole.ttl b/blop.lv2/lp4pole.ttl
new file mode 100644
index 0000000..3731459
--- /dev/null
+++ b/blop.lv2/lp4pole.ttl
@@ -0,0 +1,61 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:lp4pole
+ a lv2:Plugin ,
+ lv2:LowpassPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0.5 ;
+ lv2:index 0 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.00001 ;
+ lv2:name "Cutoff Frequency" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "cutoff" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0 ;
+ lv2:index 1 ;
+ lv2:maximum 4 ;
+ lv2:minimum 0 ;
+ lv2:name "Resonance" ;
+ lv2:symbol "resonance" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:AudioPort ,
+ lv2:InputPort ;
+ lv2:index 2 ;
+ lv2:name "Input" ;
+ lv2:symbol "in"
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 3 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1671> ,
+ <urn:ladspa:1672> ;
+ doap:name "4 Pole Resonant Low-Pass Filter" ;
+ lv2:documentation """
+<p>Emulates a low pass filter in popular analogue synthesisers. This particular
+filter is derived from one of <a
+href="http://www.musicdsp.org/archive.php?classid=3#24">many
+implementations</a> of the Moog 4 pole filter.</p>
+""" .
diff --git a/blop.lv2/manifest.ttl.in b/blop.lv2/manifest.ttl.in
new file mode 100644
index 0000000..4942342
--- /dev/null
+++ b/blop.lv2/manifest.ttl.in
@@ -0,0 +1,155 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+<http://drobilla.net/drobilla#me>
+ a foaf:Person ;
+ foaf:name "David Robillard" ;
+ foaf:mbox <mailto:d@drobilla.net> ;
+ rdfs:seeAlso <http://drobilla.net/drobilla> .
+
+blop:
+ a doap:Project ;
+ lv2:symbol "blop" ;
+ doap:name "Blop LV2" ;
+ doap:shortdesc "An LV2 port of the Blop plugins." ;
+ doap:homepage <http://drobilla.net/software/blop-lv2> ;
+ doap:license <http://opensource.org/licenses/gpl-3.0> ;
+ doap:maintainer <http://drobilla.net/drobilla#me> ;
+ doap:developer [
+ a foaf:Person ;
+ foaf:name "Mike Rawes" ;
+ foaf:mbox <mike_rawes@yahoo.co.uk>
+ ] .
+
+blop:adsr
+ a lv2:Plugin ;
+ rdfs:seeAlso <adsr.ttl> ;
+ lv2:binary <adsr@LIB_EXT@> .
+
+blop:adsr_gt
+ a lv2:Plugin ;
+ rdfs:seeAlso <adsr_gt.ttl> ;
+ lv2:binary <adsr_gt@LIB_EXT@> .
+
+blop:amp
+ a lv2:Plugin ;
+ rdfs:seeAlso <amp.ttl> ;
+ lv2:binary <amp@LIB_EXT@> .
+
+blop:branch
+ a lv2:Plugin ;
+ rdfs:seeAlso <branch.ttl> ;
+ lv2:binary <branch@LIB_EXT@> .
+
+blop:dahdsr
+ a lv2:Plugin ;
+ rdfs:seeAlso <dahdsr.ttl> ;
+ lv2:binary <dahdsr@LIB_EXT@> .
+
+blop:difference
+ a lv2:Plugin ;
+ rdfs:seeAlso <difference.ttl> ;
+ lv2:binary <difference@LIB_EXT@> .
+
+blop:fmod
+ a lv2:Plugin ;
+ rdfs:seeAlso <fmod.ttl> ;
+ lv2:binary <fmod@LIB_EXT@> .
+
+blop:interpolator
+ a lv2:Plugin ;
+ rdfs:seeAlso <interpolator.ttl> ;
+ lv2:binary <interpolator@LIB_EXT@> .
+
+blop:lp4pole
+ a lv2:Plugin ;
+ rdfs:seeAlso <lp4pole.ttl> ;
+ lv2:binary <lp4pole@LIB_EXT@> .
+
+blop:product
+ a lv2:Plugin ;
+ rdfs:seeAlso <product.ttl> ;
+ lv2:binary <product@LIB_EXT@> .
+
+blop:pulse
+ a lv2:Plugin ;
+ rdfs:seeAlso <pulse.ttl> ;
+ lv2:binary <pulse@LIB_EXT@> .
+
+blop:quantiser_20
+ a lv2:Plugin ;
+ rdfs:seeAlso <quantiser_20.ttl> ;
+ lv2:binary <quantiser_20@LIB_EXT@> .
+
+blop:quantiser_50
+ a lv2:Plugin ;
+ rdfs:seeAlso <quantiser_50.ttl> ;
+ lv2:binary <quantiser_50@LIB_EXT@> .
+
+blop:quantiser_100
+ a lv2:Plugin ;
+ rdfs:seeAlso <quantiser_100.ttl> ;
+ lv2:binary <quantiser_100@LIB_EXT@> .
+
+blop:random
+ a lv2:Plugin ;
+ rdfs:seeAlso <random.ttl> ;
+ lv2:binary <random@LIB_EXT@> .
+
+blop:ratio
+ a lv2:Plugin ;
+ rdfs:seeAlso <ratio.ttl> ;
+ lv2:binary <ratio@LIB_EXT@> .
+
+blop:sawtooth
+ a lv2:Plugin ;
+ rdfs:seeAlso <sawtooth.ttl> ;
+ lv2:binary <sawtooth@LIB_EXT@> .
+
+blop:sequencer_16
+ a lv2:Plugin ;
+ rdfs:seeAlso <sequencer_16.ttl> ;
+ lv2:binary <sequencer_16@LIB_EXT@> .
+
+blop:sequencer_32
+ a lv2:Plugin ;
+ rdfs:seeAlso <sequencer_32.ttl> ;
+ lv2:binary <sequencer_32@LIB_EXT@> .
+
+blop:sequencer_64
+ a lv2:Plugin ;
+ rdfs:seeAlso <sequencer_64.ttl> ;
+ lv2:binary <sequencer_64@LIB_EXT@> .
+
+blop:square
+ a lv2:Plugin ;
+ rdfs:seeAlso <square.ttl> ;
+ lv2:binary <square@LIB_EXT@> .
+
+blop:sum
+ a lv2:Plugin ;
+ rdfs:seeAlso <sum.ttl> ;
+ lv2:binary <sum@LIB_EXT@> .
+
+blop:sync_pulse
+ a lv2:Plugin ;
+ rdfs:seeAlso <sync_pulse.ttl> ;
+ lv2:binary <sync_pulse@LIB_EXT@> .
+
+blop:sync_square
+ a lv2:Plugin ;
+ rdfs:seeAlso <sync_square.ttl> ;
+ lv2:binary <sync_square@LIB_EXT@> .
+
+blop:tracker
+ a lv2:Plugin ;
+ rdfs:seeAlso <tracker.ttl> ;
+ lv2:binary <tracker@LIB_EXT@> .
+
+blop:triangle
+ a lv2:Plugin ;
+ rdfs:seeAlso <triangle.ttl> ;
+ lv2:binary <triangle@LIB_EXT@> .
diff --git a/blop.lv2/product.ttl b/blop.lv2/product.ttl
new file mode 100644
index 0000000..fabe6a0
--- /dev/null
+++ b/blop.lv2/product.ttl
@@ -0,0 +1,48 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:product
+ a lv2:Plugin ,
+ lv2:UtilityPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:name "Multiplicand" ;
+ lv2:symbol "multiplicand" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 1 ;
+ lv2:name "Multiplier" ;
+ lv2:symbol "multiplier" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ,
+ morph:AutoMorphPort ;
+ lv2:index 2 ;
+ lv2:name "Product" ;
+ lv2:symbol "product" ;
+ morph:supportsType lv2:CVPort
+ ] ;
+ dct:replaces <urn:ladspa:1668> ,
+ <urn:ladspa:1669> ,
+ <urn:ladspa:1670> ;
+ doap:name "Signal Product" ;
+ lv2:documentation """
+<p>Multiply two signals.</p>
+""" .
diff --git a/blop.lv2/pulse.ttl b/blop.lv2/pulse.ttl
new file mode 100644
index 0000000..f9c5ee7
--- /dev/null
+++ b/blop.lv2/pulse.ttl
@@ -0,0 +1,56 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:pulse
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.000001 ;
+ lv2:default 440.0 ;
+ lv2:name "Frequency" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0.5 ;
+ lv2:index 1 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Pulse Width" ;
+ lv2:symbol "pwidth" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 2 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1645> ,
+ <urn:ladspa:1646> ,
+ <urn:ladspa:1647> ,
+ <urn:ladspa:1648> ;
+ doap:name "Variable Width Pulse Oscillator" ;
+ lv2:documentation """
+<p>Generates an alias-free pulse wave at given input frequency and pulse width
+(duty).</p>
+""" .
diff --git a/blop.lv2/quantiser_100.ttl b/blop.lv2/quantiser_100.ttl
new file mode 100644
index 0000000..aca7cbb
--- /dev/null
+++ b/blop.lv2/quantiser_100.ttl
@@ -0,0 +1,718 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+blop:quantiser_100
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Minimum" ;
+ lv2:symbol "min"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Maximum" ;
+ lv2:symbol "max"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Match Range" ;
+ lv2:symbol "range"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:maximum 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Mode" ;
+ lv2:symbol "mode" ;
+ lv2:portProperty lv2:enumeration ,
+ lv2:integer ;
+ lv2:scalePoint [
+ rdfs:label "Extend" ;
+ rdf:value 0.0
+ ] , [
+ rdfs:label "Wrap" ;
+ rdf:value 1.0
+ ] , [
+ rdfs:label "Clip" ;
+ rdf:value 1.0
+ ]
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 20 ;
+ lv2:index 4 ;
+ lv2:maximum 20 ;
+ lv2:minimum 1 ;
+ lv2:name "Steps" ;
+ lv2:portProperty lv2:integer ;
+ lv2:symbol "steps"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 5 ;
+ lv2:name "Value 0" ;
+ lv2:symbol "val00"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 6 ;
+ lv2:name "Value 1" ;
+ lv2:symbol "val01"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 7 ;
+ lv2:name "Value 2" ;
+ lv2:symbol "val02"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 8 ;
+ lv2:name "Value 3" ;
+ lv2:symbol "val03"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 9 ;
+ lv2:name "Value 4" ;
+ lv2:symbol "val04"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 10 ;
+ lv2:name "Value 5" ;
+ lv2:symbol "val05"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 11 ;
+ lv2:name "Value 6" ;
+ lv2:symbol "val06"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 12 ;
+ lv2:name "Value 7" ;
+ lv2:symbol "val07"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 13 ;
+ lv2:name "Value 8" ;
+ lv2:symbol "val08"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 14 ;
+ lv2:name "Value 9" ;
+ lv2:symbol "val09"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 15 ;
+ lv2:name "Value 10" ;
+ lv2:symbol "val10"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 16 ;
+ lv2:name "Value 11" ;
+ lv2:symbol "val11"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 17 ;
+ lv2:name "Value 12" ;
+ lv2:symbol "val12"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 18 ;
+ lv2:name "Value 13" ;
+ lv2:symbol "val13"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 19 ;
+ lv2:name "Value 14" ;
+ lv2:symbol "val14"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 20 ;
+ lv2:name "Value 15" ;
+ lv2:symbol "val15"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 21 ;
+ lv2:name "Value 16" ;
+ lv2:symbol "val16"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 22 ;
+ lv2:name "Value 17" ;
+ lv2:symbol "val17"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 23 ;
+ lv2:name "Value 18" ;
+ lv2:symbol "val18"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 24 ;
+ lv2:name "Value 19" ;
+ lv2:symbol "val19"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 25 ;
+ lv2:name "Value 20" ;
+ lv2:symbol "val20"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 26 ;
+ lv2:name "Value 21" ;
+ lv2:symbol "val21"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 27 ;
+ lv2:name "Value 22" ;
+ lv2:symbol "val22"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 28 ;
+ lv2:name "Value 23" ;
+ lv2:symbol "val23"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 29 ;
+ lv2:name "Value 24" ;
+ lv2:symbol "val24"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 30 ;
+ lv2:name "Value 25" ;
+ lv2:symbol "val25"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 31 ;
+ lv2:name "Value 26" ;
+ lv2:symbol "val26"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 32 ;
+ lv2:name "Value 27" ;
+ lv2:symbol "val27"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 33 ;
+ lv2:name "Value 28" ;
+ lv2:symbol "val28"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 34 ;
+ lv2:name "Value 29" ;
+ lv2:symbol "val29"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 35 ;
+ lv2:name "Value 30" ;
+ lv2:symbol "val30"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 36 ;
+ lv2:name "Value 31" ;
+ lv2:symbol "val31"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 37 ;
+ lv2:name "Value 32" ;
+ lv2:symbol "val32"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 38 ;
+ lv2:name "Value 33" ;
+ lv2:symbol "val33"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 39 ;
+ lv2:name "Value 34" ;
+ lv2:symbol "val34"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 40 ;
+ lv2:name "Value 35" ;
+ lv2:symbol "val35"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 41 ;
+ lv2:name "Value 36" ;
+ lv2:symbol "val36"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 42 ;
+ lv2:name "Value 37" ;
+ lv2:symbol "val37"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 43 ;
+ lv2:name "Value 38" ;
+ lv2:symbol "val38"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 44 ;
+ lv2:name "Value 39" ;
+ lv2:symbol "val39"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 45 ;
+ lv2:name "Value 40" ;
+ lv2:symbol "val40"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 46 ;
+ lv2:name "Value 41" ;
+ lv2:symbol "val41"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 47 ;
+ lv2:name "Value 42" ;
+ lv2:symbol "val42"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 48 ;
+ lv2:name "Value 43" ;
+ lv2:symbol "val43"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 49 ;
+ lv2:name "Value 44" ;
+ lv2:symbol "val44"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 50 ;
+ lv2:name "Value 45" ;
+ lv2:symbol "val45"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 51 ;
+ lv2:name "Value 46" ;
+ lv2:symbol "val46"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 52 ;
+ lv2:name "Value 47" ;
+ lv2:symbol "val47"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 53 ;
+ lv2:name "Value 48" ;
+ lv2:symbol "val48"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 54 ;
+ lv2:name "Value 49" ;
+ lv2:symbol "val49"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 55 ;
+ lv2:name "Value 50" ;
+ lv2:symbol "val50"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 56 ;
+ lv2:name "Value 51" ;
+ lv2:symbol "val51"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 57 ;
+ lv2:name "Value 52" ;
+ lv2:symbol "val52"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 58 ;
+ lv2:name "Value 53" ;
+ lv2:symbol "val53"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 59 ;
+ lv2:name "Value 54" ;
+ lv2:symbol "val54"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 60 ;
+ lv2:name "Value 55" ;
+ lv2:symbol "val55"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 61 ;
+ lv2:name "Value 56" ;
+ lv2:symbol "val56"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 62 ;
+ lv2:name "Value 57" ;
+ lv2:symbol "val57"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 63 ;
+ lv2:name "Value 58" ;
+ lv2:symbol "val58"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 64 ;
+ lv2:name "Value 59" ;
+ lv2:symbol "val59"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 65 ;
+ lv2:name "Value 60" ;
+ lv2:symbol "val60"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 66 ;
+ lv2:name "Value 61" ;
+ lv2:symbol "val61"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 67 ;
+ lv2:name "Value 62" ;
+ lv2:symbol "val62"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 68 ;
+ lv2:name "Value 63" ;
+ lv2:symbol "val63"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 69 ;
+ lv2:name "Value 64" ;
+ lv2:symbol "val64"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 70 ;
+ lv2:name "Value 65" ;
+ lv2:symbol "val65"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 71 ;
+ lv2:name "Value 66" ;
+ lv2:symbol "val66"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 72 ;
+ lv2:name "Value 67" ;
+ lv2:symbol "val67"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 73 ;
+ lv2:name "Value 68" ;
+ lv2:symbol "val68"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 74 ;
+ lv2:name "Value 69" ;
+ lv2:symbol "val69"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 75 ;
+ lv2:name "Value 70" ;
+ lv2:symbol "val70"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 76 ;
+ lv2:name "Value 71" ;
+ lv2:symbol "val71"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 77 ;
+ lv2:name "Value 72" ;
+ lv2:symbol "val72"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 78 ;
+ lv2:name "Value 73" ;
+ lv2:symbol "val73"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 79 ;
+ lv2:name "Value 74" ;
+ lv2:symbol "val74"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 80 ;
+ lv2:name "Value 75" ;
+ lv2:symbol "val75"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 81 ;
+ lv2:name "Value 76" ;
+ lv2:symbol "val76"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 82 ;
+ lv2:name "Value 77" ;
+ lv2:symbol "val77"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 83 ;
+ lv2:name "Value 78" ;
+ lv2:symbol "val78"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 84 ;
+ lv2:name "Value 79" ;
+ lv2:symbol "val79"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 85 ;
+ lv2:name "Value 80" ;
+ lv2:symbol "val80"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 86 ;
+ lv2:name "Value 81" ;
+ lv2:symbol "val81"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 87 ;
+ lv2:name "Value 82" ;
+ lv2:symbol "val82"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 88 ;
+ lv2:name "Value 83" ;
+ lv2:symbol "val83"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 89 ;
+ lv2:name "Value 84" ;
+ lv2:symbol "val84"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 90 ;
+ lv2:name "Value 85" ;
+ lv2:symbol "val85"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 91 ;
+ lv2:name "Value 86" ;
+ lv2:symbol "val86"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 92 ;
+ lv2:name "Value 87" ;
+ lv2:symbol "val87"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 93 ;
+ lv2:name "Value 88" ;
+ lv2:symbol "val88"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 94 ;
+ lv2:name "Value 89" ;
+ lv2:symbol "val89"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 95 ;
+ lv2:name "Value 90" ;
+ lv2:symbol "val90"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 96 ;
+ lv2:name "Value 91" ;
+ lv2:symbol "val91"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 97 ;
+ lv2:name "Value 92" ;
+ lv2:symbol "val92"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 98 ;
+ lv2:name "Value 93" ;
+ lv2:symbol "val93"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 99 ;
+ lv2:name "Value 94" ;
+ lv2:symbol "val94"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 100 ;
+ lv2:name "Value 95" ;
+ lv2:symbol "val95"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 101 ;
+ lv2:name "Value 96" ;
+ lv2:symbol "val96"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 102 ;
+ lv2:name "Value 97" ;
+ lv2:symbol "val97"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 103 ;
+ lv2:name "Value 98" ;
+ lv2:symbol "val98"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 104 ;
+ lv2:name "Value 99" ;
+ lv2:symbol "val99"
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 105 ;
+ lv2:name "Input" ;
+ lv2:symbol "in"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 106 ;
+ lv2:name "Quantised Output" ;
+ lv2:symbol "out"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 107 ;
+ lv2:name "Output Changed" ;
+ lv2:symbol "changed"
+ ] ;
+ dct:replaces <urn:ladspa:2029> ;
+ doap:name "Quantiser (100 Steps)" ;
+ lv2:documentation """
+<p>Quantises a signal to a set of arbitrary values within a range.</p>
+
+<p>Match Range determines the distance from the quantised value that the input
+can deviate before being altered. This allows small variations in input to get
+through unmolested. If it is set to 0 the input is quantised to the nearest
+exact match.</p>
+
+<p>Mode is one of Extend (0), Wrap (1) or Clip (2).</p>
+
+<p>Steps is the number of quantisation steps to use (up to a maximum of
+100).</p>
+
+<p>For example, given the following settings:</p>
+<ul>
+ <li>Range Minimum = 0.0</li>
+ <li>Range Maximum = 12.0</li>
+ <li>Match Range = 0.0</li>
+ <li>Steps = 4</li>
+ <li>Quantisation Values 3, 5, 7 and 10</li>
+</ul>
+
+<p>and an input that is a line from -24 to 24, the output will be:</p>
+<ul>
+ <li>Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19,
+ 22</li>
+ <li>Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10</li>
+ <li>Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10</li>
+</ul>
+
+<p>The quantisation values should all be within the range minimum and maximum
+for it to work!</p>
+""" .
diff --git a/blop.lv2/quantiser_20.ttl b/blop.lv2/quantiser_20.ttl
new file mode 100644
index 0000000..64c1d55
--- /dev/null
+++ b/blop.lv2/quantiser_20.ttl
@@ -0,0 +1,238 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+blop:quantiser_20
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Minimum" ;
+ lv2:symbol "min"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Maximum" ;
+ lv2:symbol "max"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Match Range" ;
+ lv2:symbol "range"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:maximum 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Mode" ;
+ lv2:symbol "mode" ;
+ lv2:portProperty lv2:enumeration ,
+ lv2:integer ;
+ lv2:scalePoint [
+ rdfs:label "Extend" ;
+ rdf:value 0.0
+ ] , [
+ rdfs:label "Wrap" ;
+ rdf:value 1.0
+ ] , [
+ rdfs:label "Clip" ;
+ rdf:value 1.0
+ ]
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 20 ;
+ lv2:index 4 ;
+ lv2:maximum 20 ;
+ lv2:minimum 1 ;
+ lv2:name "Steps" ;
+ lv2:portProperty lv2:integer ;
+ lv2:symbol "steps"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 5 ;
+ lv2:name "Value 0" ;
+ lv2:symbol "val00"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 6 ;
+ lv2:name "Value 1" ;
+ lv2:symbol "val01"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 7 ;
+ lv2:name "Value 2" ;
+ lv2:symbol "val02"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 8 ;
+ lv2:name "Value 3" ;
+ lv2:symbol "val03"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 9 ;
+ lv2:name "Value 4" ;
+ lv2:symbol "val04"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 10 ;
+ lv2:name "Value 5" ;
+ lv2:symbol "val05"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 11 ;
+ lv2:name "Value 6" ;
+ lv2:symbol "val06"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 12 ;
+ lv2:name "Value 7" ;
+ lv2:symbol "val07"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 13 ;
+ lv2:name "Value 8" ;
+ lv2:symbol "val08"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 14 ;
+ lv2:name "Value 9" ;
+ lv2:symbol "val09"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 15 ;
+ lv2:name "Value 10" ;
+ lv2:symbol "val10"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 16 ;
+ lv2:name "Value 11" ;
+ lv2:symbol "val11"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 17 ;
+ lv2:name "Value 12" ;
+ lv2:symbol "val12"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 18 ;
+ lv2:name "Value 13" ;
+ lv2:symbol "val13"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 19 ;
+ lv2:name "Value 14" ;
+ lv2:symbol "val14"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 20 ;
+ lv2:name "Value 15" ;
+ lv2:symbol "val15"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 21 ;
+ lv2:name "Value 16" ;
+ lv2:symbol "val16"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 22 ;
+ lv2:name "Value 17" ;
+ lv2:symbol "val17"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 23 ;
+ lv2:name "Value 18" ;
+ lv2:symbol "val18"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 24 ;
+ lv2:name "Value 19" ;
+ lv2:symbol "val19"
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 25 ;
+ lv2:name "Input" ;
+ lv2:symbol "in"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 26 ;
+ lv2:name "Quantised Output" ;
+ lv2:symbol "out"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 27 ;
+ lv2:name "Output Changed" ;
+ lv2:symbol "changed"
+ ] ;
+ dct:replaces <urn:ladspa:2027> ;
+ doap:name "Quantiser (20 Steps)" ;
+ lv2:documentation """
+<p>Quantises a signal to a set of arbitrary values within a range.</p>
+
+<p>Match Range determines the distance from the quantised value that the input
+can deviate before being altered. This allows small variations in input to get
+through unmolested. If it is set to 0 the input is quantised to the nearest
+exact match.</p>
+
+<p>Mode is one of Extend (0), Wrap (1) or Clip (2).</p>
+
+<p>Steps is the number of quantisation steps to use (up to a maximum of
+20).</p>
+
+<p>For example, given the following settings:</p>
+<ul>
+ <li>Range Minimum = 0.0</li>
+ <li>Range Maximum = 12.0</li>
+ <li>Match Range = 0.0</li>
+ <li>Steps = 4</li>
+ <li>Quantisation Values 3, 5, 7 and 10</li>
+</ul>
+
+<p>and an input that is a line from -24 to 24, the output will be:</p>
+<ul>
+ <li>Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19,
+ 22</li>
+ <li>Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10</li>
+ <li>Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10</li>
+</ul>
+
+<p>The quantisation values should all be within the range minimum and maximum
+for it to work!</p>
+""" .
diff --git a/blop.lv2/quantiser_50.ttl b/blop.lv2/quantiser_50.ttl
new file mode 100644
index 0000000..de748fc
--- /dev/null
+++ b/blop.lv2/quantiser_50.ttl
@@ -0,0 +1,418 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+blop:quantiser_50
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Minimum" ;
+ lv2:symbol "min"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Maximum" ;
+ lv2:symbol "max"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Match Range" ;
+ lv2:symbol "range"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:maximum 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Mode" ;
+ lv2:symbol "mode" ;
+ lv2:portProperty lv2:enumeration ,
+ lv2:integer ;
+ lv2:scalePoint [
+ rdfs:label "Extend" ;
+ rdf:value 0.0
+ ] , [
+ rdfs:label "Wrap" ;
+ rdf:value 1.0
+ ] , [
+ rdfs:label "Clip" ;
+ rdf:value 1.0
+ ]
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 20 ;
+ lv2:index 4 ;
+ lv2:maximum 20 ;
+ lv2:minimum 1 ;
+ lv2:name "Steps" ;
+ lv2:portProperty lv2:integer ;
+ lv2:symbol "steps"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 5 ;
+ lv2:name "Value 0" ;
+ lv2:symbol "val00"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 6 ;
+ lv2:name "Value 1" ;
+ lv2:symbol "val01"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 7 ;
+ lv2:name "Value 2" ;
+ lv2:symbol "val02"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 8 ;
+ lv2:name "Value 3" ;
+ lv2:symbol "val03"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 9 ;
+ lv2:name "Value 4" ;
+ lv2:symbol "val04"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 10 ;
+ lv2:name "Value 5" ;
+ lv2:symbol "val05"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 11 ;
+ lv2:name "Value 6" ;
+ lv2:symbol "val06"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 12 ;
+ lv2:name "Value 7" ;
+ lv2:symbol "val07"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 13 ;
+ lv2:name "Value 8" ;
+ lv2:symbol "val08"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 14 ;
+ lv2:name "Value 9" ;
+ lv2:symbol "val09"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 15 ;
+ lv2:name "Value 10" ;
+ lv2:symbol "val10"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 16 ;
+ lv2:name "Value 11" ;
+ lv2:symbol "val11"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 17 ;
+ lv2:name "Value 12" ;
+ lv2:symbol "val12"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 18 ;
+ lv2:name "Value 13" ;
+ lv2:symbol "val13"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 19 ;
+ lv2:name "Value 14" ;
+ lv2:symbol "val14"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 20 ;
+ lv2:name "Value 15" ;
+ lv2:symbol "val15"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 21 ;
+ lv2:name "Value 16" ;
+ lv2:symbol "val16"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 22 ;
+ lv2:name "Value 17" ;
+ lv2:symbol "val17"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 23 ;
+ lv2:name "Value 18" ;
+ lv2:symbol "val18"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 24 ;
+ lv2:name "Value 19" ;
+ lv2:symbol "val19"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 25 ;
+ lv2:name "Value 20" ;
+ lv2:symbol "val20"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 26 ;
+ lv2:name "Value 21" ;
+ lv2:symbol "val21"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 27 ;
+ lv2:name "Value 22" ;
+ lv2:symbol "val22"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 28 ;
+ lv2:name "Value 23" ;
+ lv2:symbol "val23"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 29 ;
+ lv2:name "Value 24" ;
+ lv2:symbol "val24"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 30 ;
+ lv2:name "Value 25" ;
+ lv2:symbol "val25"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 31 ;
+ lv2:name "Value 26" ;
+ lv2:symbol "val26"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 32 ;
+ lv2:name "Value 27" ;
+ lv2:symbol "val27"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 33 ;
+ lv2:name "Value 28" ;
+ lv2:symbol "val28"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 34 ;
+ lv2:name "Value 29" ;
+ lv2:symbol "val29"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 35 ;
+ lv2:name "Value 30" ;
+ lv2:symbol "val30"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 36 ;
+ lv2:name "Value 31" ;
+ lv2:symbol "val31"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 37 ;
+ lv2:name "Value 32" ;
+ lv2:symbol "val32"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 38 ;
+ lv2:name "Value 33" ;
+ lv2:symbol "val33"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 39 ;
+ lv2:name "Value 34" ;
+ lv2:symbol "val34"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 40 ;
+ lv2:name "Value 35" ;
+ lv2:symbol "val35"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 41 ;
+ lv2:name "Value 36" ;
+ lv2:symbol "val36"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 42 ;
+ lv2:name "Value 37" ;
+ lv2:symbol "val37"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 43 ;
+ lv2:name "Value 38" ;
+ lv2:symbol "val38"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 44 ;
+ lv2:name "Value 39" ;
+ lv2:symbol "val39"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 45 ;
+ lv2:name "Value 40" ;
+ lv2:symbol "val40"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 46 ;
+ lv2:name "Value 41" ;
+ lv2:symbol "val41"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 47 ;
+ lv2:name "Value 42" ;
+ lv2:symbol "val42"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 48 ;
+ lv2:name "Value 43" ;
+ lv2:symbol "val43"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 49 ;
+ lv2:name "Value 44" ;
+ lv2:symbol "val44"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 50 ;
+ lv2:name "Value 45" ;
+ lv2:symbol "val45"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 51 ;
+ lv2:name "Value 46" ;
+ lv2:symbol "val46"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 52 ;
+ lv2:name "Value 47" ;
+ lv2:symbol "val47"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 53 ;
+ lv2:name "Value 48" ;
+ lv2:symbol "val48"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 54 ;
+ lv2:name "Value 49" ;
+ lv2:symbol "val49"
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 55 ;
+ lv2:name "Input" ;
+ lv2:symbol "in"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 56 ;
+ lv2:name "Quantised Output" ;
+ lv2:symbol "out"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 57 ;
+ lv2:name "Output Changed" ;
+ lv2:symbol "changed"
+ ] ;
+ dct:replaces <urn:ladspa:2028> ;
+ doap:name "Quantiser (50 Steps)" ;
+ lv2:documentation """
+<p>Quantises a signal to a set of arbitrary values within a range.</p>
+
+<p>Match Range determines the distance from the quantised value that the input
+can deviate before being altered. This allows small variations in input to get
+through unmolested. If it is set to 0 the input is quantised to the nearest
+exact match.</p>
+
+<p>Mode is one of Extend (0), Wrap (1) or Clip (2).</p>
+
+<p>Steps is the number of quantisation steps to use (up to a maximum of
+50).</p>
+
+<p>For example, given the following settings:</p>
+<ul>
+ <li>Range Minimum = 0.0</li>
+ <li>Range Maximum = 12.0</li>
+ <li>Match Range = 0.0</li>
+ <li>Steps = 4</li>
+ <li>Quantisation Values 3, 5, 7 and 10</li>
+</ul>
+
+<p>and an input that is a line from -24 to 24, the output will be:</p>
+<ul>
+ <li>Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19,
+ 22</li>
+ <li>Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10</li>
+ <li>Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10</li>
+</ul>
+
+<p>The quantisation values should all be within the range minimum and maximum
+for it to work!</p>
+""" .
diff --git a/blop.lv2/random.ttl b/blop.lv2/random.ttl
new file mode 100644
index 0000000..a0fcb28
--- /dev/null
+++ b/blop.lv2/random.ttl
@@ -0,0 +1,59 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+
+blop:random
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.000001 ;
+ lv2:default 440.0 ;
+ lv2:name "Frequency" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 1 ;
+ lv2:index 1 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Wave Smoothness" ;
+ lv2:symbol "smooth" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ,
+ lv2:Port ;
+ lv2:index 2 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1661> ,
+ <urn:ladspa:1662> ,
+ <urn:ladspa:1663> ,
+ <urn:ladspa:1664> ;
+ doap:name "Random Wave Generator" ;
+ lv2:documentation """
+<p>Generates a random waveform of varying frequency and smoothness. The
+frequency determines how often the output changes. The smoothness, how quickly
+a transition occurs.</p>
+
+<p>The output varies between &#177;1, with an even distribution.</p>
+""" .
diff --git a/blop.lv2/ratio.ttl b/blop.lv2/ratio.ttl
new file mode 100644
index 0000000..f3feb3d
--- /dev/null
+++ b/blop.lv2/ratio.ttl
@@ -0,0 +1,48 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:ratio
+ a lv2:Plugin ,
+ lv2:UtilityPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:name "Numerator" ;
+ lv2:symbol "numerator" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 1 ;
+ lv2:name "Denominator" ;
+ lv2:symbol "denominator" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ,
+ morph:AutoMorphPort ;
+ lv2:index 2 ;
+ lv2:name "Ratio" ;
+ lv2:symbol "ratio" ;
+ morph:supportsType lv2:CVPort
+ ] ;
+ dct:replaces <urn:ladspa:2034> ,
+ <urn:ladspa:2035> ,
+ <urn:ladspa:2036> ,
+ <urn:ladspa:2037> ;
+ doap:name "Signal Ratio" ;
+ lv2:documentation """
+<p>Get the ratio between two signals.</p>
+<p>To avoid divisions by zero, 0 is treated as a really small number.</p>
+""" .
diff --git a/blop.lv2/sawtooth.ttl b/blop.lv2/sawtooth.ttl
new file mode 100644
index 0000000..23c0ab5
--- /dev/null
+++ b/blop.lv2/sawtooth.ttl
@@ -0,0 +1,42 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:sawtooth
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.000001 ;
+ lv2:default 440.0 ;
+ lv2:name "Frequency" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 1 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1642> ,
+ <urn:ladspa:1643> ;
+ doap:name "Sawtooth Oscillator" ;
+ lv2:documentation """
+<p>Generates an alias-free sawtooth wave at given input frequency.</p>
+""" .
diff --git a/blop.lv2/sequencer_16.ttl b/blop.lv2/sequencer_16.ttl
new file mode 100644
index 0000000..a1af8d6
--- /dev/null
+++ b/blop.lv2/sequencer_16.ttl
@@ -0,0 +1,166 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+
+blop:sequencer_16
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Gate" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Step Trigger" ;
+ lv2:portProperty lv2:toggled ,
+ <http://lv2plug.in/ns/ext/port-props#trigger> ;
+ lv2:symbol "trigger"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 16 ;
+ lv2:index 2 ;
+ lv2:maximum 16 ;
+ lv2:minimum 1 ;
+ lv2:name "Loop Steps" ;
+ lv2:portProperty lv2:integer ;
+ lv2:symbol "steps"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Reset on Gate Close" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "reset"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 4 ;
+ lv2:name "Closed Gate Value" ;
+ lv2:symbol "closed_val"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 5 ;
+ lv2:name "Value 0" ;
+ lv2:symbol "val00"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 6 ;
+ lv2:name "Value 1" ;
+ lv2:symbol "val01"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 7 ;
+ lv2:name "Value 2" ;
+ lv2:symbol "val02"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 8 ;
+ lv2:name "Value 3" ;
+ lv2:symbol "val03"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 9 ;
+ lv2:name "Value 4" ;
+ lv2:symbol "val04"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 10 ;
+ lv2:name "Value 5" ;
+ lv2:symbol "val05"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 11 ;
+ lv2:name "Value 6" ;
+ lv2:symbol "val06"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 12 ;
+ lv2:name "Value 7" ;
+ lv2:symbol "val07"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 13 ;
+ lv2:name "Value 8" ;
+ lv2:symbol "val08"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 14 ;
+ lv2:name "Value 9" ;
+ lv2:symbol "val09"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 15 ;
+ lv2:name "Value 10" ;
+ lv2:symbol "val10"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 16 ;
+ lv2:name "Value 11" ;
+ lv2:symbol "val11"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 17 ;
+ lv2:name "Value 12" ;
+ lv2:symbol "val12"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 18 ;
+ lv2:name "Value 13" ;
+ lv2:symbol "val13"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 19 ;
+ lv2:name "Value 14" ;
+ lv2:symbol "val14"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 20 ;
+ lv2:name "Value 15" ;
+ lv2:symbol "val15"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 21 ;
+ lv2:name "Value Out" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1677> ;
+ doap:name "16 Step Sequencer" ;
+ lv2:documentation """
+<p>Simulates an analogue step sequencer. The sequencer stores a number of
+values which are stepped through using a trigger when the gate is open, looping
+after a given number of steps. This variant has 16 steps.</p>
+
+<p>When the gate is closed, the sequencer returns to the start. Output when
+the gate is closed can be set to a default value. If not, it will just output
+the last value reached before the gate was closed.</p>
+""" .
diff --git a/blop.lv2/sequencer_32.ttl b/blop.lv2/sequencer_32.ttl
new file mode 100644
index 0000000..b8f1b47
--- /dev/null
+++ b/blop.lv2/sequencer_32.ttl
@@ -0,0 +1,262 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+
+blop:sequencer_32
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Gate" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Step Trigger" ;
+ lv2:portProperty lv2:toggled ,
+ <http://lv2plug.in/ns/ext/port-props#trigger> ;
+ lv2:symbol "trigger"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 32 ;
+ lv2:index 2 ;
+ lv2:maximum 32 ;
+ lv2:minimum 1 ;
+ lv2:name "Loop Steps" ;
+ lv2:portProperty lv2:integer ;
+ lv2:symbol "steps"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Reset on Gate Close" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "reset"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 4 ;
+ lv2:name "Closed Gate Value" ;
+ lv2:symbol "closed_val"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 5 ;
+ lv2:name "Value 0" ;
+ lv2:symbol "val00"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 6 ;
+ lv2:name "Value 1" ;
+ lv2:symbol "val01"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 7 ;
+ lv2:name "Value 2" ;
+ lv2:symbol "val02"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 8 ;
+ lv2:name "Value 3" ;
+ lv2:symbol "val03"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 9 ;
+ lv2:name "Value 4" ;
+ lv2:symbol "val04"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 10 ;
+ lv2:name "Value 5" ;
+ lv2:symbol "val05"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 11 ;
+ lv2:name "Value 6" ;
+ lv2:symbol "val06"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 12 ;
+ lv2:name "Value 7" ;
+ lv2:symbol "val07"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 13 ;
+ lv2:name "Value 8" ;
+ lv2:symbol "val08"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 14 ;
+ lv2:name "Value 9" ;
+ lv2:symbol "val09"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 15 ;
+ lv2:name "Value 10" ;
+ lv2:symbol "val10"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 16 ;
+ lv2:name "Value 11" ;
+ lv2:symbol "val11"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 17 ;
+ lv2:name "Value 12" ;
+ lv2:symbol "val12"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 18 ;
+ lv2:name "Value 13" ;
+ lv2:symbol "val13"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 19 ;
+ lv2:name "Value 14" ;
+ lv2:symbol "val14"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 20 ;
+ lv2:name "Value 15" ;
+ lv2:symbol "val15"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 21 ;
+ lv2:name "Value 16" ;
+ lv2:symbol "val16"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 22 ;
+ lv2:name "Value 17" ;
+ lv2:symbol "val17"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 23 ;
+ lv2:name "Value 18" ;
+ lv2:symbol "val18"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 24 ;
+ lv2:name "Value 19" ;
+ lv2:symbol "val19"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 25 ;
+ lv2:name "Value 20" ;
+ lv2:symbol "val20"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 26 ;
+ lv2:name "Value 21" ;
+ lv2:symbol "val21"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 27 ;
+ lv2:name "Value 22" ;
+ lv2:symbol "val22"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 28 ;
+ lv2:name "Value 23" ;
+ lv2:symbol "val23"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 29 ;
+ lv2:name "Value 24" ;
+ lv2:symbol "val24"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 30 ;
+ lv2:name "Value 25" ;
+ lv2:symbol "val25"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 31 ;
+ lv2:name "Value 26" ;
+ lv2:symbol "val26"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 32 ;
+ lv2:name "Value 27" ;
+ lv2:symbol "val27"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 33 ;
+ lv2:name "Value 28" ;
+ lv2:symbol "val28"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 34 ;
+ lv2:name "Value 29" ;
+ lv2:symbol "val29"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 35 ;
+ lv2:name "Value 30" ;
+ lv2:symbol "val30"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 36 ;
+ lv2:name "Value 31" ;
+ lv2:symbol "val31"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 37 ;
+ lv2:name "Value Out" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1676> ;
+ doap:name "32 Step Sequencer" ;
+ lv2:documentation """
+<p>Simulates an analogue step sequencer. The sequencer stores a number of
+values which are stepped through using a trigger when the gate is open, looping
+after a given number of steps. This variant has 32 steps.</p>
+
+<p>When the gate is closed, the sequencer returns to the start. Output when
+the gate is closed can be set to a default value. If not, it will just output
+the last value reached before the gate was closed.</p>
+""" .
diff --git a/blop.lv2/sequencer_64.ttl b/blop.lv2/sequencer_64.ttl
new file mode 100644
index 0000000..316202c
--- /dev/null
+++ b/blop.lv2/sequencer_64.ttl
@@ -0,0 +1,454 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+
+blop:sequencer_64
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Gate" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Step Trigger" ;
+ lv2:portProperty lv2:toggled ,
+ <http://lv2plug.in/ns/ext/port-props#trigger> ;
+ lv2:symbol "trigger"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 32 ;
+ lv2:index 2 ;
+ lv2:maximum 32 ;
+ lv2:minimum 1 ;
+ lv2:name "Loop Steps" ;
+ lv2:portProperty lv2:integer ;
+ lv2:symbol "steps"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 3 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Reset on Gate Close" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "reset"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 4 ;
+ lv2:name "Closed Gate Value" ;
+ lv2:symbol "closed_val"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 5 ;
+ lv2:name "Value 0" ;
+ lv2:symbol "val00"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 6 ;
+ lv2:name "Value 1" ;
+ lv2:symbol "val01"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 7 ;
+ lv2:name "Value 2" ;
+ lv2:symbol "val02"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 8 ;
+ lv2:name "Value 3" ;
+ lv2:symbol "val03"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 9 ;
+ lv2:name "Value 4" ;
+ lv2:symbol "val04"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 10 ;
+ lv2:name "Value 5" ;
+ lv2:symbol "val05"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 11 ;
+ lv2:name "Value 6" ;
+ lv2:symbol "val06"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 12 ;
+ lv2:name "Value 7" ;
+ lv2:symbol "val07"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 13 ;
+ lv2:name "Value 8" ;
+ lv2:symbol "val08"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 14 ;
+ lv2:name "Value 9" ;
+ lv2:symbol "val09"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 15 ;
+ lv2:name "Value 10" ;
+ lv2:symbol "val10"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 16 ;
+ lv2:name "Value 11" ;
+ lv2:symbol "val11"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 17 ;
+ lv2:name "Value 12" ;
+ lv2:symbol "val12"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 18 ;
+ lv2:name "Value 13" ;
+ lv2:symbol "val13"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 19 ;
+ lv2:name "Value 14" ;
+ lv2:symbol "val14"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 20 ;
+ lv2:name "Value 15" ;
+ lv2:symbol "val15"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 21 ;
+ lv2:name "Value 16" ;
+ lv2:symbol "val16"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 22 ;
+ lv2:name "Value 17" ;
+ lv2:symbol "val17"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 23 ;
+ lv2:name "Value 18" ;
+ lv2:symbol "val18"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 24 ;
+ lv2:name "Value 19" ;
+ lv2:symbol "val19"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 25 ;
+ lv2:name "Value 20" ;
+ lv2:symbol "val20"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 26 ;
+ lv2:name "Value 21" ;
+ lv2:symbol "val21"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 27 ;
+ lv2:name "Value 22" ;
+ lv2:symbol "val22"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 28 ;
+ lv2:name "Value 23" ;
+ lv2:symbol "val23"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 29 ;
+ lv2:name "Value 24" ;
+ lv2:symbol "val24"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 30 ;
+ lv2:name "Value 25" ;
+ lv2:symbol "val25"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 31 ;
+ lv2:name "Value 26" ;
+ lv2:symbol "val26"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 32 ;
+ lv2:name "Value 27" ;
+ lv2:symbol "val27"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 33 ;
+ lv2:name "Value 28" ;
+ lv2:symbol "val28"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 34 ;
+ lv2:name "Value 29" ;
+ lv2:symbol "val29"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 35 ;
+ lv2:name "Value 30" ;
+ lv2:symbol "val30"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 36 ;
+ lv2:name "Value 31" ;
+ lv2:symbol "val31"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 37 ;
+ lv2:name "Value 32" ;
+ lv2:symbol "val32"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 38 ;
+ lv2:name "Value 33" ;
+ lv2:symbol "val33"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 39 ;
+ lv2:name "Value 34" ;
+ lv2:symbol "val34"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 40 ;
+ lv2:name "Value 35" ;
+ lv2:symbol "val35"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 41 ;
+ lv2:name "Value 36" ;
+ lv2:symbol "val36"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 42 ;
+ lv2:name "Value 37" ;
+ lv2:symbol "val37"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 43 ;
+ lv2:name "Value 38" ;
+ lv2:symbol "val38"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 44 ;
+ lv2:name "Value 39" ;
+ lv2:symbol "val39"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 45 ;
+ lv2:name "Value 40" ;
+ lv2:symbol "val40"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 46 ;
+ lv2:name "Value 41" ;
+ lv2:symbol "val41"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 47 ;
+ lv2:name "Value 42" ;
+ lv2:symbol "val42"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 48 ;
+ lv2:name "Value 43" ;
+ lv2:symbol "val43"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 49 ;
+ lv2:name "Value 44" ;
+ lv2:symbol "val44"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 50 ;
+ lv2:name "Value 45" ;
+ lv2:symbol "val45"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 51 ;
+ lv2:name "Value 46" ;
+ lv2:symbol "val46"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 52 ;
+ lv2:name "Value 47" ;
+ lv2:symbol "val47"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 53 ;
+ lv2:name "Value 48" ;
+ lv2:symbol "val48"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 54 ;
+ lv2:name "Value 49" ;
+ lv2:symbol "val49"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 55 ;
+ lv2:name "Value 50" ;
+ lv2:symbol "val50"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 56 ;
+ lv2:name "Value 51" ;
+ lv2:symbol "val51"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 57 ;
+ lv2:name "Value 52" ;
+ lv2:symbol "val52"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 58 ;
+ lv2:name "Value 53" ;
+ lv2:symbol "val53"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 59 ;
+ lv2:name "Value 54" ;
+ lv2:symbol "val54"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 60 ;
+ lv2:name "Value 55" ;
+ lv2:symbol "val55"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 61 ;
+ lv2:name "Value 56" ;
+ lv2:symbol "val56"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 62 ;
+ lv2:name "Value 57" ;
+ lv2:symbol "val57"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 63 ;
+ lv2:name "Value 58" ;
+ lv2:symbol "val58"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 64 ;
+ lv2:name "Value 59" ;
+ lv2:symbol "val59"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 65 ;
+ lv2:name "Value 60" ;
+ lv2:symbol "val60"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 66 ;
+ lv2:name "Value 61" ;
+ lv2:symbol "val61"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 67 ;
+ lv2:name "Value 62" ;
+ lv2:symbol "val62"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 68 ;
+ lv2:name "Value 63" ;
+ lv2:symbol "val63"
+ ] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
+ lv2:index 69 ;
+ lv2:name "Value Out" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1675> ;
+ doap:name "64 Step Sequencer" ;
+ lv2:documentation """
+<p>Simulates an analogue step sequencer. The sequencer stores a number of
+values which are stepped through using a trigger when the gate is open, looping
+after a given number of steps. This variant has 64 steps.</p>
+
+<p>When the gate is closed, the sequencer returns to the start. Output when
+the gate is closed can be set to a default value. If not, it will just output
+the last value reached before the gate was closed.</p>
+""" .
diff --git a/blop.lv2/square.ttl b/blop.lv2/square.ttl
new file mode 100644
index 0000000..c505a6b
--- /dev/null
+++ b/blop.lv2/square.ttl
@@ -0,0 +1,42 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:square
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.000001 ;
+ lv2:default 440.0 ;
+ lv2:name "Frequency" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 1 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1643> ,
+ <urn:ladspa:1644> ;
+ doap:name "Square Oscillator" ;
+ lv2:documentation """
+<p>Generates an alias-free square wave at given input frequency.</p>
+""" .
diff --git a/blop.lv2/sum.ttl b/blop.lv2/sum.ttl
new file mode 100644
index 0000000..b4e8b7a
--- /dev/null
+++ b/blop.lv2/sum.ttl
@@ -0,0 +1,48 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:sum
+ a lv2:Plugin ,
+ lv2:UtilityPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:name "Input 1" ;
+ lv2:symbol "in1" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 1 ;
+ lv2:name "Input 2" ;
+ lv2:symbol "in2" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ,
+ morph:AutoMorphPort ;
+ lv2:index 2 ;
+ lv2:name "Sum" ;
+ lv2:symbol "sum" ;
+ morph:supportsType lv2:CVPort
+ ] ;
+ dct:replaces <urn:ladspa:1665> ,
+ <urn:ladspa:1666> ,
+ <urn:ladspa:1667> ;
+ doap:name "Signal Sum" ;
+ lv2:documentation """
+<p>Add two signals.</p>
+""" .
diff --git a/blop.lv2/sync_pulse.ttl b/blop.lv2/sync_pulse.ttl
new file mode 100644
index 0000000..e915e7d
--- /dev/null
+++ b/blop.lv2/sync_pulse.ttl
@@ -0,0 +1,59 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:sync_pulse
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 16 ;
+ lv2:index 0 ;
+ lv2:maximum 64 ;
+ lv2:minimum 0 ;
+ lv2:name "Frequency" ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0.5 ;
+ lv2:index 1 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Pulse Width" ;
+ lv2:symbol "pwidth" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 2 ;
+ lv2:name "Gate" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 3 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:2023> ,
+ <urn:ladspa:2024> ;
+ doap:name "Clock Pulse Oscillator with Gate" ;
+ lv2:documentation """
+<p>Same as the <a href="http://drobilla.net/plugins/blop/sync_square">Clock
+Oscillator</a>, but with pulse-width modulation.</p>
+""" .
diff --git a/blop.lv2/sync_square.ttl b/blop.lv2/sync_square.ttl
new file mode 100644
index 0000000..897d572
--- /dev/null
+++ b/blop.lv2/sync_square.ttl
@@ -0,0 +1,51 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:sync_square
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 16 ;
+ lv2:index 0 ;
+ lv2:maximum 64 ;
+ lv2:minimum 0 ;
+ lv2:name "Frequency" ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Gate" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 2 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1678> ,
+ <urn:ladspa:1679> ;
+ doap:name "Clock Oscillator with Gate" ;
+ lv2:documentation """
+<p>Generates a non-bandlimited simple square waveform for use as a clock.
+Useful for triggering the sequencers, or anything else that uses a clock
+signal.</p>
+
+<p>When the gate is closed, it outputs silence, and the phase is reset.</p>
+""" .
diff --git a/blop.lv2/tracker.ttl b/blop.lv2/tracker.ttl
new file mode 100644
index 0000000..5a88b9b
--- /dev/null
+++ b/blop.lv2/tracker.ttl
@@ -0,0 +1,120 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:tracker
+ a lv2:Plugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Gate" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 100 ;
+ lv2:index 1 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.00001 ;
+ lv2:name "High Attack Rate" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "hattack" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 100 ;
+ lv2:index 2 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.00001 ;
+ lv2:name "High Decay Rate" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "hdecay" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 100 ;
+ lv2:index 3 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.00001 ;
+ lv2:name "Low Attack Rate" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "lattack" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 100 ;
+ lv2:index 4 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.00001 ;
+ lv2:name "Low Decay Rate" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "ldecay" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
+ a lv2:AudioPort ,
+ lv2:InputPort ;
+ lv2:index 5 ;
+ lv2:name "Input" ;
+ lv2:symbol "in"
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 6 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:2025> ,
+ <urn:ladspa:2026> ;
+ doap:name "Signal Tracker" ;
+ lv2:documentation """
+<p>This tracks an incoming signal and outputs the result.</p>
+<p>The rate controls tell the plugin how quickly to respond to a change in
+input. Low values will mean a slower response - a setting of 0 will hold the
+last value, and a very high value will track the input exactly.</p>
+<p>Attack rate is how quickly an upward change is tracked, and Decay for
+downward changes. There are two pairs of these - the one used depends on the
+level of the Gate.</p>
+<p>Example uses:</p>
+<ul>
+ <li>
+ <em>An envelope tracker</em>- use the &#8216;Gate Low&#8217; track rates with
+ the Gate held low, and run the output through a full-wave rectifier (an ABS()
+ operator) to get an estimate of the level of a signal.</li>
+ <li>
+ <em>Sample and Hold</em>- run a narrow pulse wave into the gate, set the
+ &#8216;Gate High&#8217; rates to maximum, and the &#8216;Gate Low&#8217;
+ rates set to 0.</li>
+ <li>
+ <em>Track and Hold</em>- run a variable pulse wave into the gate, set the
+ &#8216;Gate High&#8217; rates to 0, and the &#8216;Gate Low&#8217; rates set
+ high. Varying the pulsewidth will vary the time the input is tracked, and
+ when it is held.</li>
+</ul>
+""" .
diff --git a/blop.lv2/triangle.ttl b/blop.lv2/triangle.ttl
new file mode 100644
index 0000000..f9c7ca0
--- /dev/null
+++ b/blop.lv2/triangle.ttl
@@ -0,0 +1,57 @@
+@prefix blop: <http://drobilla.net/plugins/blop/> .
+@prefix dct: <http://purl.org/dc/terms/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+
+blop:triangle
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
+ lv2:microVersion 0 ;
+ lv2:minorVersion 0 ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
+ lv2:port [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:index 0 ;
+ lv2:maximum 0.5 ;
+ lv2:minimum 0.000001 ;
+ lv2:default 440.0 ;
+ lv2:name "Frequency" ;
+ lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
+ lv2:sampleRate ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
+ lv2:default 0.5 ;
+ lv2:index 1 ;
+ lv2:maximum 1 ;
+ lv2:minimum 0 ;
+ lv2:name "Slope" ;
+ lv2:symbol "slope" ;
+ morph:supportsType lv2:CVPort
+ ] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
+ lv2:index 2 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
+ ] ;
+ dct:replaces <urn:ladspa:1649> ,
+ <urn:ladspa:1650> ,
+ <urn:ladspa:1651> ,
+ <urn:ladspa:1652> ;
+ doap:name "Variable Slope Triangle Oscillator" ;
+ lv2:documentation """
+<p>Generates an alias-free variable slope triangle wave at given input
+frequency and slope. The slope changes the wave shape from sawtooth to
+triangle.</p>
+""" .