diff options
author | David Robillard <d@drobilla.net> | 2014-11-21 01:12:26 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-11-21 01:12:26 -0500 |
commit | d38c4094a1aef8be93218adeefe66b20308d96e3 (patch) | |
tree | 7f1d451dd1edade63567504c67b61bbc24d7c683 /content | |
download | lv2site-d38c4094a1aef8be93218adeefe66b20308d96e3.tar.xz |
Initial website Markdown conversion.
Diffstat (limited to 'content')
-rw-r--r-- | content/bundle-definition.md | 104 | ||||
-rw-r--r-- | content/filesystem-hierarchy-standard.md | 38 | ||||
-rw-r--r-- | content/pages/developer-information.md | 77 | ||||
-rw-r--r-- | content/pages/index.md | 20 | ||||
-rw-r--r-- | content/pages/projects.md | 106 | ||||
-rw-r--r-- | content/pages/why-lv2.md | 75 | ||||
-rw-r--r-- | content/validating-lv2-data.md | 36 |
7 files changed, 456 insertions, 0 deletions
diff --git a/content/bundle-definition.md b/content/bundle-definition.md new file mode 100644 index 0000000..e82e3d8 --- /dev/null +++ b/content/bundle-definition.md @@ -0,0 +1,104 @@ +Title: Bundle Definition +Date: 2014-11-20 20:16 +Category: Documentation + +An _LV2 Bundle_ is a directory containing the file `manifest.ttl` at the top +level, which is written in [Turtle](http://www.dajobe.org/2004/01/turtle/). +See the [Simple Amplifier manifest](http://lv2plug.in/book/#_manifest_ttl_in) +for an example. + +Note that host developers should use a library, such as +[Lilv](http://drobilla.net/software/lilv) which automatically discovers and +loads bundles correctly. This page describes the format of an LV2 bundle, but +host authors typically do not need to be concerned with the details. + +* All information necessary for a host to discover (but not necessarily use) + the contents of a bundle MUST be present in `manifest.ttl`. + +* The host can discover which plugins are present by scanning `manifest.ttl` + for statements like `<plugin-uri> a lv2:Plugin`. + +* The data files for each plugin are listed with the `rdfs:seeAlso` property, + for example `<plugin-uri> rdfs:seeAlso <datafile.ttl>`. + +* Descriptions may be split across several files, and several bundles. File + boundaries are not significant. + +* If a statement like `<extension-uri> a lv2:Specification` is found, then + `<extension-uri>` is specification which may contain information like + additional plugin categories, properties, and human-readable labels for + things. The host SHOULD load the corresponding data files. + +* If a statement like `<preset-uri> a pset:Preset` is found, then + `<preset-uri>` is a preset. The `lv2:appliesTo` property indices which + plugin the preset applies to. See the [presets + extension](http://lv2plug.in/ns/ext/presets) for details. + + + +## Installation + +* The name of a bundle itself MUST NOT be given any long-term significance (for + example, in saved files). + + * Hosts may include special plugin bundles as part of their installation + and depend on the existence of those bundles in their search path, but + otherwise the discovery process should be identical. + + * Users MUST be able to rename installed bundle directories without any + save files breaking. + + +## Discovery + +* If a host encounters a bundle it does not "understand" or care about, it may + simply ignore it. + +* Hosts MUST consider *all* data files associated with a plugin/spec/preset/etc + (including `manifest.ttl`) whenever looking for information about a plugin. + + +## Examples + +Note that `manifest.ttl` may contain information about any number of things. A +single bundle may contain several plugins, specifications, and presets. + +However, it is discouraged to group too many things into a single bundle, since +this makes it difficult for the user to manage what they have installed. +Instead, put individual plugins, presets, etc., in their own bundle. It is a +good idea to give related bundles common name prefix (not suffix) to make their +organization clear. + +### Plugin + +* `manifest.ttl` contains the triple `<pluginuri> a lv2:Plugin`. + +* `manifest.ttl` MAY contain triples of the form `<pluginuri> rdfs:seeAlso + <datafile.ttl>` which indicates that more information can be found in + `datafile.ttl`. + +### Specification + +* `manifest.ttl` contains the triple `<specuri> a lv2:Specification`. + +* `manifest.ttl` MAY contain triples of the form `<specuri> rdfs:seeAlso + <datafile.ttl>` which indicates that more information can be found in + `datafile.ttl`. + +* Hosts SHOULD consider this information part of their LV2 specification. + Hosts SHOULD NOT hard-code static assumptions about the specification, such + as plugin categories or port types (though of course, they may not support + unknown types). + +### UI + +* `manifest.ttl` contains the triple `<ui> a foo:MegaWidget` where + `foo:MegaWidget` is a "widget" type the host understands (likely one defined + in the [UI specification](http://lv2plug.in/ns/extensions/ui)). + +* `manifest.ttl` MAY contain triples of the form `<ui> rdfs:seeAlso + <datafile.ttl>` which indicates that more information can be found in + `datafile.ttl`. + +* `manifest.ttl` contains a triple of the form `<ui> ui:binary <ui.so>` where + `ui.so` is the module to be dynamically loaded by the host. diff --git a/content/filesystem-hierarchy-standard.md b/content/filesystem-hierarchy-standard.md new file mode 100644 index 0000000..4f06a9f --- /dev/null +++ b/content/filesystem-hierarchy-standard.md @@ -0,0 +1,38 @@ +Title: Filesystem Hierarchy Standard +Date: 2014-11-20 20:16 +Category: Documentation + +This page defines the standard locations where LV2 data should be installed. +All LV2 data is installed in [bundles](bundle-definition.html) which are discovered by hosts and other tools. + +LV2 bundles are self-contained and may contain any kind of data (binary, text, executable, system-specific, portable, etc.). These different kinds of data are not installed to separate paths as in the traditional Unix FHS. There is one important distinction, however: user-specific and system-wide bundles. User-specific bundles are likely writable by the user, while system-wide bundles appear to all users and are read-only. + +## Standard Paths + +LV2 bundles (directories typically named like "foo.lv2") SHOULD be in these standard locations: + +Platform | User Specific | System Wide +---------|------------------------------------|------------------------------ +Unix | `$HOME/.lv2` | `$PREFIX/lib/lv2` +Mac OS X | `$HOME/Library/Audio/Plug-Ins/LV2` | `/Library/Audio/Plug-Ins/LV2` +Windows | `%APPDATA%/LV2` | `%COMMONPROGRAMFILES%/LV2` + +$PREFIX should be /usr/local by default in all source distributions. + +## Bundle Discovery - LV2_PATH + +The environment variable `LV2_PATH` is the search path for LV2 bundles. Like the PATH variable for programs, it is colon-delimited on Unix and OSX, semicolon-delimited on Windows, and searched from left to right. Based on the above locations, the default `LV2_PATH` is: + +Platform | Default Path +---------|------------- +Unix | `$HOME/.lv2:/usr/local/lib/lv2:/usr/lib/lv2` +Mac OS X | `$HOME/Library/Audio/Plug-Ins/LV2:/Library/Audio/Plug-Ins/LV2:/usr/local/lib/lv2:/usr/lib/lv2` +Windows | `%APPDATA%/LV2;%COMMONPROGRAMFILES%/LV2` + +## User Saved Data (e.g. Presets) + +Hosts may wish to write data to bundles at run time (e.g. to save a preset, metadata, or even new plugins). The user specific portion of LV2_PATH should be used for this so hosts will automatically discover this data. It is best to write separate bundles for such things so the user can easy manage them with the shell or file manager. Whenever writing to a bundle, a file lock should be held on the `manifest.ttl` file. + +## Bundle Names + +Bundle directory names are NOT strong identifiers, and may be different from system to system (or at different times on the same system). Users may change them freely for any reason without fear of breakage. Accordingly, hosts *MUST NOT_' attach significance to bundle names between invocations (e.g. in save files). LV2 plugins and other resources '_MUST* be referred to by URI in save files, NOT by file system path.
\ No newline at end of file diff --git a/content/pages/developer-information.md b/content/pages/developer-information.md new file mode 100644 index 0000000..dde7b49 --- /dev/null +++ b/content/pages/developer-information.md @@ -0,0 +1,77 @@ +Title: Developer Information + +The way to learn about implementing LV2 is by example. The documentation and +example projects listed below have been created specifically for this purpose, +look at these first. Copying an example as a template is recommended. + + +## What *not* to do + +If you are interested in implementing LV2, do *not* look at the specifications +and API references first! They are just that: references, and do not provide a +high-level view of how to get the job done. Once you have a basic working +implementation based on the examples, if you need more specific detail, then +the references are useful. + + +## Implementing Plugins + +LV2 includes several example plugins which are simple demonstrations of various +types of plugins and the features they require with thorough documentation. If +you prefer to read source code, they are in the `plugins` directory of the LV2 +distribution. + +If you would prefer to read a document, there is also a "book" generated from +the literate source code of these plugins: + +* [Programming LV2 Plugins](http://lv2plug.in/book) + + +## Implementing Hosts + +LV2 hosts use a library to handle all the details of plugin discovery, +investigation, and instantiation. [Lilv](http://drobilla.net/software/lilv) is +the standard library for this. + +* [Lilv API Reference](http://drobilla.net/docs/lilv/) + +Plans are currently underway to incorporate simple and thoroughly documented hosts into LV2, along the lines of the plugin +examples. Until then, several external projects serve as useful examples: + +* [lv2file](https://github.com/jeremysalwen/lv2file) is a very simple + single-file program that applies an LV2 plugin to an audio file. + +* [Jalv](http://drobilla.net/software/jalv) is a relatively simple yet + fully-featured [Jack](http://jackaudio.org) host for LV2 plugins. Start at + the core, [jalv.c](http://dev.drobilla.net/browser/trunk/jalv/src/jalv.c), + which weighs in at just under 1000 SLOC. Jalv also supports MIDI, embedded + GUIs, presets, state saving, and other features. + + +## Reference + +Most LV2 specifications have two parts: code and data. The "specification" +documentation comes from the data, and documents the various concepts in the +specification, with links to the API reference of the associated APIs. After +examples, this is the best place to better understand an extension. + +The API reference is generated from Doxygen, and serves the usual purpose. Go +there for documentation about a specific function, struct, or define. + +* [Specifications](http://lv2plug.in/ns) + +* [API Reference](http://lv2plug.in/doc/html) + + +## Help + +If you have any trouble or questions in general, ask on the +[mailing list](http://lists.lv2plug.in/listinfo.cgi/devel-lv2plug.in), or visit +us in [#lv2](http://webchat.freenode.net/?channels=lv2) on irc.freenode.net + + +## Other Resources + +* [Logo](http://lv2plug.in/logo) + +* [LV2 Achievement of GMPI Requirements](http://lv2plug.in/gmpi.html) diff --git a/content/pages/index.md b/content/pages/index.md new file mode 100644 index 0000000..2f894ae --- /dev/null +++ b/content/pages/index.md @@ -0,0 +1,20 @@ +Title: LV2 +save_as: index.html + +LV2 is a standard for audio plugins, +used by hundreds of plugins and many other projects. +At its core, LV2 is a simple and stable interface, +but several *extensions* add functionality to support the needs of increasingly powerful audio software. + +* [**Download LV2 1.10.0**](http://lv2plug.in/spec/lv2-1.10.0.tar.bz2) + [(sig)](http://lv2plug.in/spec/lv2-1.10.0.tar.bz2.sig) + +* [Why LV2?](pages/why-lv2.html) + +* [Mailing List](http://lists.lv2plug.in/listinfo.cgi/devel-lv2plug.in) + +* Chat in [#lv2](http://webchat.freenode.net/?channels=lv2) on irc.freenode.net + +* [Projects Using LV2](pages/projects.html) + +* [Information for Developers](pages/developer-information.html) diff --git a/content/pages/projects.md b/content/pages/projects.md new file mode 100644 index 0000000..368b81c --- /dev/null +++ b/content/pages/projects.md @@ -0,0 +1,106 @@ +title: Projects + +This page is a partial list of LV2 projects. If you know of any that are not +listed here, please +[let us know](http://lists.lv2plug.in/listinfo.cgi/devel-lv2plug.in) or +[http://lv2plug.in/git](add them) and send us a patch. + +Another list is available at http://apps.linuxaudio.org/apps/categories/lv2 + +## Plugins + +### Synths + +Project | Description +-------------------------------------------------------------|-------------------------------------------------------------------- +[foo-yc20](http://code.google.com/p/foo-yc20/) | Faithful emulation of the YC-20 divide-down combo organ. +[lv2-mdaEPiano](http://github.com/rekado/lv2-mdaEPiano) | Native LV2 port of the famous mdaEPiano VSTi. +[minaton](http://sourceforge.net/projects/minaton/) | Fat sounding mono subtractive software synthesizer. +[Newtonator](http://newtonator.sourceforge.net/) | Synth that produces some unpredictable sounds. +[Russolo Suite](http://intonarumori.sourceforge.net) | The CrazySynth synthesizer and the "the do-it-all effect" Omnifono. +[So-synth-LV2](http://github.com/jeremysalwen/So-synth-LV2) | Unofficial LV2 ports of 50m30n3's synthesizers. +[SynthV1](http://synthv1.sourceforge.net/) | 4-oscillator subtractive polyphonic synthesizer with stereo FX. +[Zyn](http://home.gna.org/zyn/) | LV2 port of Zynaddsubfx. +[setBfree](https://github.com/pantherb/setBfree) | B3 organ emulator including Leslie. +[EMap](http://www.colorfulsoftware.com/emap) | FluidSynth front-end + +### Samplers + +Project | Description +----------------------------------------------------------------------------|------------------------------------------------- +[Composite Sampler](http://gabe.is-a-geek.org/composite/plugins/sampler/1/) | MIDI-controllable sampler. +[DrMr Sampler](http://github.com/nicklan/drmr/) | Sampler that can load Hydrogen drumkits. +[SamplV1](http://samplv1.sourceforge.net/) | Polyphonic sampler/synthesizer with stereo FX. +[Fabla](http://openavproductions.com/fabla/) | Drum sampler with envelope and compressor. + +### Effects + +Project | Description +---------------------------------------------------------------|--------------------------------------------------------------------------------- +[abGate](http://abgate.sourceforge.net/) | Noise date. +[Aubio-LV2](http://jeremysalwen.github.com/Aubio-LV2-Plugins/) | LV2 wrappers for some of the Aubio library +[avw.lv2](http://sourceforge.net/projects/avwlv2/) | An LV2 port of internal modules of AlsaModularSynth +[Calf](http://calf.sourceforge.net/) | Various plugins, including flanger, organ, reverb, filters, rotary speaker, etc. +[EQ10Q](http://eq10q.sourceforge.net/) | Powerful and flexible parametric equalizer. +[Fomp](http://drobilla.net/software/fomp) | Port of various high-quality plugins by Fons Adriaensen. +[Invada Studio](https://launchpad.net/invada-studio/) | Delays, distortions, filters, phasers, reverbs, and some utility plugins. +[IR](http://factorial.hu/plugins/lv2/ir) | No-latency/low-latency, realtime, high performance signal convolver. +[kn0ck0ut-LV2](https://github.com/jeremysalwen/kn0ck0ut-lv2) | LV2 port of [kn0ck0ut](http://www.freewebs.com/st3pan0va/). +[lv2fil](http://nedko.arnaudov.name/soft/lv2fil/trac/) | Four-band parametric equaliser. +[mda-lv2](http://svn.drobilla.net/lad/trunk/mda-lv2/) | LV2 port of the popular VST MDA plugins (a few instruments as well). +[swh-plugins](http://plugin.org.uk/lv2/) | LV2 version of the popular LADSPA collection with various plugins. +[TalentedHack](http://code.google.com/p/talentledhack/) | Pitch correction derived from Autotalent. +[Teliasopia](http://sourceforge.net/projects/teliasopia/) | Various plugins, including filters and dynamic processors. +[Vocoder](https://gna.org/projects/lv2vocoder) | Vocoder. +[VocProc](http://hyperglitch.com/dev/VocProc) | Vocal pitch shifting, vocoding, pitch correction, and harmonizing. +[balance.lv2](https://github.com/x42/balance.lv2) | Stereo balance control w/ delaylines, input channel conditioner. +[QMidiArp](http://qmidiarp.sourceforge.net) | Arpeggiator. + +### Meters + +Project | Description +------------------------------------------------|-------------------------------------------------------------------- +[K-Meter](http://code.mzuther.de/kmeter/) | A K-System meter according to Bob Katz' specifications. +[traKmeter](http://code.mzuther.de/trakmeter/) | Loudness meter for correctly setting up tracking and mixing levels. +[meters.lv2](https://github.com/x42/meters.lv2) | Large collection of IEC, ITU, EBU,.. standard meters. + +### Others + +Project | Description +--------------------------------------------------------------------|---------------------------------------------------------- +[ll-plugins](http://ll-plugins.nongnu.org/) | Several synth and utility plugins and a GUI-capable host. +[NASPRO](http://naspro.sourceforge.net/plugins.html#naspro-bridges) | Bridges from LADSPA and DSSI to LV2. +[midifilter.lv2](https://github.com/x42/midifilter.lv2) | Collection of MIDI event filter/processors. +[Tuna.lv2](https://github.com/x42/tuna.lv2) | Musical instrument tuner. +[Simple-Scope](https://github.com/x42/sisco.lv2) | Professional audio oscilloscope. + + +## Hosts + +Project | Description +---------------------------------------------------------------------|------------------------------------------------------------------------- +[Ardour](http://ardour.org) | A professional quality DAW with support for LV2 effects and instruments. +[Audacity](http://audacity.sourceforge.net/) | Software for recording and editing sounds. +[Ecasound](http://www.eca.cx/ecasound/index.php) | Multitrack command line audio editor and processor. +[FreeADSP](http://naspro.sourceforge.net/applications.html#freeadsp) | MIDI-controlled real-time stereo effect rack. +[Ingen](http://drobilla.net/software/ingen/) | Modular audio environment. +[Jalv](http://drobilla.net/software/jalv/) | Command-line Jack host. +[LinuxSampler](http://www.linuxsampler.org/) | Free, streaming audio sampler with professional grade features. +[lv2file](https://github.com/jeremysalwen/lv2file) | Applies LV2 effects from the command line. +[LV2proc](http://naspro.sourceforge.net/applications.html#lv2proc) | Simple command line effect processor. +[QTractor](http://qtractor.sourceforge.net/) | Audio/MIDI multi-track sequencer. +[Traverso](http://traverso-daw.org/) | Multitrack audio recorder and editor. +[Synthclone](https://code.google.com/p/synthclone/) | Tool for creating sample-based instruments. +[pd-lv2plugin](https://bitbucket.org/agraef/pd-lv2plugin) | LV2 hosting PureData external. +[pure-lang](https://bitbucket.org/purelang/pure-lang) | A modern functional programming language with LV2 support. + + +## Developer Tools + +Project | Description +-------------------------------------------------------------------------|-------------------------------------------------------------------- +[Lilv](http://drobilla.net/software/lilv/) | C library for LV2 hosts. +[LV2 Toolkit](http://lvtoolkit.org/) | C++ wrappers of LV2 APIs. +[Permafrost](http://sourceforge.net/projects/naspro/files/naspro/0.2.0/) | DSP language whose compiler generates LV2 plugins. +[SSG](http://nedko.arnaudov.name/soft/ssg/) | "Simple Sine Generator" synth plugin. +[Torture](http://carlh.net/plugins/torture.php) | Utility for checking LV2 plugins for denormals and data corruption. diff --git a/content/pages/why-lv2.md b/content/pages/why-lv2.md new file mode 100644 index 0000000..bf7c3b3 --- /dev/null +++ b/content/pages/why-lv2.md @@ -0,0 +1,75 @@ +Title: Why LV2? + +Unlike many popular audio plugin APIs, LV2 is a platform-agnostic +[Free Software](http://www.gnu.org/philosophy/free-sw.html) specification with +a liberal license permitting virtually any implementation (both free and +proprietary). + +LV2 has been designed with extensibility in mind right from the start, so if +LV2 currently can't do what you need, functionality can be added without +breaking any pre-existing hosts or plugins. + +## Features + +* Audio, control, "control voltage" (audio-rate control), and event (e.g. MIDI) input and output. + +* Expressive metadata, including: + + * "Meaningful" controls (e.g. gain or envelope attack) allowing intelligent host control or UI generation. + + * Control units (e.g. Hz, octaves, dB). + + * Multi-channel port groups (e.g. stereo, 5.1 surround, ambisonics). + +* Decentralized extensibility: any developer can implement (almost) any feature within LV2. + +* Graceful compatibility: features can be optional. + +* Embeddable GUIs in any toolkit, with network transparent control. + +* Plugin "bundles" may include any files, such as samples. + +* Presets (bundled and/or user saved). + +* Plugin state saving and restoring. + +* Host-managed logging. + +* Non-realtime plugin worker methods ("idiot-proof" non-realtime operations, like sample loading without dropouts). + +* Message-based plugin communication, for advanced plugin control from UIs or other code. + +* Transport awareness, both real time and tempo time (bars, beats, etc.). + + +## Bundles + +Everything an LV2 plugin needs is bundled inside a "bundle" directory. Users +can easily manage their installations by moving, renaming, or deleting bundles +with any file manager. + + +## Plugin Metadata + +LV2 separates static metadata from code, so information about installed plugins +can be discovered without loading any modules or executing any third-party +code. + +Any data can be added to a plugin description without breaking compatibility. + + +## Simple Core API + +The "core" API of LV2, [lv2.h](http://lv2plug.in/ns/lv2core/lv2.h), is +essentially `ladspa.h` with extensibility hooks added. It is a simple C header +with the basic methods typical to audio plugins. + + +## Extensibility + +While the core API of LV2 is very simple, extensions can add arbitrary +functionality. The community works together to define standard extensions for +commonly needed functionality, but developers are free to implement any +extensions they need for their own applications. This is particularly useful +for developing new functionality and testing it in a real application before +proposing a new standard extension. diff --git a/content/validating-lv2-data.md b/content/validating-lv2-data.md new file mode 100644 index 0000000..2a48e89 --- /dev/null +++ b/content/validating-lv2-data.md @@ -0,0 +1,36 @@ +Title: Validating LV2 Data +Date: 2014-11-20 21:33 +Category: Documentation + +Because LV2 data written in Turtle does not need to be compiled like C, the +author must take care to ensure it is valid. For example, if there is a typo +in a predicate, a plugin may silently fail to work correctly. + +To prevent this kind of error, use `sord_validator` from +[Sord](http://drobilla.net/software/sord). This program will check that all +the properties in a set of Turtle data are actually defined, that the domain +and range is valid, and that typed literals are valid (for example, that they +have the correct type, or that `lv2:symbol` properties are actually valid LV2 +symbols). + +To do this, the validator needs to be passed all relevant data, including the +vocabularies which define the properties and classes used. The LV2 +distribution contains all the external vocabularies used in the `schemas` +directory. If `sord_validate` is installed, and an LV2 source tree is present, +then LV2 data can be checked like so: + + :::sh + sord_validate $(find /path/to/lv2-x.y.z -name '*.ttl') /path/to/data.ttl + +To check all data in your bundle: + + :::sh + sord_validate $(find /path/to/lv2-x.y.z -name '*.ttl') $(find /path/to/bundle.lv2 -name '*.ttl') + +For those unfamiliar with UNIX basics, the `find` command finds all files +matching a pattern, and putting a command in `$()` on a command line +substitutes the output of that command in place. So, these commands simply +expand to `sord_validate` being called with a list of files as arguments. + +Developers SHOULD include targets in their build scripts for running the +validator to ensure plugin data is correct before distribution. |