From 8b46fd1ff51b29cded517c9c2d166611e8c453fc Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 31 May 2012 06:03:45 +0000 Subject: Blip => Blop. I give up trying to give ports new names. git-svn-id: http://svn.drobilla.net/lad/trunk/plugins/blop.lv2@4484 a436a847-0d15-0410-975c-d299462d15a1 --- AUTHORS | 9 +- README | 10 +- blip.lv2/adsr.ttl | 94 ----- blip.lv2/adsr_gt.ttl | 100 ------ blip.lv2/amp.ttl | 50 --- blip.lv2/branch.ttl | 48 --- blip.lv2/dahdsr.ttl | 122 ------- blip.lv2/difference.ttl | 48 --- blip.lv2/fmod.ttl | 57 --- blip.lv2/interpolator.ttl | 39 -- blip.lv2/lp4pole.ttl | 64 ---- blip.lv2/manifest.ttl.in | 138 -------- blip.lv2/product.ttl | 47 --- blip.lv2/pulse.ttl | 57 --- blip.lv2/quantiser_100.ttl | 820 ------------------------------------------- blip.lv2/quantiser_20.ttl | 260 -------------- blip.lv2/quantiser_50.ttl | 470 ------------------------- blip.lv2/random.ttl | 62 ---- blip.lv2/ratio.ttl | 49 --- blip.lv2/sawtooth.ttl | 44 --- blip.lv2/sequencer_16.ttl | 192 ---------- blip.lv2/sequencer_32.ttl | 304 ---------------- blip.lv2/sequencer_64.ttl | 528 ---------------------------- blip.lv2/square.ttl | 44 --- blip.lv2/sum.ttl | 47 --- blip.lv2/sync_pulse.ttl | 60 ---- blip.lv2/sync_square.ttl | 53 --- blip.lv2/tracker.ttl | 116 ------ blip.lv2/triangle.ttl | 58 --- blop.lv2/adsr.ttl | 80 +++++ blop.lv2/adsr_gt.ttl | 89 +++++ blop.lv2/amp.ttl | 47 +++ blop.lv2/branch.ttl | 39 ++ blop.lv2/dahdsr.ttl | 124 +++++++ blop.lv2/difference.ttl | 47 +++ blop.lv2/fmod.ttl | 58 +++ blop.lv2/interpolator.ttl | 31 ++ blop.lv2/lp4pole.ttl | 61 ++++ blop.lv2/manifest.ttl.in | 155 ++++++++ blop.lv2/product.ttl | 48 +++ blop.lv2/pulse.ttl | 56 +++ blop.lv2/quantiser_100.ttl | 718 +++++++++++++++++++++++++++++++++++++ blop.lv2/quantiser_20.ttl | 238 +++++++++++++ blop.lv2/quantiser_50.ttl | 418 ++++++++++++++++++++++ blop.lv2/random.ttl | 59 ++++ blop.lv2/ratio.ttl | 48 +++ blop.lv2/sawtooth.ttl | 42 +++ blop.lv2/sequencer_16.ttl | 166 +++++++++ blop.lv2/sequencer_32.ttl | 262 ++++++++++++++ blop.lv2/sequencer_64.ttl | 454 ++++++++++++++++++++++++ blop.lv2/square.ttl | 42 +++ blop.lv2/sum.ttl | 48 +++ blop.lv2/sync_pulse.ttl | 59 ++++ blop.lv2/sync_square.ttl | 51 +++ blop.lv2/tracker.ttl | 120 +++++++ blop.lv2/triangle.ttl | 57 +++ src/adsr.c | 8 +- src/adsr_gt.c | 8 +- src/amp.c | 74 ++-- src/branch.c | 2 +- src/dahdsr.c | 447 +++++------------------ src/difference.c | 166 +++++---- src/fmod.c | 162 ++++----- src/include/common.h | 6 +- src/include/interpolate.h | 8 +- src/include/lp4pole_filter.h | 6 +- src/include/math_func.h | 2 +- src/include/uris.h | 51 +++ src/include/wavedata.h | 14 +- src/include/wdatutil.h | 6 +- src/interpolator.c | 8 +- src/lp4pole.c | 96 ++--- src/product.c | 123 ++++--- src/pulse.c | 205 ++++------- src/quantiser.c | 66 ++-- src/random.c | 250 ++++--------- src/ratio.c | 148 ++++---- src/sawtooth.c | 78 ++-- src/sequencer.c | 26 +- src/square.c | 76 ++-- src/sum.c | 119 ++++--- src/sync_pulse.c | 116 +++--- src/sync_square.c | 108 +++--- src/tracker.c | 155 ++++---- src/triangle.c | 231 ++++-------- src/wavedata.c | 2 +- src/wdatutil.c | 2 +- wscript | 44 ++- 88 files changed, 4841 insertions(+), 5579 deletions(-) delete mode 100644 blip.lv2/adsr.ttl delete mode 100644 blip.lv2/adsr_gt.ttl delete mode 100644 blip.lv2/amp.ttl delete mode 100644 blip.lv2/branch.ttl delete mode 100644 blip.lv2/dahdsr.ttl delete mode 100644 blip.lv2/difference.ttl delete mode 100644 blip.lv2/fmod.ttl delete mode 100644 blip.lv2/interpolator.ttl delete mode 100644 blip.lv2/lp4pole.ttl delete mode 100644 blip.lv2/manifest.ttl.in delete mode 100644 blip.lv2/product.ttl delete mode 100644 blip.lv2/pulse.ttl delete mode 100644 blip.lv2/quantiser_100.ttl delete mode 100644 blip.lv2/quantiser_20.ttl delete mode 100644 blip.lv2/quantiser_50.ttl delete mode 100644 blip.lv2/random.ttl delete mode 100644 blip.lv2/ratio.ttl delete mode 100644 blip.lv2/sawtooth.ttl delete mode 100644 blip.lv2/sequencer_16.ttl delete mode 100644 blip.lv2/sequencer_32.ttl delete mode 100644 blip.lv2/sequencer_64.ttl delete mode 100644 blip.lv2/square.ttl delete mode 100644 blip.lv2/sum.ttl delete mode 100644 blip.lv2/sync_pulse.ttl delete mode 100644 blip.lv2/sync_square.ttl delete mode 100644 blip.lv2/tracker.ttl delete mode 100644 blip.lv2/triangle.ttl create mode 100644 blop.lv2/adsr.ttl create mode 100644 blop.lv2/adsr_gt.ttl create mode 100644 blop.lv2/amp.ttl create mode 100644 blop.lv2/branch.ttl create mode 100644 blop.lv2/dahdsr.ttl create mode 100644 blop.lv2/difference.ttl create mode 100644 blop.lv2/fmod.ttl create mode 100644 blop.lv2/interpolator.ttl create mode 100644 blop.lv2/lp4pole.ttl create mode 100644 blop.lv2/manifest.ttl.in create mode 100644 blop.lv2/product.ttl create mode 100644 blop.lv2/pulse.ttl create mode 100644 blop.lv2/quantiser_100.ttl create mode 100644 blop.lv2/quantiser_20.ttl create mode 100644 blop.lv2/quantiser_50.ttl create mode 100644 blop.lv2/random.ttl create mode 100644 blop.lv2/ratio.ttl create mode 100644 blop.lv2/sawtooth.ttl create mode 100644 blop.lv2/sequencer_16.ttl create mode 100644 blop.lv2/sequencer_32.ttl create mode 100644 blop.lv2/sequencer_64.ttl create mode 100644 blop.lv2/square.ttl create mode 100644 blop.lv2/sum.ttl create mode 100644 blop.lv2/sync_pulse.ttl create mode 100644 blop.lv2/sync_square.ttl create mode 100644 blop.lv2/tracker.ttl create mode 100644 blop.lv2/triangle.ttl create mode 100644 src/include/uris.h 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 +This LV2 port was done by: -LV2 Port: - -David Robillard \ No newline at end of file + David Robillard 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/adsr.ttl b/blip.lv2/adsr.ttl deleted file mode 100644 index 49fcd05..0000000 --- a/blip.lv2/adsr.ttl +++ /dev/null @@ -1,94 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix units: . -@prefix xsd: . - -blip:adsr - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:name "Driving Signal" ; - lv2:symbol "port0" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 1 ; - lv2:name "Trigger Threshold" ; - lv2:symbol "port1" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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: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: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: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:index 6 ; - lv2:name "Envelope Out" ; - lv2:symbol "port6" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "ADSR Envelope" ; - lv2:documentation """ -

Generates an ADSR (Attack, Decay, Sustain and Release) envelope.

- -

Driven by a gate signal - if the level of the signal goes higher than the -Trigger Threshold, the attack stage begins, proceeds to the decay stage and -then holds at the sustain level. The release stage begins when the gate falls -below this theshold - even if the previous stages have not completed.

- -

The output is a signal between 0.0 (rest) and 1.0 (peak) and the transitions -are linear.

-""" ; - a lv2:Plugin . diff --git a/blip.lv2/adsr_gt.ttl b/blip.lv2/adsr_gt.ttl deleted file mode 100644 index 8cf025c..0000000 --- a/blip.lv2/adsr_gt.ttl +++ /dev/null @@ -1,100 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix units: . -@prefix xsd: . - -blip:adsr_gt - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:name "Gate" ; - lv2:symbol "port0" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 1 ; - lv2:name "Trigger" ; - lv2:symbol "port1" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - 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: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: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: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:index 6 ; - lv2:name "Envelope Out" ; - lv2:symbol "port6" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "ADSR Envelope with Gate and Trigger" ; - lv2:documentation """ -

Generates an ADSR (Attack, Decay, Sustain and Release) -envelope.

- -

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.

- -

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. The -‘Synth Secrets’ article in the November 1999 issue of ‘Sound -on Sound’ explains this in detail.

- -

The output is a signal between 0.0 (rest) and 1.0 (peak) and the -transitions are linear.

-""" ; - a lv2:Plugin . 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix units: . -@prefix xsd: . - -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 " ; - dct:replaces , - ; - dc:rights "GPL" ; - doap:name "Amplifier" ; - lv2:documentation """ -

A simple monophonic amplifier.

-""" ; - a lv2:Plugin , lv2:AmplifierPlugin . diff --git a/blip.lv2/branch.ttl b/blip.lv2/branch.ttl deleted file mode 100644 index dfc9a1b..0000000 --- a/blip.lv2/branch.ttl +++ /dev/null @@ -1,48 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:branch - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:name "Input" ; - lv2:symbol "port0" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 1 ; - lv2:name "First Output" ; - lv2:symbol "port1" ; - a lv2:ControlPort , - lv2:OutputPort , - lv2:Port - ] , [ - lv2:index 2 ; - lv2:name "Second Output" ; - lv2:symbol "port2" ; - a lv2:ControlPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - ; - dc:rights "GPL" ; - doap:name "Signal Branch" ; - lv2:documentation """ -

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

