A Nim library for writing audio and MIDI plugins conforming to the LV2 standard
Go to file
Christopher Arndt d997d1c66c Expand readme
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
2024-04-20 11:07:41 +02:00
examples Add nimble tasks and example 'amp' plugin 2024-04-20 04:16:16 +02:00
src Add nimble tasks and example 'amp' plugin 2024-04-20 04:16:16 +02:00
tests Add nimble tasks and example 'amp' plugin 2024-04-20 04:16:16 +02:00
.gitignore Add nimble tasks and example 'amp' plugin 2024-04-20 04:16:16 +02:00
LICENSE Add stub readme and license file 2024-04-20 04:16:16 +02:00
README.md Expand readme 2024-04-20 11:07:41 +02:00
config.nims Initial commit 2024-04-19 12:07:48 +02:00
nymph.nimble Add nimble tasks and example 'amp' plugin 2024-04-20 04:16:16 +02:00

README.md

nymph

A Nim library for writing audio and MIDI plugins conforming to the LV2 standard

Examples

Build the amp.lv2 example plugin:

nimble build_ex amp

Check the amp.lv2 plugin bundle with lv2lint:

nimble lv2lint amp

Run the lv2bm benchmark with the amp.lv2 plugin:

nimble lv2bm amp

Install the amp.lv2 example plugin:

cp -a examples/amp.lv2 ~/.lv2

How To

  • Install this library:

      nimble install https://git.0x20.eu/chris/nymph
    
  • Copy examples/amp.lv2 and examples/amp.nim into your project and rename them as you like (also renaneamp.lv2/amp.ttl). I'll use myplugin as the base bname in the examples below.

  • Edit myplugin.lv2/manifest.ttl and change the plugin URI and change the plugin's shared library name defined with lv2:binary to libmyplugin.so.

  • Edit myplugin.lv2/myplugin.ttl:

    • Change the plugin URI.
    • Define audio, control and atom ports as needed.
  • Edit myplugin.nim:

    • Change the PluginUri constant at the top.
    • Change the PluginPort enum and list the ports in the order defined in myplugin.ttl.
    • Change the definition of the AmpPlugin object type and define its members with the appropriate data type for the plugin port they will be connected to. Update the type name in instantiate, deactivate, connectPorts and run procs.
    • Update and extend the case statement in connectPort to connect ports to your plugin object instance members.
    • Implement your DSP code in the run proc.
  • Compile the plugin shared library object with:

      nim c --app:lib --noMain:on --mm:arc \
          --out:myplugin.lv2/libmyplugin.so myplugin.nim
    

    See the definition of the build_ex task in the nymph.nimble file on how to create a nimble task to siplify compilation.

Dependencies

Required:

Optional:

  • lv2bm - For benchmarking and stress-testing plugins
  • lv2lint - For checking conformity of plugin bundles