aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2013-02-11 00:18:55 +0000
committerDavid Robillard <d@drobilla.net>2013-02-11 00:18:55 +0000
commitb91e1a81db7b45d0460da1c8a134d855e0ff265c (patch)
tree3da714cd19b9171bc48614f1442c82383550ffca /plugins
parent5367f7265e123aa8a26f8e3d3fb964f18c3250b2 (diff)
downloadlv2-b91e1a81db7b45d0460da1c8a134d855e0ff265c.tar.xz
Order examples in a sensible progression for the book.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/eg-synth.lv2/manifest.ttl.in9
-rw-r--r--plugins/eg-synth.lv2/synth.c171
-rw-r--r--plugins/eg-synth.lv2/synth.ttl44
l---------plugins/eg-synth.lv2/waf1
-rw-r--r--plugins/eg-synth.lv2/wscript64
-rw-r--r--plugins/eg01-amp.lv2/README.txt (renamed from plugins/eg-amp.lv2/README.txt)8
-rw-r--r--plugins/eg01-amp.lv2/amp.c (renamed from plugins/eg-amp.lv2/amp.c)0
-rw-r--r--plugins/eg01-amp.lv2/amp.ttl (renamed from plugins/eg-amp.lv2/amp.ttl)13
-rw-r--r--plugins/eg01-amp.lv2/manifest.ttl.in (renamed from plugins/eg-amp.lv2/manifest.ttl.in)8
l---------plugins/eg01-amp.lv2/waf (renamed from plugins/eg-amp.lv2/waf)0
-rw-r--r--plugins/eg01-amp.lv2/wscript (renamed from plugins/eg-amp.lv2/wscript)0
-rw-r--r--plugins/eg02-midigate.lv2/README.txt (renamed from plugins/eg-midigate.lv2/README.txt)0
-rw-r--r--plugins/eg02-midigate.lv2/manifest.ttl.in (renamed from plugins/eg-midigate.lv2/manifest.ttl.in)0
-rw-r--r--plugins/eg02-midigate.lv2/midigate.c (renamed from plugins/eg-midigate.lv2/midigate.c)0
-rw-r--r--plugins/eg02-midigate.lv2/midigate.ttl (renamed from plugins/eg-midigate.lv2/midigate.ttl)0
l---------plugins/eg02-midigate.lv2/waf (renamed from plugins/eg-metro.lv2/waf)0
-rw-r--r--plugins/eg02-midigate.lv2/wscript (renamed from plugins/eg-midigate.lv2/wscript)0
-rw-r--r--plugins/eg03-metro.lv2/README.txt (renamed from plugins/eg-metro.lv2/README.txt)0
-rw-r--r--plugins/eg03-metro.lv2/manifest.ttl.in (renamed from plugins/eg-metro.lv2/manifest.ttl.in)0
-rw-r--r--plugins/eg03-metro.lv2/metro.c (renamed from plugins/eg-metro.lv2/metro.c)16
-rw-r--r--plugins/eg03-metro.lv2/metro.ttl (renamed from plugins/eg-metro.lv2/metro.ttl)0
l---------plugins/eg03-metro.lv2/waf (renamed from plugins/eg-midigate.lv2/waf)0
-rw-r--r--plugins/eg03-metro.lv2/wscript (renamed from plugins/eg-metro.lv2/wscript)0
-rw-r--r--plugins/eg04-sampler.lv2/README.txt (renamed from plugins/eg-sampler.lv2/README.txt)0
-rw-r--r--plugins/eg04-sampler.lv2/click.wav (renamed from plugins/eg-sampler.lv2/click.wav)bin644 -> 644 bytes
-rw-r--r--plugins/eg04-sampler.lv2/manifest.ttl.in (renamed from plugins/eg-sampler.lv2/manifest.ttl.in)0
-rw-r--r--plugins/eg04-sampler.lv2/sampler.c (renamed from plugins/eg-sampler.lv2/sampler.c)0
-rw-r--r--plugins/eg04-sampler.lv2/sampler.ttl (renamed from plugins/eg-sampler.lv2/sampler.ttl)0
-rw-r--r--plugins/eg04-sampler.lv2/sampler_ui.c (renamed from plugins/eg-sampler.lv2/sampler_ui.c)0
-rw-r--r--plugins/eg04-sampler.lv2/uris.h (renamed from plugins/eg-sampler.lv2/uris.h)0
l---------plugins/eg04-sampler.lv2/waf (renamed from plugins/eg-sampler.lv2/waf)0
-rw-r--r--plugins/eg04-sampler.lv2/wscript (renamed from plugins/eg-sampler.lv2/wscript)0
32 files changed, 26 insertions, 308 deletions
diff --git a/plugins/eg-synth.lv2/manifest.ttl.in b/plugins/eg-synth.lv2/manifest.ttl.in
deleted file mode 100644
index 24acd71..0000000
--- a/plugins/eg-synth.lv2/manifest.ttl.in
+++ /dev/null
@@ -1,9 +0,0 @@
-# See manifest.ttl.in in the eg-amp.lv2 example for an explanation of this file
-
-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-
-<http://lv2plug.in/plugins/eg-synth>
- a lv2:Plugin ;
- lv2:binary <synth@LIB_EXT@> ;
- rdfs:seeAlso <synth.ttl> .
diff --git a/plugins/eg-synth.lv2/synth.c b/plugins/eg-synth.lv2/synth.c
deleted file mode 100644
index 758989b..0000000
--- a/plugins/eg-synth.lv2/synth.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- Copyright 2012 Harry van Haaren <harryhaaren@gmail.com>
- Copyright 2012 David Robillard <d@drobilla.net>
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-/**
- @file synth.c Implementation of the LV2 Sin Synth example plugin.
-
- This is a simple LV2 synthesis plugin that demonstrates how to receive MIDI
- events and render audio in response to them.
-*/
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
-
-#define SYNTH_URI "http://lv2plug.in/plugins/eg-synth"
-
-/** Port indices. */
-typedef enum {
- SYNTH_FREQ = 0,
- SYNTH_OUTPUT,
-} PortIndex;
-
-/** Plugin instance. */
-typedef struct {
- // Sample rate, necessary to generate sin wave in run()
- double sample_rate;
-
- // Current wave phase
- float phase;
-
- // Port buffers
- const float* freq;
- float* output;
-} Synth;
-
-/** Create a new plugin instance. */
-static LV2_Handle
-instantiate(const LV2_Descriptor* descriptor,
- double rate,
- const char* bundle_path,
- const LV2_Feature* const* features)
-{
- Synth* self = (Synth*)malloc(sizeof(Synth));
- if (self) {
- // Store the sample rate so it is available in run()
- self->sample_rate = rate;
- }
- return (LV2_Handle)self;
-}
-
-/** Connect a port to a buffer (audio thread, must be RT safe). */
-static void
-connect_port(LV2_Handle instance,
- uint32_t port,
- void* data)
-{
- Synth* self = (Synth*)instance;
-
- switch ((PortIndex)port) {
- case SYNTH_FREQ:
- self->freq = (const float*)data;
- break;
- case SYNTH_OUTPUT:
- self->output = (float*)data;
- break;
- }
-}
-
-/** Initialise and prepare the plugin instance for running. */
-static void
-activate(LV2_Handle instance)
-{
- Synth* self = (Synth*)instance;
-
- // Initialize phase so we start at the beginning of the wave
- self->phase = 0.0f;
-}
-
-/** Process a block of audio (audio thread, must be RT safe). */
-static void
-run(LV2_Handle instance, uint32_t n_samples)
-{
- Synth* self = (Synth*)instance;
-
- const float PI = 3.1415;
- const float volume = 0.3;
- const float freq = *(self->freq);
- float* const output = self->output;
-
- float samples_per_cycle = self->sample_rate / freq;
-
- /* Calculate the phase offset per sample. Phase ranges from 0..1, so
- phase_increment is a floating point number such that we get "freq"
- number of cycles in "sample_rate" amount of samples. */
- float phase_increment = (1.f / samples_per_cycle);
-
- for (uint32_t pos = 0; pos < n_samples; pos++) {
- /* Calculate the next sample. Phase ranges from 0..1, but sin()
- expects its input in radians, so we multiply by 2 PI to convert it.
- We also multiply by volume so it's not extremely loud. */
- output[pos] = sin(self->phase * 2 * PI) * volume;
-
- /* Increment the phase so we generate the next sample */
- self->phase += phase_increment;
- if (self->phase > 1.0f) {
- self->phase = 0.0f;
- }
- }
-}
-
-/** Finish running (counterpart to activate()). */
-static void
-deactivate(LV2_Handle instance)
-{
- /* Nothing to do here in this trivial mostly stateless plugin. */
-}
-
-/** Destroy a plugin instance (counterpart to instantiate()). */
-static void
-cleanup(LV2_Handle instance)
-{
- free(instance);
-}
-
-/** Return extension data provided by the plugin. */
-static const void*
-extension_data(const char* uri)
-{
- return NULL; /* This plugin has no extension data. */
-}
-
-/** The LV2_Descriptor for this plugin. */
-static const LV2_Descriptor descriptor = {
- SYNTH_URI,
- instantiate,
- connect_port,
- activate,
- run,
- deactivate,
- cleanup,
- extension_data
-};
-
-/** Entry point, the host will call this function to access descriptors. */
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
-lv2_descriptor(uint32_t index)
-{
- switch (index) {
- case 0:
- return &descriptor;
- default:
- return NULL;
- }
-}
diff --git a/plugins/eg-synth.lv2/synth.ttl b/plugins/eg-synth.lv2/synth.ttl
deleted file mode 100644
index fb97d56..0000000
--- a/plugins/eg-synth.lv2/synth.ttl
+++ /dev/null
@@ -1,44 +0,0 @@
-# LV2 Sinewave synth plugin
-# Copyright 2012 Harry van Haaren <harryhaaren@gmail.com>
-#
-# Permission to use, copy, modify, and/or distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-@prefix doap: <http://usefulinc.com/ns/doap#> .
-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-
-<http://lv2plug.in/plugins/eg-synth>
- a lv2:Plugin ,
- lv2:InstrumentPlugin ;
- doap:name "Example Synthesizer" ;
- doap:license <http://opensource.org/licenses/isc> ;
- lv2:project <http://lv2plug.in/ns/lv2> ;
- lv2:optionalFeature lv2:hardRTCapable ;
- lv2:port [
- a lv2:InputPort ,
- lv2:ControlPort ;
- lv2:index 0 ;
- lv2:symbol "frequency" ;
- lv2:name "Frequency" ;
- lv2:default 440.0 ;
- lv2:minimum 40.0 ;
- lv2:maximum 880.0
- ] , [
- a lv2:AudioPort ,
- lv2:OutputPort ;
- lv2:index 1 ;
- lv2:symbol "out" ;
- lv2:name "Out"
- ] .
diff --git a/plugins/eg-synth.lv2/waf b/plugins/eg-synth.lv2/waf
deleted file mode 120000
index 59a1ac9..0000000
--- a/plugins/eg-synth.lv2/waf
+++ /dev/null
@@ -1 +0,0 @@
-../../waf \ No newline at end of file
diff --git a/plugins/eg-synth.lv2/wscript b/plugins/eg-synth.lv2/wscript
deleted file mode 100644
index 2069d03..0000000
--- a/plugins/eg-synth.lv2/wscript
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env python
-from waflib.extras import autowaf as autowaf
-import re
-
-# Variables for 'waf dist'
-APPNAME = 'eg-synth.lv2'
-VERSION = '1.0.0'
-
-# Mandatory variables
-top = '.'
-out = 'build'
-
-def options(opt):
- opt.load('compiler_c')
- autowaf.set_options(opt)
-
-def configure(conf):
- conf.load('compiler_c')
- autowaf.configure(conf)
- autowaf.set_c99_mode(conf)
- autowaf.display_header('Synth Configuration')
-
- if not autowaf.is_child():
- autowaf.check_pkg(conf, 'lv2', uselib_store='LV2')
-
- autowaf.display_msg(conf, 'LV2 bundle directory', conf.env.LV2DIR)
- print('')
-
-def build(bld):
- bundle = APPNAME
-
- # Make a pattern for shared objects without the 'lib' prefix
- module_pat = re.sub('^lib', '', bld.env.cshlib_PATTERN)
- module_ext = module_pat[module_pat.rfind('.'):]
-
- # Build manifest.ttl by substitution (for portable lib extension)
- bld(features = 'subst',
- source = 'manifest.ttl.in',
- target = '%s/%s' % (bundle, 'manifest.ttl'),
- install_path = '${LV2DIR}/%s' % bundle,
- LIB_EXT = module_ext)
-
- # Copy other data files to build bundle (build/eg-amp.lv2)
- for i in ['synth.ttl']:
- bld(features = 'subst',
- is_copy = True,
- source = i,
- target = '%s/%s' % (bundle, i),
- install_path = '${LV2DIR}/%s' % bundle)
-
- # Use LV2 headers from parent directory if building as a sub-project
- includes = None
- if autowaf.is_child:
- includes = '../..'
-
- # Build plugin library
- obj = bld(features = 'c cshlib',
- source = 'synth.c',
- name = 'synth',
- target = '%s/synth' % bundle,
- install_path = '${LV2DIR}/%s' % bundle,
- uselib = 'LV2',
- includes = includes)
- obj.env.cshlib_PATTERN = module_pat
diff --git a/plugins/eg-amp.lv2/README.txt b/plugins/eg01-amp.lv2/README.txt
index c2ab37d..f024a4d 100644
--- a/plugins/eg-amp.lv2/README.txt
+++ b/plugins/eg01-amp.lv2/README.txt
@@ -2,11 +2,11 @@
This plugin is a simple example of a basic LV2 plugin with no additional features.
It has audio ports which contain an array of `float`,
-and control ports which contain a single `float`.
+and a control port which contain a single `float`.
LV2 plugins are defined in two parts: code and data.
-The code is written in C (or any C compatible language, such as C++) and defines the executable portions of the plugin.
-Static data is described separately in human and machine readable files in the http://www.w3.org/TeamSubmission/turtle/[Turtle] syntax.
+The code is written in C, or any C compatible language such as C++.
+Static data is described separately in the human and machine friendly http://www.w3.org/TeamSubmission/turtle/[Turtle] syntax.
Turtle is a syntax for the RDF data model,
but familiarity with RDF is not required to understand this documentation.
@@ -16,6 +16,6 @@ There are several advantages to this approach:
* Hosts can discover and inspect plugins without loading or executing any plugin code
* It is simple to work with plugin data using scripting languages, command line tools, etc.
- * A standard format allows the re-use of existing vocabularies to describe plugins
+ * The standard format allow the use of existing vocabularies to describe plugins and related information
* The data inherently integrates with the web, databases, etc.
* Labels and documentation are translatable, and available to hosts for display in user interfaces
diff --git a/plugins/eg-amp.lv2/amp.c b/plugins/eg01-amp.lv2/amp.c
index 8dd7b4f..8dd7b4f 100644
--- a/plugins/eg-amp.lv2/amp.c
+++ b/plugins/eg01-amp.lv2/amp.c
diff --git a/plugins/eg-amp.lv2/amp.ttl b/plugins/eg01-amp.lv2/amp.ttl
index 25e4320..f4a87f2 100644
--- a/plugins/eg-amp.lv2/amp.ttl
+++ b/plugins/eg01-amp.lv2/amp.ttl
@@ -1,8 +1,17 @@
+# The full description of the plugin is in this file, which is linked to from
+# `manifest.ttl`. This is done so the host only needs to scan the relatively
+# small `manifest.ttl` files to quickly discover all plugins.
+
@prefix doap: <http://usefulinc.com/ns/doap#> .
-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+# First the type of the plugin is described. All plugins must explicitly list
+# `lv2:Plugin` as a type. A more specific type should also be given, where
+# applicable, so hosts can present a nicer UI for loading plugins. Note that
+# this URI is the identifier of the plugin, so if it does not match the one in
+# `manifest.ttl`, the host will not discover the plugin data at all.
<http://lv2plug.in/plugins/eg-amp>
a lv2:Plugin ,
lv2:AmplifierPlugin ;
diff --git a/plugins/eg-amp.lv2/manifest.ttl.in b/plugins/eg01-amp.lv2/manifest.ttl.in
index 51f4a79..0da78b0 100644
--- a/plugins/eg-amp.lv2/manifest.ttl.in
+++ b/plugins/eg01-amp.lv2/manifest.ttl.in
@@ -12,7 +12,7 @@
#
# ==== Namespace Prefixes ====
#
-# Turtle files often contain many URIs. To make this more readable, prefixes
+# Turtle files contain many URIs. To make this more readable, prefixes
# can be defined. For example, with the `lv2:` prefix below, instead of
# <http://lv2plug.in/ns/lv2core#Plugin> the shorter form `lv2:Plugin` can be
# used. This is just a shorthand for URIs within a file, the prefixes are not
@@ -33,7 +33,7 @@
# This file is called called `manifest.ttl.in` rather than `manifest.ttl`
# to indicate that it is not the final file to be installed.
# This is not necessary, but is a good idea for portable plugins.
-# For reability, the text will assume `.so` is the extension used.
+# For reability, the following text will assume `.so` is the extension used.
#
# In short, this declares that the resource with URI
# "http://lv2plug.in/plugins/eg-amp" is an LV2 plugin, with executable code in
@@ -74,14 +74,14 @@
# E.G. WHERE THE PORTION FOLLOWING "http://" IS NOT AN ACTUAL DOMAIN NAME. If
# you need an example URI, the domain http://example.org/ is reserved for this
# purpose. It is best to use web URIs, e.g. at the domain where plugins are
-# hosted for download, even if there is currently no documents hosted there.
+# hosted for download, even if no actual documents are currently hosted there.
# If this is truly impossible, use a URN, e.g. urn:myplugs:superamp.
#
# A detailed explanation of each statement follows.
<http://lv2plug.in/plugins/eg-amp> a lv2:Plugin .
-# The `a` is a Turtle shortcut for rdf:type and more or less means ``is a''.
+# The `a`, as in ``is a'', is a Turtle shortcut for `rdf:type`.
# `lv2:Plugin` expands to <http://lv2plug.in/ns/lv2core#Plugin> (using the
# `lv2:` prefix above) which is the type of all LV2 plugins.
# This statement means ``<http://lv2plug.in/plugins/eg-amp> is an LV2 plugin''.
diff --git a/plugins/eg-amp.lv2/waf b/plugins/eg01-amp.lv2/waf
index 59a1ac9..59a1ac9 120000
--- a/plugins/eg-amp.lv2/waf
+++ b/plugins/eg01-amp.lv2/waf
diff --git a/plugins/eg-amp.lv2/wscript b/plugins/eg01-amp.lv2/wscript
index d4295ff..d4295ff 100644
--- a/plugins/eg-amp.lv2/wscript
+++ b/plugins/eg01-amp.lv2/wscript
diff --git a/plugins/eg-midigate.lv2/README.txt b/plugins/eg02-midigate.lv2/README.txt
index 8f4a0f0..8f4a0f0 100644
--- a/plugins/eg-midigate.lv2/README.txt
+++ b/plugins/eg02-midigate.lv2/README.txt
diff --git a/plugins/eg-midigate.lv2/manifest.ttl.in b/plugins/eg02-midigate.lv2/manifest.ttl.in
index d32f1dc..d32f1dc 100644
--- a/plugins/eg-midigate.lv2/manifest.ttl.in
+++ b/plugins/eg02-midigate.lv2/manifest.ttl.in
diff --git a/plugins/eg-midigate.lv2/midigate.c b/plugins/eg02-midigate.lv2/midigate.c
index 3b74bfc..3b74bfc 100644
--- a/plugins/eg-midigate.lv2/midigate.c
+++ b/plugins/eg02-midigate.lv2/midigate.c
diff --git a/plugins/eg-midigate.lv2/midigate.ttl b/plugins/eg02-midigate.lv2/midigate.ttl
index 59ac815..59ac815 100644
--- a/plugins/eg-midigate.lv2/midigate.ttl
+++ b/plugins/eg02-midigate.lv2/midigate.ttl
diff --git a/plugins/eg-metro.lv2/waf b/plugins/eg02-midigate.lv2/waf
index 59a1ac9..59a1ac9 120000
--- a/plugins/eg-metro.lv2/waf
+++ b/plugins/eg02-midigate.lv2/waf
diff --git a/plugins/eg-midigate.lv2/wscript b/plugins/eg02-midigate.lv2/wscript
index 44336af..44336af 100644
--- a/plugins/eg-midigate.lv2/wscript
+++ b/plugins/eg02-midigate.lv2/wscript
diff --git a/plugins/eg-metro.lv2/README.txt b/plugins/eg03-metro.lv2/README.txt
index 5e9a84a..5e9a84a 100644
--- a/plugins/eg-metro.lv2/README.txt
+++ b/plugins/eg03-metro.lv2/README.txt
diff --git a/plugins/eg-metro.lv2/manifest.ttl.in b/plugins/eg03-metro.lv2/manifest.ttl.in
index bd93f66..bd93f66 100644
--- a/plugins/eg-metro.lv2/manifest.ttl.in
+++ b/plugins/eg03-metro.lv2/manifest.ttl.in
diff --git a/plugins/eg-metro.lv2/metro.c b/plugins/eg03-metro.lv2/metro.c
index 97821a1..d2ac982 100644
--- a/plugins/eg-metro.lv2/metro.c
+++ b/plugins/eg03-metro.lv2/metro.c
@@ -56,20 +56,18 @@ enum {
METRO_OUT = 2
};
+/** During execution this plugin can be in one of 3 states: */
typedef enum {
- STATE_ATTACK,
- STATE_DECAY,
- STATE_OFF
+ STATE_ATTACK, // Envelope rising
+ STATE_DECAY, // Envelope lowering
+ STATE_OFF // Silent
} State;
+/** The plugin instance structure: */
typedef struct {
- /* Features */
- LV2_URID_Map* map;
+ LV2_URID_Map* map; // URID map feature
+ MetroURIs uris; // Cache of mapped URIDs
- /* URIs */
- MetroURIs uris;
-
- /* Ports */
struct {
LV2_Atom_Sequence* control;
LV2_Atom_Sequence* notify;
diff --git a/plugins/eg-metro.lv2/metro.ttl b/plugins/eg03-metro.lv2/metro.ttl
index a6f297f..a6f297f 100644
--- a/plugins/eg-metro.lv2/metro.ttl
+++ b/plugins/eg03-metro.lv2/metro.ttl
diff --git a/plugins/eg-midigate.lv2/waf b/plugins/eg03-metro.lv2/waf
index 59a1ac9..59a1ac9 120000
--- a/plugins/eg-midigate.lv2/waf
+++ b/plugins/eg03-metro.lv2/waf
diff --git a/plugins/eg-metro.lv2/wscript b/plugins/eg03-metro.lv2/wscript
index 40642b6..40642b6 100644
--- a/plugins/eg-metro.lv2/wscript
+++ b/plugins/eg03-metro.lv2/wscript
diff --git a/plugins/eg-sampler.lv2/README.txt b/plugins/eg04-sampler.lv2/README.txt
index c1cac46..c1cac46 100644
--- a/plugins/eg-sampler.lv2/README.txt
+++ b/plugins/eg04-sampler.lv2/README.txt
diff --git a/plugins/eg-sampler.lv2/click.wav b/plugins/eg04-sampler.lv2/click.wav
index 520a18c..520a18c 100644
--- a/plugins/eg-sampler.lv2/click.wav
+++ b/plugins/eg04-sampler.lv2/click.wav
Binary files differ
diff --git a/plugins/eg-sampler.lv2/manifest.ttl.in b/plugins/eg04-sampler.lv2/manifest.ttl.in
index b4fa23e..b4fa23e 100644
--- a/plugins/eg-sampler.lv2/manifest.ttl.in
+++ b/plugins/eg04-sampler.lv2/manifest.ttl.in
diff --git a/plugins/eg-sampler.lv2/sampler.c b/plugins/eg04-sampler.lv2/sampler.c
index 5bb4e54..5bb4e54 100644
--- a/plugins/eg-sampler.lv2/sampler.c
+++ b/plugins/eg04-sampler.lv2/sampler.c
diff --git a/plugins/eg-sampler.lv2/sampler.ttl b/plugins/eg04-sampler.lv2/sampler.ttl
index e008de0..e008de0 100644
--- a/plugins/eg-sampler.lv2/sampler.ttl
+++ b/plugins/eg04-sampler.lv2/sampler.ttl
diff --git a/plugins/eg-sampler.lv2/sampler_ui.c b/plugins/eg04-sampler.lv2/sampler_ui.c
index 40922ae..40922ae 100644
--- a/plugins/eg-sampler.lv2/sampler_ui.c
+++ b/plugins/eg04-sampler.lv2/sampler_ui.c
diff --git a/plugins/eg-sampler.lv2/uris.h b/plugins/eg04-sampler.lv2/uris.h
index e2ec6d0..e2ec6d0 100644
--- a/plugins/eg-sampler.lv2/uris.h
+++ b/plugins/eg04-sampler.lv2/uris.h
diff --git a/plugins/eg-sampler.lv2/waf b/plugins/eg04-sampler.lv2/waf
index 59a1ac9..59a1ac9 120000
--- a/plugins/eg-sampler.lv2/waf
+++ b/plugins/eg04-sampler.lv2/waf
diff --git a/plugins/eg-sampler.lv2/wscript b/plugins/eg04-sampler.lv2/wscript
index 732c904..732c904 100644
--- a/plugins/eg-sampler.lv2/wscript
+++ b/plugins/eg04-sampler.lv2/wscript