-""" ; - a lv2:Plugin , lv2:UtilityPlugin . diff --git a/blip.lv2/dahdsr.ttl b/blip.lv2/dahdsr.ttl deleted file mode 100644 index 0f05cfb..0000000 --- a/blip.lv2/dahdsr.ttl +++ /dev/null @@ -1,122 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix units: . -@prefix xsd: . - -blip:dahdsr - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:name "Gate" ; - lv2:symbol "port0" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 1 ; - lv2:name "Trigger" ; - lv2:symbol "port1" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:default 0 ; - lv2:index 2 ; - lv2:minimum 0 ; - lv2:name "Delay Time" ; - lv2:symbol "port2" ; - units:unit units:s ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:default 0 ; - lv2:index 3 ; - lv2:minimum 0 ; - lv2:name "Attack Time" ; - lv2:symbol "port3" ; - units:unit units:s ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:default 0 ; - lv2:index 4 ; - lv2:minimum 0 ; - lv2:name "Hold Time" ; - lv2:symbol "port4" ; - units:unit units:s ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:default 0 ; - lv2:index 5 ; - lv2:minimum 0 ; - lv2:name "Decay Time" ; - lv2:symbol "port5" ; - units:unit units:s ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:default 1 ; - lv2:index 6 ; - lv2:maximum 1 ; - lv2:minimum 0 ; - lv2:name "Sustain Level" ; - lv2:symbol "port6" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:index 8 ; - lv2:name "Envelope Out" ; - lv2:symbol "port8" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - , - ; - dc:rights "GPL" ; - doap:name "DAHDSR Envelope with Gate and Trigger" ; - lv2:documentation """ -

Generates a DAHDSR (Delay, Attack, Hold, Decay, Sustain, Release) -envelope.

- -

Another envelope generator, this time with two additional stages - Delay, -which delays the onset of the Attack stage, and Hold, which holds the output at -maximum before the Decay stage begins.

- -

Triggering works in subtly different ways to the ADSR -(1680) - the Trigger will restart the envelope even if the Gate is closed - -the effect of this is to proceed through the stages and begin the release stage -immediately after the decay stage.

- -

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.

-""" ; - a lv2:Plugin . diff --git a/blip.lv2/difference.ttl b/blip.lv2/difference.ttl deleted file mode 100644 index f277688..0000000 --- a/blip.lv2/difference.ttl +++ /dev/null @@ -1,48 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:difference - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:name "Minuend" ; - lv2:symbol "minuend" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 1 ; - lv2:name "Subtrahend" ; - lv2:symbol "subtrahend" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 2 ; - lv2:name "Difference" ; - lv2:symbol "difference" ; - a lv2:CVPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - , - , - ; - dc:rights "GPL" ; - doap:name "Signal Difference" ; - lv2:documentation """ -

Subtract two signals.

-""" ; - a lv2:Plugin , lv2:UtilityPlugin . diff --git a/blip.lv2/fmod.ttl b/blip.lv2/fmod.ttl deleted file mode 100644 index 3d59713..0000000 --- a/blip.lv2/fmod.ttl +++ /dev/null @@ -1,57 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix units: . -@prefix xsd: . - -blip:fmod - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:maximum 0.5 ; - lv2:minimum "2.08333e-05"^^xsd:double ; - lv2:name "Frequency" ; - lv2:portProperty , - lv2:sampleRate ; - lv2:symbol "port0" ; - units:unit units:hz ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 1 ; - lv2:name "Modulation" ; - lv2:symbol "port1" ; - units:unit units:oct ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 2 ; - lv2:name "Modulated Frequency" ; - lv2:symbol "port2" ; - units:unit units:hz ; - a lv2:ControlPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - , - , - ; - dc:rights "GPL" ; - doap:name "Frequency Modulator" ; - lv2:documentation """ -

Modulates an input frequency by a driving signal, transposing the frequency -by ±1 Octave per unit amplitude of signal.

-""" ; - a lv2:Plugin , lv2:SpectralPlugin . 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -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 " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "Control to Audio Interpolator" ; - lv2:documentation """ -

Interpolates a control-rate (per-block) signal into a smooth audio -(per-sample) signal.

-""" ; - a lv2:Plugin , lv2:UtilityPlugin . diff --git a/blip.lv2/lp4pole.ttl b/blip.lv2/lp4pole.ttl deleted file mode 100644 index f12e9bd..0000000 --- a/blip.lv2/lp4pole.ttl +++ /dev/null @@ -1,64 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:lp4pole - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:default 0.5 ; - lv2:index 0 ; - lv2:maximum 0.5 ; - lv2:minimum "2.08333e-05"^^xsd:double ; - lv2:name "Cutoff Frequency" ; - lv2:portProperty , - lv2:sampleRate ; - lv2:symbol "port0" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:index 2 ; - lv2:name "Input" ; - 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 " ; - dct:replaces , - ; - dc:rights "GPL" ; - doap:name "4 Pole Resonant Low-Pass Filter" ; - lv2:documentation """ -

Emulates a low pass filter in popular analogue synthesisers. This particular -filter is derived from one of many -implementations of the Moog 4 pole filter.

-""" ; - a lv2:Plugin , lv2:LowpassPlugin . diff --git a/blip.lv2/manifest.ttl.in b/blip.lv2/manifest.ttl.in deleted file mode 100644 index e1ceab7..0000000 --- a/blip.lv2/manifest.ttl.in +++ /dev/null @@ -1,138 +0,0 @@ -@prefix blip: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:adsr - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:adsr_gt - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:amp - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:branch - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:dahdsr - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:difference - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:fmod - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:interpolator - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:lp4pole - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:product - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:pulse - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:quantiser_20 - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:quantiser_50 - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:quantiser_100 - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:random - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:ratio - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:sawtooth - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:sequencer_16 - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:sequencer_32 - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:sequencer_64 - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:square - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:sum - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:sync_pulse - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:sync_square - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:tracker - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . - -blip:triangle - a lv2:Plugin ; - rdfs:seeAlso ; - lv2:binary . diff --git a/blip.lv2/product.ttl b/blip.lv2/product.ttl deleted file mode 100644 index efe1eab..0000000 --- a/blip.lv2/product.ttl +++ /dev/null @@ -1,47 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:product - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:name "Multiplicand" ; - lv2:symbol "multiplicand" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 1 ; - lv2:name "Multiplier" ; - lv2:symbol "multiplier" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 2 ; - lv2:name "Product" ; - lv2:symbol "product" ; - a lv2:CVPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - , - ; - dc:rights "GPL" ; - doap:name "Signal Product" ; - lv2:documentation """ -

Multiply two signals.

-""" ; - a lv2:Plugin , lv2:UtilityPlugin . diff --git a/blip.lv2/pulse.ttl b/blip.lv2/pulse.ttl deleted file mode 100644 index 9eb3af1..0000000 --- a/blip.lv2/pulse.ttl +++ /dev/null @@ -1,57 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:pulse - 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 , - lv2:sampleRate ; - 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 "Output" ; - lv2:symbol "port2" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - , - , - ; - dc:rights "GPL" ; - doap:name "Variable Width Pulse Oscillator" ; - lv2:documentation """ -

Generates an alias-free pulse wave at given input frequency and pulse width -(duty).

