diff options
-rw-r--r-- | AUTHORS | 5 | ||||
-rwxr-xr-x | bindings/python/lv2_list_presets.py | 46 |
2 files changed, 50 insertions, 1 deletions
@@ -8,4 +8,7 @@ Dynamic manifest support: Stefano D'Angelo Plugin execution via Python bindings: - Kaspar Emanuel <kaspar.emanuel@gmail.com>
\ No newline at end of file + Kaspar Emanuel <kaspar.emanuel@gmail.com> + +Python preset script: + Christopher Arndt <chris@chrisarndt.de> diff --git a/bindings/python/lv2_list_presets.py b/bindings/python/lv2_list_presets.py new file mode 100755 index 0000000..561e3f8 --- /dev/null +++ b/bindings/python/lv2_list_presets.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import sys +import lilv + + +NS_PRESETS = "http://lv2plug.in/ns/ext/presets#" + + +def print_presets(uri): + """Print all presets of an LV2 plugin to stdout.""" + + world = lilv.World() + world.load_all() + world.ns.presets = lilv.Namespace(world, NS_PRESETS) + plugins = world.get_all_plugins() + plugin = plugins[uri] + presets = plugin.get_related(world.ns.presets.Preset) + + preset_list = [] + for preset in presets: + world.load_resource(preset) + labels = world.find_nodes(preset, world.ns.rdfs.label, None) + label = str(labels[0]) if len(labels) > 0 else "" + + if not label: + sys.stderr.write("warning: Preset <%s> has no label\n" % preset) + + preset_list.append((str(preset), str(label))) + + for preset in sorted(preset_list): + print('<%s> "%s"' % preset) + + +if __name__ == "__main__": + if len(sys.argv) != 2: + sys.stderr.write("Usage: %s PLUGIN_URI\n" % (sys.argv[0])) + sys.exit(1) + + try: + print_presets(sys.argv[1]) + except ValueError as e: + sys.stderr.write("error: %s\n" % e) + except KeyError as e: + sys.stderr.write("error: %s\n" % str(e).strip("'")) |