• Stars
    star
    121
  • Rank 293,924 (Top 6 %)
  • Language
    C
  • License
    GNU General Publi...
  • Created over 7 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

experimental LV2 to VST2.x wrapper

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

More Repositories

1

libltc

Linear/Logitudinal Time Code (LTC) Library
C
188
star
2

meters.lv2

collection of LV2 plugins for audio-level metering
C
175
star
3

scarlett-mixer

Quickly hacked scarlett-mixer GUI for Linux/ALSA
C
120
star
4

x42-plugins

collection of LV2 plugins (submodules) for packaging
Makefile
93
star
5

fil4.lv2

4 Band Parametric EQ
C
70
star
6

liboauth

POSIX-C functions implementing the OAuth Core RFC 5849 standard
C
68
star
7

fat1.lv2

Fons Adriaensen's AT1 -- Autotune LV2 plugin
C
66
star
8

midifilter.lv2

LV2 plugins to filter midi events
C
65
star
9

ltc-tools

tools to deal with linear-timecode (LTC)
C
64
star
10

sisco.lv2

Simple Scope
C
41
star
11

xjadeo

X JAck viDEo mOnitor: a tool that displays a video clip in sync with an external time source (jack-transport, LTC and MTC). Applications include: soundtrack composition/editing, video monitoring and -installations.
C
40
star
12

silan

audio file [silence] analyzer
C
38
star
13

jack_midi_clock

JACK MIDI Clock - Utility to send MIDI Beat Clock pulses that follow the JACK Transport
C
38
star
14

convoLV2

LV2 convolution plugin
C
37
star
15

avldrums.lv2

Dedicated AVLDrumkits LV2 Plugin
C
35
star
16

libtimecode

deal with A/V timecode and framerates
C
34
star
17

darc.lv2

Dynamic Audio Range Compressor
C
26
star
18

sofd

Simple Open File Dialog [for X11 without toolkit]
C
25
star
19

tuna.lv2

Musical Instrument Tuner
C
22
star
20

harvid

http ardour video daemon
C
16
star
21

midimap.lv2

Rule based MIDI mapper plugin
C
16
star
22

robtk

robin's LV2 UI ToolKit
C
15
star
23

sound-gambit

Audio File Peak Limiter
C++
15
star
24

dpl.lv2

Digital Peak Limiter LV2 Plugin
C
15
star
25

phaserotate.lv2

Phase Rotation LV2 plugin
C
15
star
26

jackmidi2osc

Jack Midi to OSC
C
14
star
27

gmsynth.lv2

General MIDI LV2 Synth
C
14
star
28

weakjack

weak/runtime libjack linking (jackaudio.org)
C
14
star
29

jack-stdio

unix pipe audio-data from and to JACK
C
13
star
30

zconvo.lv2

Zero Config Convolver
C++
13
star
31

alsa-driver

fork git.alsa-project.org/alsa-driver.git for digidesign and focusrite driver development
C
12
star
32

oauth-utils

oauth command line utilities
C
12
star
33

stepseq.lv2

Simple Step Sequencer
C
11
star
34

scarlettmixer

Scarlett 18i6 mixer control
Python
11
star
35

xfade.lv2

stereo DJ X-fade plugin
C
10
star
36

spectra.lv2

Spectrum Analyzer
C
9
star
37

matrixmixer.lv2

NxM Matrix Mixer LV2 Plugin
C
9
star
38

balance.lv2

Stereo Balance Control
C
9
star
39

onsettrigger.lv2

Audio to Midi Onset Trigger LV2 Plugin
C
9
star
40

jack_midi_latency

Utility to measure jackaudio MIDI latency & jitter
C
9
star
41

003amdtp

digimagic
C
7
star
42

testsignal.lv2

LV2 Test Signal Generator
C
5
star
43

property_example.lv2

LV2 Property/Parameter Example Plugin
C
5
star
44

mclk.lv2

Midi Clock Generator LV2 Plugin
C
5
star
45

stereoroute.lv2

Stereo Routing Plugin
C
5
star
46

vlc-lv2

LV2 Audio Plugin Host for VLC
C
4
star
47

lv2toweb

create xhtml documentation for LV2 plugins
C
4
star
48

mtc-tools

JACK MIDI Timecode tools
C
4
star
49

nodelay.lv2

audio delay line with latency reporting -- LV2 test & instrumentation tool
C
4
star
50

net-wwan-iosm

C
3
star
51

plumbing.lv2

LV2 Plumbing Plugins
Makefile
3
star
52

repitch.lv2

Counterbalance pitch when vari-speeding
C++
3
star
53

modspectre.lv2

C
3
star
54

mixtri.lv2

Matrix Mixer & Trigger (Pre-Processor for Oscilloscope)
C
3
star
55

host-sync-test.lv2

C
2
star
56

jack-ir

JACK Audio Batch Impulse Response Recorder
C++
2
star
57

mtc.lv2

MTC Generator LV2 Plugin
C
2
star
58

controlfilter.lv2

LV2 Control Port Parameter Filters -- modular synth blocks
C
2
star
59

dokuoauth

Dokuwiki oauth plugin
2
star
60

jack-midi-cmd

Commandline tool to generate JACK MIDI events
C
2
star
61

dokurpcpub

dokuwiki plugin to publish changes via XML-RPC.
2
star
62

alsa_request_device

ALSA/Dbus Audio Reservation Utility (commandline app)
C
2
star
63

ipc-stdio

IPC client/server to forward stdio
C
1
star
64

cairo-testing

libcairo performance testing
Objective-C
1
star
65

jalv

clone of http://git.drobilla.net/jalv.git -- note: the master-rg branch is regularly rebased onto master
C
1
star
66

mididebug.lv2

MIDI Message Generator
C
1
star
67

host-synth-test.lv2

instrumentation tool - LV2 synth to test MIDI alignment in host(s)
Makefile
1
star
68

c-miio

C
1
star
69

tsmm2

Time Stamp Movie Maker
C
1
star
70

modmeter.lv2

Audio Signal Level Meter Plugin for the MOD
Makefile
1
star
71

midigen.lv2

LV2 MIDI Test Sequence Generator
C
1
star