All Projects → x42 → lv2vst

x42 / lv2vst

Licence: GPL-2.0 license
experimental LV2 to VST2.x wrapper

Programming Languages

c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language

Labels

Projects that are alternatives of or similar to lv2vst

Ardour
Mirror of Ardour Source Code
Stars: ✭ 2,318 (+2419.57%)
Mutual labels:  lv2, vst
spectmorph
SpectMorph: spectral audio morphing
Stars: ✭ 16 (-82.61%)
Mutual labels:  lv2, vst
Roboverb
A VST / VST3 / AU / LV2 Reverb Plugin
Stars: ✭ 48 (-47.83%)
Mutual labels:  lv2, vst
midiomatic
A collection of MIDI filter, generator and processor plugins
Stars: ✭ 23 (-75%)
Mutual labels:  lv2, vst
dd-core
Rust-based VST plugin development library with hardware accelerated GUI support.
Stars: ✭ 32 (-65.22%)
Mutual labels:  vst
SpleeterRT
Real time monaural source separation base on fully convolutional neural network operates on Time-frequency domain.
Stars: ✭ 111 (+20.65%)
Mutual labels:  vst
pMix2
pMix - a preset interpolator, plug-in chainer and Faust IDE written with JUCE
Stars: ✭ 84 (-8.7%)
Mutual labels:  vst
LameVST
mp3 as VST-effect
Stars: ✭ 35 (-61.96%)
Mutual labels:  vst
kotoist
A VST plugin for live coding and algorithmic composition
Stars: ✭ 37 (-59.78%)
Mutual labels:  vst
sisco.lv2
Simple Scope
Stars: ✭ 40 (-56.52%)
Mutual labels:  lv2
fil4.lv2
4 Band Parametric EQ
Stars: ✭ 60 (-34.78%)
Mutual labels:  lv2
DtBlkFx
Fast-Fourier-Transform (FFT) based VST plug-in
Stars: ✭ 99 (+7.61%)
Mutual labels:  vst
TD-JUCE
JUCE audio and VSTs in TouchDesigner
Stars: ✭ 29 (-68.48%)
Mutual labels:  vst
install-scripts
Scripts to get you running with a professional audio quality Linux system.
Stars: ✭ 75 (-18.48%)
Mutual labels:  vst
BOops
Sound glitch effect sequencer LV2 plugin
Stars: ✭ 60 (-34.78%)
Mutual labels:  lv2
Kickmess
Kickmess - A kick drum synthesizer plugin
Stars: ✭ 33 (-64.13%)
Mutual labels:  vst
Melodrumatic
Audio plugin that lets you use MIDI to pitch-shift via delay to turn unpitched audio into melodies
Stars: ✭ 26 (-71.74%)
Mutual labels:  vst
matchering-web
🎚️ Self-Hosted LANDR / eMastered Alternative
Stars: ✭ 25 (-72.83%)
Mutual labels:  vst
AtomSynth
A modular synthesizer built using the juce api.
Stars: ✭ 20 (-78.26%)
Mutual labels:  vst
simple-reverb
A simple reverb made with the JUCE DSP module
Stars: ✭ 43 (-53.26%)
Mutual labels:  vst

LV2 - VST wrapper

Expose LV2 plugins as VST2 plugins to a VST plugin-host on Windows, OSX and Linux.

QuickStart

On GNU/Linux:

git clone https://github.com/x42/lv2vst
cd lv2vst
make
mkdir -p ~/.vst/lv2vst
cp lv2vst.so ~/.vst/lv2vst/lv2vst.so

# this assume you have x42-plugins, specifically x42-eq installed
# or use `lv2ls` to find some LV2 URI/URI-prefixes.
echo "http://gareus.org/oss/lv2/fil4#mono" > ~/.vst/lv2vst/.whitelist
echo "http://gareus.org/oss/lv2/fil4#stereo" >> ~/.vst/lv2vst/.whitelist