-""" ; - a lv2:Plugin , lv2:OscillatorPlugin . diff --git a/blip.lv2/quantiser_100.ttl b/blip.lv2/quantiser_100.ttl deleted file mode 100644 index b44d21d..0000000 --- a/blip.lv2/quantiser_100.ttl +++ /dev/null @@ -1,820 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:quantiser_100 - 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:index 1 ; - lv2:name "Quantise Range Maximum" ; - lv2:symbol "port1" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 10 ; - lv2:name "Value 5" ; - lv2:symbol "port10" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 100 ; - lv2:name "Value 95" ; - lv2:symbol "port100" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 101 ; - lv2:name "Value 96" ; - lv2:symbol "port101" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 102 ; - lv2:name "Value 97" ; - lv2:symbol "port102" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 103 ; - lv2:name "Value 98" ; - lv2:symbol "port103" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:index 106 ; - lv2:name "Quantised Output" ; - lv2:symbol "port106" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] , [ - lv2:index 107 ; - lv2:name "Output Changed" ; - lv2:symbol "port107" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] , [ - lv2:index 11 ; - lv2:name "Value 6" ; - lv2:symbol "port11" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 12 ; - lv2:name "Value 7" ; - lv2:symbol "port12" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 13 ; - lv2:name "Value 8" ; - lv2:symbol "port13" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 14 ; - lv2:name "Value 9" ; - lv2:symbol "port14" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 15 ; - lv2:name "Value 10" ; - lv2:symbol "port15" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 16 ; - lv2:name "Value 11" ; - lv2:symbol "port16" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 17 ; - lv2:name "Value 12" ; - lv2:symbol "port17" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 18 ; - lv2:name "Value 13" ; - lv2:symbol "port18" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 19 ; - lv2:name "Value 14" ; - lv2:symbol "port19" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:default 0 ; - lv2:index 2 ; - lv2:minimum 0 ; - lv2:name "Match Range" ; - lv2:symbol "port2" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 20 ; - lv2:name "Value 15" ; - lv2:symbol "port20" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 21 ; - lv2:name "Value 16" ; - lv2:symbol "port21" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 22 ; - lv2:name "Value 17" ; - lv2:symbol "port22" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 23 ; - lv2:name "Value 18" ; - lv2:symbol "port23" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 24 ; - lv2:name "Value 19" ; - lv2:symbol "port24" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 25 ; - lv2:name "Value 20" ; - lv2:symbol "port25" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 26 ; - lv2:name "Value 21" ; - lv2:symbol "port26" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 27 ; - lv2:name "Value 22" ; - lv2:symbol "port27" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 28 ; - lv2:name "Value 23" ; - lv2:symbol "port28" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 29 ; - lv2:name "Value 24" ; - lv2:symbol "port29" ; - a lv2:ControlPort , - lv2:InputPort , - 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:index 30 ; - lv2:name "Value 25" ; - lv2:symbol "port30" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 31 ; - lv2:name "Value 26" ; - lv2:symbol "port31" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 32 ; - lv2:name "Value 27" ; - lv2:symbol "port32" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 33 ; - lv2:name "Value 28" ; - lv2:symbol "port33" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 34 ; - lv2:name "Value 29" ; - lv2:symbol "port34" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 35 ; - lv2:name "Value 30" ; - lv2:symbol "port35" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 36 ; - lv2:name "Value 31" ; - lv2:symbol "port36" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 37 ; - lv2:name "Value 32" ; - lv2:symbol "port37" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 38 ; - lv2:name "Value 33" ; - lv2:symbol "port38" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 39 ; - lv2:name "Value 34" ; - lv2:symbol "port39" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:index 40 ; - lv2:name "Value 35" ; - lv2:symbol "port40" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 41 ; - lv2:name "Value 36" ; - lv2:symbol "port41" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 42 ; - lv2:name "Value 37" ; - lv2:symbol "port42" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 43 ; - lv2:name "Value 38" ; - lv2:symbol "port43" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 44 ; - lv2:name "Value 39" ; - lv2:symbol "port44" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 45 ; - lv2:name "Value 40" ; - lv2:symbol "port45" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 46 ; - lv2:name "Value 41" ; - lv2:symbol "port46" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 47 ; - lv2:name "Value 42" ; - lv2:symbol "port47" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 48 ; - lv2:name "Value 43" ; - lv2:symbol "port48" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 49 ; - lv2:name "Value 44" ; - lv2:symbol "port49" ; - 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 50 ; - lv2:name "Value 45" ; - lv2:symbol "port50" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 51 ; - lv2:name "Value 46" ; - lv2:symbol "port51" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 52 ; - lv2:name "Value 47" ; - lv2:symbol "port52" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 53 ; - lv2:name "Value 48" ; - lv2:symbol "port53" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 54 ; - lv2:name "Value 49" ; - lv2:symbol "port54" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 55 ; - lv2:name "Value 50" ; - lv2:symbol "port55" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 56 ; - lv2:name "Value 51" ; - lv2:symbol "port56" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 57 ; - lv2:name "Value 52" ; - lv2:symbol "port57" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 58 ; - lv2:name "Value 53" ; - lv2:symbol "port58" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 59 ; - lv2:name "Value 54" ; - lv2:symbol "port59" ; - 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 60 ; - lv2:name "Value 55" ; - lv2:symbol "port60" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 61 ; - lv2:name "Value 56" ; - lv2:symbol "port61" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 62 ; - lv2:name "Value 57" ; - lv2:symbol "port62" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 63 ; - lv2:name "Value 58" ; - lv2:symbol "port63" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 64 ; - lv2:name "Value 59" ; - lv2:symbol "port64" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 65 ; - lv2:name "Value 60" ; - lv2:symbol "port65" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 66 ; - lv2:name "Value 61" ; - lv2:symbol "port66" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 67 ; - lv2:name "Value 62" ; - lv2:symbol "port67" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 68 ; - lv2:name "Value 63" ; - lv2:symbol "port68" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 69 ; - lv2:name "Value 64" ; - lv2:symbol "port69" ; - 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 70 ; - lv2:name "Value 65" ; - lv2:symbol "port70" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 71 ; - lv2:name "Value 66" ; - lv2:symbol "port71" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 72 ; - lv2:name "Value 67" ; - lv2:symbol "port72" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 73 ; - lv2:name "Value 68" ; - lv2:symbol "port73" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 74 ; - lv2:name "Value 69" ; - lv2:symbol "port74" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 75 ; - lv2:name "Value 70" ; - lv2:symbol "port75" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 76 ; - lv2:name "Value 71" ; - lv2:symbol "port76" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 77 ; - lv2:name "Value 72" ; - lv2:symbol "port77" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 78 ; - lv2:name "Value 73" ; - lv2:symbol "port78" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 79 ; - lv2:name "Value 74" ; - lv2:symbol "port79" ; - 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 80 ; - lv2:name "Value 75" ; - lv2:symbol "port80" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 81 ; - lv2:name "Value 76" ; - lv2:symbol "port81" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 82 ; - lv2:name "Value 77" ; - lv2:symbol "port82" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 83 ; - lv2:name "Value 78" ; - lv2:symbol "port83" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 84 ; - lv2:name "Value 79" ; - lv2:symbol "port84" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 85 ; - lv2:name "Value 80" ; - lv2:symbol "port85" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 86 ; - lv2:name "Value 81" ; - lv2:symbol "port86" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 87 ; - lv2:name "Value 82" ; - lv2:symbol "port87" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 88 ; - lv2:name "Value 83" ; - lv2:symbol "port88" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 89 ; - lv2:name "Value 84" ; - lv2:symbol "port89" ; - 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:index 90 ; - lv2:name "Value 85" ; - lv2:symbol "port90" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 91 ; - lv2:name "Value 86" ; - lv2:symbol "port91" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 92 ; - lv2:name "Value 87" ; - lv2:symbol "port92" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 93 ; - lv2:name "Value 88" ; - lv2:symbol "port93" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 94 ; - lv2:name "Value 89" ; - lv2:symbol "port94" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 95 ; - lv2:name "Value 90" ; - lv2:symbol "port95" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 96 ; - lv2:name "Value 91" ; - lv2:symbol "port96" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 97 ; - lv2:name "Value 92" ; - lv2:symbol "port97" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 98 ; - lv2:name "Value 93" ; - lv2:symbol "port98" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 99 ; - lv2:name "Value 94" ; - lv2:symbol "port99" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "Quantiser (100 Steps)" ; - lv2:documentation """ -

Quantises a signal to a set of arbitrary values within a range.

- -

Match Range determines the distance from the quantised value that the input -can deviate before being altered. This allows small variations in input to get -through unmolested. If it is set to 0 the input is quantised to the nearest -exact match.

- -

Mode is one of Extend (0), Wrap (1) or Clip (2).

- -

Steps is the number of quantisation steps to use (up to a maximum of -100).

- -

For example, given the following settings:

-
    -
  • Range Minimum = 0.0
  • -
  • Range Maximum = 12.0
  • -
  • Match Range = 0.0
  • -
  • Steps = 4
  • -
  • Quantisation Values 3, 5, 7 and 10
  • -
- -

and an input that is a line from -24 to 24, the output will be:

-
    -
  • Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19, - 22
  • -
  • Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10
  • -
  • Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10
  • -
- -

The quantisation values should all be within the range minimum and maximum -for it to work!

-""" ; - a lv2:Plugin . diff --git a/blip.lv2/quantiser_20.ttl b/blip.lv2/quantiser_20.ttl deleted file mode 100644 index 893c346..0000000 --- a/blip.lv2/quantiser_20.ttl +++ /dev/null @@ -1,260 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:quantiser_20 - 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:index 1 ; - lv2:name "Quantise Range Maximum" ; - lv2:symbol "port1" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 10 ; - lv2:name "Value 5" ; - lv2:symbol "port10" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 11 ; - lv2:name "Value 6" ; - lv2:symbol "port11" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 12 ; - lv2:name "Value 7" ; - lv2:symbol "port12" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 13 ; - lv2:name "Value 8" ; - lv2:symbol "port13" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 14 ; - lv2:name "Value 9" ; - lv2:symbol "port14" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 15 ; - lv2:name "Value 10" ; - lv2:symbol "port15" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 16 ; - lv2:name "Value 11" ; - lv2:symbol "port16" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 17 ; - lv2:name "Value 12" ; - lv2:symbol "port17" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 18 ; - lv2:name "Value 13" ; - lv2:symbol "port18" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 19 ; - lv2:name "Value 14" ; - lv2:symbol "port19" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:default 0 ; - lv2:index 2 ; - lv2:minimum 0 ; - lv2:name "Match Range" ; - lv2:symbol "port2" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 20 ; - lv2:name "Value 15" ; - lv2:symbol "port20" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 21 ; - lv2:name "Value 16" ; - lv2:symbol "port21" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 22 ; - lv2:name "Value 17" ; - lv2:symbol "port22" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 23 ; - lv2:name "Value 18" ; - lv2:symbol "port23" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 24 ; - lv2:name "Value 19" ; - lv2:symbol "port24" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 25 ; - lv2:name "Input" ; - lv2:symbol "port25" ; - a lv2:AudioPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 26 ; - lv2:name "Quantised Output" ; - lv2:symbol "port26" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] , [ - 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 - ] ; - dc:creator "Mike Rawes " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "Quantiser (20 Steps)" ; - lv2:documentation """ -

Quantises a signal to a set of arbitrary values within a range.

- -

Match Range determines the distance from the quantised value that the input -can deviate before being altered. This allows small variations in input to get -through unmolested. If it is set to 0 the input is quantised to the nearest -exact match.

- -

Mode is one of Extend (0), Wrap (1) or Clip (2).

- -

Steps is the number of quantisation steps to use (up to a maximum of -20).

- -

For example, given the following settings:

-
    -
  • Range Minimum = 0.0
  • -
  • Range Maximum = 12.0
  • -
  • Match Range = 0.0
  • -
  • Steps = 4
  • -
  • Quantisation Values 3, 5, 7 and 10
  • -
- -

and an input that is a line from -24 to 24, the output will be:

-
    -
  • Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19, - 22
  • -
  • Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10
  • -
  • Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10
  • -
- -

The quantisation values should all be within the range minimum and maximum -for it to work!

-""" ; - a lv2:Plugin . diff --git a/blip.lv2/quantiser_50.ttl b/blip.lv2/quantiser_50.ttl deleted file mode 100644 index 9481cd2..0000000 --- a/blip.lv2/quantiser_50.ttl +++ /dev/null @@ -1,470 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:quantiser_50 - 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:index 1 ; - lv2:name "Quantise Range Maximum" ; - lv2:symbol "port1" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 10 ; - lv2:name "Value 5" ; - lv2:symbol "port10" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 11 ; - lv2:name "Value 6" ; - lv2:symbol "port11" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 12 ; - lv2:name "Value 7" ; - lv2:symbol "port12" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 13 ; - lv2:name "Value 8" ; - lv2:symbol "port13" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 14 ; - lv2:name "Value 9" ; - lv2:symbol "port14" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 15 ; - lv2:name "Value 10" ; - lv2:symbol "port15" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 16 ; - lv2:name "Value 11" ; - lv2:symbol "port16" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 17 ; - lv2:name "Value 12" ; - lv2:symbol "port17" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 18 ; - lv2:name "Value 13" ; - lv2:symbol "port18" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 19 ; - lv2:name "Value 14" ; - lv2:symbol "port19" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:default 0 ; - lv2:index 2 ; - lv2:minimum 0 ; - lv2:name "Match Range" ; - lv2:symbol "port2" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 20 ; - lv2:name "Value 15" ; - lv2:symbol "port20" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 21 ; - lv2:name "Value 16" ; - lv2:symbol "port21" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 22 ; - lv2:name "Value 17" ; - lv2:symbol "port22" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 23 ; - lv2:name "Value 18" ; - lv2:symbol "port23" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 24 ; - lv2:name "Value 19" ; - lv2:symbol "port24" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 25 ; - lv2:name "Value 20" ; - lv2:symbol "port25" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 26 ; - lv2:name "Value 21" ; - lv2:symbol "port26" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 27 ; - lv2:name "Value 22" ; - lv2:symbol "port27" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 28 ; - lv2:name "Value 23" ; - lv2:symbol "port28" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 29 ; - lv2:name "Value 24" ; - lv2:symbol "port29" ; - a lv2:ControlPort , - lv2:InputPort , - 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:index 30 ; - lv2:name "Value 25" ; - lv2:symbol "port30" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 31 ; - lv2:name "Value 26" ; - lv2:symbol "port31" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 32 ; - lv2:name "Value 27" ; - lv2:symbol "port32" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 33 ; - lv2:name "Value 28" ; - lv2:symbol "port33" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 34 ; - lv2:name "Value 29" ; - lv2:symbol "port34" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 35 ; - lv2:name "Value 30" ; - lv2:symbol "port35" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 36 ; - lv2:name "Value 31" ; - lv2:symbol "port36" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 37 ; - lv2:name "Value 32" ; - lv2:symbol "port37" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 38 ; - lv2:name "Value 33" ; - lv2:symbol "port38" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 39 ; - lv2:name "Value 34" ; - lv2:symbol "port39" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:index 40 ; - lv2:name "Value 35" ; - lv2:symbol "port40" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 41 ; - lv2:name "Value 36" ; - lv2:symbol "port41" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 42 ; - lv2:name "Value 37" ; - lv2:symbol "port42" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 43 ; - lv2:name "Value 38" ; - lv2:symbol "port43" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 44 ; - lv2:name "Value 39" ; - lv2:symbol "port44" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 45 ; - lv2:name "Value 40" ; - lv2:symbol "port45" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 46 ; - lv2:name "Value 41" ; - lv2:symbol "port46" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 47 ; - lv2:name "Value 42" ; - lv2:symbol "port47" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 48 ; - lv2:name "Value 43" ; - lv2:symbol "port48" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 49 ; - lv2:name "Value 44" ; - lv2:symbol "port49" ; - 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 50 ; - lv2:name "Value 45" ; - lv2:symbol "port50" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 51 ; - lv2:name "Value 46" ; - lv2:symbol "port51" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 52 ; - lv2:name "Value 47" ; - lv2:symbol "port52" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 53 ; - lv2:name "Value 48" ; - lv2:symbol "port53" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 54 ; - lv2:name "Value 49" ; - lv2:symbol "port54" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 55 ; - lv2:name "Input" ; - lv2:symbol "port55" ; - a lv2:AudioPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 56 ; - lv2:name "Quantised Output" ; - lv2:symbol "port56" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] , [ - 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 - ] ; - dc:creator "Mike Rawes " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "Quantiser (50 Steps)" ; - lv2:documentation """ -

