• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Gst-LV2 Quickstart
2
3Dependencies:
4
5Lilv 0.6.6 <http://drobilla.net/software/lilv/>
6
7
8Features:
9
10The plugin wrapper support the following plugin features:
11http://lv2plug.in/ns/lv2core
12http://lv2plug.in/ns/ext/event
13http://lv2plug.in/ns/ext/port-groups
14
15and these host features:
16http://lv2plug.in/ns/ext/log
17http://lv2plug.in/ns/ext/urid
18
19Example Pipeline:
20
21Requires swh-lv2 <http://plugin.org.uk/releases/>
22
23gst-launch-1.0 -v filesrc location=/usr/share/sounds/login.wav ! wavparse ! audioconvert ! plugin-org-uk-swh-plugins-djFlanger ! audioconvert ! autoaudiosink
24(A longer wav will be a better example)
25
26gst-launch-1.0 plugin-org-uk-swh-plugins-analogueOsc num-buffers=100 wave=1 ! wavenc ! filesink location="/tmp/lv2.wav"
27
28Requires calf <http://calf.sourceforge.net/>
29
30GST_DEBUG="*:2,lv2:5"
31gst-launch-1.0 calf-sourceforge-net-plugins-Monosynth event-in="C-3" ! autoaudiosink
32gst-launch-1.0 calf-sourceforge-net-plugins-Monosynth event-in="C-3" name=ms ! autoaudiosink ms. ! fakesink
33gst-launch-1.0 calf-sourceforge-net-plugins-Organ event-in="C-3" name=s ! interleave name=i ! autoaudiosink s. ! i.
34
35
36TODO
37* make filters gap-aware
38* report latency
39  lilv_plugin_has_latency(), lilv_plugin_get_latency_port_index()
40* support more host features
41  GST_DEBUG="lv2:4" GST_DEBUG_FILE=/tmp/gst.log gst-inspect lv2
42  grep -o "needs host feature: .*$" /tmp/gst.log  | sort | uniq -c | sort -n
43* make source elements useful
44  Most source elements use Atom port where they accept midi events. Since it is
45  full fledged midi, we should only ever use channel-0 and instead use multiple
46  instances
47  1) We could expose those as "audio/x-midi-event" sink pads, but then those are
48     not sources anymore.
49  2) We could expose those as properties using a new type like GST_FOURCC. If we
50     ignore "System Exclusive" messages, all other midi messages are 1-3 bytes.
51     We stuff the bytes right to left. E.g: the lowest byte is the status byte
52  3) We could use the GstBtNote enum + the toneconversion classes
53  https://www.midi.org/specifications/item/table-1-summary-of-midi-message
54  Open questions:
55  - with one property, we can't handle polyphony
56  - we can't query lv2 plugins for their polyphony :/
57
58  If lv2 gets a polyphony extension it would be a single non-negative integer:
59    0: unbound,  1 monophonic,  > 1  N-polyphonic
60  I've checked a few synths and they all have an upper limit. Still the way
61  voices work in trackers is not the same as they work in synths - e.g. in a
62  tracker one can play a note twice
63
64  Or we just play them monophonic and try to implement a polychildbin. The bin
65  takes a GstElement to be used as a voice. For each new voice it would create a
66  new instance and it uses a built-in mixer. Downside is that all properties
67  would be per voice.
68
69* example sources:
70  http://svn.drobilla.net/lad/trunk/lilv/utils/lv2info.c
71  http://svn.drobilla.net/lad/trunk/jalv/src/jalv.c
72