{"id":21689203,"url":"https://github.com/spotlightkid/nymph","last_synced_at":"2025-03-20T12:37:41.557Z","repository":{"id":258298989,"uuid":"864874440","full_name":"SpotlightKid/nymph","owner":"SpotlightKid","description":"A Nim library for writing audio and MIDI plugins conforming to the LV2 standard","archived":false,"fork":false,"pushed_at":"2024-11-25T15:32:33.000Z","size":61,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-25T12:41:49.410Z","etag":null,"topics":["faust-dsp","lv2","lv2-plugins","nim-l"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SpotlightKid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-29T11:58:23.000Z","updated_at":"2024-11-25T15:32:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"855728e6-68ac-49c9-b05b-e3d73a5aa883","html_url":"https://github.com/SpotlightKid/nymph","commit_stats":null,"previous_names":["spotlightkid/nymph"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpotlightKid%2Fnymph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpotlightKid%2Fnymph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpotlightKid%2Fnymph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpotlightKid%2Fnymph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SpotlightKid","download_url":"https://codeload.github.com/SpotlightKid/nymph/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244611882,"owners_count":20481283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["faust-dsp","lv2","lv2-plugins","nim-l"],"created_at":"2024-11-25T17:21:53.972Z","updated_at":"2025-03-20T12:37:41.537Z","avatar_url":"https://github.com/SpotlightKid.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nymph\n\nA [Nim] library for writing audio and MIDI plugins conforming to the [LV2]\nstandard\n\n\n## Examples\n\nBuild the `amp.lv2` example plugin:\n\n    nimble build_ex amp\n\nCheck the `amp.lv2` plugin bundle with `lv2lint`:\n\n    nimble lv2lint amp\n\nRun the `lv2bm` benchmark with the `amp.lv2` plugin:\n\n    nimble lv2bm amp\n\nInstall the `amp.lv2` example plugin:\n\n    cp -a examples/amp.lv2 ~/.lv2\n\nOther example plugins can be found in the [examples](./examples) directory and\ncan be built and tested with similar commands. Just change the example name to\nthe basename of the plugin's LV2 bundle dir.\n\nCurrently, there are just a few other example plugins:\n\n* [`miditranspose`](./examples/miditranspose_plugin.nim): shows how to handle\n  receiving and sending MIDI events.\n* [`multimodefilter`](./examples/multimodefilter_plugin.nim): shows a\n  multimode state-variable filter implementation ported from C++ to Nim.\n* [`tiltfilter`](./examples/titltfilter_plugin.nim): shows a multimode tilt\n  equalizer filter implementation ported from Rust to Nim.\n* [`faustlpf`](./examples/faustlpf_plugin.nim): shows how to integrate DSP C\n  code generated from a [FAUST] source file in Nim (in this example the FAUST\n  code implements a simple non-resonant low-pass filter from the FAUST\n  standard library).\n\n\n## How To\n\n**Note:** I'll use `mydsp` as the base name for the new plugin in the\nexamples below. Substitute your own plugin basename wherever you see it used\nbelow.\n\n1. Install this library:\n\n      nimble install https://github.com/SpotlightKid/nymph.git\n\n1. Make a directory named `mydsp.lv2` and copy `examples/amp.lv2/manifest.ttl`\n    into it. Also copy `examples/amp.lv2/amp.ttl` to `mydsp.lv2/mydsp.ttl`.\n\n1. Copy `examples/amp_plugin.nim` into your project as `mydsp_plugin.nim`.\n\n1. Edit `mydsp.lv2/manifest.ttl`:\n   * Change the plugin URI.\n   * Change the plugin's shared library name defined via `lv2:binary` to\n     `libmydsp.so`.\n   * Change file name referenced via `rdfs:seeAlso` to `mydsp.ttl`.\n\n1. Edit `mydsp.lv2/mydsp.ttl`:\n   * Change the plugin URI.\n   * Define audio, control and atom ports as needed.\n\n1. Edit `mydsp_plugin.nim`:\n   * Change the `PluginUri` constant at the top.\n   * Change the `PluginPort` enum and list the ports in the order defined in\n     `mydsp.ttl`.\n   * Rename and update the definition of the `AmpPlugin` object type and\n     define its members with the appropriate data types for the plugin ports\n     they will be connected to. Update the type name in the `instantiate`,\n     `deactivate`, `connectPorts` and `run` procs.\n   * Update and extend the `case` statement in `connectPort` to connect ports\n     to your plugin object instance members.\n   * Implement your DSP code in the `run` proc.\n\n1. Compile the plugin shared library object with:\n\n        nim c --app:lib --noMain:on --mm:arc \\\n            --out:mydsp.lv2/libmydsp.so mydsp_plugin.nim\n\n   See the definition of the `build_ex` task in the\n   [nymph.nimble](./nymph.nimble#L67) file on how to create a nimble task\n   to simplify compilation and additional compiler args you might want to use.\n\n\n## Dependencies\n\nRequired:\n\n* [Nim] \u003e= 2.0\n\nOptional:\n\n* [lv2bm] - For benchmarking and stress-testing plugins\n* [lv2lint] - For checking conformity of plugin bundles\n\n\n## See Also\n\n* [lv2-nim](https://gitlab.com/lpirl/lv2-nim) - Older third-party Nim bindings\n  for the LV2 audio plugin specification. Last update in 2021.\n* [offbeat](https://github.com/NimAudio/offbeat) - A [CLAP] based plugin\n  framework in Nim\n\n\n[CLAP]: https://cleveraudio.org/\n[FAUST]: https://faust.grame.fr/\n[LV2]: https://lv2plug.in/\n[lv2bm]: https://github.com/moddevices/lv2bm\n[lv2lint]: https://git.open-music-kontrollers.ch/~hp/lv2lint\n[Nim]: https://nim-lang.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspotlightkid%2Fnymph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspotlightkid%2Fnymph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspotlightkid%2Fnymph/lists"}