Quantises a signal to a set of arbitrary values within a range.

- -

Match Range determines the distance from the quantised value that the input -can deviate before being altered. This allows small variations in input to get -through unmolested. If it is set to 0 the input is quantised to the nearest -exact match.

- -

Mode is one of Extend (0), Wrap (1) or Clip (2).

- -

Steps is the number of quantisation steps to use (up to a maximum of -50).

- -

For example, given the following settings:

-
    -
  • Range Minimum = 0.0
  • -
  • Range Maximum = 12.0
  • -
  • Match Range = 0.0
  • -
  • Steps = 4
  • -
  • Quantisation Values 3, 5, 7 and 10
  • -
- -

and an input that is a line from -24 to 24, the output will be:

-
    -
  • Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19, - 22
  • -
  • Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10
  • -
  • Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10
  • -
- -

The quantisation values should all be within the range minimum and maximum -for it to work!

-""" ; - a lv2:Plugin . diff --git a/blip.lv2/random.ttl b/blip.lv2/random.ttl deleted file mode 100644 index abdc38e..0000000 --- a/blip.lv2/random.ttl +++ /dev/null @@ -1,62 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix units: . -@prefix xsd: . - -blip:random - 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 , - lv2:sampleRate ; - lv2:symbol "port0" ; - units:unit units:hz ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:index 2 ; - lv2:name "Output" ; - lv2:symbol "port2" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - , - , - ; - dc:rights "GPL" ; - doap:name "Random Wave Generator" ; - lv2:documentation """ -

Generates a random waveform of varying frequency and smoothness. The -frequency determines how often the output changes. The smoothness, how quickly -a transition occurs.

- -

The output varies between ±1, with an even distribution.

-""" ; - a lv2:Plugin , lv2:OscillatorPlugin . diff --git a/blip.lv2/ratio.ttl b/blip.lv2/ratio.ttl deleted file mode 100644 index cefb069..0000000 --- a/blip.lv2/ratio.ttl +++ /dev/null @@ -1,49 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:ratio - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:name "Numerator" ; - lv2:symbol "numerator" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 1 ; - lv2:name "Denominator" ; - lv2:symbol "denominator" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 2 ; - lv2:name "Ratio" ; - lv2:symbol "ratio" ; - a lv2:CVPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - , - , - ; - dc:rights "GPL" ; - doap:name "Signal Ratio" ; - lv2:documentation """ -

Get the ratio between two signals.

-

To avoid divisions by zero, 0 is treated as a really small number.

-""" ; - 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -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 , - 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 " ; - dct:replaces , - ; - dc:rights "GPL" ; - doap:name "Sawtooth Oscillator" ; - lv2:documentation """ -

Generates an alias-free sawtooth wave at given input frequency.

-""" ; - 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -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 " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "Analogue Style 16 Step Sequencer" ; - lv2:documentation """ -

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.

- -

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.

-""" ; - 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -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 " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "Analogue Style 32 Step Sequencer" ; - lv2:documentation """ -

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.

- -

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.

-""" ; - 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -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 " ; - dct:replaces ; - dc:rights "GPL" ; - doap:name "Analogue Style 64 Step Sequencer" ; - lv2:documentation """ -

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.

- -

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.

-""" ; - 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -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 , - 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 " ; - dct:replaces , - ; - dc:rights "GPL" ; - doap:name "Square Oscillator" ; - lv2:documentation """ -

Generates an alias-free square wave at given input frequency.

-""" ; - 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -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 " ; - dct:replaces , - , - ; - dc:rights "GPL" ; - doap:name "Signal Sum" ; - lv2:documentation """ -

Add two signals.

-""" ; - 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: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -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 " ; - dct:replaces , - ; - dc:rights "GPL" ; - doap:name "Clock Pulse Oscillator with Gate" ; - lv2:documentation """ -

Same as the Clock -Oscillator, but with pulse-width modulation.

-""" ; - a lv2:Plugin , lv2:OscillatorPlugin . diff --git a/blip.lv2/sync_square.ttl b/blip.lv2/sync_square.ttl deleted file mode 100644 index 85be37c..0000000 --- a/blip.lv2/sync_square.ttl +++ /dev/null @@ -1,53 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:sync_square - 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:index 1 ; - lv2:name "Gate" ; - 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 " ; - dct:replaces , - ; - dc:rights "GPL" ; - doap:name "Clock Oscillator with Gate" ; - lv2:documentation """ -

Generates a non-bandlimited simple square waveform for use as a clock. -Useful for triggering the sequencers, or anything else that uses a clock -signal.

- -

When the gate is closed, it outputs silence, and the phase is reset.

-""" ; - a lv2:Plugin , lv2:OscillatorPlugin . diff --git a/blip.lv2/tracker.ttl b/blip.lv2/tracker.ttl deleted file mode 100644 index 2894986..0000000 --- a/blip.lv2/tracker.ttl +++ /dev/null @@ -1,116 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:tracker - lv2:microVersion 0 ; - lv2:minorVersion 0 ; - lv2:optionalFeature lv2:hardRTCapable ; - lv2:port [ - lv2:index 0 ; - lv2:name "Gate" ; - lv2:symbol "port0" ; - a lv2:CVPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:portProperty , - lv2:sampleRate ; - lv2:symbol "port1" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:portProperty , - lv2:sampleRate ; - lv2:symbol "port2" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:portProperty , - lv2:sampleRate ; - lv2:symbol "port3" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - 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:portProperty , - lv2:sampleRate ; - lv2:symbol "port4" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 5 ; - lv2:name "Input" ; - lv2:symbol "port5" ; - a lv2:AudioPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 6 ; - lv2:name "Output" ; - lv2:symbol "port6" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - ; - dc:rights "GPL" ; - doap:name "Signal Tracker" ; - lv2:documentation """ -

This tracks an incoming signal and outputs the result.

-

The rate controls tell the plugin how quickly to respond to a change in -input. Low values will mean a slower response - a setting of 0 will hold the -last value, and a very high value will track the input exactly.

-

Attack rate is how quickly an upward change is tracked, and Decay for -downward changes. There are two pairs of these - the one used depends on the -level of the Gate.

-

Example uses:

-
    -
  • - An envelope tracker- use the ‘Gate Low’ track rates with - the Gate held low, and run the output through a full-wave rectifier (an ABS() - operator) to get an estimate of the level of a signal.
  • -
  • - Sample and Hold- run a narrow pulse wave into the gate, set the - ‘Gate High’ rates to maximum, and the ‘Gate Low’ - rates set to 0.
  • -
  • - Track and Hold- run a variable pulse wave into the gate, set the - ‘Gate High’ rates to 0, and the ‘Gate Low’ rates set - high. Varying the pulsewidth will vary the time the input is tracked, and - when it is held.
  • -
-""" ; - a lv2:Plugin . diff --git a/blip.lv2/triangle.ttl b/blip.lv2/triangle.ttl deleted file mode 100644 index 76c9d67..0000000 --- a/blip.lv2/triangle.ttl +++ /dev/null @@ -1,58 +0,0 @@ -@prefix blip: . -@prefix dc: . -@prefix dct: . -@prefix doap: . -@prefix foaf: . -@prefix lv2: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . - -blip:triangle - 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 , - lv2:sampleRate ; - 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 "Slope" ; - lv2:symbol "port1" ; - a lv2:ControlPort , - lv2:InputPort , - lv2:Port - ] , [ - lv2:index 2 ; - lv2:name "Output" ; - lv2:symbol "port2" ; - a lv2:AudioPort , - lv2:OutputPort , - lv2:Port - ] ; - dc:creator "Mike Rawes " ; - dct:replaces , - , - , - ; - dc:rights "GPL" ; - doap:name "Variable Slope Triangle Oscillator" ; - lv2:documentation """ -

Generates an alias-free variable slope triangle wave at given input -frequency and slope. The slope changes the wave shape from sawtooth to -triangle.

-""" ; - a lv2:Plugin , lv2:OscillatorPlugin . diff --git a/blop.lv2/adsr.ttl b/blop.lv2/adsr.ttl new file mode 100644 index 0000000..8fb8a1d --- /dev/null +++ b/blop.lv2/adsr.ttl @@ -0,0 +1,80 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix units: . + +blop:adsr + a lv2:Plugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 0 ; + lv2:name "Driving Signal" ; + lv2:symbol "drive" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 1 ; + lv2:name "Trigger Threshold" ; + lv2:symbol "thresh" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 2 ; + lv2:minimum 0 ; + lv2:name "Attack Time" ; + lv2:symbol "attack" ; + units:unit units:s + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 3 ; + lv2:minimum 0 ; + lv2:name "Decay Time" ; + lv2:symbol "decay" ; + units:unit units:s + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 1 ; + lv2:index 4 ; + lv2:maximum 1 ; + lv2:minimum 0 ; + lv2:name "Sustain Level" ; + lv2:symbol "sustain" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 5 ; + lv2:minimum 0 ; + lv2:name "Release Time" ; + lv2:symbol "release" ; + units:unit units:s + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 6 ; + lv2:name "Envelope Out" ; + lv2:symbol "out" + ] ; + dct:replaces ; + doap:name "ADSR Envelope" ; + lv2:documentation """ +

