gstreamer/ext/lv2
Nicolas Dufresne fbd9a62504 lv2: Try and reflect better lilv default path
While keeping it simple, this patch tries and mimic lilv default path.
It does not matter if some path are duplicated due to symlink because in
the end it's lilv that will walk these paths. The worst case is that we
update our cache more often then strictly needed.

https://bugzilla.gnome.org/show_bug.cgi?id=791717
2017-12-18 14:51:12 -05:00
..
calf-lv2-port-groups.patch Add swh and calf LV2 port group patches. 2009-09-17 09:46:48 +03:00
gstlv2.c lv2: Try and reflect better lilv default path 2017-12-18 14:51:12 -05:00
gstlv2.h lv2: support for loading presets 2016-07-04 21:18:28 +02:00
gstlv2filter.c fix for https://bugzilla.gnome.org/show_bug.cgi?id=771871 2016-09-29 19:59:28 +02:00
gstlv2source.c lv2: add support for saving presets 2016-07-04 21:18:28 +02:00
gstlv2utils.c lv2: make it build with older lilv 2016-07-14 19:40:57 +02:00
gstlv2utils.h lv2: add support for saving presets 2016-07-04 21:18:28 +02:00
Makefile.am Remove plugin specific static build option 2017-05-16 14:05:52 -04:00
meson.build meson: Enable building LV2 2017-12-18 11:34:13 -05:00
README lv2: planning update 2016-07-10 20:44:19 +02:00
swh-lv2-port-groups.patch Add swh and calf LV2 port group patches. 2009-09-17 09:46:48 +03:00

Gst-LV2 Quickstart

Dependencies:

Lilv 0.6.6 <http://drobilla.net/software/lilv/>


Features:

The plugin wrapper support the following plugin features:
http://lv2plug.in/ns/lv2core
http://lv2plug.in/ns/ext/event
http://lv2plug.in/ns/ext/port-groups

and these host features:
http://lv2plug.in/ns/ext/log
http://lv2plug.in/ns/ext/urid

Example Pipeline:

Requires swh-lv2 <http://plugin.org.uk/releases/>

gst-launch-1.0 -v filesrc location=/usr/share/sounds/login.wav ! wavparse ! audioconvert ! plugin-org-uk-swh-plugins-djFlanger ! audioconvert ! autoaudiosink
(A longer wav will be a better example)

gst-launch-1.0 plugin-org-uk-swh-plugins-analogueOsc num-buffers=100 wave=1 ! wavenc ! filesink location="/tmp/lv2.wav"

Requires calf <http://calf.sourceforge.net/>

GST_DEBUG="*:2,lv2:5"
gst-launch-1.0 calf-sourceforge-net-plugins-Monosynth event-in="C-3" ! autoaudiosink
gst-launch-1.0 calf-sourceforge-net-plugins-Monosynth event-in="C-3" name=ms ! autoaudiosink ms. ! fakesink
gst-launch-1.0 calf-sourceforge-net-plugins-Organ event-in="C-3" name=s ! interleave name=i ! autoaudiosink s. ! i.


TODO
* make filters gap-aware
* report latency
  lilv_plugin_has_latency(), lilv_plugin_get_latency_port_index()
* support more host features
  GST_DEBUG="lv2:4" GST_DEBUG_FILE=/tmp/gst.log gst-inspect lv2
  grep -o "needs host feature: .*$" /tmp/gst.log  | sort | uniq -c | sort -n
* make source elements useful
  Most source elements use Atom port where they accept midi events. Since it is
  full fledged midi, we should only ever use channel-0 and instead use multiple
  instances
  1) We could expose those as "audio/x-midi-event" sink pads, but then those are
     not sources anymore.
  2) We could expose those as properties using a new type like GST_FOURCC. If we
     ignore "System Exclusive" messages, all other midi messages are 1-3 bytes.
     We stuff the bytes right to left. E.g: the lowest byte is the status byte
  3) We could use the GstBtNote enum + the toneconversion classes
  https://www.midi.org/specifications/item/table-1-summary-of-midi-message
  Open questions:
  - with one property, we can't handle polyphony
  - we can't query lv2 plugins for their polyphony :/

  If lv2 gets a polyphony extension it would be a single non-negative integer:
    0: unbound,  1 monophonic,  > 1  N-polyphonic
  I've checked a few synths and they all have an upper limit. Still the way
  voices work in trackers is not the same as they work in synths - e.g. in a
  tracker one can play a note twice

  Or we just play them monophonic and try to implement a polychildbin. The bin
  takes a GstElement to be used as a voice. For each new voice it would create a
  new instance and it uses a built-in mixer. Downside is that all properties
  would be per voice.

* example sources:
  http://svn.drobilla.net/lad/trunk/lilv/utils/lv2info.c
  http://svn.drobilla.net/lad/trunk/jalv/src/jalv.c