aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AUTHORS9
-rw-r--r--README10
-rw-r--r--blip.lv2/amp.ttl50
-rw-r--r--blip.lv2/interpolator.ttl39
-rw-r--r--blip.lv2/sawtooth.ttl44
-rw-r--r--blip.lv2/sequencer_16.ttl192
-rw-r--r--blip.lv2/sequencer_32.ttl304
-rw-r--r--blip.lv2/sequencer_64.ttl528
-rw-r--r--blip.lv2/square.ttl44
-rw-r--r--blip.lv2/sum.ttl47
-rw-r--r--blip.lv2/sync_pulse.ttl60
-rw-r--r--blop.lv2/adsr.ttl (renamed from blip.lv2/adsr.ttl)72
-rw-r--r--blop.lv2/adsr_gt.ttl (renamed from blip.lv2/adsr_gt.ttl)79
-rw-r--r--blop.lv2/amp.ttl47
-rw-r--r--blop.lv2/branch.ttl (renamed from blip.lv2/branch.ttl)43
-rw-r--r--blop.lv2/dahdsr.ttl (renamed from blip.lv2/dahdsr.ttl)102
-rw-r--r--blop.lv2/difference.ttl (renamed from blip.lv2/difference.ttl)41
-rw-r--r--blop.lv2/fmod.ttl (renamed from blip.lv2/fmod.ttl)57
-rw-r--r--blop.lv2/interpolator.ttl31
-rw-r--r--blop.lv2/lp4pole.ttl (renamed from blip.lv2/lp4pole.ttl)55
-rw-r--r--blop.lv2/manifest.ttl.in (renamed from blip.lv2/manifest.ttl.in)77
-rw-r--r--blop.lv2/product.ttl (renamed from blip.lv2/product.ttl)45
-rw-r--r--blop.lv2/pulse.ttl (renamed from blip.lv2/pulse.ttl)51
-rw-r--r--blop.lv2/quantiser_100.ttl (renamed from blip.lv2/quantiser_100.ttl)862
-rw-r--r--blop.lv2/quantiser_20.ttl (renamed from blip.lv2/quantiser_20.ttl)290
-rw-r--r--blop.lv2/quantiser_50.ttl (renamed from blip.lv2/quantiser_50.ttl)494
-rw-r--r--blop.lv2/random.ttl (renamed from blip.lv2/random.ttl)49
-rw-r--r--blop.lv2/ratio.ttl (renamed from blip.lv2/ratio.ttl)41
-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.ttl (renamed from blip.lv2/sync_square.ttl)48
-rw-r--r--blop.lv2/tracker.ttl (renamed from blip.lv2/tracker.ttl)96
-rw-r--r--blop.lv2/triangle.ttl (renamed from blip.lv2/triangle.ttl)51
-rw-r--r--src/adsr.c8
-rw-r--r--src/adsr_gt.c8
-rw-r--r--src/amp.c74
-rw-r--r--src/branch.c2
-rw-r--r--src/dahdsr.c447
-rw-r--r--src/difference.c166
-rw-r--r--src/fmod.c162
-rw-r--r--src/include/common.h6
-rw-r--r--src/include/interpolate.h8
-rw-r--r--src/include/lp4pole_filter.h6
-rw-r--r--src/include/math_func.h2
-rw-r--r--src/include/uris.h51
-rw-r--r--src/include/wavedata.h14
-rw-r--r--src/include/wdatutil.h6
-rw-r--r--src/interpolator.c8
-rw-r--r--src/lp4pole.c96
-rw-r--r--src/product.c123
-rw-r--r--src/pulse.c205
-rw-r--r--src/quantiser.c66
-rw-r--r--src/random.c250
-rw-r--r--src/ratio.c148
-rw-r--r--src/sawtooth.c78
-rw-r--r--src/sequencer.c26
-rw-r--r--src/square.c76
-rw-r--r--src/sum.c119
-rw-r--r--src/sync_pulse.c116
-rw-r--r--src/sync_square.c108
-rw-r--r--src/tracker.c155
-rw-r--r--src/triangle.c231
-rw-r--r--src/wavedata.c2
-rw-r--r--src/wdatutil.c2
-rw-r--r--wscript44
70 files changed, 3553 insertions, 4291 deletions
diff --git a/AUTHORS b/AUTHORS
index 0a786aa..ab05648 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,8 +1,7 @@
-Blop LADSPA plugins:
+The original LADSPA plugins on which this port is based are by:
-Mike Rawes <mike_rawes@yahoo.co.uk>
+ Mike Rawes <mike_rawes@yahoo.co.uk>
+This LV2 port was done by:
-LV2 Port:
-
-David Robillard <d@drobilla.net> \ No newline at end of file
+ David Robillard <d@drobilla.net>
diff --git a/README b/README
index 1120dd7..f1c1146 100644
--- a/README
+++ b/README
@@ -1,3 +1,9 @@
-An LV2 port of the "blop" collection of LADSPA plugins.
+Blop.LV2
+========
-This port is based on blop-0.2.8.
+This is a port of the Blop LADSPA plugins by Mike Rawes to LV2.
+
+It is a mostly faithful port of blop-0.2.8 but eliminates plugin variants in
+favour of morphable Control/CV ports. This means there is only one plugin from
+the user point of view (a considerable improvement for the user experience),
+but the host can configure controls to be control or audio rate as appropriate. \ No newline at end of file
diff --git a/blip.lv2/amp.ttl b/blip.lv2/amp.ttl
deleted file mode 100644
index 7355a16..0000000
--- a/blip.lv2/amp.ttl
+++ /dev/null
@@ -1,50 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix units: <http://lv2plug.in/ns/extensions/units#> .
-@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-
-blip:amp
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- lv2:index 0 ;
- lv2:maximum 96 ;
- lv2:minimum -96 ;
- lv2:name "Gain" ;
- lv2:symbol "port0" ;
- units:unit units:db ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 1 ;
- lv2:name "Input" ;
- lv2:symbol "port1" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 2 ;
- lv2:name "Output" ;
- lv2:symbol "port2" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:1654> ,
- <urn:ladspa:1655> ;
- dc:rights "GPL" ;
- doap:name "Amplifier" ;
- lv2:documentation """
-<p>A simple monophonic amplifier.</p>
-""" ;
- a lv2:Plugin , lv2:AmplifierPlugin .
diff --git a/blip.lv2/interpolator.ttl b/blip.lv2/interpolator.ttl
deleted file mode 100644
index 6ea32a7..0000000
--- a/blip.lv2/interpolator.ttl
+++ /dev/null
@@ -1,39 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 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#> .
-
-blip:interpolator
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- lv2:index 0 ;
- lv2:name "Control Input" ;
- lv2:symbol "port0" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 1 ;
- lv2:name "Interpolated Output" ;
- lv2:symbol "port1" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:1660> ;
- dc:rights "GPL" ;
- doap:name "Control to Audio Interpolator" ;
- lv2:documentation """
-<p>Interpolates a control-rate (per-block) signal into a smooth audio
-(per-sample) signal.</p>
-""" ;
- a lv2:Plugin , lv2:UtilityPlugin .
diff --git a/blip.lv2/sawtooth.ttl b/blip.lv2/sawtooth.ttl
deleted file mode 100644
index 0d928f3..0000000
--- a/blip.lv2/sawtooth.ttl
+++ /dev/null
@@ -1,44 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 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#> .
-
-blip:sawtooth
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- 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 "port0" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 1 ;
- lv2:name "Output" ;
- lv2:symbol "port1" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:1642> ,
- <urn:ladspa:1643> ;
- dc:rights "GPL" ;
- doap:name "Sawtooth Oscillator" ;
- lv2:documentation """
-<p>Generates an alias-free sawtooth wave at given input frequency.</p>
-""" ;
- a lv2:Plugin , lv2:OscillatorPlugin .
diff --git a/blip.lv2/sequencer_16.ttl b/blip.lv2/sequencer_16.ttl
deleted file mode 100644
index 6f08ab2..0000000
--- a/blip.lv2/sequencer_16.ttl
+++ /dev/null
@@ -1,192 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 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#> .
-
-blip:sequencer_16
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- lv2:index 0 ;
- lv2:name "Gate (Open > 0)" ;
- lv2:symbol "port0" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 1 ;
- lv2:name "Step Trigger" ;
- lv2:symbol "port1" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 10 ;
- lv2:name "Value Step 5" ;
- lv2:symbol "port10" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 11 ;
- lv2:name "Value Step 6" ;
- lv2:symbol "port11" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 12 ;
- lv2:name "Value Step 7" ;
- lv2:symbol "port12" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 13 ;
- lv2:name "Value Step 8" ;
- lv2:symbol "port13" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 14 ;
- lv2:name "Value Step 9" ;
- lv2:symbol "port14" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 15 ;
- lv2:name "Value Step 10" ;
- lv2:symbol "port15" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 16 ;
- lv2:name "Value Step 11" ;
- lv2:symbol "port16" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 17 ;
- lv2:name "Value Step 12" ;
- lv2:symbol "port17" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 18 ;
- lv2:name "Value Step 13" ;
- lv2:symbol "port18" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 19 ;
- lv2:name "Value Step 14" ;
- lv2:symbol "port19" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:default 16 ;
- lv2:index 2 ;
- lv2:maximum 16 ;
- lv2:minimum 1 ;
- lv2:name "Loop Steps (1 - 16)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port2" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 20 ;
- lv2:name "Value Step 15" ;
- lv2:symbol "port20" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 21 ;
- lv2:name "Value Out" ;
- lv2:symbol "port21" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] , [
- lv2:default 0 ;
- lv2:index 3 ;
- lv2:maximum 1 ;
- lv2:minimum 0 ;
- lv2:name "Reset to Value on Gate Close?" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port3" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 4 ;
- lv2:name "Closed Gate Value" ;
- lv2:symbol "port4" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 5 ;
- lv2:name "Value Step 0" ;
- lv2:symbol "port5" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 6 ;
- lv2:name "Value Step 1" ;
- lv2:symbol "port6" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 7 ;
- lv2:name "Value Step 2" ;
- lv2:symbol "port7" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 8 ;
- lv2:name "Value Step 3" ;
- lv2:symbol "port8" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 9 ;
- lv2:name "Value Step 4" ;
- lv2:symbol "port9" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:1677> ;
- dc:rights "GPL" ;
- doap:name "Analogue Style 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>
-""" ;
- a lv2:Plugin .
diff --git a/blip.lv2/sequencer_32.ttl b/blip.lv2/sequencer_32.ttl
deleted file mode 100644
index 6797b36..0000000
--- a/blip.lv2/sequencer_32.ttl
+++ /dev/null
@@ -1,304 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 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#> .
-
-blip:sequencer_32
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- lv2:index 0 ;
- lv2:name "Gate (Open > 0)" ;
- lv2:symbol "port0" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 1 ;
- lv2:name "Step Trigger" ;
- lv2:symbol "port1" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 10 ;
- lv2:name "Value Step 5" ;
- lv2:symbol "port10" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 11 ;
- lv2:name "Value Step 6" ;
- lv2:symbol "port11" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 12 ;
- lv2:name "Value Step 7" ;
- lv2:symbol "port12" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 13 ;
- lv2:name "Value Step 8" ;
- lv2:symbol "port13" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 14 ;
- lv2:name "Value Step 9" ;
- lv2:symbol "port14" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 15 ;
- lv2:name "Value Step 10" ;
- lv2:symbol "port15" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 16 ;
- lv2:name "Value Step 11" ;
- lv2:symbol "port16" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 17 ;
- lv2:name "Value Step 12" ;
- lv2:symbol "port17" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 18 ;
- lv2:name "Value Step 13" ;
- lv2:symbol "port18" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 19 ;
- lv2:name "Value Step 14" ;
- lv2:symbol "port19" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:default 32 ;
- lv2:index 2 ;
- lv2:maximum 32 ;
- lv2:minimum 1 ;
- lv2:name "Loop Steps (1 - 32)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port2" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 20 ;
- lv2:name "Value Step 15" ;
- lv2:symbol "port20" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 21 ;
- lv2:name "Value Step 16" ;
- lv2:symbol "port21" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 22 ;
- lv2:name "Value Step 17" ;
- lv2:symbol "port22" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 23 ;
- lv2:name "Value Step 18" ;
- lv2:symbol "port23" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 24 ;
- lv2:name "Value Step 19" ;
- lv2:symbol "port24" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 25 ;
- lv2:name "Value Step 20" ;
- lv2:symbol "port25" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 26 ;
- lv2:name "Value Step 21" ;
- lv2:symbol "port26" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 27 ;
- lv2:name "Value Step 22" ;
- lv2:symbol "port27" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 28 ;
- lv2:name "Value Step 23" ;
- lv2:symbol "port28" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 29 ;
- lv2:name "Value Step 24" ;
- lv2:symbol "port29" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:default 0 ;
- lv2:index 3 ;
- lv2:maximum 1 ;
- lv2:minimum 0 ;
- lv2:name "Reset to Value on Gate Close?" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port3" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 30 ;
- lv2:name "Value Step 25" ;
- lv2:symbol "port30" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 31 ;
- lv2:name "Value Step 26" ;
- lv2:symbol "port31" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 32 ;
- lv2:name "Value Step 27" ;
- lv2:symbol "port32" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 33 ;
- lv2:name "Value Step 28" ;
- lv2:symbol "port33" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 34 ;
- lv2:name "Value Step 29" ;
- lv2:symbol "port34" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 35 ;
- lv2:name "Value Step 30" ;
- lv2:symbol "port35" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 36 ;
- lv2:name "Value Step 31" ;
- lv2:symbol "port36" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 37 ;
- lv2:name "Value Out" ;
- lv2:symbol "port37" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] , [
- lv2:index 4 ;
- lv2:name "Closed Gate Value" ;
- lv2:symbol "port4" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 5 ;
- lv2:name "Value Step 0" ;
- lv2:symbol "port5" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 6 ;
- lv2:name "Value Step 1" ;
- lv2:symbol "port6" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 7 ;
- lv2:name "Value Step 2" ;
- lv2:symbol "port7" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 8 ;
- lv2:name "Value Step 3" ;
- lv2:symbol "port8" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 9 ;
- lv2:name "Value Step 4" ;
- lv2:symbol "port9" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:1676> ;
- dc:rights "GPL" ;
- doap:name "Analogue Style 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>
-""" ;
- a lv2:Plugin .
diff --git a/blip.lv2/sequencer_64.ttl b/blip.lv2/sequencer_64.ttl
deleted file mode 100644
index c38b82e..0000000
--- a/blip.lv2/sequencer_64.ttl
+++ /dev/null
@@ -1,528 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 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#> .
-
-blip:sequencer_64
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- lv2:index 0 ;
- lv2:name "Gate (Open > 0)" ;
- lv2:symbol "port0" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 1 ;
- lv2:name "Step Trigger" ;
- lv2:symbol "port1" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 10 ;
- lv2:name "Value Step 5" ;
- lv2:symbol "port10" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 11 ;
- lv2:name "Value Step 6" ;
- lv2:symbol "port11" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 12 ;
- lv2:name "Value Step 7" ;
- lv2:symbol "port12" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 13 ;
- lv2:name "Value Step 8" ;
- lv2:symbol "port13" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 14 ;
- lv2:name "Value Step 9" ;
- lv2:symbol "port14" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 15 ;
- lv2:name "Value Step 10" ;
- lv2:symbol "port15" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 16 ;
- lv2:name "Value Step 11" ;
- lv2:symbol "port16" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 17 ;
- lv2:name "Value Step 12" ;
- lv2:symbol "port17" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 18 ;
- lv2:name "Value Step 13" ;
- lv2:symbol "port18" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 19 ;
- lv2:name "Value Step 14" ;
- lv2:symbol "port19" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:default 64 ;
- lv2:index 2 ;
- lv2:maximum 64 ;
- lv2:minimum 1 ;
- lv2:name "Loop Steps (1 - 64)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port2" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 20 ;
- lv2:name "Value Step 15" ;
- lv2:symbol "port20" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 21 ;
- lv2:name "Value Step 16" ;
- lv2:symbol "port21" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 22 ;
- lv2:name "Value Step 17" ;
- lv2:symbol "port22" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 23 ;
- lv2:name "Value Step 18" ;
- lv2:symbol "port23" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 24 ;
- lv2:name "Value Step 19" ;
- lv2:symbol "port24" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 25 ;
- lv2:name "Value Step 20" ;
- lv2:symbol "port25" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 26 ;
- lv2:name "Value Step 21" ;
- lv2:symbol "port26" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 27 ;
- lv2:name "Value Step 22" ;
- lv2:symbol "port27" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 28 ;
- lv2:name "Value Step 23" ;
- lv2:symbol "port28" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 29 ;
- lv2:name "Value Step 24" ;
- lv2:symbol "port29" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:default 0 ;
- lv2:index 3 ;
- lv2:maximum 1 ;
- lv2:minimum 0 ;
- lv2:name "Reset to Value on Gate Close?" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port3" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 30 ;
- lv2:name "Value Step 25" ;
- lv2:symbol "port30" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 31 ;
- lv2:name "Value Step 26" ;
- lv2:symbol "port31" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 32 ;
- lv2:name "Value Step 27" ;
- lv2:symbol "port32" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 33 ;
- lv2:name "Value Step 28" ;
- lv2:symbol "port33" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 34 ;
- lv2:name "Value Step 29" ;
- lv2:symbol "port34" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 35 ;
- lv2:name "Value Step 30" ;
- lv2:symbol "port35" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 36 ;
- lv2:name "Value Step 31" ;
- lv2:symbol "port36" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 37 ;
- lv2:name "Value Step 32" ;
- lv2:symbol "port37" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 38 ;
- lv2:name "Value Step 33" ;
- lv2:symbol "port38" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 39 ;
- lv2:name "Value Step 34" ;
- lv2:symbol "port39" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 4 ;
- lv2:name "Closed Gate Value" ;
- lv2:symbol "port4" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 40 ;
- lv2:name "Value Step 35" ;
- lv2:symbol "port40" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 41 ;
- lv2:name "Value Step 36" ;
- lv2:symbol "port41" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 42 ;
- lv2:name "Value Step 37" ;
- lv2:symbol "port42" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 43 ;
- lv2:name "Value Step 38" ;
- lv2:symbol "port43" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 44 ;
- lv2:name "Value Step 39" ;
- lv2:symbol "port44" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 45 ;
- lv2:name "Value Step 40" ;
- lv2:symbol "port45" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 46 ;
- lv2:name "Value Step 41" ;
- lv2:symbol "port46" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 47 ;
- lv2:name "Value Step 42" ;
- lv2:symbol "port47" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 48 ;
- lv2:name "Value Step 43" ;
- lv2:symbol "port48" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 49 ;
- lv2:name "Value Step 44" ;
- lv2:symbol "port49" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 5 ;
- lv2:name "Value Step 0" ;
- lv2:symbol "port5" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 50 ;
- lv2:name "Value Step 45" ;
- lv2:symbol "port50" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 51 ;
- lv2:name "Value Step 46" ;
- lv2:symbol "port51" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 52 ;
- lv2:name "Value Step 47" ;
- lv2:symbol "port52" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 53 ;
- lv2:name "Value Step 48" ;
- lv2:symbol "port53" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 54 ;
- lv2:name "Value Step 49" ;
- lv2:symbol "port54" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 55 ;
- lv2:name "Value Step 50" ;
- lv2:symbol "port55" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 56 ;
- lv2:name "Value Step 51" ;
- lv2:symbol "port56" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 57 ;
- lv2:name "Value Step 52" ;
- lv2:symbol "port57" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 58 ;
- lv2:name "Value Step 53" ;
- lv2:symbol "port58" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 59 ;
- lv2:name "Value Step 54" ;
- lv2:symbol "port59" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 6 ;
- lv2:name "Value Step 1" ;
- lv2:symbol "port6" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 60 ;
- lv2:name "Value Step 55" ;
- lv2:symbol "port60" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 61 ;
- lv2:name "Value Step 56" ;
- lv2:symbol "port61" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 62 ;
- lv2:name "Value Step 57" ;
- lv2:symbol "port62" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 63 ;
- lv2:name "Value Step 58" ;
- lv2:symbol "port63" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 64 ;
- lv2:name "Value Step 59" ;
- lv2:symbol "port64" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 65 ;
- lv2:name "Value Step 60" ;
- lv2:symbol "port65" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 66 ;
- lv2:name "Value Step 61" ;
- lv2:symbol "port66" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 67 ;
- lv2:name "Value Step 62" ;
- lv2:symbol "port67" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 68 ;
- lv2:name "Value Step 63" ;
- lv2:symbol "port68" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 69 ;
- lv2:name "Value Out" ;
- lv2:symbol "port69" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] , [
- lv2:index 7 ;
- lv2:name "Value Step 2" ;
- lv2:symbol "port7" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 8 ;
- lv2:name "Value Step 3" ;
- lv2:symbol "port8" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 9 ;
- lv2:name "Value Step 4" ;
- lv2:symbol "port9" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:1675> ;
- dc:rights "GPL" ;
- doap:name "Analogue Style 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>
-""" ;
- a lv2:Plugin .
diff --git a/blip.lv2/square.ttl b/blip.lv2/square.ttl
deleted file mode 100644
index 0bd81d4..0000000
--- a/blip.lv2/square.ttl
+++ /dev/null
@@ -1,44 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 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#> .
-
-blip:square
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- 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 "port0" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 1 ;
- lv2:name "Output" ;
- lv2:symbol "port1" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:1643> ,
- <urn:ladspa:1644> ;
- dc:rights "GPL" ;
- doap:name "Square Oscillator" ;
- lv2:documentation """
-<p>Generates an alias-free square wave at given input frequency.</p>
-""" ;
- a lv2:Plugin , lv2:OscillatorPlugin .
diff --git a/blip.lv2/sum.ttl b/blip.lv2/sum.ttl
deleted file mode 100644
index 56c00ea..0000000
--- a/blip.lv2/sum.ttl
+++ /dev/null
@@ -1,47 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 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#> .
-
-blip:sum
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- lv2:index 0 ;
- lv2:name "Input 1" ;
- lv2:symbol "in1" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 1 ;
- lv2:name "Input 2" ;
- lv2:symbol "in2" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 2 ;
- lv2:name "Sum" ;
- lv2:symbol "sum" ;
- a lv2:CVPort ,
- lv2:OutputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:1665> ,
- <urn:ladspa:1666> ,
- <urn:ladspa:1667> ;
- dc:rights "GPL" ;
- doap:name "Signal Sum" ;
- lv2:documentation """
-<p>Add two signals.</p>
-""" ;
- a lv2:Plugin , lv2:UtilityPlugin .
diff --git a/blip.lv2/sync_pulse.ttl b/blip.lv2/sync_pulse.ttl
deleted file mode 100644
index 9814a65..0000000
--- a/blip.lv2/sync_pulse.ttl
+++ /dev/null
@@ -1,60 +0,0 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
-@prefix dct: <http://purl.org/dc/terms/> .
-@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 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#> .
-
-blip:sync_pulse
- lv2:microVersion 0 ;
- lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- lv2:default 16 ;
- lv2:index 0 ;
- lv2:maximum 64 ;
- lv2:minimum 0 ;
- lv2:name "Frequency" ;
- lv2:symbol "port0" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:default 0.5 ;
- lv2:index 1 ;
- lv2:maximum 1 ;
- lv2:minimum 0 ;
- lv2:name "Pulse Width" ;
- lv2:symbol "port1" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 2 ;
- lv2:name "Gate" ;
- lv2:symbol "port2" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 3 ;
- lv2:name "Output" ;
- lv2:symbol "port3" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
- dct:replaces <urn:ladspa:2023> ,
- <urn:ladspa:2024> ;
- dc:rights "GPL" ;
- doap:name "Clock Pulse Oscillator with Gate" ;
- lv2:documentation """
-<p>Same as the <a href="http://drobilla.net/plugins/blip/sync_square">Clock
-Oscillator</a>, but with pulse-width modulation.</p>
-""" ;
- a lv2:Plugin , lv2:OscillatorPlugin .
diff --git a/blip.lv2/adsr.ttl b/blop.lv2/adsr.ttl
index 49fcd05..8fb8a1d 100644
--- a/blip.lv2/adsr.ttl
+++ b/blop.lv2/adsr.ttl
@@ -1,84 +1,71 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
-@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-blip:adsr
+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 "port0" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "drive"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 1 ;
lv2:name "Trigger Threshold" ;
- lv2:symbol "port1" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "thresh"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:default 0 ;
lv2:index 2 ;
lv2:minimum 0 ;
lv2:name "Attack Time" ;
- lv2:symbol "port2" ;
- units:unit units:s ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ 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 "port3" ;
- units:unit units:s ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ 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 "port4" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "sustain"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:default 0 ;
lv2:index 5 ;
lv2:minimum 0 ;
lv2:name "Release Time" ;
- lv2:symbol "port5" ;
- units:unit units:s ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "release" ;
+ units:unit units:s
] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
lv2:index 6 ;
lv2:name "Envelope Out" ;
- lv2:symbol "port6" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1653> ;
- dc:rights "GPL" ;
doap:name "ADSR Envelope" ;
lv2:documentation """
<p>Generates an ADSR (Attack, Decay, Sustain and Release) envelope.</p>
@@ -90,5 +77,4 @@ 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>
-""" ;
- a lv2:Plugin .
+""" .
diff --git a/blip.lv2/adsr_gt.ttl b/blop.lv2/adsr_gt.ttl
index 8cf025c..4daae58 100644
--- a/blip.lv2/adsr_gt.ttl
+++ b/blop.lv2/adsr_gt.ttl
@@ -1,92 +1,82 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
-@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-blip:adsr_gt
+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:symbol "port0" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
lv2:index 1 ;
lv2:name "Trigger" ;
- lv2:symbol "port1" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ 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 "port2" ;
- units:unit units:s ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ 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 "port3" ;
- units:unit units:s ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ 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 "port4" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "sustain"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:default 0 ;
lv2:index 5 ;
lv2:minimum 0 ;
lv2:name "Release Time" ;
- lv2:symbol "port5" ;
- units:unit units:s ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "release" ;
+ units:unit units:s
] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
lv2:index 6 ;
lv2:name "Envelope Out" ;
- lv2:symbol "port6" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1680> ;
- dc:rights "GPL" ;
doap:name "ADSR Envelope with Gate and Trigger" ;
lv2:documentation """
<p>Generates an ADSR (Attack, Decay, Sustain and Release)
-envelope.</p>
+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>
+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
@@ -96,5 +86,4 @@ 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>
-""" ;
- a lv2:Plugin .
+""" .
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/blip.lv2/branch.ttl b/blop.lv2/branch.ttl
index dfc9a1b..75e2ccc 100644
--- a/blip.lv2/branch.ttl
+++ b/blop.lv2/branch.ttl
@@ -1,48 +1,39 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
-blip:branch
+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 "port0" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "in"
] , [
- lv2:index 1 ;
- lv2:name "First Output" ;
- lv2:symbol "port1" ;
a lv2:ControlPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:OutputPort ;
+ lv2:index 1 ;
+ lv2:name "Output 1" ;
+ lv2:symbol "out1"
] , [
- lv2:index 2 ;
- lv2:name "Second Output" ;
- lv2:symbol "port2" ;
a lv2:ControlPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:OutputPort ;
+ lv2:index 2 ;
+ lv2:name "Output 2" ;
+ lv2:symbol "out2"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1673> ,
<urn:ladspa:1674> ;
- dc:rights "GPL" ;
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>
-""" ;
- a lv2:Plugin , lv2:UtilityPlugin .
+""" .
diff --git a/blip.lv2/dahdsr.ttl b/blop.lv2/dahdsr.ttl
index 0f05cfb..055af15 100644
--- a/blip.lv2/dahdsr.ttl
+++ b/blop.lv2/dahdsr.ttl
@@ -1,108 +1,111 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
-@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-blip:dahdsr
+blop:dahdsr
+ a lv2:Plugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
lv2:index 0 ;
lv2:name "Gate" ;
- lv2:symbol "port0" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
lv2:index 1 ;
lv2:name "Trigger" ;
- lv2:symbol "port1" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ 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 "port2" ;
- units:unit units:s ;
+ lv2:symbol "delay" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 0 ;
lv2:index 3 ;
lv2:minimum 0 ;
lv2:name "Attack Time" ;
- lv2:symbol "port3" ;
- units:unit units:s ;
+ lv2:symbol "attack" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 0 ;
lv2:index 4 ;
lv2:minimum 0 ;
lv2:name "Hold Time" ;
- lv2:symbol "port4" ;
- units:unit units:s ;
+ lv2:symbol "hold" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 0 ;
lv2:index 5 ;
lv2:minimum 0 ;
lv2:name "Decay Time" ;
- lv2:symbol "port5" ;
- units:unit units:s ;
+ lv2:symbol "decay" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:s
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 1 ;
lv2:index 6 ;
lv2:maximum 1 ;
lv2:minimum 0 ;
lv2:name "Sustain Level" ;
- lv2:symbol "port6" ;
+ lv2:symbol "sustain" ;
+ morph:supportsType lv2:CVPort
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 0 ;
lv2:index 7 ;
lv2:minimum 0 ;
lv2:name "Release Time" ;
- lv2:symbol "port7" ;
- units:unit units:s ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ 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 "port8" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:2021> ,
<urn:ladspa:2022> ,
<urn:ladspa:2038> ;
- dc:rights "GPL" ;
doap:name "DAHDSR Envelope with Gate and Trigger" ;
- lv2:documentation """
+ lv2:documentation """
<p>Generates a DAHDSR (Delay, Attack, Hold, Decay, Sustain, Release)
envelope.</p>
@@ -118,5 +121,4 @@ 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>
-""" ;
- a lv2:Plugin .
+""" .
diff --git a/blip.lv2/difference.ttl b/blop.lv2/difference.ttl
index f277688..c817cd8 100644
--- a/blip.lv2/difference.ttl
+++ b/blop.lv2/difference.ttl
@@ -1,48 +1,47 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:difference
+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" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
lv2:index 1 ;
lv2:name "Subtrahend" ;
lv2:symbol "subtrahend" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ,
+ morph:AutoMorphPort ;
lv2:index 2 ;
lv2:name "Difference" ;
lv2:symbol "difference" ;
- a lv2:CVPort ,
- lv2:OutputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:2030> ,
<urn:ladspa:2031> ,
<urn:ladspa:2032> ,
<urn:ladspa:2033> ;
- dc:rights "GPL" ;
doap:name "Signal Difference" ;
lv2:documentation """
<p>Subtract two signals.</p>
-""" ;
- a lv2:Plugin , lv2:UtilityPlugin .
+""" .
diff --git a/blip.lv2/fmod.ttl b/blop.lv2/fmod.ttl
index 3d59713..6098be5 100644
--- a/blip.lv2/fmod.ttl
+++ b/blop.lv2/fmod.ttl
@@ -1,57 +1,58 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
-@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:fmod
+blop:fmod
+ a lv2:Plugin ,
+ lv2:SpectralPlugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
+ 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 "2.08333e-05"^^xsd:double ;
+ lv2:minimum 0.00001 ;
lv2:name "Frequency" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port0" ;
- units:unit units:hz ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:index 1 ;
lv2:name "Modulation" ;
- lv2:symbol "port1" ;
- units:unit units:oct ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "mod" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:oct
] , [
- lv2:index 2 ;
- lv2:name "Modulated Frequency" ;
- lv2:symbol "port2" ;
- units:unit units:hz ;
a lv2:ControlPort ,
lv2:OutputPort ,
- lv2:Port
+ morph:AutoMorphPort ;
+ lv2:index 2 ;
+ lv2:name "Modulated Frequency" ;
+ lv2:symbol "out" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1656> ,
<urn:ladspa:1657> ,
<urn:ladspa:1658> ,
<urn:ladspa:1659> ;
- dc:rights "GPL" ;
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>
-""" ;
- a lv2:Plugin , lv2:SpectralPlugin .
+""" .
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/blip.lv2/lp4pole.ttl b/blop.lv2/lp4pole.ttl
index f12e9bd..3731459 100644
--- a/blip.lv2/lp4pole.ttl
+++ b/blop.lv2/lp4pole.ttl
@@ -1,64 +1,61 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:lp4pole
+blop:lp4pole
+ a lv2:Plugin ,
+ lv2:LowpassPlugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
+ 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 "2.08333e-05"^^xsd:double ;
+ lv2:minimum 0.00001 ;
lv2:name "Cutoff Frequency" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port0" ;
+ lv2:symbol "cutoff" ;
+ morph:supportsType lv2:CVPort
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 0 ;
lv2:index 1 ;
lv2:maximum 4 ;
lv2:minimum 0 ;
lv2:name "Resonance" ;
- lv2:symbol "port1" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "resonance" ;
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:AudioPort ,
+ lv2:InputPort ;
lv2:index 2 ;
lv2:name "Input" ;
- lv2:symbol "port2" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "in"
] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
lv2:index 3 ;
lv2:name "Output" ;
- lv2:symbol "port3" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1671> ,
<urn:ladspa:1672> ;
- dc:rights "GPL" ;
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>
-""" ;
- a lv2:Plugin , lv2:LowpassPlugin .
+""" .
diff --git a/blip.lv2/manifest.ttl.in b/blop.lv2/manifest.ttl.in
index e1ceab7..4942342 100644
--- a/blip.lv2/manifest.ttl.in
+++ b/blop.lv2/manifest.ttl.in
@@ -1,138 +1,155 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
+@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 owl: <http://www.w3.org/2002/07/owl#> .
-@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#> .
-blip:adsr
+<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@> .
-blip:adsr_gt
+blop:adsr_gt
a lv2:Plugin ;
rdfs:seeAlso <adsr_gt.ttl> ;
lv2:binary <adsr_gt@LIB_EXT@> .
-blip:amp
+blop:amp
a lv2:Plugin ;
rdfs:seeAlso <amp.ttl> ;
lv2:binary <amp@LIB_EXT@> .
-blip:branch
+blop:branch
a lv2:Plugin ;
rdfs:seeAlso <branch.ttl> ;
lv2:binary <branch@LIB_EXT@> .
-blip:dahdsr
+blop:dahdsr
a lv2:Plugin ;
rdfs:seeAlso <dahdsr.ttl> ;
lv2:binary <dahdsr@LIB_EXT@> .
-blip:difference
+blop:difference
a lv2:Plugin ;
rdfs:seeAlso <difference.ttl> ;
lv2:binary <difference@LIB_EXT@> .
-blip:fmod
+blop:fmod
a lv2:Plugin ;
rdfs:seeAlso <fmod.ttl> ;
lv2:binary <fmod@LIB_EXT@> .
-blip:interpolator
+blop:interpolator
a lv2:Plugin ;
rdfs:seeAlso <interpolator.ttl> ;
lv2:binary <interpolator@LIB_EXT@> .
-blip:lp4pole
+blop:lp4pole
a lv2:Plugin ;
rdfs:seeAlso <lp4pole.ttl> ;
lv2:binary <lp4pole@LIB_EXT@> .
-blip:product
+blop:product
a lv2:Plugin ;
rdfs:seeAlso <product.ttl> ;
lv2:binary <product@LIB_EXT@> .
-blip:pulse
+blop:pulse
a lv2:Plugin ;
rdfs:seeAlso <pulse.ttl> ;
lv2:binary <pulse@LIB_EXT@> .
-blip:quantiser_20
+blop:quantiser_20
a lv2:Plugin ;
rdfs:seeAlso <quantiser_20.ttl> ;
lv2:binary <quantiser_20@LIB_EXT@> .
-blip:quantiser_50
+blop:quantiser_50
a lv2:Plugin ;
rdfs:seeAlso <quantiser_50.ttl> ;
lv2:binary <quantiser_50@LIB_EXT@> .
-blip:quantiser_100
+blop:quantiser_100
a lv2:Plugin ;
rdfs:seeAlso <quantiser_100.ttl> ;
lv2:binary <quantiser_100@LIB_EXT@> .
-blip:random
+blop:random
a lv2:Plugin ;
rdfs:seeAlso <random.ttl> ;
lv2:binary <random@LIB_EXT@> .
-blip:ratio
+blop:ratio
a lv2:Plugin ;
rdfs:seeAlso <ratio.ttl> ;
lv2:binary <ratio@LIB_EXT@> .
-blip:sawtooth
+blop:sawtooth
a lv2:Plugin ;
rdfs:seeAlso <sawtooth.ttl> ;
lv2:binary <sawtooth@LIB_EXT@> .
-blip:sequencer_16
+blop:sequencer_16
a lv2:Plugin ;
rdfs:seeAlso <sequencer_16.ttl> ;
lv2:binary <sequencer_16@LIB_EXT@> .
-blip:sequencer_32
+blop:sequencer_32
a lv2:Plugin ;
rdfs:seeAlso <sequencer_32.ttl> ;
lv2:binary <sequencer_32@LIB_EXT@> .
-blip:sequencer_64
+blop:sequencer_64
a lv2:Plugin ;
rdfs:seeAlso <sequencer_64.ttl> ;
lv2:binary <sequencer_64@LIB_EXT@> .
-blip:square
+blop:square
a lv2:Plugin ;
rdfs:seeAlso <square.ttl> ;
lv2:binary <square@LIB_EXT@> .
-blip:sum
+blop:sum
a lv2:Plugin ;
rdfs:seeAlso <sum.ttl> ;
lv2:binary <sum@LIB_EXT@> .
-blip:sync_pulse
+blop:sync_pulse
a lv2:Plugin ;
rdfs:seeAlso <sync_pulse.ttl> ;
lv2:binary <sync_pulse@LIB_EXT@> .
-blip:sync_square
+blop:sync_square
a lv2:Plugin ;
rdfs:seeAlso <sync_square.ttl> ;
lv2:binary <sync_square@LIB_EXT@> .
-blip:tracker
+blop:tracker
a lv2:Plugin ;
rdfs:seeAlso <tracker.ttl> ;
lv2:binary <tracker@LIB_EXT@> .
-blip:triangle
+blop:triangle
a lv2:Plugin ;
rdfs:seeAlso <triangle.ttl> ;
lv2:binary <triangle@LIB_EXT@> .
diff --git a/blip.lv2/product.ttl b/blop.lv2/product.ttl
index efe1eab..fabe6a0 100644
--- a/blip.lv2/product.ttl
+++ b/blop.lv2/product.ttl
@@ -1,47 +1,48 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:product
+blop:product
+ a lv2:Plugin ,
+ lv2:UtilityPlugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
+ 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" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
lv2:index 1 ;
lv2:name "Multiplier" ;
lv2:symbol "multiplier" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ,
+ morph:AutoMorphPort ;
lv2:index 2 ;
lv2:name "Product" ;
lv2:symbol "product" ;
- a lv2:CVPort ,
- lv2:OutputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1668> ,
<urn:ladspa:1669> ,
<urn:ladspa:1670> ;
- dc:rights "GPL" ;
doap:name "Signal Product" ;
lv2:documentation """
<p>Multiply two signals.</p>
-""" ;
- a lv2:Plugin , lv2:UtilityPlugin .
+""" .
diff --git a/blip.lv2/pulse.ttl b/blop.lv2/pulse.ttl
index 9eb3af1..f9c5ee7 100644
--- a/blip.lv2/pulse.ttl
+++ b/blop.lv2/pulse.ttl
@@ -1,57 +1,56 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:pulse
+blop:pulse
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
+ 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:default 440.0 ;
lv2:name "Frequency" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port0" ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 0.5 ;
lv2:index 1 ;
lv2:maximum 1 ;
lv2:minimum 0 ;
lv2:name "Pulse Width" ;
- lv2:symbol "port1" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "pwidth" ;
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
lv2:index 2 ;
lv2:name "Output" ;
- lv2:symbol "port2" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1645> ,
<urn:ladspa:1646> ,
<urn:ladspa:1647> ,
<urn:ladspa:1648> ;
- dc:rights "GPL" ;
doap:name "Variable Width Pulse Oscillator" ;
- lv2:documentation """
+ lv2:documentation """
<p>Generates an alias-free pulse wave at given input frequency and pulse width
(duty).</p>
-""" ;
- a lv2:Plugin , lv2:OscillatorPlugin .
+""" .
diff --git a/blip.lv2/quantiser_100.ttl b/blop.lv2/quantiser_100.ttl
index b44d21d..aca7cbb 100644
--- a/blip.lv2/quantiser_100.ttl
+++ b/blop.lv2/quantiser_100.ttl
@@ -1,788 +1,687 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
-blip:quantiser_100
+blop:quantiser_100
+ a lv2:Plugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
lv2:optionalFeature lv2:hardRTCapable ;
lv2:port [
- lv2:index 0 ;
- lv2:name "Quantise Range Minimum" ;
- lv2:symbol "port0" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Minimum" ;
+ lv2:symbol "min"
] , [
- lv2:index 1 ;
- lv2:name "Quantise Range Maximum" ;
- lv2:symbol "port1" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:index 1 ;
+ lv2:name "Maximum" ;
+ lv2:symbol "max"
] , [
- lv2:index 10 ;
- lv2:name "Value 5" ;
- lv2:symbol "port10" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:default 0 ;
+ lv2:index 2 ;
+ lv2:minimum 0 ;
+ lv2:name "Match Range" ;
+ lv2:symbol "range"
] , [
- lv2:index 100 ;
- lv2:name "Value 95" ;
- lv2:symbol "port100" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ 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"
] , [
- lv2:index 101 ;
- lv2:name "Value 96" ;
- lv2:symbol "port101" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:index 5 ;
+ lv2:name "Value 0" ;
+ lv2:symbol "val00"
] , [
- lv2:index 102 ;
- lv2:name "Value 97" ;
- lv2:symbol "port102" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:index 6 ;
+ lv2:name "Value 1" ;
+ lv2:symbol "val01"
] , [
- lv2:index 103 ;
- lv2:name "Value 98" ;
- lv2:symbol "port103" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:index 7 ;
+ lv2:name "Value 2" ;
+ lv2:symbol "val02"
] , [
- lv2:index 104 ;
- lv2:name "Value 99" ;
- lv2:symbol "port104" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 105 ;
- lv2:name "Input" ;
- lv2:symbol "port105" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:index 8 ;
+ lv2:name "Value 3" ;
+ lv2:symbol "val03"
] , [
- lv2:index 106 ;
- lv2:name "Quantised Output" ;
- lv2:symbol "port106" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ a lv2:ControlPort ,
+ lv2:InputPort ;
+ lv2:index 9 ;
+ lv2:name "Value 4" ;
+ lv2:symbol "val04"
] , [
- lv2:index 107 ;
- lv2:name "Output Changed" ;
- lv2:symbol "port107" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ 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 "port11" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val06"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 12 ;
lv2:name "Value 7" ;
- lv2:symbol "port12" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val07"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 13 ;
lv2:name "Value 8" ;
- lv2:symbol "port13" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val08"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 14 ;
lv2:name "Value 9" ;
- lv2:symbol "port14" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val09"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 15 ;
lv2:name "Value 10" ;
- lv2:symbol "port15" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val10"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 16 ;
lv2:name "Value 11" ;
- lv2:symbol "port16" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val11"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 17 ;
lv2:name "Value 12" ;
- lv2:symbol "port17" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val12"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 18 ;
lv2:name "Value 13" ;
- lv2:symbol "port18" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val13"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 19 ;
lv2:name "Value 14" ;
- lv2:symbol "port19" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val14"
] , [
- lv2:default 0 ;
- lv2:index 2 ;
- lv2:minimum 0 ;
- lv2:name "Match Range" ;
- lv2:symbol "port2" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 20 ;
lv2:name "Value 15" ;
- lv2:symbol "port20" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val15"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 21 ;
lv2:name "Value 16" ;
- lv2:symbol "port21" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val16"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 22 ;
lv2:name "Value 17" ;
- lv2:symbol "port22" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val17"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 23 ;
lv2:name "Value 18" ;
- lv2:symbol "port23" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val18"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 24 ;
lv2:name "Value 19" ;
- lv2:symbol "port24" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val19"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 25 ;
lv2:name "Value 20" ;
- lv2:symbol "port25" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val20"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 26 ;
lv2:name "Value 21" ;
- lv2:symbol "port26" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val21"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 27 ;
lv2:name "Value 22" ;
- lv2:symbol "port27" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val22"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 28 ;
lv2:name "Value 23" ;
- lv2:symbol "port28" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val23"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 29 ;
lv2:name "Value 24" ;
- lv2:symbol "port29" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val24"
] , [
- lv2:default 0 ;
- lv2:index 3 ;
- lv2:maximum 2 ;
- lv2:minimum 0 ;
- lv2:name "Mode (0 = Extend, 1 = Wrap, 2 = Clip)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port3" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 30 ;
lv2:name "Value 25" ;
- lv2:symbol "port30" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val25"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 31 ;
lv2:name "Value 26" ;
- lv2:symbol "port31" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val26"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 32 ;
lv2:name "Value 27" ;
- lv2:symbol "port32" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val27"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 33 ;
lv2:name "Value 28" ;
- lv2:symbol "port33" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val28"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 34 ;
lv2:name "Value 29" ;
- lv2:symbol "port34" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val29"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 35 ;
lv2:name "Value 30" ;
- lv2:symbol "port35" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val30"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 36 ;
lv2:name "Value 31" ;
- lv2:symbol "port36" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val31"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 37 ;
lv2:name "Value 32" ;
- lv2:symbol "port37" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val32"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 38 ;
lv2:name "Value 33" ;
- lv2:symbol "port38" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val33"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 39 ;
lv2:name "Value 34" ;
- lv2:symbol "port39" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val34"
] , [
- lv2:default 100 ;
- lv2:index 4 ;
- lv2:maximum 100 ;
- lv2:minimum 1 ;
- lv2:name "Steps (1 - 100)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port4" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 40 ;
lv2:name "Value 35" ;
- lv2:symbol "port40" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val35"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 41 ;
lv2:name "Value 36" ;
- lv2:symbol "port41" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val36"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 42 ;
lv2:name "Value 37" ;
- lv2:symbol "port42" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val37"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 43 ;
lv2:name "Value 38" ;
- lv2:symbol "port43" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val38"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 44 ;
lv2:name "Value 39" ;
- lv2:symbol "port44" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val39"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 45 ;
lv2:name "Value 40" ;
- lv2:symbol "port45" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val40"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 46 ;
lv2:name "Value 41" ;
- lv2:symbol "port46" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val41"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 47 ;
lv2:name "Value 42" ;
- lv2:symbol "port47" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val42"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 48 ;
lv2:name "Value 43" ;
- lv2:symbol "port48" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val43"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 49 ;
lv2:name "Value 44" ;
- lv2:symbol "port49" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val44"
] , [
- lv2:index 5 ;
- lv2:name "Value 0" ;
- lv2:symbol "port5" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 50 ;
lv2:name "Value 45" ;
- lv2:symbol "port50" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val45"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 51 ;
lv2:name "Value 46" ;
- lv2:symbol "port51" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val46"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 52 ;
lv2:name "Value 47" ;
- lv2:symbol "port52" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val47"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 53 ;
lv2:name "Value 48" ;
- lv2:symbol "port53" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val48"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 54 ;
lv2:name "Value 49" ;
- lv2:symbol "port54" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val49"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 55 ;
lv2:name "Value 50" ;
- lv2:symbol "port55" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val50"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 56 ;
lv2:name "Value 51" ;
- lv2:symbol "port56" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val51"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 57 ;
lv2:name "Value 52" ;
- lv2:symbol "port57" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val52"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 58 ;
lv2:name "Value 53" ;
- lv2:symbol "port58" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val53"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 59 ;
lv2:name "Value 54" ;
- lv2:symbol "port59" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val54"
] , [
- lv2:index 6 ;
- lv2:name "Value 1" ;
- lv2:symbol "port6" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 60 ;
lv2:name "Value 55" ;
- lv2:symbol "port60" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val55"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 61 ;
lv2:name "Value 56" ;
- lv2:symbol "port61" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val56"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 62 ;
lv2:name "Value 57" ;
- lv2:symbol "port62" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val57"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 63 ;
lv2:name "Value 58" ;
- lv2:symbol "port63" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val58"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 64 ;
lv2:name "Value 59" ;
- lv2:symbol "port64" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val59"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 65 ;
lv2:name "Value 60" ;
- lv2:symbol "port65" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val60"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 66 ;
lv2:name "Value 61" ;
- lv2:symbol "port66" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val61"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 67 ;
lv2:name "Value 62" ;
- lv2:symbol "port67" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val62"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 68 ;
lv2:name "Value 63" ;
- lv2:symbol "port68" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val63"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 69 ;
lv2:name "Value 64" ;
- lv2:symbol "port69" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val64"
] , [
- lv2:index 7 ;
- lv2:name "Value 2" ;
- lv2:symbol "port7" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 70 ;
lv2:name "Value 65" ;
- lv2:symbol "port70" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val65"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 71 ;
lv2:name "Value 66" ;
- lv2:symbol "port71" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val66"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 72 ;
lv2:name "Value 67" ;
- lv2:symbol "port72" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val67"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 73 ;
lv2:name "Value 68" ;
- lv2:symbol "port73" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val68"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 74 ;
lv2:name "Value 69" ;
- lv2:symbol "port74" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val69"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 75 ;
lv2:name "Value 70" ;
- lv2:symbol "port75" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val70"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 76 ;
lv2:name "Value 71" ;
- lv2:symbol "port76" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val71"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 77 ;
lv2:name "Value 72" ;
- lv2:symbol "port77" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val72"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 78 ;
lv2:name "Value 73" ;
- lv2:symbol "port78" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val73"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 79 ;
lv2:name "Value 74" ;
- lv2:symbol "port79" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val74"
] , [
- lv2:index 8 ;
- lv2:name "Value 3" ;
- lv2:symbol "port8" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 80 ;
lv2:name "Value 75" ;
- lv2:symbol "port80" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val75"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 81 ;
lv2:name "Value 76" ;
- lv2:symbol "port81" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val76"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 82 ;
lv2:name "Value 77" ;
- lv2:symbol "port82" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val77"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 83 ;
lv2:name "Value 78" ;
- lv2:symbol "port83" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val78"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 84 ;
lv2:name "Value 79" ;
- lv2:symbol "port84" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val79"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 85 ;
lv2:name "Value 80" ;
- lv2:symbol "port85" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val80"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 86 ;
lv2:name "Value 81" ;
- lv2:symbol "port86" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val81"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 87 ;
lv2:name "Value 82" ;
- lv2:symbol "port87" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val82"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 88 ;
lv2:name "Value 83" ;
- lv2:symbol "port88" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val83"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 89 ;
lv2:name "Value 84" ;
- lv2:symbol "port89" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val84"
] , [
- lv2:index 9 ;
- lv2:name "Value 4" ;
- lv2:symbol "port9" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 90 ;
lv2:name "Value 85" ;
- lv2:symbol "port90" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val85"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 91 ;
lv2:name "Value 86" ;
- lv2:symbol "port91" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val86"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 92 ;
lv2:name "Value 87" ;
- lv2:symbol "port92" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val87"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 93 ;
lv2:name "Value 88" ;
- lv2:symbol "port93" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val88"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 94 ;
lv2:name "Value 89" ;
- lv2:symbol "port94" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val89"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 95 ;
lv2:name "Value 90" ;
- lv2:symbol "port95" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val90"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 96 ;
lv2:name "Value 91" ;
- lv2:symbol "port96" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val91"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 97 ;
lv2:name "Value 92" ;
- lv2:symbol "port97" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val92"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 98 ;
lv2:name "Value 93" ;
- lv2:symbol "port98" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val93"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 99 ;
lv2:name "Value 94" ;
- lv2:symbol "port99" ;
+ 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:Port
+ 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"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:2029> ;
- dc:rights "GPL" ;
doap:name "Quantiser (100 Steps)" ;
lv2:documentation """
<p>Quantises a signal to a set of arbitrary values within a range.</p>
@@ -816,5 +715,4 @@ exact match.</p>
<p>The quantisation values should all be within the range minimum and maximum
for it to work!</p>
-""" ;
- a lv2:Plugin .
+""" .
diff --git a/blip.lv2/quantiser_20.ttl b/blop.lv2/quantiser_20.ttl
index 893c346..64c1d55 100644
--- a/blip.lv2/quantiser_20.ttl
+++ b/blop.lv2/quantiser_20.ttl
@@ -1,228 +1,207 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
-blip:quantiser_20
+blop:quantiser_20
+ a lv2:Plugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
lv2:optionalFeature lv2:hardRTCapable ;
lv2:port [
- lv2:index 0 ;
- lv2:name "Quantise Range Minimum" ;
- lv2:symbol "port0" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Minimum" ;
+ lv2:symbol "min"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 1 ;
- lv2:name "Quantise Range Maximum" ;
- lv2:symbol "port1" ;
+ 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:Port
+ 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 "port10" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val05"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 11 ;
lv2:name "Value 6" ;
- lv2:symbol "port11" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val06"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 12 ;
lv2:name "Value 7" ;
- lv2:symbol "port12" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val07"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 13 ;
lv2:name "Value 8" ;
- lv2:symbol "port13" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val08"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 14 ;
lv2:name "Value 9" ;
- lv2:symbol "port14" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val09"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 15 ;
lv2:name "Value 10" ;
- lv2:symbol "port15" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val10"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 16 ;
lv2:name "Value 11" ;
- lv2:symbol "port16" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val11"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 17 ;
lv2:name "Value 12" ;
- lv2:symbol "port17" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val12"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 18 ;
lv2:name "Value 13" ;
- lv2:symbol "port18" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val13"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 19 ;
lv2:name "Value 14" ;
- lv2:symbol "port19" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val14"
] , [
- lv2:default 0 ;
- lv2:index 2 ;
- lv2:minimum 0 ;
- lv2:name "Match Range" ;
- lv2:symbol "port2" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 20 ;
lv2:name "Value 15" ;
- lv2:symbol "port20" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val15"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 21 ;
lv2:name "Value 16" ;
- lv2:symbol "port21" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val16"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 22 ;
lv2:name "Value 17" ;
- lv2:symbol "port22" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val17"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 23 ;
lv2:name "Value 18" ;
- lv2:symbol "port23" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val18"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 24 ;
lv2:name "Value 19" ;
- lv2:symbol "port24" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val19"
] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
lv2:index 25 ;
lv2:name "Input" ;
- lv2:symbol "port25" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "in"
] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
lv2:index 26 ;
lv2:name "Quantised Output" ;
- lv2:symbol "port26" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
lv2:index 27 ;
lv2:name "Output Changed" ;
- lv2:symbol "port27" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] , [
- lv2:default 0 ;
- lv2:index 3 ;
- lv2:maximum 2 ;
- lv2:minimum 0 ;
- lv2:name "Mode (0 = Extend, 1 = Wrap, 2 = Clip)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port3" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:default 20 ;
- lv2:index 4 ;
- lv2:maximum 20 ;
- lv2:minimum 1 ;
- lv2:name "Steps (1 - 20)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port4" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 5 ;
- lv2:name "Value 0" ;
- lv2:symbol "port5" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 6 ;
- lv2:name "Value 1" ;
- lv2:symbol "port6" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 7 ;
- lv2:name "Value 2" ;
- lv2:symbol "port7" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 8 ;
- lv2:name "Value 3" ;
- lv2:symbol "port8" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 9 ;
- lv2:name "Value 4" ;
- lv2:symbol "port9" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "changed"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:2027> ;
- dc:rights "GPL" ;
doap:name "Quantiser (20 Steps)" ;
lv2:documentation """
<p>Quantises a signal to a set of arbitrary values within a range.</p>
@@ -256,5 +235,4 @@ exact match.</p>
<p>The quantisation values should all be within the range minimum and maximum
for it to work!</p>
-""" ;
- a lv2:Plugin .
+""" .
diff --git a/blip.lv2/quantiser_50.ttl b/blop.lv2/quantiser_50.ttl
index 9481cd2..de748fc 100644
--- a/blip.lv2/quantiser_50.ttl
+++ b/blop.lv2/quantiser_50.ttl
@@ -1,438 +1,387 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
-blip:quantiser_50
+blop:quantiser_50
+ a lv2:Plugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
lv2:optionalFeature lv2:hardRTCapable ;
lv2:port [
- lv2:index 0 ;
- lv2:name "Quantise Range Minimum" ;
- lv2:symbol "port0" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:InputPort ;
+ lv2:index 0 ;
+ lv2:name "Minimum" ;
+ lv2:symbol "min"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 1 ;
- lv2:name "Quantise Range Maximum" ;
- lv2:symbol "port1" ;
+ 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:Port
+ 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 "port10" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val05"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 11 ;
lv2:name "Value 6" ;
- lv2:symbol "port11" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val06"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 12 ;
lv2:name "Value 7" ;
- lv2:symbol "port12" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val07"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 13 ;
lv2:name "Value 8" ;
- lv2:symbol "port13" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val08"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 14 ;
lv2:name "Value 9" ;
- lv2:symbol "port14" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val09"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 15 ;
lv2:name "Value 10" ;
- lv2:symbol "port15" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val10"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 16 ;
lv2:name "Value 11" ;
- lv2:symbol "port16" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val11"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 17 ;
lv2:name "Value 12" ;
- lv2:symbol "port17" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val12"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 18 ;
lv2:name "Value 13" ;
- lv2:symbol "port18" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val13"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 19 ;
lv2:name "Value 14" ;
- lv2:symbol "port19" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val14"
] , [
- lv2:default 0 ;
- lv2:index 2 ;
- lv2:minimum 0 ;
- lv2:name "Match Range" ;
- lv2:symbol "port2" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 20 ;
lv2:name "Value 15" ;
- lv2:symbol "port20" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val15"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 21 ;
lv2:name "Value 16" ;
- lv2:symbol "port21" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val16"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 22 ;
lv2:name "Value 17" ;
- lv2:symbol "port22" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val17"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 23 ;
lv2:name "Value 18" ;
- lv2:symbol "port23" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val18"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 24 ;
lv2:name "Value 19" ;
- lv2:symbol "port24" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val19"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 25 ;
lv2:name "Value 20" ;
- lv2:symbol "port25" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val20"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 26 ;
lv2:name "Value 21" ;
- lv2:symbol "port26" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val21"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 27 ;
lv2:name "Value 22" ;
- lv2:symbol "port27" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val22"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 28 ;
lv2:name "Value 23" ;
- lv2:symbol "port28" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val23"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 29 ;
lv2:name "Value 24" ;
- lv2:symbol "port29" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val24"
] , [
- lv2:default 0 ;
- lv2:index 3 ;
- lv2:maximum 2 ;
- lv2:minimum 0 ;
- lv2:name "Mode (0 = Extend, 1 = Wrap, 2 = Clip)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port3" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 30 ;
lv2:name "Value 25" ;
- lv2:symbol "port30" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val25"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 31 ;
lv2:name "Value 26" ;
- lv2:symbol "port31" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val26"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 32 ;
lv2:name "Value 27" ;
- lv2:symbol "port32" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val27"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 33 ;
lv2:name "Value 28" ;
- lv2:symbol "port33" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val28"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 34 ;
lv2:name "Value 29" ;
- lv2:symbol "port34" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val29"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 35 ;
lv2:name "Value 30" ;
- lv2:symbol "port35" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val30"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 36 ;
lv2:name "Value 31" ;
- lv2:symbol "port36" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val31"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 37 ;
lv2:name "Value 32" ;
- lv2:symbol "port37" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val32"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 38 ;
lv2:name "Value 33" ;
- lv2:symbol "port38" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val33"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 39 ;
lv2:name "Value 34" ;
- lv2:symbol "port39" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val34"
] , [
- lv2:default 50 ;
- lv2:index 4 ;
- lv2:maximum 50 ;
- lv2:minimum 1 ;
- lv2:name "Steps (1 - 50)" ;
- lv2:portProperty lv2:integer ;
- lv2:symbol "port4" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 40 ;
lv2:name "Value 35" ;
- lv2:symbol "port40" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val35"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 41 ;
lv2:name "Value 36" ;
- lv2:symbol "port41" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val36"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 42 ;
lv2:name "Value 37" ;
- lv2:symbol "port42" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val37"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 43 ;
lv2:name "Value 38" ;
- lv2:symbol "port43" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val38"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 44 ;
lv2:name "Value 39" ;
- lv2:symbol "port44" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val39"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 45 ;
lv2:name "Value 40" ;
- lv2:symbol "port45" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val40"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 46 ;
lv2:name "Value 41" ;
- lv2:symbol "port46" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val41"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 47 ;
lv2:name "Value 42" ;
- lv2:symbol "port47" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val42"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 48 ;
lv2:name "Value 43" ;
- lv2:symbol "port48" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val43"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 49 ;
lv2:name "Value 44" ;
- lv2:symbol "port49" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val44"
] , [
- lv2:index 5 ;
- lv2:name "Value 0" ;
- lv2:symbol "port5" ;
a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
+ lv2:InputPort ;
lv2:index 50 ;
lv2:name "Value 45" ;
- lv2:symbol "port50" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val45"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 51 ;
lv2:name "Value 46" ;
- lv2:symbol "port51" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val46"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 52 ;
lv2:name "Value 47" ;
- lv2:symbol "port52" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val47"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 53 ;
lv2:name "Value 48" ;
- lv2:symbol "port53" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val48"
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ;
lv2:index 54 ;
lv2:name "Value 49" ;
- lv2:symbol "port54" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "val49"
] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
lv2:index 55 ;
lv2:name "Input" ;
- lv2:symbol "port55" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "in"
] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
lv2:index 56 ;
lv2:name "Quantised Output" ;
- lv2:symbol "port56" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] , [
+ a lv2:CVPort ,
+ lv2:OutputPort ;
lv2:index 57 ;
lv2:name "Output Changed" ;
- lv2:symbol "port57" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
- ] , [
- lv2:index 6 ;
- lv2:name "Value 1" ;
- lv2:symbol "port6" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 7 ;
- lv2:name "Value 2" ;
- lv2:symbol "port7" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 8 ;
- lv2:name "Value 3" ;
- lv2:symbol "port8" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
- ] , [
- lv2:index 9 ;
- lv2:name "Value 4" ;
- lv2:symbol "port9" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "changed"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:2028> ;
- dc:rights "GPL" ;
doap:name "Quantiser (50 Steps)" ;
lv2:documentation """
<p>Quantises a signal to a set of arbitrary values within a range.</p>
@@ -466,5 +415,4 @@ exact match.</p>
<p>The quantisation values should all be within the range minimum and maximum
for it to work!</p>
-""" ;
- a lv2:Plugin .
+""" .
diff --git a/blip.lv2/random.ttl b/blop.lv2/random.ttl
index abdc38e..a0fcb28 100644
--- a/blip.lv2/random.ttl
+++ b/blop.lv2/random.ttl
@@ -1,62 +1,59 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
-@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-blip:random
+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:default 440.0 ;
lv2:name "Frequency" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port0" ;
- units:unit units:hz ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 1 ;
lv2:index 1 ;
lv2:maximum 1 ;
lv2:minimum 0 ;
lv2:name "Wave Smoothness" ;
- lv2:symbol "port1" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "smooth" ;
+ morph:supportsType lv2:CVPort
] , [
- lv2:index 2 ;
- lv2:name "Output" ;
- lv2:symbol "port2" ;
a lv2:AudioPort ,
lv2:OutputPort ,
- lv2:Port
+ lv2:Port ;
+ lv2:index 2 ;
+ lv2:name "Output" ;
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1661> ,
<urn:ladspa:1662> ,
<urn:ladspa:1663> ,
<urn:ladspa:1664> ;
- dc:rights "GPL" ;
doap:name "Random Wave Generator" ;
- lv2:documentation """
+ 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>
-""" ;
- a lv2:Plugin , lv2:OscillatorPlugin .
+""" .
diff --git a/blip.lv2/ratio.ttl b/blop.lv2/ratio.ttl
index cefb069..f3feb3d 100644
--- a/blip.lv2/ratio.ttl
+++ b/blop.lv2/ratio.ttl
@@ -1,49 +1,48 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:ratio
+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" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:ControlPort ,
+ lv2:InputPort ,
+ morph:MorphPort ;
lv2:index 1 ;
lv2:name "Denominator" ;
lv2:symbol "denominator" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:ControlPort ,
+ lv2:OutputPort ,
+ morph:AutoMorphPort ;
lv2:index 2 ;
lv2:name "Ratio" ;
lv2:symbol "ratio" ;
- a lv2:CVPort ,
- lv2:OutputPort ,
- lv2:Port
+ morph:supportsType lv2:CVPort
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:2034> ,
<urn:ladspa:2035> ,
<urn:ladspa:2036> ,
<urn:ladspa:2037> ;
- dc:rights "GPL" ;
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>
-""" ;
- a lv2:Plugin , lv2:UtilityPlugin .
+""" .
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/blip.lv2/sync_square.ttl b/blop.lv2/sync_square.ttl
index 85be37c..897d572 100644
--- a/blip.lv2/sync_square.ttl
+++ b/blop.lv2/sync_square.ttl
@@ -1,47 +1,46 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:sync_square
+blop:sync_square
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
+ 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 "port0" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:CVPort ,
+ lv2:InputPort ;
lv2:index 1 ;
lv2:name "Gate" ;
- lv2:symbol "port1" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:portProperty lv2:toggled ;
+ lv2:symbol "gate"
] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
lv2:index 2 ;
lv2:name "Output" ;
- lv2:symbol "port2" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1678> ,
<urn:ladspa:1679> ;
- dc:rights "GPL" ;
doap:name "Clock Oscillator with Gate" ;
lv2:documentation """
<p>Generates a non-bandlimited simple square waveform for use as a clock.
@@ -49,5 +48,4 @@ 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>
-""" ;
- a lv2:Plugin , lv2:OscillatorPlugin .
+""" .
diff --git a/blip.lv2/tracker.ttl b/blop.lv2/tracker.ttl
index 2894986..5a88b9b 100644
--- a/blip.lv2/tracker.ttl
+++ b/blop.lv2/tracker.ttl
@@ -1,92 +1,97 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:tracker
+blop:tracker
+ a lv2:Plugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
+ lv2:extensionData morph:interface ;
+ lv2:optionalFeature lv2:hardRTCapable ,
+ urid:map ;
lv2:port [
+ a lv2:CVPort ,
+ lv2:InputPort ;
lv2:index 0 ;
lv2:name "Gate" ;
- lv2:symbol "port0" ;
- a lv2:CVPort ,
- lv2:InputPort ,
- lv2:Port
+ 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 "2.08333e-05"^^xsd:double ;
- lv2:name "Attack Rate (Hz) when Gate High" ;
+ lv2:minimum 0.00001 ;
+ lv2:name "High Attack Rate" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port1" ;
+ lv2:symbol "hattack" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 100 ;
lv2:index 2 ;
lv2:maximum 0.5 ;
- lv2:minimum "2.08333e-05"^^xsd:double ;
- lv2:name "Decay Rate (Hz) when Gate High" ;
+ lv2:minimum 0.00001 ;
+ lv2:name "High Decay Rate" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port2" ;
+ lv2:symbol "hdecay" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 100 ;
lv2:index 3 ;
lv2:maximum 0.5 ;
- lv2:minimum "2.08333e-05"^^xsd:double ;
- lv2:name "Attack Rate (Hz) when Gate Low" ;
+ lv2:minimum 0.00001 ;
+ lv2:name "Low Attack Rate" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port3" ;
+ lv2:symbol "lattack" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 100 ;
lv2:index 4 ;
lv2:maximum 0.5 ;
- lv2:minimum "2.08333e-05"^^xsd:double ;
- lv2:name "Decay Rate (Hz) when Gate Low" ;
+ lv2:minimum 0.00001 ;
+ lv2:name "Low Decay Rate" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port4" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "ldecay" ;
+ morph:supportsType lv2:CVPort ;
+ units:unit units:hz
] , [
+ a lv2:AudioPort ,
+ lv2:InputPort ;
lv2:index 5 ;
lv2:name "Input" ;
- lv2:symbol "port5" ;
- a lv2:AudioPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "in"
] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
lv2:index 6 ;
lv2:name "Output" ;
- lv2:symbol "port6" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:2025> ,
<urn:ladspa:2026> ;
- dc:rights "GPL" ;
doap:name "Signal Tracker" ;
lv2:documentation """
<p>This tracks an incoming signal and outputs the result.</p>
@@ -112,5 +117,4 @@ level of the Gate.</p>
high. Varying the pulsewidth will vary the time the input is tracked, and
when it is held.</li>
</ul>
-""" ;
- a lv2:Plugin .
+""" .
diff --git a/blip.lv2/triangle.ttl b/blop.lv2/triangle.ttl
index 76c9d67..f9c7ca0 100644
--- a/blip.lv2/triangle.ttl
+++ b/blop.lv2/triangle.ttl
@@ -1,58 +1,57 @@
-@prefix blip: <http://drobilla.net/plugins/blip/> .
-@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix blop: <http://drobilla.net/plugins/blop/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 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#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
-blip:triangle
+blop:triangle
+ a lv2:Plugin ,
+ lv2:OscillatorPlugin ;
+ lv2:project blop: ;
lv2:microVersion 0 ;
lv2:minorVersion 0 ;
- lv2:optionalFeature lv2:hardRTCapable ;
+ 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:default 440.0 ;
lv2:name "Frequency" ;
lv2:portProperty <http://lv2plug.in/ns/ext/port-props#logarithmic> ,
lv2:sampleRate ;
- lv2:symbol "port0" ;
+ lv2:symbol "freq" ;
+ morph:supportsType lv2:CVPort
+ ] , [
a lv2:ControlPort ,
lv2:InputPort ,
- lv2:Port
- ] , [
+ morph:MorphPort ;
lv2:default 0.5 ;
lv2:index 1 ;
lv2:maximum 1 ;
lv2:minimum 0 ;
lv2:name "Slope" ;
- lv2:symbol "port1" ;
- a lv2:ControlPort ,
- lv2:InputPort ,
- lv2:Port
+ lv2:symbol "slope" ;
+ morph:supportsType lv2:CVPort
] , [
+ a lv2:AudioPort ,
+ lv2:OutputPort ;
lv2:index 2 ;
lv2:name "Output" ;
- lv2:symbol "port2" ;
- a lv2:AudioPort ,
- lv2:OutputPort ,
- lv2:Port
+ lv2:symbol "out"
] ;
- dc:creator "Mike Rawes <mike_rawes[at]yahoo.co.uk>" ;
dct:replaces <urn:ladspa:1649> ,
<urn:ladspa:1650> ,
<urn:ladspa:1651> ,
<urn:ladspa:1652> ;
- dc:rights "GPL" ;
doap:name "Variable Slope Triangle Oscillator" ;
- lv2:documentation """
+ 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>
-""" ;
- a lv2:Plugin , lv2:OscillatorPlugin .
+""" .
diff --git a/src/adsr.c b/src/adsr.c
index 227dca7..b996204 100644
--- a/src/adsr.c
+++ b/src/adsr.c
@@ -117,8 +117,8 @@ activate(LV2_Handle instance)
}
static void
-runAdsr(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Adsr* plugin = (Adsr*)instance;
@@ -236,11 +236,11 @@ runAdsr(LV2_Handle instance,
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/adsr",
+ "http://drobilla.net/plugins/blop/adsr",
instantiate,
connect_port,
activate,
- runAdsr,
+ run,
NULL,
cleanup,
NULL,
diff --git a/src/adsr_gt.c b/src/adsr_gt.c
index 77bec65..055e2b2 100644
--- a/src/adsr_gt.c
+++ b/src/adsr_gt.c
@@ -119,8 +119,8 @@ activate(LV2_Handle instance)
}
static void
-runAdsr(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Adsr* plugin = (Adsr*)instance;
@@ -244,11 +244,11 @@ runAdsr(LV2_Handle instance,
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/adsr_gt",
+ "http://drobilla.net/plugins/blop/adsr_gt",
instantiate,
connect_port,
activate,
- runAdsr,
+ run,
NULL,
cleanup,
NULL,
diff --git a/src/amp.c b/src/amp.c
index edb9291..a0165bf 100644
--- a/src/amp.c
+++ b/src/amp.c
@@ -18,8 +18,10 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
#include "math_func.h"
+#include "uris.h"
#define AMP_GAIN 0
#define AMP_INPUT 1
@@ -29,6 +31,8 @@ typedef struct {
const float* gain;
const float* input;
float* output;
+ URIs uris;
+ uint32_t gain_is_cv;
} Amp;
static void
@@ -57,6 +61,28 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Amp* plugin = (Amp*)instance;
+ switch (port) {
+ case AMP_GAIN:
+ if (type == plugin->uris.lv2_ControlPort) {
+ plugin->gain_is_cv = 0;
+ } else if (type == plugin->uris.lv2_CVPort) {
+ plugin->gain_is_cv = 1;
+ } else {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+ return LV2_MORPH_SUCCESS;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -65,12 +91,15 @@ instantiate(const LV2_Descriptor* descriptor,
{
Amp* plugin = (Amp*)malloc(sizeof(Amp));
+ plugin->gain_is_cv = 0;
+ map_uris(&plugin->uris, features);
+
return (LV2_Handle)plugin;
}
static void
-runAmp_gaia_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Amp* plugin = (Amp*)instance;
@@ -83,50 +112,33 @@ runAmp_gaia_oa(LV2_Handle instance,
/* Output */
float* output = plugin->output;
- float gn;
- float in;
- float scale;
-
for (uint32_t s = 0; s < sample_count; ++s) {
- gn = gain[s];
- in = input[s];
+ const float gn = gain[s * plugin->gain_is_cv];
+ const float scale = (float)EXPF(M_LN10 * gn * 0.05f);
- scale = (float)EXPF(M_LN10 * gn * 0.05f);
-
- output[s] = scale * in;
+ output[s] = scale * input[s];
}
}
-static void
-runAmp_gcia_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Amp* plugin = (Amp*)instance;
-
- /* Gain (dB) */
- const float gain = *(plugin->gain);
-
- /* Input */
- const float* input = plugin->input;
-
- /* Output */
- float* output = plugin->output;
-
- const float scale = (float)EXPF(M_LN10 * gain * 0.05f);
- for (uint32_t s = 0; s < sample_count; s++) {
- output[s] = scale * input[s];
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/amp",
+ "http://drobilla.net/plugins/blop/amp",
instantiate,
connect_port,
NULL,
- runAmp_gcia_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/branch.c b/src/branch.c
index 4625e5c..f4c92a0 100644
--- a/src/branch.c
+++ b/src/branch.c
@@ -113,7 +113,7 @@ runBranch_ic_ococ(LV2_Handle instance,
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/branch",
+ "http://drobilla.net/plugins/blop/branch",
instantiate,
connect_port,
NULL,
diff --git a/src/dahdsr.c b/src/dahdsr.c
index cfddb6b..16a1334 100644
--- a/src/dahdsr.c
+++ b/src/dahdsr.c
@@ -18,8 +18,10 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
#include "common.h"
+#include "uris.h"
#define DAHDSR_GATE 0
#define DAHDSR_TRIGGER 1
@@ -57,8 +59,15 @@ typedef struct {
float last_trigger;
float from_level;
float level;
+ uint32_t delay_is_cv;
+ uint32_t attack_is_cv;
+ uint32_t hold_is_cv;
+ uint32_t decay_is_cv;
+ uint32_t sustain_is_cv;
+ uint32_t release_is_cv;
DAHDSRState state;
uint32_t samples;
+ URIs uris;
} Dahdsr;
static void
@@ -105,6 +114,45 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Dahdsr* plugin = (Dahdsr*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case DAHDSR_DELAY:
+ plugin->delay_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case DAHDSR_ATTACK:
+ plugin->attack_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case DAHDSR_HOLD:
+ plugin->hold_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case DAHDSR_DECAY:
+ plugin->decay_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case DAHDSR_SUSTAIN:
+ plugin->sustain_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case DAHDSR_RELEASE:
+ plugin->release_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -116,6 +164,15 @@ instantiate(const LV2_Descriptor* descriptor,
plugin->srate = (float)sample_rate;
plugin->inv_srate = 1.0f / plugin->srate;
+ plugin->delay_is_cv = 0;
+ plugin->attack_is_cv = 0;
+ plugin->hold_is_cv = 0;
+ plugin->decay_is_cv = 0;
+ plugin->sustain_is_cv = 0;
+ plugin->release_is_cv = 0;
+
+ map_uris(&plugin->uris, features);
+
return (LV2_Handle)plugin;
}
@@ -133,8 +190,8 @@ activate(LV2_Handle instance)
}
static void
-runDahdsr_Audio(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Dahdsr* plugin = (Dahdsr*)instance;
@@ -175,20 +232,26 @@ runDahdsr_Audio(LV2_Handle instance,
DAHDSRState state = plugin->state;
uint32_t samples = plugin->samples;
- float gat, trg, del, att, hld, dec, sus, rel;
float elapsed;
for (uint32_t s = 0; s < sample_count; ++s) {
+ const float dl = delay[s * plugin->delay_is_cv];
+ const float at = attack[s * plugin->attack_is_cv];
+ const float hl = hold[s * plugin->hold_is_cv];
+ const float dc = decay[s * plugin->decay_is_cv];
+ const float st = sustain[s * plugin->sustain_is_cv];
+ const float rl = release[s * plugin->release_is_cv];
+
/* Convert times into rates */
- del = delay[s] > 0.0f ? inv_srate / delay[s] : srate;
- att = attack[s] > 0.0f ? inv_srate / attack[s] : srate;
- hld = hold[s] > 0.0f ? inv_srate / hold[s] : srate;
- dec = decay[s] > 0.0f ? inv_srate / decay[s] : srate;
- rel = release[s] > 0.0f ? inv_srate / release[s] : srate;
+ const float del = dl > 0.0f ? inv_srate / dl : srate;
+ const float att = at > 0.0f ? inv_srate / at : srate;
+ const float hld = hl > 0.0f ? inv_srate / hl : srate;
+ const float dec = dc > 0.0f ? inv_srate / dc : srate;
+ const float rel = rl > 0.0f ? inv_srate / rl : srate;
- gat = gate[s];
- trg = trigger[s];
- sus = f_clip(sustain[s], 0.0f, 1.0f);
+ const float gat = gate[s];
+ const float trg = trigger[s];
+ const float sus = f_clip(st, 0.0f, 1.0f);
/* Initialise delay phase if gate is opened and was closed, or
we received a trigger */
@@ -310,369 +373,25 @@ runDahdsr_Audio(LV2_Handle instance,
plugin->samples = samples;
}
-static void
-runDahdsr_Control(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Dahdsr* plugin = (Dahdsr*)instance;
-
- /* Gate */
- const float* gate = plugin->gate;
-
- /* Trigger */
- const float* trigger = plugin->trigger;
-
- /* Delay Time (s) */
- const float delay = *(plugin->delay);
-
- /* Attack Time (s) */
- const float attack = *(plugin->attack);
-
- /* Hold Time (s) */
- const float hold = *(plugin->hold);
-
- /* Decay Time (s) */
- const float decay = *(plugin->decay);
-
- /* Sustain Level */
- const float sustain = *(plugin->sustain);
-
- /* Release Time (s) */
- const float release = *(plugin->release);
-
- /* Envelope Out */
- float* output = plugin->output;
-
- /* Instance Data */
- float srate = plugin->srate;
- float inv_srate = plugin->inv_srate;
- float last_gate = plugin->last_gate;
- float last_trigger = plugin->last_trigger;
- float from_level = plugin->from_level;
- float level = plugin->level;
- DAHDSRState state = plugin->state;
- uint32_t samples = plugin->samples;
-
- float gat, trg, del, att, hld, dec, sus, rel;
- float elapsed;
-
- /* Convert times into rates */
- del = delay > 0.0f ? inv_srate / delay : srate;
- att = attack > 0.0f ? inv_srate / attack : srate;
- hld = hold > 0.0f ? inv_srate / hold : srate;
- dec = decay > 0.0f ? inv_srate / decay : srate;
- rel = release > 0.0f ? inv_srate / release : srate;
-
- sus = f_clip(sustain, 0.0f, 1.0f);
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- gat = gate[s];
- trg = trigger[s];
-
- /* Initialise delay phase if gate is opened and was closed, or
- we received a trigger */
- if ((trg > 0.0f && !(last_trigger > 0.0f))
- || (gat > 0.0f && !(last_gate > 0.0f))) {
- if (del < srate) {
- state = DELAY;
- } else if (att < srate) {
- state = ATTACK;
- } else {
- state = hld < srate ? HOLD
- : (dec < srate ? DECAY
- : (gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE)));
- level = 1.0f;
- }
- samples = 0;
- }
-
- /* Release if gate was open and now closed */
- if (state != IDLE && state != RELEASE
- && last_gate > 0.0f && !(gat > 0.0f)) {
- state = rel < srate ? RELEASE : IDLE;
- samples = 0;
- }
-
- if (samples == 0) {
- from_level = level;
- }
-
- /* Calculate level of envelope from current state */
- switch (state) {
- case IDLE:
- level = 0;
- break;
- case DELAY:
- samples++;
- elapsed = (float)samples * del;
- if (elapsed > 1.0f) {
- state = att < srate ? ATTACK
- : (hld < srate ? HOLD
- : (dec < srate ? DECAY
- : (gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE))));
- samples = 0;
- }
- break;
- case ATTACK:
- samples++;
- elapsed = (float)samples * att;
- if (elapsed > 1.0f) {
- state = hld < srate ? HOLD
- : (dec < srate ? DECAY
- : (gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE)));
- level = 1.0f;
- samples = 0;
- } else {
- level = from_level + elapsed * (1.0f - from_level);
- }
- break;
- case HOLD:
- samples++;
- elapsed = (float)samples * hld;
- if (elapsed > 1.0f) {
- state = dec < srate ? DECAY
- : (gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE));
- samples = 0;
- }
- break;
- case DECAY:
- samples++;
- elapsed = (float)samples * dec;
- if (elapsed > 1.0f) {
- state = gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE);
- level = sus;
- samples = 0;
- } else {
- level = from_level + elapsed * (sus - from_level);
- }
- break;
- case SUSTAIN:
- level = sus;
- break;
- case RELEASE:
- samples++;
- elapsed = (float)samples * rel;
- if (elapsed > 1.0f) {
- state = IDLE;
- level = 0.0f;
- samples = 0;
- } else {
- level = from_level - elapsed * from_level;
- }
- break;
- default:
- /* Should never happen */
- level = 0.0f;
- }
-
- output[s] = level;
-
- last_gate = gat;
- last_trigger = trg;
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
-
- plugin->last_gate = last_gate;
- plugin->last_trigger = last_trigger;
- plugin->from_level = from_level;
- plugin->level = level;
- plugin->state = state;
- plugin->samples = samples;
-}
-
-static void
-runDahdsr_CGT_Control(LV2_Handle instance,
- uint32_t sample_count)
-{
- Dahdsr* plugin = (Dahdsr*)instance;
-
- /* Gate */
- const float gate = *(plugin->gate);
-
- /* Trigger */
- const float trigger = *(plugin->trigger);
-
- /* Delay Time (s) */
- const float delay = *(plugin->delay);
-
- /* Attack Time (s) */
- const float attack = *(plugin->attack);
-
- /* Hold Time (s) */
- const float hold = *(plugin->hold);
-
- /* Decay Time (s) */
- const float decay = *(plugin->decay);
-
- /* Sustain Level */
- const float sustain = *(plugin->sustain);
-
- /* Release Time (s) */
- const float release = *(plugin->release);
-
- /* Envelope Out */
- float* output = plugin->output;
-
- /* Instance Data */
- float srate = plugin->srate;
- float inv_srate = plugin->inv_srate;
- float last_gate = plugin->last_gate;
- float last_trigger = plugin->last_trigger;
- float from_level = plugin->from_level;
- float level = plugin->level;
- DAHDSRState state = plugin->state;
- uint32_t samples = plugin->samples;
-
- float gat, trg, del, att, hld, dec, sus, rel;
- float elapsed;
-
- /* Convert times into rates */
- del = delay > 0.0f ? inv_srate / delay : srate;
- att = attack > 0.0f ? inv_srate / attack : srate;
- hld = hold > 0.0f ? inv_srate / hold : srate;
- dec = decay > 0.0f ? inv_srate / decay : srate;
- rel = release > 0.0f ? inv_srate / release : srate;
-
- gat = gate;
- trg = trigger;
- sus = f_clip(sustain, 0.0f, 1.0f);
-
- /* Initialise delay phase if gate is opened and was closed, or
- we received a trigger */
- if ((trg > 0.0f && !(last_trigger > 0.0f))
- || (gat > 0.0f && !(last_gate > 0.0f))) {
- if (del < srate) {
- state = DELAY;
- } else if (att < srate) {
- state = ATTACK;
- } else {
- state = hld < srate ? HOLD
- : (dec < srate ? DECAY
- : (gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE)));
- level = 1.0f;
- }
- samples = 0;
- }
-
- /* Release if gate was open and now closed */
- if (state != IDLE && state != RELEASE
- && last_gate > 0.0f && !(gat > 0.0f)) {
- state = rel < srate ? RELEASE : IDLE;
- samples = 0;
- }
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- if (samples == 0) {
- from_level = level;
- }
-
- /* Calculate level of envelope from current state */
- switch (state) {
- case IDLE:
- level = 0;
- break;
- case DELAY:
- samples++;
- elapsed = (float)samples * del;
- if (elapsed > 1.0f) {
- state = att < srate ? ATTACK
- : (hld < srate ? HOLD
- : (dec < srate ? DECAY
- : (gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE))));
- samples = 0;
- }
- break;
- case ATTACK:
- samples++;
- elapsed = (float)samples * att;
- if (elapsed > 1.0f) {
- state = hld < srate ? HOLD
- : (dec < srate ? DECAY
- : (gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE)));
- level = 1.0f;
- samples = 0;
- } else {
- level = from_level + elapsed * (1.0f - from_level);
- }
- break;
- case HOLD:
- samples++;
- elapsed = (float)samples * hld;
- if (elapsed > 1.0f) {
- state = dec < srate ? DECAY
- : (gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE));
- samples = 0;
- }
- break;
- case DECAY:
- samples++;
- elapsed = (float)samples * dec;
- if (elapsed > 1.0f) {
- state = gat > 0.0f ? SUSTAIN
- : (rel < srate ? RELEASE
- : IDLE);
- level = sus;
- samples = 0;
- } else {
- level = from_level + elapsed * (sus - from_level);
- }
- break;
- case SUSTAIN:
- level = sus;
- break;
- case RELEASE:
- samples++;
- elapsed = (float)samples * rel;
- if (elapsed > 1.0f) {
- state = IDLE;
- level = 0.0f;
- samples = 0;
- } else {
- level = from_level - elapsed * from_level;
- }
- break;
- default:
- /* Should never happen */
- level = 0.0f;
- }
-
- output[s] = level;
- }
-
- plugin->last_gate = gat;
- plugin->last_trigger = trg;
- plugin->from_level = from_level;
- plugin->level = level;
- plugin->state = state;
- plugin->samples = samples;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/dahdsr",
+ "http://drobilla.net/plugins/blop/dahdsr",
instantiate,
connect_port,
activate,
- runDahdsr_Control,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/difference.c b/src/difference.c
index bee9552..1a9db38 100644
--- a/src/difference.c
+++ b/src/difference.c
@@ -18,16 +18,22 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
-#define DIFFERENCE_INPUT 0
-#define DIFFERENCE_MINUS 1
-#define DIFFERENCE_OUTPUT 2
+#define DIFFERENCE_MINUEND 0
+#define DIFFERENCE_SUBTRAHEND 1
+#define DIFFERENCE_DIFFERENCE 2
typedef struct {
- float* input;
- float* minus;
- float* output;
+ float* minuend;
+ float* subtrahend;
+ float* difference;
+ uint32_t minuend_is_cv;
+ uint32_t subtrahend_is_cv;
+ uint32_t difference_is_cv;
+ URIs uris;
} Difference;
static void
@@ -44,116 +50,128 @@ connect_port(LV2_Handle instance,
Difference* plugin = (Difference*)instance;
switch (port) {
- case DIFFERENCE_INPUT:
- plugin->input = data;
+ case DIFFERENCE_MINUEND:
+ plugin->minuend = data;
break;
- case DIFFERENCE_MINUS:
- plugin->minus = data;
+ case DIFFERENCE_SUBTRAHEND:
+ plugin->subtrahend = data;
break;
- case DIFFERENCE_OUTPUT:
- plugin->output = data;
+ case DIFFERENCE_DIFFERENCE:
+ plugin->difference = data;
break;
}
}
-static LV2_Handle
-instantiate(const LV2_Descriptor* descriptor,
- double sample_rate,
- const char* bundle_path,
- const LV2_Feature* const* features)
-{
- Difference* plugin = (Difference*)malloc(sizeof(Difference));
-
- return (LV2_Handle)plugin;
-}
-
-static void
-runDifference_iama_oa(LV2_Handle instance,
- uint32_t sample_count)
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
{
Difference* plugin = (Difference*)instance;
- /* Input (array of floats of length sample_count) */
- const float* input = plugin->input;
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
- /* Input to Subtract (array of floats of length sample_count) */
- const float* minus = plugin->minus;
+ switch (port) {
+ case DIFFERENCE_MINUEND:
+ plugin->minuend_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case DIFFERENCE_SUBTRAHEND:
+ plugin->subtrahend_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
+ plugin->difference_is_cv = (plugin->minuend_is_cv ||
+ plugin->subtrahend_is_cv);
- for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = input[s] - minus[s];
- }
+ return LV2_MORPH_SUCCESS;
}
-static void
-runDifference_iamc_oa(LV2_Handle instance,
- uint32_t sample_count)
+static LV2_URID
+port_type(LV2_Handle instance,
+ uint32_t port,
+ LV2_Morph_Property*const* properties)
{
Difference* plugin = (Difference*)instance;
- /* Input (array of floats of length sample_count) */
- const float* input = plugin->input;
+ switch (port) {
+ case DIFFERENCE_DIFFERENCE:
+ return (plugin->difference_is_cv
+ ? plugin->uris.lv2_CVPort
+ : plugin->uris.lv2_ControlPort);
+ default:
+ return 0;
+ }
+}
- /* Input to Subtract (float value) */
- const float minus = *(plugin->minus);
+static LV2_Handle
+instantiate(const LV2_Descriptor* descriptor,
+ double sample_rate,
+ const char* bundle_path,
+ const LV2_Feature* const* features)
+{
+ Difference* plugin = (Difference*)malloc(sizeof(Difference));
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
+ plugin->minuend_is_cv = 0;
+ plugin->subtrahend_is_cv = 0;
+ plugin->difference_is_cv = 0;
- for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = input[s] - minus;
- }
+ map_uris(&plugin->uris, features);
+
+ return (LV2_Handle)plugin;
}
static void
-runDifference_icma_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Difference* plugin = (Difference*)instance;
- /* Input (float value) */
- const float input = *(plugin->input);
+ /* Minuend (array of floats of length 1 or sample_count) */
+ const float* minuend = plugin->minuend;
- /* Input to Subtract (array of floats of length sample_count) */
- const float* minus = plugin->minus;
+ /* Subtrahend (array of floats of length 1 or sample_count) */
+ const float* subtrahend = plugin->subtrahend;
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
+ /* Difference (array of floats of length 1 or sample_count) */
+ float* difference = plugin->difference;
+
+ if (!plugin->difference_is_cv) { /* TODO: Avoid this branch */
+ sample_count = 1;
+ }
for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = input - minus[s];
+ const float min = minuend[s * plugin->minuend_is_cv];
+ const float sub = subtrahend[s * plugin->subtrahend_is_cv];
+
+ difference[s] = min - sub;
}
}
-static void
-runDifference_icmc_oc(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Difference* plugin = (Difference*)instance;
-
- /* Input (float value) */
- const float input = *(plugin->input);
-
- /* Input to Subtract (float value) */
- const float minus = *(plugin->minus);
-
- /* Output Frequency (pointer to float value) */
- float* output = plugin->output;
-
- output[0] = input - minus;
+ static const LV2_Morph_Interface morph = { morph_port, port_type };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
+ }
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/difference",
+ "http://drobilla.net/plugins/blop/difference",
instantiate,
connect_port,
NULL,
- runDifference_icmc_oc,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/fmod.c b/src/fmod.c
index ee14a87..3759ff6 100644
--- a/src/fmod.c
+++ b/src/fmod.c
@@ -18,17 +18,23 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
#include "math_func.h"
+#include "uris.h"
#define FMOD_FREQUENCY 0
#define FMOD_MODULATOR 1
#define FMOD_OUTPUT 2
typedef struct {
- float* frequency;
- float* modulator;
- float* output;
+ float* frequency;
+ float* modulator;
+ float* output;
+ uint32_t frequency_is_cv;
+ uint32_t modulator_is_cv;
+ uint32_t output_is_cv;
+ URIs uris;
} Fmod;
static void
@@ -57,129 +63,111 @@ connect_port(LV2_Handle instance,
}
}
-static LV2_Handle
-instantiate(const LV2_Descriptor* descriptor,
- double sample_rate,
- const char* bundle_path,
- const LV2_Feature* const* features)
-{
- Fmod* plugin = (Fmod*)malloc(sizeof(Fmod));
-
- return (LV2_Handle)plugin;
-}
-
-static void
-runFmod_fama_oa(LV2_Handle instance,
- uint32_t sample_count)
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
{
Fmod* plugin = (Fmod*)instance;
- /* Frequency to Modulate (array of floats of length sample_count) */
- const float* frequency = plugin->frequency;
-
- /* LFO Input (array of floats of length sample_count) */
- const float* modulator = plugin->modulator;
-
- /* Output Frequency (array of floats of length sample_count) */
- float* output = plugin->output;
-
- float freq;
- float mod;
- float scale;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- freq = frequency[s];
- mod = modulator[s];
-
- scale = (float)EXPF(M_LN2 * mod);
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
- output[s] = scale * freq;
+ switch (port) {
+ case FMOD_FREQUENCY:
+ plugin->frequency_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case FMOD_MODULATOR:
+ plugin->modulator_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
}
+
+ return LV2_MORPH_SUCCESS;
}
-static void
-runFmod_famc_oa(LV2_Handle instance,
- uint32_t sample_count)
+static LV2_URID
+port_type(LV2_Handle instance,
+ uint32_t port,
+ LV2_Morph_Property*const* properties)
{
Fmod* plugin = (Fmod*)instance;
- /* Frequency to Modulate (array of floats of length sample_count) */
- const float* frequency = plugin->frequency;
-
- /* Shift (Octaves) (float value) */
- const float modulator = *(plugin->modulator);
-
- /* Output Frequency (array of floats of length sample_count) */
- float* output = plugin->output;
+ switch (port) {
+ case FMOD_FREQUENCY:
+ return (plugin->output_is_cv
+ ? plugin->uris.lv2_CVPort
+ : plugin->uris.lv2_ControlPort);
+ default:
+ return 0;
+ }
+}
- float freq;
- float scale = (float)EXPF(M_LN2 * modulator);
+static LV2_Handle
+instantiate(const LV2_Descriptor* descriptor,
+ double sample_rate,
+ const char* bundle_path,
+ const LV2_Feature* const* features)
+{
+ Fmod* plugin = (Fmod*)malloc(sizeof(Fmod));
- for (uint32_t s = 0; s < sample_count; ++s) {
- freq = frequency[s];
+ plugin->frequency_is_cv = 0;
+ plugin->modulator_is_cv = 0;
- output[s] = scale * freq;
- }
+ return (LV2_Handle)plugin;
}
static void
-runFmod_fcma_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Fmod* plugin = (Fmod*)instance;
- /* Frequency to Modulate (float value) */
- const float frequency = *(plugin->frequency);
+ /* Frequency to Modulate (array of floats of length 1 or sample_count) */
+ const float* frequency = plugin->frequency;
- /* LFO Input (array of floats of length sample_count) */
+ /* LFO Input (array of floats of length 1 or sample_count) */
const float* modulator = plugin->modulator;
- /* Output Frequency (array of floats of length sample_count) */
+ /* Output Frequency (array of floats of length 1 or sample_count) */
float* output = plugin->output;
- float mod;
- float scale;
+ if (!plugin->output_is_cv) { /* TODO: Avoid this branch */
+ sample_count = 1;
+ }
for (uint32_t s = 0; s < sample_count; ++s) {
- mod = modulator[s];
-
- scale = (float)EXPF(M_LN2 * mod);
+ const float freq = frequency[s * plugin->frequency_is_cv];
+ const float mod = modulator[s * plugin->modulator_is_cv];
+ const float scale = (float)EXPF(M_LN2 * mod);
- output[s] = scale * frequency;
+ output[s] = scale * freq;
}
}
-static void
-runFmod_fcmc_oc(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Fmod* plugin = (Fmod*)instance;
-
- /* Frequency to Modulate (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Shift (Octaves) (float value) */
- const float modulator = *(plugin->modulator);
-
- /* Output Frequency (pointer to float value) */
- float* output = plugin->output;
-
- float scale;
-
- scale = (float)EXPF(M_LN2 * modulator);
-
- output[0] = scale * frequency;
+ static const LV2_Morph_Interface morph = { morph_port, port_type };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
+ }
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/fmod",
+ "http://drobilla.net/plugins/blop/fmod",
instantiate,
connect_port,
NULL,
- runFmod_fcmc_oc,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/include/common.h b/src/include/common.h
index 0f30aa1..26a405a 100644
--- a/src/include/common.h
+++ b/src/include/common.h
@@ -17,8 +17,8 @@
along with this software. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef blip_common_h
-#define blip_common_h
+#ifndef blop_common_h
+#define blop_common_h
#include "math_func.h"
@@ -51,4 +51,4 @@ f_clip (float x, float a, float b)
return 0.5f * (FABSF (x - a) + a + b - FABSF (x - b));
}
-#endif /* blip_common_h */
+#endif /* blop_common_h */
diff --git a/src/include/interpolate.h b/src/include/interpolate.h
index 5fba16a..304a817 100644
--- a/src/include/interpolate.h
+++ b/src/include/interpolate.h
@@ -1,8 +1,8 @@
-#ifndef blip_interpolate_h
-#define blip_interpolate_h
+#ifndef blop_interpolate_h
+#define blop_interpolate_h
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
-#include "blip_config.h"
+#include "blop_config.h"
#include "math_func.h"
/**
@@ -72,4 +72,4 @@ f_lerp (float value,
return value;
}
-#endif /* blip_interpolate_h */
+#endif /* blop_interpolate_h */
diff --git a/src/include/lp4pole_filter.h b/src/include/lp4pole_filter.h
index adc5cba..a6b27f1 100644
--- a/src/include/lp4pole_filter.h
+++ b/src/include/lp4pole_filter.h
@@ -30,8 +30,8 @@
along with this software. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef blip_lp4pole_filter_h
-#define blip_lp4pole_filter_h
+#ifndef blop_lp4pole_filter_h
+#define blop_lp4pole_filter_h
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
#include "common.h"
@@ -134,4 +134,4 @@ lp4pole_run(LP4PoleFilter* lpf,
return lpf->out4;
}
-#endif /* blip_lp4pole_filter_h */
+#endif /* blop_lp4pole_filter_h */
diff --git a/src/include/math_func.h b/src/include/math_func.h
index 2e4b6e4..60f7ce0 100644
--- a/src/include/math_func.h
+++ b/src/include/math_func.h
@@ -7,7 +7,7 @@
#define math_func_h
#include <math.h>
-#include "blip_config.h"
+#include "blop_config.h"
#ifndef M_PI
# define M_PI 3.14159265358979323846 /* pi */
diff --git a/src/include/uris.h b/src/include/uris.h
new file mode 100644
index 0000000..538bd05
--- /dev/null
+++ b/src/include/uris.h
@@ -0,0 +1,51 @@
+/*
+ Common URIs used by plugins.
+ Copyright 2012 David Robillard
+
+ This is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This software is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this software. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef blop_uris_h
+#define blop_uris_h
+
+#include <string.h>
+#include "lv2/lv2plug.in/ns/ext/urid/urid.h"
+#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+
+typedef struct {
+ LV2_URID lv2_CVPort;
+ LV2_URID lv2_ControlPort;
+} URIs;
+
+static inline void
+map_uris(URIs* uris,
+ const LV2_Feature* const* features)
+{
+ LV2_URID_Map* map = NULL;
+ for (int i = 0; features[i]; ++i) {
+ if (!strcmp(features[i]->URI, LV2_URID__map)) {
+ map = (LV2_URID_Map*)features[i]->data;
+ break;
+ }
+ }
+
+ if (map) {
+ uris->lv2_ControlPort = map->map(map->handle, LV2_CORE__ControlPort);
+ uris->lv2_CVPort = map->map(map->handle, LV2_CORE__CVPort);
+ } else {
+ memset(uris, 0, sizeof(*uris));
+ }
+}
+
+#endif /* blop_uris_h */
diff --git a/src/include/wavedata.h b/src/include/wavedata.h
index 9bd313c..9d24823 100644
--- a/src/include/wavedata.h
+++ b/src/include/wavedata.h
@@ -17,19 +17,19 @@
along with this software. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef blip_wavedata_h
-#define blip_wavedata_h
+#ifndef blop_wavedata_h
+#define blop_wavedata_h
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
-#include "blip_config.h"
+#include "blop_config.h"
#include "math_func.h"
#include "interpolate.h"
#include "common.h"
/* Functions identifying wavedata dlls */
-#define BLOP_DLSYM_SAWTOOTH "blip_get_sawtooth"
-#define BLOP_DLSYM_SQUARE "blip_get_square"
-#define BLOP_DLSYM_PARABOLA "blip_get_parabola"
+#define BLOP_DLSYM_SAWTOOTH "blop_get_sawtooth"
+#define BLOP_DLSYM_SQUARE "blop_get_square"
+#define BLOP_DLSYM_PARABOLA "blop_get_parabola"
/*
* Structure holding a single segment of sample data
@@ -191,4 +191,4 @@ wavedata_get_table(Wavedata* w,
} /* extern "C" { */
#endif
-#endif /* blip_wavedata_h */
+#endif /* blop_wavedata_h */
diff --git a/src/include/wdatutil.h b/src/include/wdatutil.h
index 931a7f3..a084c7a 100644
--- a/src/include/wdatutil.h
+++ b/src/include/wdatutil.h
@@ -17,8 +17,8 @@
along with this software. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef blip_wdatutil_h
-#define blip_wdatutil_h
+#ifndef blop_wdatutil_h
+#define blop_wdatutil_h
#include <stdio.h>
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
@@ -138,4 +138,4 @@ int wavedata_write(Wavedata* w,
} /* extern "C" { */
#endif
-#endif /* blip_wdatutil_h */
+#endif /* blop_wdatutil_h */
diff --git a/src/interpolator.c b/src/interpolator.c
index 52a6c37..37574ad 100644
--- a/src/interpolator.c
+++ b/src/interpolator.c
@@ -93,8 +93,8 @@ activate(LV2_Handle instance)
}
static void
-runInterpolator(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Interpolator* plugin = (Interpolator*)instance;
@@ -121,11 +121,11 @@ runInterpolator(LV2_Handle instance,
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/interpolator",
+ "http://drobilla.net/plugins/blop/interpolator",
instantiate,
connect_port,
activate,
- runInterpolator,
+ run,
NULL,
cleanup,
NULL,
diff --git a/src/lp4pole.c b/src/lp4pole.c
index a00ca5b..8a7184e 100644
--- a/src/lp4pole.c
+++ b/src/lp4pole.c
@@ -18,9 +18,11 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
#include "lp4pole_filter.h"
#include "common.h"
+#include "uris.h"
#define LP4POLE_CUTOFF 0
#define LP4POLE_RESONANCE 1
@@ -33,6 +35,9 @@ typedef struct {
float* input;
float* output;
LP4PoleFilter* lpf;
+ uint32_t cutoff_is_cv;
+ uint32_t resonance_is_cv;
+ URIs uris;
} Lp4pole;
static void
@@ -68,6 +73,33 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Lp4pole* plugin = (Lp4pole*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case LP4POLE_CUTOFF:
+ plugin->cutoff_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case LP4POLE_RESONANCE:
+ plugin->resonance_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -83,6 +115,10 @@ instantiate(const LV2_Descriptor* descriptor,
plugin = 0;
}
}
+
+ plugin->cutoff_is_cv = 0;
+ plugin->resonance_is_cv = 0;
+
return (LV2_Handle)plugin;
}
@@ -95,15 +131,15 @@ activate(LV2_Handle instance)
}
static void
-runLp4pole_faraia_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Lp4pole* plugin = (Lp4pole*)instance;
- /* Cutoff Frequency (array of floats of length sample_count) */
+ /* Cutoff Frequency (array of floats of length 1 or sample_count) */
const float* cutoff = plugin->cutoff;
- /* Resonance (array of floats of length sample_count) */
+ /* Resonance (array of floats of length 1 or sample_count) */
const float* resonance = plugin->resonance;
/* Input (array of floats of length sample_count) */
@@ -115,61 +151,39 @@ runLp4pole_faraia_oa(LV2_Handle instance,
/* Instance data */
LP4PoleFilter* lpf = plugin->lpf;
- float in;
- float co;
- float res;
-
for (uint32_t s = 0; s < sample_count; ++s) {
- co = cutoff[s];
- res = resonance[s];
- in = input[s];
+ const float co = cutoff[s * plugin->cutoff_is_cv];
+ const float res = resonance[s * plugin->resonance_is_cv];
+ const float in = input[s];
+ /* TODO: There is no branching in this function.
+ Would it actually be faster to check if co or res has changed?
+ */
lp4pole_set_params(lpf, co, res);
output[s] = lp4pole_run(lpf, in);
}
}
-static void
-runLp4pole_fcrcia_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Lp4pole* plugin = (Lp4pole*)instance;
-
- /* Cutoff Frequency (float value) */
- const float cutoff = *(plugin->cutoff);
-
- /* Resonance (float value) */
- const float resonance = *(plugin->resonance);
-
- /* Input (array of floats of length sample_count) */
- const float* input = plugin->input;
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance data */
- LP4PoleFilter* lpf = plugin->lpf;
-
- float in;
-
- lp4pole_set_params(lpf, cutoff, resonance);
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- in = input[s];
- output[s] = lp4pole_run(lpf, in);
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/lp4pole",
+ "http://drobilla.net/plugins/blop/lp4pole",
instantiate,
connect_port,
activate,
- runLp4pole_fcrcia_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/product.c b/src/product.c
index 0b892a1..10872ab 100644
--- a/src/product.c
+++ b/src/product.c
@@ -18,16 +18,22 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
#define PRODUCT_MULTIPLICAND 0
#define PRODUCT_MULTIPLIER 1
#define PRODUCT_PRODUCT 2
typedef struct {
- float* input1;
- float* input2;
- float* output;
+ float* input1;
+ float* input2;
+ float* output;
+ uint32_t input1_is_cv;
+ uint32_t input2_is_cv;
+ uint32_t output_is_cv;
+ URIs uris;
} Product;
static void
@@ -56,6 +62,51 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Product* plugin = (Product*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case PRODUCT_MULTIPLICAND:
+ plugin->input1_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case PRODUCT_MULTIPLIER:
+ plugin->input2_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ plugin->output_is_cv = plugin->input1_is_cv || plugin->input2_is_cv;
+ return LV2_MORPH_SUCCESS;
+}
+
+static LV2_URID
+port_type(LV2_Handle instance,
+ uint32_t port,
+ LV2_Morph_Property*const* properties)
+{
+ Product* plugin = (Product*)instance;
+
+ switch (port) {
+ case PRODUCT_PRODUCT:
+ return (plugin->output_is_cv
+ ? plugin->uris.lv2_CVPort
+ : plugin->uris.lv2_ControlPort);
+ default:
+ return 0;
+ }
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -64,76 +115,60 @@ instantiate(const LV2_Descriptor* descriptor,
{
Product* plugin = (Product*)malloc(sizeof(Product));
+ plugin->input1_is_cv = 0;
+ plugin->input2_is_cv = 0;
+ plugin->output_is_cv = 0;
+
+ map_uris(&plugin->uris, features);
+
return (LV2_Handle)plugin;
}
static void
-runProduct_iaia_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Product* plugin = (Product*)instance;
- /* First Input (array of floats of length sample_count) */
+ /* First Input (array of floats of length 1 or sample_count) */
const float* input1 = plugin->input1;
- /* Second Input (array of floats of length sample_count) */
+ /* Second Input (array of floats of length 1 or sample_count) */
const float* input2 = plugin->input2;
/* Output (array of floats of length sample_count) */
float* output = plugin->output;
- for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = input1[s] * input2[s];
+ if (!plugin->output_is_cv) { /* TODO: Avoid this branch */
+ sample_count = 1;
}
-}
-
-static void
-runProduct_iaic_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Product* plugin = (Product*)instance;
-
- /* First Input (array of floats of length sample_count) */
- const float* input1 = plugin->input1;
-
- /* Second Input (float value) */
- const float input2 = *(plugin->input2);
-
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = input1[s] * input2;
+ const float in1 = input1[s * plugin->input1_is_cv];
+ const float in2 = input2[s * plugin->input2_is_cv];
+ output[s] = in1 * in2;
}
}
-static void
-runProduct_icic_oc(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Product* plugin = (Product*)instance;
-
- /* First Input (float value) */
- const float input1 = *(plugin->input1);
-
- /* Second Input (float value) */
- const float input2 = *(plugin->input2);
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- output[0] = input1 * input2;
+ static const LV2_Morph_Interface morph = { morph_port, port_type };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
+ }
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/product",
+ "http://drobilla.net/plugins/blop/product",
instantiate,
connect_port,
NULL,
- runProduct_iaia_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/pulse.c b/src/pulse.c
index 8890fbd..51b1147 100644
--- a/src/pulse.c
+++ b/src/pulse.c
@@ -18,7 +18,9 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
#include "wavedata.h"
#define PULSE_FREQUENCY 0
@@ -30,7 +32,10 @@ typedef struct {
float* pulsewidth;
float* output;
float phase;
+ uint32_t frequency_is_cv;
+ uint32_t pulsewidth_is_cv;
Wavedata wdat;
+ URIs uris;
} Pulse;
static void
@@ -53,6 +58,33 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Pulse* plugin = (Pulse*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case PULSE_FREQUENCY:
+ plugin->frequency_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case PULSE_PULSEWIDTH:
+ plugin->pulsewidth_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -67,6 +99,11 @@ instantiate(const LV2_Descriptor* descriptor,
return 0;
}
+ plugin->frequency_is_cv = 0;
+ plugin->pulsewidth_is_cv = 0;
+ map_uris(&plugin->uris, features);
+ wavedata_get_table(&plugin->wdat, 440.0);
+
return (LV2_Handle)plugin;
}
@@ -88,8 +125,8 @@ activate(LV2_Handle instance)
}
static void
-runPulse_fapa_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Pulse* plugin = (Pulse*)instance;
@@ -106,114 +143,32 @@ runPulse_fapa_oa(LV2_Handle instance,
Wavedata* wdat = &plugin->wdat;
float phase = plugin->phase;
- float freq;
- float pwidth;
- float phase_shift;
+ float last_pwidth = pulsewidth[0];
+ float pwidth = f_clip(last_pwidth, 0.0f, 1.0f);
+ float dc_shift = 1.0 - (2.0 * pwidth);
+ float phase_shift = pwidth * wdat->sample_rate;
for (uint32_t s = 0; s < sample_count; ++s) {
- freq = frequency[s];
- pwidth = f_clip(pulsewidth[s], 0.0f, 1.0f);
- phase_shift = pwidth * wdat->sample_rate;
-
- /* Lookup which table to use from frequency */
- wavedata_get_table(wdat, freq);
-
- /* Get samples from sawtooth and phase shifted inverted sawtooth,
- with approriate DC offset */
- output[s] = wavedata_get_sample(wdat, phase)
- - wavedata_get_sample(wdat, phase + phase_shift)
- + 1.0f - (2.0f * pwidth);
-
- /* Update phase, wrapping if necessary */
- phase += wdat->frequency;
- if (phase < 0.0f) {
- phase += wdat->sample_rate;
- } else if (phase > wdat->sample_rate) {
- phase -= wdat->sample_rate;
+ const float freq = frequency[s * plugin->frequency_is_cv];
+ if (freq != wdat->frequency) {
+ /* Frequency changed, look up table to play */
+ wavedata_get_table(wdat, freq);
}
- }
- plugin->phase = phase;
-}
-
-static void
-runPulse_fapc_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Pulse* plugin = (Pulse*)instance;
-
- /* Frequency (array of float of length sample_count) */
- const float* frequency = plugin->frequency;
-
- /* Pulse Width (float value) */
- const float pulsewidth = f_clip(*(plugin->pulsewidth), 0.0f, 1.0f);
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
- /* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
-
- float freq;
- float dc_shift = 1.0 - (2.0 * pulsewidth);
- float phase_shift = pulsewidth * wdat->sample_rate;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- freq = frequency[s];
-
- /* Lookup which table to use from frequency */
- wavedata_get_table(wdat, freq);
-
- /* Get samples from sawtooth and phase shifted inverted sawtooth,
- with approriate DC offset */
- output[s] = wavedata_get_sample(wdat, phase)
- - wavedata_get_sample(wdat, phase + phase_shift)
- + dc_shift;
-
- /* Update phase, wrapping if necessary */
- phase += wdat->frequency;
- if (phase < 0.0f) {
- phase += wdat->sample_rate;
- } else if (phase > wdat->sample_rate) {
- phase -= wdat->sample_rate;
+ const float this_pwidth = pulsewidth[s * plugin->pulsewidth_is_cv];
+ if (this_pwidth != last_pwidth) {
+ /* Pulsewidth changed, recalculate */
+ last_pwidth = this_pwidth;
+ pwidth = f_clip(this_pwidth, 0.0f, 1.0f);
+ dc_shift = 1.0f - (2.0f * pwidth);
+ phase_shift = pwidth * wdat->sample_rate;
}
- }
- plugin->phase = phase;
-}
-
-static void
-runPulse_fcpa_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Pulse* plugin = (Pulse*)instance;
-
- /* Frequency (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Pulse Width (array of float of length sample_count) */
- const float* pulsewidth = plugin->pulsewidth;
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
-
- float pwidth;
- float phase_shift;
-
- wavedata_get_table(wdat, frequency);
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- pwidth = f_clip(pulsewidth[s], 0.0f, 1.0f);
- phase_shift = pwidth * wdat->sample_rate;
/* Get samples from sawtooth and phase shifted inverted sawtooth,
with approriate DC offset */
output[s] = wavedata_get_sample(wdat, phase)
- wavedata_get_sample(wdat, phase + phase_shift)
- + 1.0f - (2.0f * pwidth);
+ + dc_shift;
/* Update phase, wrapping if necessary */
phase += wdat->frequency;
@@ -226,57 +181,25 @@ runPulse_fcpa_oa(LV2_Handle instance,
plugin->phase = phase;
}
-static void
-runPulse_fcpc_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Pulse* plugin = (Pulse*)instance;
-
- /* Frequency (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Pulse Width (float value) */
- const float pulsewidth = f_clip(*(plugin->pulsewidth), 0.0f, 1.0f);
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
-
- float dc_shift = 1.0f - (2.0f * pulsewidth);
- float phase_shift = pulsewidth * wdat->sample_rate;
-
- wavedata_get_table(wdat, frequency);
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- /* Get samples from sawtooth and phase shifted inverted sawtooth,
- with approriate DC offset */
- output[s] = wavedata_get_sample(wdat, phase)
- - wavedata_get_sample(wdat, phase + phase_shift)
- + dc_shift;
-
- /* Update phase, wrapping if necessary */
- phase += wdat->frequency;
- if (phase < 0.0f) {
- phase += wdat->sample_rate;
- } else if (phase > wdat->sample_rate) {
- phase -= wdat->sample_rate;
- }
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
- plugin->phase = phase;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/pulse",
+ "http://drobilla.net/plugins/blop/pulse",
instantiate,
connect_port,
activate,
- runPulse_fcpc_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/quantiser.c b/src/quantiser.c
index 793da32..419467f 100644
--- a/src/quantiser.c
+++ b/src/quantiser.c
@@ -205,54 +205,16 @@ instantiate(const LV2_Descriptor* descriptor,
}
static void
-runQuantiser_audio(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Quantiser* plugin = (Quantiser*)instance;
/* Range Min (float value) */
- const float min = *(plugin->min);
+ float min = *(plugin->min);
/* Range Max (float value) */
- const float max = *(plugin->max);
-
- /* Match Range (float value) */
- const float match_range = *(plugin->match_range);
-
- /* Mode (float value) */
- const float mode = *(plugin->mode);
-
- /* Count (float value) */
- const float count = *(plugin->count);
-
- /* Input (array of float of length sample_count) */
- const float* input = plugin->input;
-
- /* Values */
- float* values[QUANTISER_MAX_INPUTS];
-
- /* Output (array of float of length sample_count) */
- float* output = plugin->output;
-
- /* Output Changed (array of float of length sample_count) */
- float* output_changed = plugin->output_changed;
-
- for (uint32_t s = 0; s < sample_count; s++) {
- output[s] = input[s];
- }
-}
-
-static void
-runQuantiser_control(LV2_Handle instance,
- uint32_t sample_count)
-{
- Quantiser* plugin = (Quantiser*)instance;
-
- /* Range Min (float value) */
- const float min = *(plugin->min);
-
- /* Range Max (float value) */
- const float max = *(plugin->max);
+ float max = *(plugin->max);
/* Match Range (float value) */
const float match_range = FABSF(*(plugin->match_range));
@@ -469,3 +431,23 @@ runQuantiser_control(LV2_Handle instance,
}
plugin->last_found = last_found;
}
+
+static const LV2_Descriptor descriptor = {
+ QUANTISER_URI,
+ instantiate,
+ connect_port,
+ NULL,
+ run,
+ NULL,
+ cleanup,
+ NULL
+};
+
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
+lv2_descriptor(uint32_t index)
+{
+ switch (index) {
+ case 0: return &descriptor;
+ default: return NULL;
+ }
+}
diff --git a/src/random.c b/src/random.c
index 4a6f5b8..0981583 100644
--- a/src/random.c
+++ b/src/random.c
@@ -18,24 +18,29 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
#include <time.h>
#include "math_func.h"
#include "common.h"
+#include "uris.h"
#define RANDOM_FREQUENCY 0
#define RANDOM_SMOOTH 1
#define RANDOM_OUTPUT 2
typedef struct {
- float* frequency;
- float* smooth;
- float* output;
- float nyquist;
- float inv_nyquist;
- float phase;
- float value1;
- float value2;
+ float* frequency;
+ float* smooth;
+ float* output;
+ float nyquist;
+ float inv_nyquist;
+ float phase;
+ float value1;
+ float value2;
+ uint32_t frequency_is_cv;
+ uint32_t smooth_is_cv;
+ URIs uris;
} Random;
float inv_rand_max;
@@ -66,6 +71,33 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Random* plugin = (Random*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case RANDOM_FREQUENCY:
+ plugin->frequency_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case RANDOM_SMOOTH:
+ plugin->smooth_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -84,6 +116,9 @@ instantiate(const LV2_Descriptor* descriptor,
plugin->value1 = rand() * inv_rand_max - 1.0f;
plugin->value2 = rand() * inv_rand_max - 1.0f;
+ plugin->frequency_is_cv = 0;
+ plugin->smooth_is_cv = 0;
+
return (LV2_Handle)plugin;
}
@@ -96,15 +131,15 @@ activate(LV2_Handle instance)
}
static void
-runRandom_fasa_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Random* plugin = (Random*)instance;
- /* Frequency (Hz) (array of floats of length sample_count) */
+ /* Frequency (Hz) (array of floats of length 1 or sample_count) */
const float* frequency = plugin->frequency;
- /* Wave smoothness (array of floats of length sample_count) */
+ /* Wave smoothness (array of floats of length 1 or sample_count) */
const float* smooth = plugin->smooth;
/* Output (array of floats of length sample_count) */
@@ -117,132 +152,16 @@ runRandom_fasa_oa(LV2_Handle instance,
float value1 = plugin->value1;
float value2 = plugin->value2;
- float freq;
- float smth;
- float interval;
float result;
for (uint32_t s = 0; s < sample_count; ++s) {
- freq = f_clip(frequency[s], 0.0f, nyquist);
+ const float freq = f_clip(frequency[s * plugin->frequency_is_cv],
+ 0.0f, nyquist);
- smth = f_clip(smooth[s], 0.0f, 1.0f);
- interval = (1.0f - smth) * 0.5f;
+ const float smth = f_clip(smooth[s * plugin->smooth_is_cv],
+ 0.0f, 1.0f);
- if (phase < interval) {
- result = 1.0f;
- } else if (phase > (1.0f - interval)) {
- result = -1.0f;
- } else if (interval > 0.0f) {
- result = COSF((phase - interval) / smth * M_PI);
- } else {
- result = COSF(phase * M_PI);
- }
-
- result *= (value2 - value1) * 0.5f;
- result -= (value2 + value1) * 0.5f;
-
- output[s] = result;
-
- phase += freq * inv_nyquist;
- if (phase > 1.0f) {
- phase -= 1.0f;
- value1 = value2;
- value2 = (float)rand() * inv_rand_max - 1.0f;
- }
- }
-
- plugin->phase = phase;
- plugin->value1 = value1;
- plugin->value2 = value2;
-}
-
-static void
-runRandom_fasc_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Random* plugin = (Random*)instance;
-
- /* Frequency (Hz) (array of floats of length sample_count) */
- const float* frequency = plugin->frequency;
-
- /* Wave smoothness (float value) */
- const float smooth = f_clip(*(plugin->smooth), 0.0f, 1.0f);
-
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
-
- /* Instance data */
- float nyquist = plugin->nyquist;
- float inv_nyquist = plugin->inv_nyquist;
- float phase = plugin->phase;
- float value1 = plugin->value1;
- float value2 = plugin->value2;
-
- float freq;
- float interval = (1.0f - smooth) * 0.5f;
- float result;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- freq = f_clip(frequency[s], 0.0f, nyquist);
-
- if (phase < interval) {
- result = 1.0f;
- } else if (phase > (1.0f - interval)) {
- result = -1.0f;
- } else if (interval > 0.0f) {
- result = COSF((phase - interval) / smooth * M_PI);
- } else {
- result = COSF(phase * M_PI);
- }
-
- result *= (value2 - value1) * 0.5f;
- result -= (value2 + value1) * 0.5f;
-
- output[s] = result;
-
- phase += freq * inv_nyquist;
- if (phase > 1.0f) {
- phase -= 1.0f;
- value1 = value2;
- value2 = (float)rand() * inv_rand_max - 1.0f;
- }
- }
-
- plugin->phase = phase;
- plugin->value1 = value1;
- plugin->value2 = value2;
-}
-
-static void
-runRandom_fcsa_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Random* plugin = (Random*)instance;
-
- /* Frequency (Hz) (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Wave smoothness (array of floats of length sample_count) */
- const float* smooth = plugin->smooth;
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance data */
- float nyquist = plugin->nyquist;
- float inv_nyquist = plugin->inv_nyquist;
- float phase = plugin->phase;
- float value1 = plugin->value1;
- float value2 = plugin->value2;
-
- float phase_scale = f_clip(frequency, 0.0f, nyquist) * inv_nyquist;
- float smth;
- float interval;
- float result;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- smth = f_clip(smooth[s], 0.0f, 1.0f);
- interval = (1.0f - smth) * 0.5f;
+ const float interval = (1.0f - smth) * 0.5f;
if (phase < interval) {
result = 1.0f;
@@ -259,7 +178,7 @@ runRandom_fcsa_oa(LV2_Handle instance,
output[s] = result;
- phase += phase_scale;
+ phase += freq * inv_nyquist;
if (phase > 1.0f) {
phase -= 1.0f;
value1 = value2;
@@ -272,70 +191,25 @@ runRandom_fcsa_oa(LV2_Handle instance,
plugin->value2 = value2;
}
-static void
-runRandom_fcsc_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Random* plugin = (Random*)instance;
-
- /* Frequency (Hz) (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Wave smoothness (float value) */
- const float smooth = f_clip(*(plugin->smooth), 0.0f, 1.0f);
-
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
-
- /* Instance data */
- float nyquist = plugin->nyquist;
- float inv_nyquist = plugin->inv_nyquist;
- float phase = plugin->phase;
- float value1 = plugin->value1;
- float value2 = plugin->value2;
-
- float phase_scale = f_clip(frequency, 0.0f, nyquist) * inv_nyquist;
- float interval = (1.0f - smooth) * 0.5f;
- float result;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- if (phase < interval) {
- result = 1.0f;
- } else if (phase > (1.0f - interval)) {
- result = -1.0f;
- } else if (interval > 0.0f) {
- result = COSF((phase - interval) / smooth * M_PI);
- } else {
- result = COSF(phase * M_PI);
- }
-
- result *= (value2 - value1) * 0.5f;
- result -= (value2 + value1) * 0.5f;
-
- output[s] = result;
-
- phase += phase_scale;
- if (phase > 1.0f) {
- phase -= 1.0f;
- value1 = value2;
- value2 = (float)rand() * inv_rand_max - 1.0f;
- }
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
-
- plugin->phase = phase;
- plugin->value1 = value1;
- plugin->value2 = value2;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/random",
+ "http://drobilla.net/plugins/blop/random",
instantiate,
connect_port,
activate,
- runRandom_fcsc_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/ratio.c b/src/ratio.c
index 4659f4f..170a5a5 100644
--- a/src/ratio.c
+++ b/src/ratio.c
@@ -18,18 +18,24 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
#include "math_func.h"
#include "common.h"
+#include "uris.h"
#define RATIO_NUMERATOR 0
#define RATIO_DENOMINATOR 1
#define RATIO_OUTPUT 2
typedef struct {
- float* numerator;
- float* denominator;
- float* output;
+ float* numerator;
+ float* denominator;
+ float* output;
+ uint32_t numerator_is_cv;
+ uint32_t denominator_is_cv;
+ uint32_t output_is_cv;
+ URIs uris;
} Ratio;
static void
@@ -58,6 +64,51 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Ratio* plugin = (Ratio*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case RATIO_NUMERATOR:
+ plugin->numerator_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case RATIO_DENOMINATOR:
+ plugin->denominator_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ plugin->output_is_cv = plugin->numerator_is_cv || plugin->denominator_is_cv;
+ return LV2_MORPH_SUCCESS;
+}
+
+static LV2_URID
+port_type(LV2_Handle instance,
+ uint32_t port,
+ LV2_Morph_Property*const* properties)
+{
+ Ratio* plugin = (Ratio*)instance;
+
+ switch (port) {
+ case RATIO_OUTPUT:
+ return (plugin->output_is_cv
+ ? plugin->uris.lv2_CVPort
+ : plugin->uris.lv2_ControlPort);
+ default:
+ return 0;
+ }
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -66,12 +117,18 @@ instantiate(const LV2_Descriptor* descriptor,
{
Ratio* plugin = (Ratio*)malloc(sizeof(Ratio));
+ plugin->numerator_is_cv = 0;
+ plugin->denominator_is_cv = 0;
+ plugin->output_is_cv = 0;
+
+ map_uris(&plugin->uris, features);
+
return (LV2_Handle)plugin;
}
static void
-runRatio_nada_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Ratio* plugin = (Ratio*)instance;
@@ -84,90 +141,39 @@ runRatio_nada_oa(LV2_Handle instance,
/* Output (array of floats of length sample_count) */
float* output = plugin->output;
- for (uint32_t s = 0; s < sample_count; ++s) {
- const float n = numerator[s];
- float d = denominator[s];
-
- d = COPYSIGNF(f_max(FABSF(d), 1e-16f), d);
-
- output[s] = n / d;
+ if (!plugin->output_is_cv) { /* TODO: Avoid this branch */
+ sample_count = 1;
}
-}
-
-static void
-runRatio_nadc_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Ratio* plugin = (Ratio*)instance;
-
- /* Numerator (array of floats of length sample_count) */
- const float* numerator = plugin->numerator;
-
- /* Denominator (float value) */
- float denominator = *(plugin->denominator);
-
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
-
- denominator = COPYSIGNF(f_max(FABSF(denominator), 1e-16f), denominator);
for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = numerator[s] / denominator;
- }
-}
-
-static void
-runRatio_ncda_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Ratio* plugin = (Ratio*)instance;
+ const float n = numerator[s * plugin->numerator_is_cv];
+ float d = denominator[s * plugin->denominator_is_cv];
- /* Numerator (float value) */
- const float numerator = *(plugin->numerator);
-
- /* Denominator (array of floats of length sample_count) */
- const float* denominator = plugin->denominator;
-
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- float d = denominator[s];
d = COPYSIGNF(f_max(FABSF(d), 1e-16f), d);
- output[s] = numerator / d;
+ output[s] = n / d;
}
}
-static void
-runRatio_ncdc_oc(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Ratio* plugin = (Ratio*)instance;
-
- /* Numerator (float value) */
- const float numerator = *(plugin->numerator);
-
- /* Denominator (float value) */
- float denominator = *(plugin->denominator);
-
- /* Output Frequency (pointer to float value) */
- float* output = plugin->output;
-
- denominator = COPYSIGNF(f_max(FABSF(denominator), 1e-16f), denominator);
-
- output[0] = numerator / denominator;
+ static const LV2_Morph_Interface morph = { morph_port, port_type };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
+ }
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/ratio",
+ "http://drobilla.net/plugins/blop/ratio",
instantiate,
connect_port,
NULL,
- runRatio_nada_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/sawtooth.c b/src/sawtooth.c
index 3c242e1..0af927e 100644
--- a/src/sawtooth.c
+++ b/src/sawtooth.c
@@ -18,7 +18,9 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
#include "wavedata.h"
#define SAWTOOTH_FREQUENCY 0
@@ -28,7 +30,9 @@ typedef struct {
float* frequency;
float* output;
float phase;
+ uint32_t frequency_is_cv;
Wavedata wdat;
+ URIs uris;
} Sawtooth;
static void
@@ -48,6 +52,23 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Sawtooth* plugin = (Sawtooth*)instance;
+ if (type == plugin->uris.lv2_ControlPort) {
+ plugin->frequency_is_cv = 0;
+ } else if (type == plugin->uris.lv2_CVPort) {
+ plugin->frequency_is_cv = 1;
+ } else {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -62,6 +83,10 @@ instantiate(const LV2_Descriptor* descriptor,
return 0;
}
+ plugin->frequency_is_cv = 0;
+ map_uris(&plugin->uris, features);
+ wavedata_get_table(&plugin->wdat, 440.0);
+
return (LV2_Handle)plugin;
}
@@ -83,12 +108,12 @@ activate(LV2_Handle instance)
}
static void
-runSawtooth_fa_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Sawtooth* plugin = (Sawtooth*)instance;
- /* Frequency (array of float of length sample_count) */
+ /* Frequency (array of float of length 1 or sample_count) */
const float* frequency = plugin->frequency;
/* Output (pointer to float value) */
@@ -99,8 +124,11 @@ runSawtooth_fa_oa(LV2_Handle instance,
float phase = plugin->phase;
for (uint32_t s = 0; s < sample_count; s++) {
- /* Lookup table to play */
- wavedata_get_table(wdat, frequency[s]);
+ const float freq = frequency[s * plugin->frequency_is_cv];
+ if (freq != wdat->frequency) {
+ /* Frequency changed, look up table to play */
+ wavedata_get_table(wdat, freq);
+ }
output[s] = wavedata_get_sample(wdat, phase);
@@ -115,47 +143,25 @@ runSawtooth_fa_oa(LV2_Handle instance,
plugin->phase = phase;
}
-static void
-runSawtooth_fc_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Sawtooth* plugin = (Sawtooth*)instance;
-
- /* Frequency (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
-
- wavedata_get_table(wdat, frequency);
-
- for (uint32_t s = 0; s < sample_count; s++) {
- output[s] = wavedata_get_sample(wdat, phase);
-
- /* Update phase, wrapping if necessary */
- phase += wdat->frequency;
- if (phase < 0.0f) {
- phase += wdat->sample_rate;
- } else if (phase > wdat->sample_rate) {
- phase -= wdat->sample_rate;
- }
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
- plugin->phase = phase;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/sawtooth",
+ "http://drobilla.net/plugins/blop/sawtooth",
instantiate,
connect_port,
activate,
- runSawtooth_fc_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/sequencer.c b/src/sequencer.c
index ef22a8a..e77a58d 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -113,8 +113,8 @@ activate(LV2_Handle instance)
}
static void
-runSequencer(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Sequencer* plugin = (Sequencer*)instance;
@@ -145,7 +145,7 @@ runSequencer(LV2_Handle instance,
unsigned int step_index = plugin->step_index;
unsigned int loop_index = LRINTF(loop_steps);
- int rst = LRINTF(reset);
+ int rst = reset > 0.0f;
int i;
loop_index = loop_index == 0 ? 1 : loop_index;
@@ -191,3 +191,23 @@ runSequencer(LV2_Handle instance,
plugin->last_value = last_value;
plugin->step_index = step_index;
}
+
+static const LV2_Descriptor descriptor = {
+ SEQUENCER_URI,
+ instantiate,
+ connect_port,
+ activate,
+ run,
+ NULL,
+ cleanup,
+ NULL
+};
+
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
+lv2_descriptor(uint32_t index)
+{
+ switch (index) {
+ case 0: return &descriptor;
+ default: return NULL;
+ }
+}
diff --git a/src/square.c b/src/square.c
index fb78859..3e7f78f 100644
--- a/src/square.c
+++ b/src/square.c
@@ -18,7 +18,9 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
#include "wavedata.h"
#define SQUARE_FREQUENCY 0
@@ -28,7 +30,9 @@ typedef struct {
float* frequency;
float* output;
float phase;
+ uint32_t frequency_is_cv;
Wavedata wdat;
+ URIs uris;
} Square;
static void
@@ -48,6 +52,23 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Square* plugin = (Square*)instance;
+ if (type == plugin->uris.lv2_ControlPort) {
+ plugin->frequency_is_cv = 0;
+ } else if (type == plugin->uris.lv2_CVPort) {
+ plugin->frequency_is_cv = 1;
+ } else {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -62,6 +83,10 @@ instantiate(const LV2_Descriptor* descriptor,
return NULL;
}
+ plugin->frequency_is_cv = 0;
+ map_uris(&plugin->uris, features);
+ wavedata_get_table(&plugin->wdat, 440.0);
+
return (LV2_Handle)plugin;
}
@@ -83,8 +108,8 @@ activate(LV2_Handle instance)
}
static void
-runSquare_fa_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Square* plugin = (Square*)instance;
@@ -99,8 +124,11 @@ runSquare_fa_oa(LV2_Handle instance,
float phase = plugin->phase;
for (uint32_t s = 0; s < sample_count; ++s) {
- /* Get table to play */
- wavedata_get_table(wdat, frequency[s]);
+ const float freq = frequency[s * plugin->frequency_is_cv];
+ if (freq != wdat->frequency) {
+ /* Frequency changed, look up table to play */
+ wavedata_get_table(wdat, freq);
+ }
/* Get interpolated sample */
output[s] = wavedata_get_sample(wdat, phase);
@@ -116,47 +144,25 @@ runSquare_fa_oa(LV2_Handle instance,
plugin->phase = phase;
}
-static void
-runSquare_fc_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Square* plugin = (Square*)instance;
-
- /* Frequency (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
-
- wavedata_get_table(wdat, frequency);
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = wavedata_get_sample(wdat, phase);
-
- /* Update phase, wrapping if necessary */
- phase += wdat->frequency;
- if (phase < 0.0f) {
- phase += wdat->sample_rate;
- } else if (phase > wdat->sample_rate) {
- phase -= wdat->sample_rate;
- }
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
- plugin->phase = phase;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/square",
+ "http://drobilla.net/plugins/blop/square",
instantiate,
connect_port,
activate,
- runSquare_fc_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/sum.c b/src/sum.c
index 2384d73..8264a32 100644
--- a/src/sum.c
+++ b/src/sum.c
@@ -18,16 +18,22 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
#define SUM_INPUT1 0
#define SUM_INPUT2 1
#define SUM_OUTPUT 2
typedef struct {
- float* input1;
- float* input2;
- float* output;
+ float* input1;
+ float* input2;
+ float* output;
+ uint32_t input1_is_cv;
+ uint32_t input2_is_cv;
+ uint32_t output_is_cv;
+ URIs uris;
} Sum;
static void
@@ -56,6 +62,51 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Sum* plugin = (Sum*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case SUM_INPUT1:
+ plugin->input1_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case SUM_INPUT2:
+ plugin->input2_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ plugin->output_is_cv = plugin->input1_is_cv || plugin->input2_is_cv;
+ return LV2_MORPH_SUCCESS;
+}
+
+static LV2_URID
+port_type(LV2_Handle instance,
+ uint32_t port,
+ LV2_Morph_Property*const* properties)
+{
+ Sum* plugin = (Sum*)instance;
+
+ switch (port) {
+ case SUM_OUTPUT:
+ return (plugin->output_is_cv
+ ? plugin->uris.lv2_CVPort
+ : plugin->uris.lv2_ControlPort);
+ default:
+ return 0;
+ }
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -64,12 +115,18 @@ instantiate(const LV2_Descriptor* descriptor,
{
Sum* plugin = (Sum*)malloc(sizeof(Sum));
+ plugin->input1_is_cv = 0;
+ plugin->input2_is_cv = 0;
+ plugin->output_is_cv = 0;
+
+ map_uris(&plugin->uris, features);
+
return (LV2_Handle)plugin;
}
static void
-runSum_iaia_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Sum* plugin = (Sum*)instance;
@@ -82,58 +139,36 @@ runSum_iaia_oa(LV2_Handle instance,
/* Output (array of floats of length sample_count) */
float* output = plugin->output;
- for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = input1[s] + input2[s];
+ if (!plugin->output_is_cv) { /* TODO: Avoid this branch */
+ sample_count = 1;
}
-}
-
-static void
-runSum_iaic_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Sum* plugin = (Sum*)instance;
-
- /* First Input (array of floats of length sample_count) */
- const float* input1 = plugin->input1;
-
- /* Second Input (float value) */
- const float input2 = *(plugin->input2);
-
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
for (uint32_t s = 0; s < sample_count; ++s) {
- output[s] = input1[s] + input2;
+ const float in1 = input1[s * plugin->input1_is_cv];
+ const float in2 = input2[s * plugin->input2_is_cv];
+ output[s] = in1 + in2;
}
}
-static void
-runSum_icic_oc(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Sum* plugin = (Sum*)instance;
-
- /* First Input (float value) */
- const float input1 = *(plugin->input1);
-
- /* Second Input (float value) */
- const float input2 = *(plugin->input2);
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- output[0] = input1 + input2;
+ static const LV2_Morph_Interface morph = { morph_port, port_type };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
+ }
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/sum",
+ "http://drobilla.net/plugins/blop/sum",
instantiate,
connect_port,
NULL,
- runSum_iaia_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/sync_pulse.c b/src/sync_pulse.c
index 96f90c7..14d9c8d 100644
--- a/src/sync_pulse.c
+++ b/src/sync_pulse.c
@@ -19,7 +19,9 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
#include "common.h"
#define SYNCPULSE_FREQUENCY 0
@@ -28,12 +30,15 @@
#define SYNCPULSE_OUTPUT 3
typedef struct {
- float* frequency;
- float* pulsewidth;
- float* gate;
- float* output;
- float srate;
- float phase;
+ float* frequency;
+ float* pulsewidth;
+ float* gate;
+ float* output;
+ float srate;
+ float phase;
+ uint32_t frequency_is_cv;
+ uint32_t pulsewidth_is_cv;
+ URIs uris;
} SyncPulse;
static void
@@ -65,6 +70,33 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ SyncPulse* plugin = (SyncPulse*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case SYNCPULSE_FREQUENCY:
+ plugin->frequency_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case SYNCPULSE_PULSEWIDTH:
+ plugin->pulsewidth_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -73,7 +105,10 @@ instantiate(const LV2_Descriptor* descriptor,
{
SyncPulse* plugin = (SyncPulse*)malloc(sizeof(SyncPulse));
- plugin->srate = (float)sample_rate;
+ plugin->srate = (float)sample_rate;
+ plugin->frequency_is_cv = 0;
+ plugin->pulsewidth_is_cv = 0;
+ map_uris(&plugin->uris, features);
return (LV2_Handle)plugin;
}
@@ -87,8 +122,8 @@ activate(LV2_Handle instance)
}
static void
-runSyncPulse_fapaga_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
SyncPulse* plugin = (SyncPulse*)instance;
@@ -108,13 +143,11 @@ runSyncPulse_fapaga_oa(LV2_Handle instance,
float phase = plugin->phase;
float srate = plugin->srate;
- float freq;
- float pwidth;
-
for (uint32_t s = 0; s < sample_count; ++s) {
if (gate[s] > 0.0f) {
- freq = frequency[s];
- pwidth = f_clip(pulsewidth[s], 0.0f, 1.0f) * srate;
+ const float freq = frequency[s * plugin->frequency_is_cv];
+ const float pw = pulsewidth[s * plugin->pulsewidth_is_cv];
+ const float pwidth = f_clip(pw, 0.0f, 1.0f) * srate;
if (phase < pwidth) {
output[s] = 1.0f;
@@ -137,62 +170,25 @@ runSyncPulse_fapaga_oa(LV2_Handle instance,
plugin->phase = phase;
}
-static void
-runSyncPulse_fcpcga_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- SyncPulse* plugin = (SyncPulse*)instance;
-
- /* Frequency (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Pulse Width (float value) */
- float pulsewidth = f_clip(*(plugin->pulsewidth), 0.0f, 1.0f);
-
- /* Gate (array of float of length sample_count) */
- const float* gate = plugin->gate;
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance Data */
- float phase = plugin->phase;
- float srate = plugin->srate;
-
- pulsewidth *= srate;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- if (gate[s] > 0.0f) {
- if (phase < pulsewidth) {
- output[s] = 1.0f;
- } else {
- output[s] = -1.0f;
- }
-
- phase += frequency;
- if (phase < 0.0f) {
- phase += srate;
- } else if (phase > srate) {
- phase -= srate;
- }
- } else {
- output[s] = 0.0f;
- phase = 0.0f;
- }
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
-
- plugin->phase = phase;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/sync_pulse",
+ "http://drobilla.net/plugins/blop/sync_pulse",
instantiate,
connect_port,
activate,
- runSyncPulse_fcpcga_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/sync_square.c b/src/sync_square.c
index 51ceac5..e954a46 100644
--- a/src/sync_square.c
+++ b/src/sync_square.c
@@ -19,19 +19,23 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
#define SYNCSQUARE_FREQUENCY 0
#define SYNCSQUARE_GATE 1
#define SYNCSQUARE_OUTPUT 2
typedef struct {
- float* frequency;
- float* gate;
- float* output;
- float srate;
- float nyquist;
- float phase;
+ float* frequency;
+ float* gate;
+ float* output;
+ float srate;
+ float nyquist;
+ float phase;
+ uint32_t frequency_is_cv;
+ URIs uris;
} SyncSquare;
static void
@@ -60,6 +64,31 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ SyncSquare* plugin = (SyncSquare*)instance;
+
+ switch (port) {
+ case SYNCSQUARE_FREQUENCY:
+ if (type == plugin->uris.lv2_ControlPort) {
+ plugin->frequency_is_cv = 0;
+ } else if (type == plugin->uris.lv2_CVPort) {
+ plugin->frequency_is_cv = 1;
+ } else {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+ return LV2_MORPH_SUCCESS;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -68,8 +97,10 @@ instantiate(const LV2_Descriptor* descriptor,
{
SyncSquare* plugin = (SyncSquare*)malloc(sizeof(SyncSquare));
- plugin->srate = (float)sample_rate;
- plugin->nyquist = (float)(sample_rate / 2);
+ plugin->srate = (float)sample_rate;
+ plugin->nyquist = (float)(sample_rate / 2.0f);
+ plugin->frequency_is_cv = 0;
+ map_uris(&plugin->uris, features);
return (LV2_Handle)plugin;
}
@@ -83,12 +114,12 @@ activate(LV2_Handle instance)
}
static void
-runSyncSquare_faga_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
SyncSquare* plugin = (SyncSquare*)instance;
- /* Frequency (array of float of length sample_count) */
+ /* Frequency (array of float of length 1 or sample_count) */
const float* frequency = plugin->frequency;
/* Gate (array of float of length sample_count) */
@@ -102,11 +133,9 @@ runSyncSquare_faga_oa(LV2_Handle instance,
float srate = plugin->srate;
float nyquist = plugin->nyquist;
- float freq;
-
for (uint32_t s = 0; s < sample_count; ++s) {
if (gate[s] > 0.0f) {
- freq = frequency[s];
+ const float freq = frequency[s * plugin->frequency_is_cv];
if (phase < nyquist) {
output[s] = 1.0f;
@@ -129,58 +158,25 @@ runSyncSquare_faga_oa(LV2_Handle instance,
plugin->phase = phase;
}
-static void
-runSyncSquare_fcga_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- SyncSquare* plugin = (SyncSquare*)instance;
-
- /* Frequency (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Gate (array of float of length sample_count) */
- const float* gate = plugin->gate;
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance Data */
- float phase = plugin->phase;
- float srate = plugin->srate;
- float nyquist = plugin->nyquist;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- if (gate[s] > 0.0f) {
- if (phase < nyquist) {
- output[s] = 1.0f;
- } else {
- output[s] = -1.0f;
- }
-
- phase += frequency;
- if (phase < 0.0f) {
- phase += srate;
- } else if (phase > srate) {
- phase -= srate;
- }
- } else {
- output[s] = 0.0f;
- phase = 0.0f;
- }
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
-
- plugin->phase = phase;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/sync_square",
+ "http://drobilla.net/plugins/blop/sync_square",
instantiate,
connect_port,
activate,
- runSyncSquare_fcga_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/tracker.c b/src/tracker.c
index cb93bf8..706c8a1 100644
--- a/src/tracker.c
+++ b/src/tracker.c
@@ -18,8 +18,10 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
#include "common.h"
+#include "uris.h"
#define TRACKER_GATE 0
#define TRACKER_HATTACK 1
@@ -30,15 +32,20 @@
#define TRACKER_OUTPUT 6
typedef struct {
- float* gate;
- float* hattack;
- float* hdecay;
- float* lattack;
- float* ldecay;
- float* input;
- float* output;
- float coeff;
- float last_value;
+ float* gate;
+ float* hattack;
+ float* hdecay;
+ float* lattack;
+ float* ldecay;
+ float* input;
+ float* output;
+ float coeff;
+ float last_value;
+ uint32_t hattack_is_cv;
+ uint32_t hdecay_is_cv;
+ uint32_t lattack_is_cv;
+ uint32_t ldecay_is_cv;
+ URIs uris;
} Tracker;
static void
@@ -79,6 +86,39 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Tracker* plugin = (Tracker*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case TRACKER_HATTACK:
+ plugin->hattack_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case TRACKER_HDECAY:
+ plugin->hdecay_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case TRACKER_LATTACK:
+ plugin->lattack_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case TRACKER_LDECAY:
+ plugin->ldecay_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -89,6 +129,13 @@ instantiate(const LV2_Descriptor* descriptor,
plugin->coeff = 2.0f * M_PI / (float)sample_rate;
+ plugin->hattack_is_cv = 0;
+ plugin->hdecay_is_cv = 0;
+ plugin->lattack_is_cv = 0;
+ plugin->ldecay_is_cv = 0;
+
+ map_uris(&plugin->uris, features);
+
return (LV2_Handle)plugin;
}
@@ -101,24 +148,24 @@ activate(LV2_Handle instance)
}
static void
-runTracker_gaaadaia_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Tracker* plugin = (Tracker*)instance;
/* Gate (array of floats of length sample_count) */
const float* gate = plugin->gate;
- /* Gate High Attack Rate (array of floats of length sample_count) */
+ /* Gate High Attack Rate (array of floats of length 1 or sample_count) */
const float* hattack = plugin->hattack;
- /* Gate High Decay Rate (array of floats of length sample_count) */
+ /* Gate High Decay Rate (array of floats of length 1 or sample_count) */
const float* hdecay = plugin->hdecay;
- /* Gate Low Attack Rate (array of floats of length sample_count) */
+ /* Gate Low Attack Rate (array of floats of length 1 or sample_count) */
const float* lattack = plugin->lattack;
- /* Gate Low Decay Rate (array of floats of length sample_count) */
+ /* Gate Low Decay Rate (array of floats of length 1 or sample_count) */
const float* ldecay = plugin->ldecay;
/* Input (array of floats of length sample_count) */
@@ -131,16 +178,18 @@ runTracker_gaaadaia_oa(LV2_Handle instance,
float coeff = plugin->coeff;
float last_value = plugin->last_value;
- float rate;
- float in;
-
for (uint32_t s = 0; s < sample_count; ++s) {
- in = input[s];
+ const float in = input[s];
+ const float ha = hattack[s * plugin->hattack_is_cv];
+ const float hd = hdecay[s * plugin->hdecay_is_cv];
+ const float la = lattack[s * plugin->lattack_is_cv];
+ const float ld = ldecay[s * plugin->ldecay_is_cv];
+ float rate;
if (gate[s] > 0.0f) {
- rate = in > last_value ? hattack[s] : hdecay[s];
+ rate = in > last_value ? ha : hd;
} else {
- rate = in > last_value ? lattack[s] : ldecay[s];
+ rate = in > last_value ? la : ld;
}
rate = f_min(1.0f, rate * coeff);
@@ -152,71 +201,25 @@ runTracker_gaaadaia_oa(LV2_Handle instance,
plugin->last_value = last_value;
}
-static void
-runTracker_gaacdcia_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Tracker* plugin = (Tracker*)instance;
-
- /* Gate (array of floats of length sample_count) */
- const float* gate = plugin->gate;
-
- /* Gate High Attack Rate (float value) */
- float hattack = *(plugin->hattack);
-
- /* Gate High Decay Rate (float value) */
- float hdecay = *(plugin->hdecay);
-
- /* Gate Low Attack Rate (float value) */
- float lattack = *(plugin->lattack);
-
- /* Gate Low Decay Rate (float value) */
- float ldecay = *(plugin->ldecay);
-
- /* Input (array of floats of length sample_count) */
- const float* input = plugin->input;
-
- /* Output (array of floats of length sample_count) */
- float* output = plugin->output;
-
- /* Instance Data */
- float coeff = plugin->coeff;
- float last_value = plugin->last_value;
-
- float in;
- float rate;
-
- hattack = f_min(1.0f, hattack * coeff);
- hdecay = f_min(1.0f, hdecay * coeff);
- lattack = f_min(1.0f, lattack * coeff);
- ldecay = f_min(1.0f, ldecay * coeff);
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- in = input[s];
-
- if (gate[s] > 0.0f) {
- rate = in > last_value ? hattack : hdecay;
- } else {
- rate = in > last_value ? lattack : ldecay;
- }
-
- last_value = last_value * (1.0f - rate) + in * rate;
-
- output[s] = last_value;
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
-
- plugin->last_value = last_value;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/tracker",
+ "http://drobilla.net/plugins/blop/tracker",
instantiate,
connect_port,
activate,
- runTracker_gaacdcia_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/triangle.c b/src/triangle.c
index 0a06f6c..8cb32a6 100644
--- a/src/triangle.c
+++ b/src/triangle.c
@@ -18,7 +18,9 @@
*/
#include <stdlib.h>
+#include "lv2/lv2plug.in/ns/ext/morph/morph.h"
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "uris.h"
#include "wavedata.h"
#define TRIANGLE_FREQUENCY 0
@@ -32,7 +34,10 @@ typedef struct {
float phase;
float min_slope;
float max_slope;
+ uint32_t frequency_is_cv;
+ uint32_t slope_is_cv;
Wavedata wdat;
+ URIs uris;
} Triangle;
static void
@@ -55,6 +60,33 @@ connect_port(LV2_Handle instance,
}
}
+static LV2_Morph_Status
+morph_port(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties)
+{
+ Triangle* plugin = (Triangle*)instance;
+
+ if (type != plugin->uris.lv2_ControlPort &&
+ type != plugin->uris.lv2_CVPort) {
+ return LV2_MORPH_ERR_BAD_TYPE;
+ }
+
+ switch (port) {
+ case TRIANGLE_FREQUENCY:
+ plugin->frequency_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ case TRIANGLE_SLOPE:
+ plugin->slope_is_cv = (type == plugin->uris.lv2_CVPort);
+ break;
+ default:
+ return LV2_MORPH_ERR_BAD_PORT;
+ }
+
+ return LV2_MORPH_SUCCESS;
+}
+
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor,
double sample_rate,
@@ -72,6 +104,12 @@ instantiate(const LV2_Descriptor* descriptor,
plugin->min_slope = 2.0f / plugin->wdat.sample_rate;
plugin->max_slope = 1.0f - plugin->min_slope;
+ plugin->frequency_is_cv = 0;
+ plugin->slope_is_cv = 0;
+
+ map_uris(&plugin->uris, features);
+ wavedata_get_table(&plugin->wdat, 440.0);
+
return (LV2_Handle)plugin;
}
@@ -93,141 +131,51 @@ activate(LV2_Handle instance)
}
static void
-runTriangle_fasa_oa(LV2_Handle instance,
- uint32_t sample_count)
+run(LV2_Handle instance,
+ uint32_t sample_count)
{
Triangle* plugin = (Triangle*)instance;
- /* Frequency (array of float of length sample_count) */
+ /* Frequency (array of float of length 1 or sample_count) */
const float* frequency = plugin->frequency;
- /* Slope (array of float of length sample_count) */
+ /* Slope (array of float of length 1 or sample_count) */
const float* slope = plugin->slope;
/* Output (pointer to float value) */
float* output = plugin->output;
/* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
- float min_slope = plugin->min_slope;
- float max_slope = plugin->max_slope;
+ Wavedata* wdat = &plugin->wdat;
+ float phase = plugin->phase;
+ const float min_slope = plugin->min_slope;
+ const float max_slope = plugin->max_slope;
- float freq;
- float slp;
- float phase_shift;
+ float last_slope = slope[0];
+ float slp = f_clip(last_slope, min_slope, max_slope);
+ float phase_shift = slp * wdat->sample_rate;
+ float scale = 1.0f / (8.0f * (slp - (slp * slp)));
for (uint32_t s = 0; s < sample_count; ++s) {
- freq = frequency[s];
- slp = f_clip(slope[s], min_slope, max_slope);
- phase_shift = slp * wdat->sample_rate;
-
- /* Lookup which table to use from frequency */
- wavedata_get_table(wdat, freq);
-
- /* Get samples from parabola and phase shifted inverted parabola,
- and scale to compensate */
- output[s] = (wavedata_get_sample(wdat, phase)
- - wavedata_get_sample(wdat, phase + phase_shift))
- / (8.0f * (slp - (slp * slp)));
-
- /* Update phase, wrapping if necessary */
- phase += wdat->frequency;
- if (phase < 0.0f) {
- phase += wdat->sample_rate;
- } else if (phase > wdat->sample_rate) {
- phase -= wdat->sample_rate;
+ const float freq = frequency[s * plugin->frequency_is_cv];
+ if (freq != wdat->frequency) {
+ /* Frequency changed, look up table to play */
+ wavedata_get_table(wdat, freq);
}
- }
- plugin->phase = phase;
-}
-
-static void
-runTriangle_fasc_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Triangle* plugin = (Triangle*)instance;
-
- /* Frequency (array of float of length sample_count) */
- const float* frequency = plugin->frequency;
-
- /* Slope (float value) */
- float slope = *(plugin->slope);
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
- /* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
- float min_slope = plugin->min_slope;
- float max_slope = plugin->max_slope;
-
- float freq;
- float phase_shift;
- float scale;
-
- slope = f_clip(slope, min_slope, max_slope);
- scale = 1.0f / (8.0f * (slope - (slope * slope)));
- phase_shift = slope * wdat->sample_rate;
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- freq = frequency[s];
-
- /* Lookup which table to use from frequency */
- wavedata_get_table(wdat, freq);
-
- /* Get samples from parabola and phase shifted inverted parabola,
- and scale to compensate */
- output[s] = (wavedata_get_sample(wdat, phase)
- - wavedata_get_sample(wdat, phase + phase_shift)) * scale;
-
- /* Update phase, wrapping if necessary */
- phase += wdat->frequency;
- if (phase < 0.0f) {
- phase += wdat->sample_rate;
- } else if (phase > wdat->sample_rate) {
- phase -= wdat->sample_rate;
+ const float this_slope = slope[s * plugin->slope_is_cv];
+ if (this_slope != last_slope) {
+ /* Slope changed, recalculate */
+ last_slope = this_slope;
+ slp = f_clip(this_slope, min_slope, max_slope);
+ phase_shift = slp * wdat->sample_rate;
+ scale = 1.0f / (8.0f * (slp - (slp * slp)));
}
- }
- plugin->phase = phase;
-}
-
-static void
-runTriangle_fcsa_oa(LV2_Handle instance,
- uint32_t sample_count)
-{
- Triangle* plugin = (Triangle*)instance;
-
- /* Frequency (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Slope (array of float of length sample_count) */
- const float* slope = plugin->slope;
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
- float min_slope = plugin->min_slope;
- float max_slope = plugin->max_slope;
-
- float slp;
- float phase_shift;
-
- wavedata_get_table(wdat, frequency);
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- slp = f_clip(slope[s], min_slope, max_slope);
- phase_shift = slp * wdat->sample_rate;
/* Get samples from parabola and phase shifted inverted parabola,
and scale to compensate */
output[s] = (wavedata_get_sample(wdat, phase)
- - wavedata_get_sample(wdat, phase + phase_shift))
- / (8.0f * (slp - (slp * slp)));
+ - wavedata_get_sample(wdat, phase + phase_shift)) * scale;
/* Update phase, wrapping if necessary */
phase += wdat->frequency;
@@ -240,62 +188,25 @@ runTriangle_fcsa_oa(LV2_Handle instance,
plugin->phase = phase;
}
-static void
-runTriangle_fcsc_oa(LV2_Handle instance,
- uint32_t sample_count)
+static const void*
+extension_data(const char* uri)
{
- Triangle* plugin = (Triangle*)instance;
-
- /* Frequency (float value) */
- const float frequency = *(plugin->frequency);
-
- /* Slope (float value) */
- float slope = *(plugin->slope);
-
- /* Output (pointer to float value) */
- float* output = plugin->output;
-
- /* Instance data */
- Wavedata* wdat = &plugin->wdat;
- float phase = plugin->phase;
- float min_slope = plugin->min_slope;
- float max_slope = plugin->max_slope;
-
- float scale;
- float phase_shift;
-
- slope = f_clip(slope, min_slope, max_slope);
- scale = 1.0f / (8.0f * (slope - (slope * slope)));
- phase_shift = slope * wdat->sample_rate;
-
- wavedata_get_table(wdat, frequency);
-
- for (uint32_t s = 0; s < sample_count; ++s) {
- /* Get samples from parabola and phase shifted inverted parabola,
- and scale to compensate */
- output[s] = (wavedata_get_sample(wdat, phase)
- - wavedata_get_sample(wdat, phase + phase_shift)) * scale;
-
- /* Update phase, wrapping if necessary */
- phase += wdat->frequency;
- if (phase < 0.0f) {
- phase += wdat->sample_rate;
- } else if (phase > wdat->sample_rate) {
- phase -= wdat->sample_rate;
- }
+ static const LV2_Morph_Interface morph = { morph_port, NULL };
+ if (!strcmp(uri, LV2_MORPH__interface)) {
+ return &morph;
}
- plugin->phase = phase;
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- "http://drobilla.net/plugins/blip/triangle",
+ "http://drobilla.net/plugins/blop/triangle",
instantiate,
connect_port,
activate,
- runTriangle_fcsc_oa,
+ run,
NULL,
cleanup,
- NULL,
+ extension_data,
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/src/wavedata.c b/src/wavedata.c
index ff955a1..19dca0e 100644
--- a/src/wavedata.c
+++ b/src/wavedata.c
@@ -25,7 +25,7 @@
#include <stdlib.h>
#include <stdio.h>
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
-#include "blip_config.h"
+#include "blop_config.h"
#include "wavedata.h"
int
diff --git a/src/wdatutil.c b/src/wdatutil.c
index f7a277d..ee1c88d 100644
--- a/src/wdatutil.c
+++ b/src/wdatutil.c
@@ -328,7 +328,7 @@ wavedata_write(Wavedata* w,
fprintf(wdat_fp, "int\n");
fprintf(
wdat_fp,
- "blip_get_%s (Wavedata * w, double sample_rate, const char* bundle_path, const LV2_Feature* const* features)\n",
+ "blop_get_%s (Wavedata * w, double sample_rate, const char* bundle_path, const LV2_Feature* const* features)\n",
data_name);
fprintf(wdat_fp, "{\n");
fprintf(wdat_fp, "\tWavetable * t;\n");
diff --git a/wscript b/wscript
index 249ecf3..e721b57 100644
--- a/wscript
+++ b/wscript
@@ -8,7 +8,7 @@ from waflib.extras import autowaf as autowaf
BLIP_VERSION = '0.0.0'
# Variables for 'waf dist'
-APPNAME = 'blip.lv2'
+APPNAME = 'blop.lv2'
VERSION = BLIP_VERSION
# Mandatory variables
@@ -34,7 +34,7 @@ def configure(conf):
define_name = 'HAVE_SINF',
mandatory = False)
- conf.write_config_header('blip_config.h', remove=False)
+ conf.write_config_header('blop_config.h', remove=False)
# Set env['pluginlib_PATTERN']
pat = conf.env['cshlib_PATTERN']
@@ -71,23 +71,23 @@ def build_plugin(bld, lang, bundle, name, source, cflags=[], libs=[]):
bld.install_files('${LV2DIR}/' + bundle, os.path.join(bundle, data_file))
def build(bld):
- # Copy data files to build bundle (build/blip.lv2)
+ # Copy data files to build bundle (build/blop.lv2)
def do_copy(task):
src = task.inputs[0].abspath()
tgt = task.outputs[0].abspath()
return shutil.copy(src, tgt)
- for i in bld.path.ant_glob('blip.lv2/*.ttl'):
+ for i in bld.path.ant_glob('blop.lv2/*.ttl'):
bld(rule = do_copy,
source = i,
- target = bld.path.get_bld().make_node('blip.lv2/%s' % i),
- install_path = '${LV2DIR}/blip.lv2')
+ target = bld.path.get_bld().make_node('blop.lv2/%s' % i),
+ install_path = '${LV2DIR}/blop.lv2')
bld(features = 'subst',
- source = 'blip.lv2/manifest.ttl.in',
- target = bld.path.get_bld().make_node('blip.lv2/manifest.ttl'),
+ source = 'blop.lv2/manifest.ttl.in',
+ target = bld.path.get_bld().make_node('blop.lv2/manifest.ttl'),
LIB_EXT = bld.env['pluginlib_EXT'],
- install_path = '${LV2DIR}/blip.lv2')
+ install_path = '${LV2DIR}/blop.lv2')
plugins = '''
adsr
@@ -111,18 +111,34 @@ def build(bld):
# Simple (single source file) plugins
for i in plugins:
- build_plugin(bld, 'c', 'blip.lv2', i,
+ build_plugin(bld, 'c', 'blop.lv2', i,
['src/%s.c' % i])
# Low pass filter
- build_plugin(bld, 'c', 'blip.lv2', 'lp4pole',
+ build_plugin(bld, 'c', 'blop.lv2', 'lp4pole',
['src/lp4pole.c', 'src/lp4pole_filter.c'])
# Oscillators
for i in ['pulse', 'sawtooth', 'square', 'triangle']:
- build_plugin(bld, 'c', 'blip.lv2', i,
+ build_plugin(bld, 'c', 'blop.lv2', i,
['src/%s.c' % i, 'src/wavedata.c'])
+ # Sequencers
+ for i in [16, 32, 64]:
+ uri = 'http://drobilla.net/plugins/blip/sequencer_%d' % i
+ build_plugin(bld, 'c', 'blop.lv2', 'sequencer_%d' % i,
+ ['src/sequencer.c'],
+ cflags=['-DSEQUENCER_MAX_INPUTS=%d' % i,
+ '-DSEQUENCER_URI="%s"' % uri])
+
+ # Quantisers
+ for i in [20, 50, 100]:
+ uri = 'http://drobilla.net/plugins/blip/quantiser_%d' % i
+ build_plugin(bld, 'c', 'blop.lv2', 'quantiser_%d' % i,
+ ['src/quantiser.c'],
+ cflags=['-DQUANTISER_MAX_INPUTS=%d' % i,
+ '-DQUANTISER_URI="%s"' % uri])
+
# Wavegen
wavegen = bld(features = 'c cprogram',
source = ['src/wavegen.c', 'src/wdatutil.c'],
@@ -147,10 +163,10 @@ def build(bld):
obj = bld(features = 'c cshlib',
source = bld.path.get_bld().make_node('src/%s_data.c' % i),
- target = 'blip.lv2/%s_data' % i,
+ target = 'blop.lv2/%s_data' % i,
includes = ['./src', './src/include'],
env = penv,
- install_path = '${LV2DIR}/blip.lv2')
+ install_path = '${LV2DIR}/blop.lv2')