Generates an ADSR (Attack, Decay, Sustain and Release) envelope.

+ +

Driven by a gate signal - if the level of the signal goes higher than the +Trigger Threshold, the attack stage begins, proceeds to the decay stage and +then holds at the sustain level. The release stage begins when the gate falls +below this theshold - even if the previous stages have not completed.

+ +

The output is a signal between 0.0 (rest) and 1.0 (peak) and the transitions +are linear.

+""" . diff --git a/blop.lv2/adsr_gt.ttl b/blop.lv2/adsr_gt.ttl new file mode 100644 index 0000000..4daae58 --- /dev/null +++ b/blop.lv2/adsr_gt.ttl @@ -0,0 +1,89 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix units: . + +blop:adsr_gt + a lv2:Plugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 0 ; + lv2:name "Gate" ; + lv2:portProperty lv2:toggled ; + lv2:symbol "gate" + ] , [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 1 ; + lv2:name "Trigger" ; + lv2:portProperty lv2:toggled , + ; + lv2:symbol "trigger" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 2 ; + lv2:minimum 0 ; + lv2:name "Attack Time" ; + lv2:symbol "attack" ; + units:unit units:s + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 3 ; + lv2:minimum 0 ; + lv2:name "Decay Time" ; + lv2:symbol "decay" ; + units:unit units:s + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 1 ; + lv2:index 4 ; + lv2:maximum 1 ; + lv2:minimum 0 ; + lv2:name "Sustain Level" ; + lv2:symbol "sustain" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 5 ; + lv2:minimum 0 ; + lv2:name "Release Time" ; + lv2:symbol "release" ; + units:unit units:s + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 6 ; + lv2:name "Envelope Out" ; + lv2:symbol "out" + ] ; + dct:replaces ; + doap:name "ADSR Envelope with Gate and Trigger" ; + lv2:documentation """ +

Generates an ADSR (Attack, Decay, Sustain and Release) +envelope.

+ +

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.

+ +

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. The +‘Synth Secrets’ article in the November 1999 issue of ‘Sound +on Sound’ explains this in detail.

+ +

The output is a signal between 0.0 (rest) and 1.0 (peak) and the +transitions are linear.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix units: . +@prefix 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 , + ; + doap:name "Amplifier" ; + lv2:documentation """ +

A simple monophonic amplifier.

+""" . diff --git a/blop.lv2/branch.ttl b/blop.lv2/branch.ttl new file mode 100644 index 0000000..75e2ccc --- /dev/null +++ b/blop.lv2/branch.ttl @@ -0,0 +1,39 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . + +blop:branch + a lv2:Plugin , + lv2:UtilityPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 0 ; + lv2:name "Input" ; + lv2:symbol "in" + ] , [ + a lv2:ControlPort , + lv2:OutputPort ; + lv2:index 1 ; + lv2:name "Output 1" ; + lv2:symbol "out1" + ] , [ + a lv2:ControlPort , + lv2:OutputPort ; + lv2:index 2 ; + lv2:name "Output 2" ; + lv2:symbol "out2" + ] ; + dct:replaces , + ; + doap:name "Signal Branch" ; + lv2:documentation """ +

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

+""" . diff --git a/blop.lv2/dahdsr.ttl b/blop.lv2/dahdsr.ttl new file mode 100644 index 0000000..055af15 --- /dev/null +++ b/blop.lv2/dahdsr.ttl @@ -0,0 +1,124 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix urid: . +@prefix units: . + +blop:dahdsr + a lv2:Plugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable , + urid:map ; + lv2:port [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 0 ; + lv2:name "Gate" ; + lv2:portProperty lv2:toggled ; + lv2:symbol "gate" + ] , [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 1 ; + lv2:name "Trigger" ; + lv2:portProperty lv2:toggled , + ; + lv2:symbol "trigger" + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0 ; + lv2:index 2 ; + lv2:minimum 0 ; + lv2:name "Delay Time" ; + lv2:symbol "delay" ; + morph:supportsType lv2:CVPort ; + units:unit units:s + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0 ; + lv2:index 3 ; + lv2:minimum 0 ; + lv2:name "Attack Time" ; + lv2:symbol "attack" ; + morph:supportsType lv2:CVPort ; + units:unit units:s + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0 ; + lv2:index 4 ; + lv2:minimum 0 ; + lv2:name "Hold Time" ; + lv2:symbol "hold" ; + morph:supportsType lv2:CVPort ; + units:unit units:s + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0 ; + lv2:index 5 ; + lv2:minimum 0 ; + lv2:name "Decay Time" ; + lv2:symbol "decay" ; + morph:supportsType lv2:CVPort ; + units:unit units:s + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 1 ; + lv2:index 6 ; + lv2:maximum 1 ; + lv2:minimum 0 ; + lv2:name "Sustain Level" ; + lv2:symbol "sustain" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0 ; + lv2:index 7 ; + lv2:minimum 0 ; + lv2:name "Release Time" ; + lv2:symbol "release" ; + morph:supportsType lv2:CVPort ; + units:unit units:s + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 8 ; + lv2:name "Envelope Out" ; + lv2:symbol "out" + ] ; + dct:replaces , + , + ; + doap:name "DAHDSR Envelope with Gate and Trigger" ; + lv2:documentation """ +

Generates a DAHDSR (Delay, Attack, Hold, Decay, Sustain, Release) +envelope.

+ +

Another envelope generator, this time with two additional stages - Delay, +which delays the onset of the Attack stage, and Hold, which holds the output at +maximum before the Decay stage begins.

+ +

Triggering works in subtly different ways to the ADSR +(1680) - the Trigger will restart the envelope even if the Gate is closed - +the effect of this is to proceed through the stages and begin the release stage +immediately after the decay stage.

+ +

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.

+""" . diff --git a/blop.lv2/difference.ttl b/blop.lv2/difference.ttl new file mode 100644 index 0000000..c817cd8 --- /dev/null +++ b/blop.lv2/difference.ttl @@ -0,0 +1,47 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix urid: . + +blop:difference + a lv2:Plugin , + lv2:UtilityPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 0 ; + lv2:name "Minuend" ; + lv2:symbol "minuend" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 1 ; + lv2:name "Subtrahend" ; + lv2:symbol "subtrahend" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:OutputPort , + morph:AutoMorphPort ; + lv2:index 2 ; + lv2:name "Difference" ; + lv2:symbol "difference" ; + morph:supportsType lv2:CVPort + ] ; + dct:replaces , + , + , + ; + doap:name "Signal Difference" ; + lv2:documentation """ +

Subtract two signals.

+""" . diff --git a/blop.lv2/fmod.ttl b/blop.lv2/fmod.ttl new file mode 100644 index 0000000..6098be5 --- /dev/null +++ b/blop.lv2/fmod.ttl @@ -0,0 +1,58 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix units: . +@prefix urid: . + +blop:fmod + a lv2:Plugin , + lv2:SpectralPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:extensionData morph:interface ; + lv2:optionalFeature lv2:hardRTCapable , + urid:map ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 0 ; + lv2:maximum 0.5 ; + lv2:minimum 0.00001 ; + lv2:name "Frequency" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "freq" ; + morph:supportsType lv2:CVPort ; + units:unit units:hz + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 1 ; + lv2:name "Modulation" ; + lv2:symbol "mod" ; + morph:supportsType lv2:CVPort ; + units:unit units:oct + ] , [ + a lv2:ControlPort , + lv2:OutputPort , + morph:AutoMorphPort ; + lv2:index 2 ; + lv2:name "Modulated Frequency" ; + lv2:symbol "out" ; + morph:supportsType lv2:CVPort ; + units:unit units:hz + ] ; + dct:replaces , + , + , + ; + doap:name "Frequency Modulator" ; + lv2:documentation """ +

Modulates an input frequency by a driving signal, transposing the frequency +by ±1 Octave per unit amplitude of signal.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . + +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 ; + doap:name "Control to Audio Interpolator" ; + lv2:documentation """ +

Interpolates a control-rate (per-block) signal into a smooth audio +(per-sample) signal.

+""" . diff --git a/blop.lv2/lp4pole.ttl b/blop.lv2/lp4pole.ttl new file mode 100644 index 0000000..3731459 --- /dev/null +++ b/blop.lv2/lp4pole.ttl @@ -0,0 +1,61 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix urid: . + +blop:lp4pole + a lv2:Plugin , + lv2:LowpassPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable , + urid:map ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0.5 ; + lv2:index 0 ; + lv2:maximum 0.5 ; + lv2:minimum 0.00001 ; + lv2:name "Cutoff Frequency" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "cutoff" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0 ; + lv2:index 1 ; + lv2:maximum 4 ; + lv2:minimum 0 ; + lv2:name "Resonance" ; + lv2:symbol "resonance" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 2 ; + lv2:name "Input" ; + lv2:symbol "in" + ] , [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 3 ; + lv2:name "Output" ; + lv2:symbol "out" + ] ; + dct:replaces , + ; + doap:name "4 Pole Resonant Low-Pass Filter" ; + lv2:documentation """ +

Emulates a low pass filter in popular analogue synthesisers. This particular +filter is derived from one of many +implementations of the Moog 4 pole filter.

+""" . diff --git a/blop.lv2/manifest.ttl.in b/blop.lv2/manifest.ttl.in new file mode 100644 index 0000000..4942342 --- /dev/null +++ b/blop.lv2/manifest.ttl.in @@ -0,0 +1,155 @@ +@prefix blop: . +@prefix doap: . +@prefix foaf: . +@prefix lv2: . +@prefix rdfs: . + + + a foaf:Person ; + foaf:name "David Robillard" ; + foaf:mbox ; + rdfs:seeAlso . + +blop: + a doap:Project ; + lv2:symbol "blop" ; + doap:name "Blop LV2" ; + doap:shortdesc "An LV2 port of the Blop plugins." ; + doap:homepage ; + doap:license ; + doap:maintainer ; + doap:developer [ + a foaf:Person ; + foaf:name "Mike Rawes" ; + foaf:mbox + ] . + +blop:adsr + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:adsr_gt + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:amp + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:branch + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:dahdsr + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:difference + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:fmod + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:interpolator + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:lp4pole + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:product + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:pulse + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:quantiser_20 + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:quantiser_50 + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:quantiser_100 + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:random + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:ratio + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:sawtooth + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:sequencer_16 + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:sequencer_32 + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:sequencer_64 + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:square + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:sum + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:sync_pulse + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:sync_square + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:tracker + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . + +blop:triangle + a lv2:Plugin ; + rdfs:seeAlso ; + lv2:binary . diff --git a/blop.lv2/product.ttl b/blop.lv2/product.ttl new file mode 100644 index 0000000..fabe6a0 --- /dev/null +++ b/blop.lv2/product.ttl @@ -0,0 +1,48 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix urid: . + +blop:product + a lv2:Plugin , + lv2:UtilityPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:extensionData morph:interface ; + lv2:optionalFeature lv2:hardRTCapable , + urid:map ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 0 ; + lv2:name "Multiplicand" ; + lv2:symbol "multiplicand" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 1 ; + lv2:name "Multiplier" ; + lv2:symbol "multiplier" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:OutputPort , + morph:AutoMorphPort ; + lv2:index 2 ; + lv2:name "Product" ; + lv2:symbol "product" ; + morph:supportsType lv2:CVPort + ] ; + dct:replaces , + , + ; + doap:name "Signal Product" ; + lv2:documentation """ +

