Getting started with LV2 plugin Compiling eg-amp?

Hello all,

I’m trying to get started with LV2 plugins, ultimately for Mod devices, but failing at the very early stages. So there is a blog post [1] and I got a good intro [2]. I’m working on an Ubuntu 20.04 machine and trying to compile that first example amp plugin in the lv2 source [3] using the command:

lv2-1.0.0/plugins/eg-amp.lv2$ ./waf configure

The build process is failing because it can’t fine lv2core which appears to be part of that download:

lv2-1.0.0/lv2/lv2plug.in/ns/lv2core

I’m new to this build process and can’t see how I tell it the location of lv2core. If anybody has managed to find how to get past that first step I’d be grateful for any help. Can’t find much

[1] https://moddevices.com/2016/09/08/create-lv2-plugin-part-1/
[2] harryhaaren: Writing Lv2 plugins : An Lv2 Overview
[3] http://lv2plug.in/spec/lv2-1.0.0.tar.bz2

1 Like

On Ubuntu just install lv2-dev package
Or alternatively, build the whole lv2 package from the root dir instead of a specific plugin, since those plugins come from the lv2 package.

Or, on a personal subjective opinion, skip raw LV2 which is quite low-level and go with something more high-level.
DPF is something I have made for such cases, where I want to create and port over plugins but don’t want to deal with LV2 core concepts all the time.
DPF integrates well with the MOD platform, you can find Nekobi, PingPongPan, Arpeggiator and a few others that were made with it. The Max gen~ stuff also uses DPF behind the scenes.
See documentation for DPF here, though docs are still WIP.

3 Likes

Thank you falkTX, I should have mentioned that I’d installed the lv2-dev package but that didn’t help at all, I moved to the Mod Devices build system documented in [1] and that has gotten me at least building a plugin so getting somewhere.

Thanks again

https://wiki.moddevices.com/wiki/How_To_Build_and_Deploy_LV2_Plugin_to_MOD_Duo

2 Likes

I installed the ModDevices toolchain [1]. Which works perfectly and I can build an existing plugin. eg-amp seems like a good place to start

./build moddwarf eg-amp-lv2-labs

That works, as does the command to deploy the plugin to the connected ModDwarf:

./build moddwarf eg-amp-lv2-labs -publish

Or did it actually deploy? Looking through the GUI for the ModDwarf and searching for that plugin I can’t find it on the device at all. I’ve been through ttl files, but new to this so perhaps all the strings I searched for in the ModDwarf were fruitless. So where does the plugin get deployed and how can I put it on a pedal board?

dont you have a space too much in there? between labs and -publish.
or alternatively use ./publish script

on the unit, lv2 plugins are installed in /root/.lv2/

Sorry yes you’re right, no space, should have cut and pasted. I corrected the command to:

$ ./build moddwarf eg-amp-lv2-labs-publish
{“removed”: [], “installed”: [“http://lv2plug.in/plugins/eg-amp”], “ok”: true}
All plugin bundles installed

So apparently all plugin bundles installed but does not show up on the device at all. I found another wiki page [1], with a command for doing it manually, but didn’t have good results:

$ tar cz ~/mod-workdir/moddwarf/plugins/eg-amp.lv2 | base64 | curl -F ‘package=@-’ http://192.168.51.1/sdk/install
tar: Removing leading `/’ from member names
{“removed”: [], “installed”: [], “error”: “No plugins found in bundle”, “ok”: false}

Which seems to suggest that there is no plugin.
Another page [2] has a slightly different manual command to execute from the ~/mod-workdir/moddwarf/plugins directory, but similar result, no plugin:

tar czf eg-amp.lv2 eg-amp.lv2 | base64 | curl -F ‘package=@-’ http://192.168.51.1/sdk/install; echo
tar (child): eg-amp.lv2: Cannot open: Is a directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
{“removed”: [], “installed”: [], “error”: “No plugins found in bundle”, “ok”: false}

Which seems strange as the lv2 directory seems to contain the required files:

~/mod-workdir/moddwarf/plugins$ tree eg-amp.lv2/
eg-amp.lv2/
├── amp.so
├── amp.ttl
└── manifest.ttl

0 directories, 3 files

A bit more searching for a command that works is required…

[1] Publishing Plugins - MOD Wiki
[2] mod-plugin-builder/README.md at master · moddevices/mod-plugin-builder · GitHub

the publish command does for sure work, I use it on almost daily basis.

the tar stuff also works, you just happen to have used it outside of the current-dir,

this:
tar cz ~/mod-workdir/moddwarf/plugins/eg-amp.lv2
is very different from:
cd ~/mod-workdir/moddwarf/plugins/ && tar cz eg-amp.lv2

also dont use the “f” argument, we dont want to create files but pipe it into the other commands for processing (base64 and then curl)

just try another plugin then, I assure you this does work.
not just me, but many others have used it before.

falkTX thanks again. Yes the command does work but there was a bit of confusion on my part as to what I was searching for, on the ModDwarf. I was looking for ‘eg-amp’ on the ModDwarf which is not the actual name of the plugin. I had to do some searching to find how the name is coded in the ttl files and found that it’s called ‘simple amplifier’.

It is installed, it’s been a bit of a chore but it is a learning curve.

Thanks again for your help

3 Likes

From building and installing the example plugin the logical next step, to my mind, was to copy that plugin as a template and build and install my-plugin to the ModDwarf. To that end I copied the eg-amp directory: mod-plugin-builder/plugins/package/my-plugin and edited all files to change eg-amp to my-plugin.

This all went well, but too well. The OpenEmbedded build system appears to build my plugin:

mod-plugin-builder$ ./build moddwarf my-plugin

it’ll even install my plugin:

mod-plugin-builder$ ./build moddwarf my-plugin-publish

The funny thing is that when I do publish using the above command I get the output:

{“removed”: [], “ok”: true, “installed”: [“http://lv2plug.in/plugins/eg-amp”]}
All plugin bundles installed

That’s not right, it’s found eg-amp. I’d already changed the source file for the project from amp.c to my-plugin.c and put that into the make files instead of amp.c. So I put a syntax error in the file just to make sure the build process would fail. As if, build system took it in its stride. Obviously buildroot isn’t building what I think it should be building. I looked at the output directory:

/mod-plugin-builder$ ls ~/mod-workdir/moddwarf/plugins/my-plugin.lv2/
amp.so amp.ttl manifest.ttl

So yeah even though the plugin has my name it’s pulling in amp.c rather then my-plugin.c

There are no occurrences of ‘es-amp’ or amp.c left in my project directory, but somehow buildroot knows to ignore everything. I think the offending line must be at the top of the my-plugin.mk

//# where to find the source code - locally in this case
MY_PLUGIN_SITE_METHOD = local
MY_PLUGIN_SITE = $($(PKG)_PKGDIR)/

I assume that $PKG is coming from the command mod-plugin-builder$ ./build moddwarf my-plugin

Been a few days at this going through [1] and all I can say is it’s slow going, so a few more to go :frowning:

[1] The Buildroot user manual

1 Like