Then launch a LinuxVST plugin host...

Description

lv2vst can be deployed in different variants:

  • wrap dedicated LV2 bundle(s), compile-time specified.
  • wrap any/all LV2 Plugins(s), runtime lookup

The first is intended for plugin-authors: A LV2 plugin can be seamlessly distributed as VST2.

The second approach is useful for users who want to use existing LV2s in a VST plugin-host.

Specifically:

  1. If a .bundle file exists in the same dir as the VST, only load lv2 bundle(s) specified in the file (dirs relative to lv2vst.dll, one per line). A list of bundles can alternatively be specified at compile-time and hard-coded.

otherwise use system-wide LV2 world:

  1. Load .whitelist and .blacklist files if they exist in the same dir as the VST (one URI per line).

    If the whitelist file exists and contains a single complete URI (one line), no VST-shell is used and a single plugin is exposed.

    Otherwise index all plugins (alike lv2ls), expose only plugins which URI matches a prefix in the whitelist. If no whitelist files is present (or if it's empty), consider all system-wide LV2 plugins.

    Next the .blacklist file is tested, if a Plugin-URI matches a prefix specified in the blacklist, it is skipped.

The CRC32 of the LV2 URI is used as VST-ID.

LV2VST does not bridge CPU architectures. The LV2 plugins and LV2VST architectures and ABIs need to match.

A dedicated bundle (1), or dedicated whitelist (2) is preferred over blacklisting.

Supported LV2 Features

  • LV2:ui, native UI only: X11UI on Linux, CocoaUI on OSX and WindowsUI on Windows.
  • LV2 Atom ports (currently at most only 1 atom in, 1 atom output)
    • MIDI I/O.
    • plugin to GUI communication
    • LV2 Time/Position
  • LV2 URI map
  • LV2 Worker thread extension
  • LV2 State extension
  • Latency reporting (port property)

Build and Install

Compiling lv2vst requires gnu-make and the GNU c/c++-compiler. Windows (.dll) versions are to be cross-compiled on GNU/Linux using mingw.

  make
  make XWIN=x86_64-w64-mingw32 clean all
  make XWIN=i686-w64-mingw32 clean all

Copy the resulting lv2vst.so lv2vst.dll into a folder where the VST host finds it. For macOS/OSX, a .vst bundle folder needs to be created, with the plugin in Contents/MacOS/, see make osxbundle.

lv2vst can be used multiple-times in dedicated folders, each with specific whitelist to expose plugin-collections. e.g.

	mkdir -p ~/.vst/plugin-A/
	mkdir -p ~/.vst/plugin-B/
	cp lv2vst.so ~/.vst/plugin-A/
	cp lv2vst.so ~/.vst/plugin-B/
	lv2ls | grep URI-A-prefix > ~/.vst/plugin-A/.whitelist
	lv2ls | grep URI-B-prefix > ~/.vst/plugin-B/.whitelist

Caveats

Various LV2 plugins are known to cause crashes.

LV2VST first indexes all plugins to be collected into a single VST-shell. This step is generally safe (using only lv2 ttl meta-data). The LV2 description is validated and VST-IDs (CRC32 of the LV2-URI) are generated.

When the host scans the actual plugins, lv2vst instantiates the mapped LV2. This is to ensure that the actual plugin will load later. A single VST-shell.so will load (and unload/destroy) various LV2 plugins (and their dependent libs, if any) in the same memory-space.

This is known to cause problems with some sub-standard LV2 plugins, e.g. some use static init, fini methods, others use custom threads which are not terminated (or the plugin does not wait for threads to terminate: crash on unload). Yet others use static globals or expose all their symbols in the global namespace (possibly conflicting names) and/or mix libaries which do so.

Most of these plugins will also cause crashes in other LV2 hosts. Except that LV2 hosts don't generally instantiate a plugin unless it is used.

Hence it is preferred to expose only specific plugins that are known to work reliably, using a whitelist.

YMMV

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].