Multiply two signals.

+""" . diff --git a/blop.lv2/pulse.ttl b/blop.lv2/pulse.ttl new file mode 100644 index 0000000..f9c5ee7 --- /dev/null +++ b/blop.lv2/pulse.ttl @@ -0,0 +1,56 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix urid: . + +blop:pulse + a lv2:Plugin , + lv2:OscillatorPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:extensionData morph:interface ; + lv2:optionalFeature lv2:hardRTCapable , + urid:map ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 0 ; + lv2:maximum 0.5 ; + lv2:minimum 0.000001 ; + lv2:default 440.0 ; + lv2:name "Frequency" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "freq" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0.5 ; + lv2:index 1 ; + lv2:maximum 1 ; + lv2:minimum 0 ; + lv2:name "Pulse Width" ; + lv2:symbol "pwidth" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 2 ; + lv2:name "Output" ; + lv2:symbol "out" + ] ; + dct:replaces , + , + , + ; + doap:name "Variable Width Pulse Oscillator" ; + lv2:documentation """ +

Generates an alias-free pulse wave at given input frequency and pulse width +(duty).

+""" . diff --git a/blop.lv2/quantiser_100.ttl b/blop.lv2/quantiser_100.ttl new file mode 100644 index 0000000..aca7cbb --- /dev/null +++ b/blop.lv2/quantiser_100.ttl @@ -0,0 +1,718 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . + +blop:quantiser_100 + a lv2:Plugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 0 ; + lv2:name "Minimum" ; + lv2:symbol "min" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 1 ; + lv2:name "Maximum" ; + lv2:symbol "max" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 2 ; + lv2:minimum 0 ; + lv2:name "Match Range" ; + lv2:symbol "range" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 3 ; + lv2:maximum 2 ; + lv2:minimum 0 ; + lv2:name "Mode" ; + lv2:symbol "mode" ; + lv2:portProperty lv2:enumeration , + lv2:integer ; + lv2:scalePoint [ + rdfs:label "Extend" ; + rdf:value 0.0 + ] , [ + rdfs:label "Wrap" ; + rdf:value 1.0 + ] , [ + rdfs:label "Clip" ; + rdf:value 1.0 + ] + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 20 ; + lv2:index 4 ; + lv2:maximum 20 ; + lv2:minimum 1 ; + lv2:name "Steps" ; + lv2:portProperty lv2:integer ; + lv2:symbol "steps" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 5 ; + lv2:name "Value 0" ; + lv2:symbol "val00" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 6 ; + lv2:name "Value 1" ; + lv2:symbol "val01" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 7 ; + lv2:name "Value 2" ; + lv2:symbol "val02" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 8 ; + lv2:name "Value 3" ; + lv2:symbol "val03" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 9 ; + lv2:name "Value 4" ; + lv2:symbol "val04" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 10 ; + lv2:name "Value 5" ; + lv2:symbol "val05" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 11 ; + lv2:name "Value 6" ; + lv2:symbol "val06" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 12 ; + lv2:name "Value 7" ; + lv2:symbol "val07" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 13 ; + lv2:name "Value 8" ; + lv2:symbol "val08" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 14 ; + lv2:name "Value 9" ; + lv2:symbol "val09" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 15 ; + lv2:name "Value 10" ; + lv2:symbol "val10" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 16 ; + lv2:name "Value 11" ; + lv2:symbol "val11" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 17 ; + lv2:name "Value 12" ; + lv2:symbol "val12" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 18 ; + lv2:name "Value 13" ; + lv2:symbol "val13" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 19 ; + lv2:name "Value 14" ; + lv2:symbol "val14" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 20 ; + lv2:name "Value 15" ; + lv2:symbol "val15" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 21 ; + lv2:name "Value 16" ; + lv2:symbol "val16" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 22 ; + lv2:name "Value 17" ; + lv2:symbol "val17" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 23 ; + lv2:name "Value 18" ; + lv2:symbol "val18" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 24 ; + lv2:name "Value 19" ; + lv2:symbol "val19" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 25 ; + lv2:name "Value 20" ; + lv2:symbol "val20" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 26 ; + lv2:name "Value 21" ; + lv2:symbol "val21" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 27 ; + lv2:name "Value 22" ; + lv2:symbol "val22" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 28 ; + lv2:name "Value 23" ; + lv2:symbol "val23" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 29 ; + lv2:name "Value 24" ; + lv2:symbol "val24" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 30 ; + lv2:name "Value 25" ; + lv2:symbol "val25" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 31 ; + lv2:name "Value 26" ; + lv2:symbol "val26" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 32 ; + lv2:name "Value 27" ; + lv2:symbol "val27" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 33 ; + lv2:name "Value 28" ; + lv2:symbol "val28" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 34 ; + lv2:name "Value 29" ; + lv2:symbol "val29" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 35 ; + lv2:name "Value 30" ; + lv2:symbol "val30" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 36 ; + lv2:name "Value 31" ; + lv2:symbol "val31" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 37 ; + lv2:name "Value 32" ; + lv2:symbol "val32" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 38 ; + lv2:name "Value 33" ; + lv2:symbol "val33" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 39 ; + lv2:name "Value 34" ; + lv2:symbol "val34" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 40 ; + lv2:name "Value 35" ; + lv2:symbol "val35" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 41 ; + lv2:name "Value 36" ; + lv2:symbol "val36" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 42 ; + lv2:name "Value 37" ; + lv2:symbol "val37" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 43 ; + lv2:name "Value 38" ; + lv2:symbol "val38" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 44 ; + lv2:name "Value 39" ; + lv2:symbol "val39" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 45 ; + lv2:name "Value 40" ; + lv2:symbol "val40" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 46 ; + lv2:name "Value 41" ; + lv2:symbol "val41" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 47 ; + lv2:name "Value 42" ; + lv2:symbol "val42" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 48 ; + lv2:name "Value 43" ; + lv2:symbol "val43" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 49 ; + lv2:name "Value 44" ; + lv2:symbol "val44" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 50 ; + lv2:name "Value 45" ; + lv2:symbol "val45" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 51 ; + lv2:name "Value 46" ; + lv2:symbol "val46" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 52 ; + lv2:name "Value 47" ; + lv2:symbol "val47" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 53 ; + lv2:name "Value 48" ; + lv2:symbol "val48" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 54 ; + lv2:name "Value 49" ; + lv2:symbol "val49" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 55 ; + lv2:name "Value 50" ; + lv2:symbol "val50" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 56 ; + lv2:name "Value 51" ; + lv2:symbol "val51" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 57 ; + lv2:name "Value 52" ; + lv2:symbol "val52" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 58 ; + lv2:name "Value 53" ; + lv2:symbol "val53" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 59 ; + lv2:name "Value 54" ; + lv2:symbol "val54" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 60 ; + lv2:name "Value 55" ; + lv2:symbol "val55" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 61 ; + lv2:name "Value 56" ; + lv2:symbol "val56" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 62 ; + lv2:name "Value 57" ; + lv2:symbol "val57" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 63 ; + lv2:name "Value 58" ; + lv2:symbol "val58" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 64 ; + lv2:name "Value 59" ; + lv2:symbol "val59" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 65 ; + lv2:name "Value 60" ; + lv2:symbol "val60" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 66 ; + lv2:name "Value 61" ; + lv2:symbol "val61" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 67 ; + lv2:name "Value 62" ; + lv2:symbol "val62" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 68 ; + lv2:name "Value 63" ; + lv2:symbol "val63" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 69 ; + lv2:name "Value 64" ; + lv2:symbol "val64" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 70 ; + lv2:name "Value 65" ; + lv2:symbol "val65" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 71 ; + lv2:name "Value 66" ; + lv2:symbol "val66" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 72 ; + lv2:name "Value 67" ; + lv2:symbol "val67" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 73 ; + lv2:name "Value 68" ; + lv2:symbol "val68" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 74 ; + lv2:name "Value 69" ; + lv2:symbol "val69" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 75 ; + lv2:name "Value 70" ; + lv2:symbol "val70" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 76 ; + lv2:name "Value 71" ; + lv2:symbol "val71" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 77 ; + lv2:name "Value 72" ; + lv2:symbol "val72" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 78 ; + lv2:name "Value 73" ; + lv2:symbol "val73" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 79 ; + lv2:name "Value 74" ; + lv2:symbol "val74" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 80 ; + lv2:name "Value 75" ; + lv2:symbol "val75" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 81 ; + lv2:name "Value 76" ; + lv2:symbol "val76" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 82 ; + lv2:name "Value 77" ; + lv2:symbol "val77" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 83 ; + lv2:name "Value 78" ; + lv2:symbol "val78" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 84 ; + lv2:name "Value 79" ; + lv2:symbol "val79" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 85 ; + lv2:name "Value 80" ; + lv2:symbol "val80" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 86 ; + lv2:name "Value 81" ; + lv2:symbol "val81" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 87 ; + lv2:name "Value 82" ; + lv2:symbol "val82" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 88 ; + lv2:name "Value 83" ; + lv2:symbol "val83" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 89 ; + lv2:name "Value 84" ; + lv2:symbol "val84" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 90 ; + lv2:name "Value 85" ; + lv2:symbol "val85" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 91 ; + lv2:name "Value 86" ; + lv2:symbol "val86" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 92 ; + lv2:name "Value 87" ; + lv2:symbol "val87" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 93 ; + lv2:name "Value 88" ; + lv2:symbol "val88" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 94 ; + lv2:name "Value 89" ; + lv2:symbol "val89" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 95 ; + lv2:name "Value 90" ; + lv2:symbol "val90" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 96 ; + lv2:name "Value 91" ; + lv2:symbol "val91" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 97 ; + lv2:name "Value 92" ; + lv2:symbol "val92" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 98 ; + lv2:name "Value 93" ; + lv2:symbol "val93" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 99 ; + lv2:name "Value 94" ; + lv2:symbol "val94" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 100 ; + lv2:name "Value 95" ; + lv2:symbol "val95" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 101 ; + lv2:name "Value 96" ; + lv2:symbol "val96" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 102 ; + lv2:name "Value 97" ; + lv2:symbol "val97" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 103 ; + lv2:name "Value 98" ; + lv2:symbol "val98" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 104 ; + lv2:name "Value 99" ; + lv2:symbol "val99" + ] , [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 105 ; + lv2:name "Input" ; + lv2:symbol "in" + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 106 ; + lv2:name "Quantised Output" ; + lv2:symbol "out" + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 107 ; + lv2:name "Output Changed" ; + lv2:symbol "changed" + ] ; + dct:replaces ; + doap:name "Quantiser (100 Steps)" ; + lv2:documentation """ +

Quantises a signal to a set of arbitrary values within a range.

+ +

Match Range determines the distance from the quantised value that the input +can deviate before being altered. This allows small variations in input to get +through unmolested. If it is set to 0 the input is quantised to the nearest +exact match.

+ +

Mode is one of Extend (0), Wrap (1) or Clip (2).

+ +

Steps is the number of quantisation steps to use (up to a maximum of +100).

+ +

For example, given the following settings:

+
    +
  • Range Minimum = 0.0
  • +
  • Range Maximum = 12.0
  • +
  • Match Range = 0.0
  • +
  • Steps = 4
  • +
  • Quantisation Values 3, 5, 7 and 10
  • +
+ +

and an input that is a line from -24 to 24, the output will be:

+
    +
  • Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19, + 22
  • +
  • Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10
  • +
  • Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10
  • +
+ +

The quantisation values should all be within the range minimum and maximum +for it to work!

+""" . diff --git a/blop.lv2/quantiser_20.ttl b/blop.lv2/quantiser_20.ttl new file mode 100644 index 0000000..64c1d55 --- /dev/null +++ b/blop.lv2/quantiser_20.ttl @@ -0,0 +1,238 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . + +blop:quantiser_20 + a lv2:Plugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 0 ; + lv2:name "Minimum" ; + lv2:symbol "min" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 1 ; + lv2:name "Maximum" ; + lv2:symbol "max" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 2 ; + lv2:minimum 0 ; + lv2:name "Match Range" ; + lv2:symbol "range" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 3 ; + lv2:maximum 2 ; + lv2:minimum 0 ; + lv2:name "Mode" ; + lv2:symbol "mode" ; + lv2:portProperty lv2:enumeration , + lv2:integer ; + lv2:scalePoint [ + rdfs:label "Extend" ; + rdf:value 0.0 + ] , [ + rdfs:label "Wrap" ; + rdf:value 1.0 + ] , [ + rdfs:label "Clip" ; + rdf:value 1.0 + ] + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 20 ; + lv2:index 4 ; + lv2:maximum 20 ; + lv2:minimum 1 ; + lv2:name "Steps" ; + lv2:portProperty lv2:integer ; + lv2:symbol "steps" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 5 ; + lv2:name "Value 0" ; + lv2:symbol "val00" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 6 ; + lv2:name "Value 1" ; + lv2:symbol "val01" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 7 ; + lv2:name "Value 2" ; + lv2:symbol "val02" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 8 ; + lv2:name "Value 3" ; + lv2:symbol "val03" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 9 ; + lv2:name "Value 4" ; + lv2:symbol "val04" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 10 ; + lv2:name "Value 5" ; + lv2:symbol "val05" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 11 ; + lv2:name "Value 6" ; + lv2:symbol "val06" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 12 ; + lv2:name "Value 7" ; + lv2:symbol "val07" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 13 ; + lv2:name "Value 8" ; + lv2:symbol "val08" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 14 ; + lv2:name "Value 9" ; + lv2:symbol "val09" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 15 ; + lv2:name "Value 10" ; + lv2:symbol "val10" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 16 ; + lv2:name "Value 11" ; + lv2:symbol "val11" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 17 ; + lv2:name "Value 12" ; + lv2:symbol "val12" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 18 ; + lv2:name "Value 13" ; + lv2:symbol "val13" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 19 ; + lv2:name "Value 14" ; + lv2:symbol "val14" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 20 ; + lv2:name "Value 15" ; + lv2:symbol "val15" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 21 ; + lv2:name "Value 16" ; + lv2:symbol "val16" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 22 ; + lv2:name "Value 17" ; + lv2:symbol "val17" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 23 ; + lv2:name "Value 18" ; + lv2:symbol "val18" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 24 ; + lv2:name "Value 19" ; + lv2:symbol "val19" + ] , [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 25 ; + lv2:name "Input" ; + lv2:symbol "in" + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 26 ; + lv2:name "Quantised Output" ; + lv2:symbol "out" + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 27 ; + lv2:name "Output Changed" ; + lv2:symbol "changed" + ] ; + dct:replaces ; + doap:name "Quantiser (20 Steps)" ; + lv2:documentation """ +

Quantises a signal to a set of arbitrary values within a range.

+ +

Match Range determines the distance from the quantised value that the input +can deviate before being altered. This allows small variations in input to get +through unmolested. If it is set to 0 the input is quantised to the nearest +exact match.

+ +

Mode is one of Extend (0), Wrap (1) or Clip (2).

+ +

Steps is the number of quantisation steps to use (up to a maximum of +20).

+ +

For example, given the following settings:

+
    +
  • Range Minimum = 0.0
  • +
  • Range Maximum = 12.0
  • +
  • Match Range = 0.0
  • +
  • Steps = 4
  • +
  • Quantisation Values 3, 5, 7 and 10
  • +
+ +

and an input that is a line from -24 to 24, the output will be:

+
    +
  • Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19, + 22
  • +
  • Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10
  • +
  • Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10
  • +
+ +

The quantisation values should all be within the range minimum and maximum +for it to work!

+""" . diff --git a/blop.lv2/quantiser_50.ttl b/blop.lv2/quantiser_50.ttl new file mode 100644 index 0000000..de748fc --- /dev/null +++ b/blop.lv2/quantiser_50.ttl @@ -0,0 +1,418 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . + +blop:quantiser_50 + a lv2:Plugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 0 ; + lv2:name "Minimum" ; + lv2:symbol "min" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 1 ; + lv2:name "Maximum" ; + lv2:symbol "max" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 2 ; + lv2:minimum 0 ; + lv2:name "Match Range" ; + lv2:symbol "range" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 0 ; + lv2:index 3 ; + lv2:maximum 2 ; + lv2:minimum 0 ; + lv2:name "Mode" ; + lv2:symbol "mode" ; + lv2:portProperty lv2:enumeration , + lv2:integer ; + lv2:scalePoint [ + rdfs:label "Extend" ; + rdf:value 0.0 + ] , [ + rdfs:label "Wrap" ; + rdf:value 1.0 + ] , [ + rdfs:label "Clip" ; + rdf:value 1.0 + ] + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:default 20 ; + lv2:index 4 ; + lv2:maximum 20 ; + lv2:minimum 1 ; + lv2:name "Steps" ; + lv2:portProperty lv2:integer ; + lv2:symbol "steps" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 5 ; + lv2:name "Value 0" ; + lv2:symbol "val00" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 6 ; + lv2:name "Value 1" ; + lv2:symbol "val01" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 7 ; + lv2:name "Value 2" ; + lv2:symbol "val02" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 8 ; + lv2:name "Value 3" ; + lv2:symbol "val03" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 9 ; + lv2:name "Value 4" ; + lv2:symbol "val04" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 10 ; + lv2:name "Value 5" ; + lv2:symbol "val05" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 11 ; + lv2:name "Value 6" ; + lv2:symbol "val06" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 12 ; + lv2:name "Value 7" ; + lv2:symbol "val07" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 13 ; + lv2:name "Value 8" ; + lv2:symbol "val08" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 14 ; + lv2:name "Value 9" ; + lv2:symbol "val09" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 15 ; + lv2:name "Value 10" ; + lv2:symbol "val10" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 16 ; + lv2:name "Value 11" ; + lv2:symbol "val11" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 17 ; + lv2:name "Value 12" ; + lv2:symbol "val12" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 18 ; + lv2:name "Value 13" ; + lv2:symbol "val13" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 19 ; + lv2:name "Value 14" ; + lv2:symbol "val14" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 20 ; + lv2:name "Value 15" ; + lv2:symbol "val15" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 21 ; + lv2:name "Value 16" ; + lv2:symbol "val16" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 22 ; + lv2:name "Value 17" ; + lv2:symbol "val17" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 23 ; + lv2:name "Value 18" ; + lv2:symbol "val18" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 24 ; + lv2:name "Value 19" ; + lv2:symbol "val19" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 25 ; + lv2:name "Value 20" ; + lv2:symbol "val20" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 26 ; + lv2:name "Value 21" ; + lv2:symbol "val21" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 27 ; + lv2:name "Value 22" ; + lv2:symbol "val22" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 28 ; + lv2:name "Value 23" ; + lv2:symbol "val23" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 29 ; + lv2:name "Value 24" ; + lv2:symbol "val24" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 30 ; + lv2:name "Value 25" ; + lv2:symbol "val25" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 31 ; + lv2:name "Value 26" ; + lv2:symbol "val26" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 32 ; + lv2:name "Value 27" ; + lv2:symbol "val27" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 33 ; + lv2:name "Value 28" ; + lv2:symbol "val28" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 34 ; + lv2:name "Value 29" ; + lv2:symbol "val29" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 35 ; + lv2:name "Value 30" ; + lv2:symbol "val30" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 36 ; + lv2:name "Value 31" ; + lv2:symbol "val31" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 37 ; + lv2:name "Value 32" ; + lv2:symbol "val32" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 38 ; + lv2:name "Value 33" ; + lv2:symbol "val33" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 39 ; + lv2:name "Value 34" ; + lv2:symbol "val34" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 40 ; + lv2:name "Value 35" ; + lv2:symbol "val35" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 41 ; + lv2:name "Value 36" ; + lv2:symbol "val36" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 42 ; + lv2:name "Value 37" ; + lv2:symbol "val37" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 43 ; + lv2:name "Value 38" ; + lv2:symbol "val38" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 44 ; + lv2:name "Value 39" ; + lv2:symbol "val39" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 45 ; + lv2:name "Value 40" ; + lv2:symbol "val40" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 46 ; + lv2:name "Value 41" ; + lv2:symbol "val41" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 47 ; + lv2:name "Value 42" ; + lv2:symbol "val42" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 48 ; + lv2:name "Value 43" ; + lv2:symbol "val43" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 49 ; + lv2:name "Value 44" ; + lv2:symbol "val44" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 50 ; + lv2:name "Value 45" ; + lv2:symbol "val45" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 51 ; + lv2:name "Value 46" ; + lv2:symbol "val46" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 52 ; + lv2:name "Value 47" ; + lv2:symbol "val47" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 53 ; + lv2:name "Value 48" ; + lv2:symbol "val48" + ] , [ + a lv2:ControlPort , + lv2:InputPort ; + lv2:index 54 ; + lv2:name "Value 49" ; + lv2:symbol "val49" + ] , [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 55 ; + lv2:name "Input" ; + lv2:symbol "in" + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 56 ; + lv2:name "Quantised Output" ; + lv2:symbol "out" + ] , [ + a lv2:CVPort , + lv2:OutputPort ; + lv2:index 57 ; + lv2:name "Output Changed" ; + lv2:symbol "changed" + ] ; + dct:replaces ; + doap:name "Quantiser (50 Steps)" ; + lv2:documentation """ +

Quantises a signal to a set of arbitrary values within a range.

+ +

Match Range determines the distance from the quantised value that the input +can deviate before being altered. This allows small variations in input to get +through unmolested. If it is set to 0 the input is quantised to the nearest +exact match.

+ +

Mode is one of Extend (0), Wrap (1) or Clip (2).

+ +

Steps is the number of quantisation steps to use (up to a maximum of +50).

+ +

For example, given the following settings:

+
    +
  • Range Minimum = 0.0
  • +
  • Range Maximum = 12.0
  • +
  • Match Range = 0.0
  • +
  • Steps = 4
  • +
  • Quantisation Values 3, 5, 7 and 10
  • +
+ +

and an input that is a line from -24 to 24, the output will be:

+
    +
  • Extend: -26, -21, -19, -17, -14, -9, -7, -5, -2, 3, 5, 7, 10, 15, 17, 19, + 22
  • +
  • Wrap: 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10, 3, 5, 7, 10
  • +
  • Clip: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 10, 10, 10, 10, 10
  • +
+ +

The quantisation values should all be within the range minimum and maximum +for it to work!

+""" . diff --git a/blop.lv2/random.ttl b/blop.lv2/random.ttl new file mode 100644 index 0000000..a0fcb28 --- /dev/null +++ b/blop.lv2/random.ttl @@ -0,0 +1,59 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix units: . + +blop:random + a lv2:Plugin , + lv2:OscillatorPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 0 ; + lv2:maximum 0.5 ; + lv2:minimum 0.000001 ; + lv2:default 440.0 ; + lv2:name "Frequency" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "freq" ; + morph:supportsType lv2:CVPort ; + units:unit units:hz + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 1 ; + lv2:index 1 ; + lv2:maximum 1 ; + lv2:minimum 0 ; + lv2:name "Wave Smoothness" ; + lv2:symbol "smooth" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:AudioPort , + lv2:OutputPort , + lv2:Port ; + lv2:index 2 ; + lv2:name "Output" ; + lv2:symbol "out" + ] ; + dct:replaces , + , + , + ; + doap:name "Random Wave Generator" ; + lv2:documentation """ +

Generates a random waveform of varying frequency and smoothness. The +frequency determines how often the output changes. The smoothness, how quickly +a transition occurs.

+ +

The output varies between ±1, with an even distribution.

+""" . diff --git a/blop.lv2/ratio.ttl b/blop.lv2/ratio.ttl new file mode 100644 index 0000000..f3feb3d --- /dev/null +++ b/blop.lv2/ratio.ttl @@ -0,0 +1,48 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix urid: . + +blop:ratio + a lv2:Plugin , + lv2:UtilityPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 0 ; + lv2:name "Numerator" ; + lv2:symbol "numerator" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 1 ; + lv2:name "Denominator" ; + lv2:symbol "denominator" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:OutputPort , + morph:AutoMorphPort ; + lv2:index 2 ; + lv2:name "Ratio" ; + lv2:symbol "ratio" ; + morph:supportsType lv2:CVPort + ] ; + dct:replaces , + , + , + ; + doap:name "Signal Ratio" ; + lv2:documentation """ +

Get the ratio between two signals.

+

To avoid divisions by zero, 0 is treated as a really small number.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix 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 , + 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 , + ; + doap:name "Sawtooth Oscillator" ; + lv2:documentation """ +

Generates an alias-free sawtooth wave at given input frequency.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . + +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 , + ; + 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 ; + doap:name "16 Step Sequencer" ; + lv2:documentation """ +

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.

+ +

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.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . + +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 , + ; + 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 ; + doap:name "32 Step Sequencer" ; + lv2:documentation """ +

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.

+ +

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.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . + +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 , + ; + 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 ; + doap:name "64 Step Sequencer" ; + lv2:documentation """ +

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.

+ +

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.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix 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 , + 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 , + ; + doap:name "Square Oscillator" ; + lv2:documentation """ +

Generates an alias-free square wave at given input frequency.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix 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 , + , + ; + doap:name "Signal Sum" ; + lv2:documentation """ +

Add two signals.

+""" . 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: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix 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 , + ; + doap:name "Clock Pulse Oscillator with Gate" ; + lv2:documentation """ +

Same as the Clock +Oscillator, but with pulse-width modulation.

+""" . diff --git a/blop.lv2/sync_square.ttl b/blop.lv2/sync_square.ttl new file mode 100644 index 0000000..897d572 --- /dev/null +++ b/blop.lv2/sync_square.ttl @@ -0,0 +1,51 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix urid: . + +blop:sync_square + a lv2:Plugin , + lv2:OscillatorPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:extensionData morph:interface ; + lv2:optionalFeature lv2:hardRTCapable , + urid:map ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 16 ; + lv2:index 0 ; + lv2:maximum 64 ; + lv2:minimum 0 ; + lv2:name "Frequency" ; + lv2:symbol "freq" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 1 ; + lv2:name "Gate" ; + lv2:portProperty lv2:toggled ; + lv2:symbol "gate" + ] , [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 2 ; + lv2:name "Output" ; + lv2:symbol "out" + ] ; + dct:replaces , + ; + doap:name "Clock Oscillator with Gate" ; + lv2:documentation """ +

Generates a non-bandlimited simple square waveform for use as a clock. +Useful for triggering the sequencers, or anything else that uses a clock +signal.

+ +

When the gate is closed, it outputs silence, and the phase is reset.

+""" . diff --git a/blop.lv2/tracker.ttl b/blop.lv2/tracker.ttl new file mode 100644 index 0000000..5a88b9b --- /dev/null +++ b/blop.lv2/tracker.ttl @@ -0,0 +1,120 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix units: . +@prefix urid: . + +blop:tracker + a lv2:Plugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:extensionData morph:interface ; + lv2:optionalFeature lv2:hardRTCapable , + urid:map ; + lv2:port [ + a lv2:CVPort , + lv2:InputPort ; + lv2:index 0 ; + lv2:name "Gate" ; + lv2:portProperty lv2:toggled ; + lv2:symbol "gate" + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 100 ; + lv2:index 1 ; + lv2:maximum 0.5 ; + lv2:minimum 0.00001 ; + lv2:name "High Attack Rate" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "hattack" ; + morph:supportsType lv2:CVPort ; + units:unit units:hz + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 100 ; + lv2:index 2 ; + lv2:maximum 0.5 ; + lv2:minimum 0.00001 ; + lv2:name "High Decay Rate" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "hdecay" ; + morph:supportsType lv2:CVPort ; + units:unit units:hz + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 100 ; + lv2:index 3 ; + lv2:maximum 0.5 ; + lv2:minimum 0.00001 ; + lv2:name "Low Attack Rate" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "lattack" ; + morph:supportsType lv2:CVPort ; + units:unit units:hz + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 100 ; + lv2:index 4 ; + lv2:maximum 0.5 ; + lv2:minimum 0.00001 ; + lv2:name "Low Decay Rate" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "ldecay" ; + morph:supportsType lv2:CVPort ; + units:unit units:hz + ] , [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 5 ; + lv2:name "Input" ; + lv2:symbol "in" + ] , [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 6 ; + lv2:name "Output" ; + lv2:symbol "out" + ] ; + dct:replaces , + ; + doap:name "Signal Tracker" ; + lv2:documentation """ +

This tracks an incoming signal and outputs the result.

+

The rate controls tell the plugin how quickly to respond to a change in +input. Low values will mean a slower response - a setting of 0 will hold the +last value, and a very high value will track the input exactly.

+

Attack rate is how quickly an upward change is tracked, and Decay for +downward changes. There are two pairs of these - the one used depends on the +level of the Gate.

+

Example uses:

+
    +
  • + An envelope tracker- use the ‘Gate Low’ track rates with + the Gate held low, and run the output through a full-wave rectifier (an ABS() + operator) to get an estimate of the level of a signal.
  • +
  • + Sample and Hold- run a narrow pulse wave into the gate, set the + ‘Gate High’ rates to maximum, and the ‘Gate Low’ + rates set to 0.
  • +
  • + Track and Hold- run a variable pulse wave into the gate, set the + ‘Gate High’ rates to 0, and the ‘Gate Low’ rates set + high. Varying the pulsewidth will vary the time the input is tracked, and + when it is held.
  • +
+""" . diff --git a/blop.lv2/triangle.ttl b/blop.lv2/triangle.ttl new file mode 100644 index 0000000..f9c7ca0 --- /dev/null +++ b/blop.lv2/triangle.ttl @@ -0,0 +1,57 @@ +@prefix blop: . +@prefix dct: . +@prefix doap: . +@prefix lv2: . +@prefix morph: . +@prefix urid: . + +blop:triangle + a lv2:Plugin , + lv2:OscillatorPlugin ; + lv2:project blop: ; + lv2:microVersion 0 ; + lv2:minorVersion 0 ; + lv2:extensionData morph:interface ; + lv2:optionalFeature lv2:hardRTCapable , + urid:map ; + lv2:port [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:index 0 ; + lv2:maximum 0.5 ; + lv2:minimum 0.000001 ; + lv2:default 440.0 ; + lv2:name "Frequency" ; + lv2:portProperty , + lv2:sampleRate ; + lv2:symbol "freq" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:ControlPort , + lv2:InputPort , + morph:MorphPort ; + lv2:default 0.5 ; + lv2:index 1 ; + lv2:maximum 1 ; + lv2:minimum 0 ; + lv2:name "Slope" ; + lv2:symbol "slope" ; + morph:supportsType lv2:CVPort + ] , [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 2 ; + lv2:name "Output" ; + lv2:symbol "out" + ] ; + dct:replaces , + , + , + ; + doap:name "Variable Slope Triangle Oscillator" ; + lv2:documentation """ +

Generates an alias-free variable slope triangle wave at given input +frequency and slope. The slope changes the wave shape from sawtooth to +triangle.

+""" . 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 +#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 +#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 +#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 +#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 . */ -#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 . */ -#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 -#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 . +*/ + +#ifndef blop_uris_h +#define blop_uris_h + +#include +#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 . */ -#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 . */ -#ifndef blip_wdatutil_h -#define blip_wdatutil_h +#ifndef blop_wdatutil_h +#define blop_wdatutil_h #include #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 +#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 +#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 +#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 +#include "lv2/lv2plug.in/ns/ext/morph/morph.h" #include "lv2/lv2plug.in/ns/lv2core/lv2.h" #include #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 +#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 +#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 +#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 +#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 +#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 +#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 +#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 +#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 #include #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') -- cgit v1.2.1