2022-02-06 03:13:07 +11:00
|
|
|
# NIH-plug
|
|
|
|
|
|
|
|
[![Tests](https://github.com/robbert-vdh/nih-plugs/actions/workflows/test.yml/badge.svg)](https://github.com/robbert-vdh/nih-plugs/actions/workflows/test.yml)
|
2022-01-25 03:32:27 +11:00
|
|
|
|
2022-01-26 22:07:37 +11:00
|
|
|
This is a work in progress JUCE-lite-lite written in Rust to do some experiments
|
2022-02-13 02:27:57 +11:00
|
|
|
with, as well as a small collection of plugins. The idea is to have a statefull
|
|
|
|
but simple plugin API that gets rid of as much unnecessary ceremony wherever
|
|
|
|
possible, while also keeping the amount of magic to minimum. Since this is not
|
|
|
|
quite meant for general use just yet, the plugin API is limited to the
|
|
|
|
functionality I needed and I'll expose more functionality as I need it. See the
|
|
|
|
documentation comment in the `Plugin` trait for an incomplete list of missing
|
|
|
|
functionality.
|
2022-01-29 01:02:55 +11:00
|
|
|
|
2022-03-02 04:48:00 +11:00
|
|
|
Come join us on the [Rust Audio Discord](https://discord.gg/ykxU3rt4Cb).
|
|
|
|
|
2022-02-13 02:27:57 +11:00
|
|
|
### Table of contents
|
|
|
|
|
2022-02-14 04:42:05 +11:00
|
|
|
- [Plugins](#plugins)
|
|
|
|
- [Framework](#framework)
|
|
|
|
- [Current status](#current-status)
|
|
|
|
- [Building](#building)
|
2022-02-28 23:47:45 +11:00
|
|
|
- [Plugin formats](#plugin-formats)
|
2022-02-14 04:42:05 +11:00
|
|
|
- [Example plugins](#example-plugins)
|
2022-02-13 02:27:57 +11:00
|
|
|
- [Licensing](#licensing)
|
|
|
|
|
|
|
|
## Plugins
|
|
|
|
|
2022-02-17 02:02:41 +11:00
|
|
|
Check each plugin's readme for more details on what the plugin actually does and
|
|
|
|
for download links.
|
2022-02-13 02:27:57 +11:00
|
|
|
|
2022-02-13 03:27:23 +11:00
|
|
|
- [**Diopser**](plugins/diopser) is a totally original phase rotation plugin.
|
2022-02-13 02:27:57 +11:00
|
|
|
Useful for oomphing up kickdrums and basses, transforming synths into their
|
|
|
|
evil phase-y cousin, and making everything sound like a cheap Sci-Fi laser
|
2022-02-15 10:00:41 +11:00
|
|
|
beam.
|
2022-02-13 02:27:57 +11:00
|
|
|
|
|
|
|
## Framework
|
|
|
|
|
|
|
|
### Current status
|
2022-02-07 04:31:49 +11:00
|
|
|
|
2022-02-11 09:37:59 +11:00
|
|
|
It actually works! There's still lots of small things to implement, but the core
|
2022-03-04 04:42:22 +11:00
|
|
|
functionality and basic GUI support are there, with export targets and plugin
|
|
|
|
bundling for both VST3 and CLAP. Currently the Windows support has only been
|
|
|
|
tested under Wine with [yabridge](https://github.com/robbert-vdh/yabridge), and
|
|
|
|
the macOS version hasn't been tested at all. Feel free to be the first one!
|
2022-02-07 04:31:49 +11:00
|
|
|
|
2022-02-13 02:27:57 +11:00
|
|
|
### Building
|
2022-01-30 04:38:09 +11:00
|
|
|
|
2022-02-13 02:27:57 +11:00
|
|
|
NIH-plug works with the latest stable Rust compiler.
|
2022-02-06 03:14:28 +11:00
|
|
|
|
2022-02-16 04:30:45 +11:00
|
|
|
After installing [Rust](https://rustup.rs/), you can compile any of the plugins
|
2022-01-30 04:38:09 +11:00
|
|
|
in the `plugins` directory in the following way, replacing `gain` with the name
|
|
|
|
of the plugin:
|
|
|
|
|
|
|
|
```shell
|
2022-02-27 06:12:08 +11:00
|
|
|
cargo xtask bundle gain --release
|
2022-01-30 04:38:09 +11:00
|
|
|
```
|
|
|
|
|
2022-02-28 23:47:45 +11:00
|
|
|
### Plugin formats
|
|
|
|
|
2022-03-04 04:31:27 +11:00
|
|
|
NIH-plug can currently export VST3 and
|
|
|
|
[CLAP](https://github.com/free-audio/clap) plugins. Exporting a specific plugin
|
|
|
|
format for a plugin is as simple as calling the `nih_export_<format>!(Foo);`
|
|
|
|
macro. The `cargo xtask bundle` commane will detect which plugin formats your
|
|
|
|
plugin supports and create the appropriate bundles accordingly, even when cross
|
|
|
|
compiling.
|
2022-02-28 23:47:45 +11:00
|
|
|
|
2022-02-13 02:27:57 +11:00
|
|
|
### Example plugins
|
2022-02-04 12:57:29 +11:00
|
|
|
|
|
|
|
The best way to get an idea for what the API looks like is to look at the
|
|
|
|
examples.
|
|
|
|
|
2022-02-14 07:04:07 +11:00
|
|
|
- [**gain**](plugins/examples/gain) is a simple smoothed gain plugin that shows
|
|
|
|
off a couple other parts of the API, like support for storing arbitrary
|
|
|
|
serializable state.
|
|
|
|
- [**gain-gui**](plugins/examples/gain-gui) is the same plugin as gain, but with
|
|
|
|
a GUI to control the parameter and a digital peak meter.
|
|
|
|
- [**sine**](plugins/examples/sine) is a simple test tone generator plugin with
|
|
|
|
frequency smoothing that can also make use of MIDI input instead of generating
|
|
|
|
a static signal based on the plugin's parameters.
|
2022-03-06 12:07:53 +11:00
|
|
|
- [**stft**](plugins/examples/stft) shows off some of NIH-plug's other optional
|
|
|
|
helper features, like an adapter to process audio in buffered blocks meant for
|
|
|
|
short-term Fourier transform operations, all using the compositional `Buffer`
|
|
|
|
interface.
|
2022-02-04 12:57:29 +11:00
|
|
|
|
2022-01-29 01:02:55 +11:00
|
|
|
## Licensing
|
|
|
|
|
2022-02-14 06:10:43 +11:00
|
|
|
The framework, its libraries, and the example plugins in `plugins/examples/` are
|
|
|
|
all licensed under the [ISC license](https://www.isc.org/licenses/). However,
|
|
|
|
the [VST3 bindings](https://github.com/RustAudio/vst3-sys) used by
|
|
|
|
`nih_export_vst3!()` are licensed under the GPLv3 license. This means that
|
|
|
|
unless you replace these bindings with your own bindings made from scratch, any
|
|
|
|
VST3 plugins built with NIH-plug need to be able to comply with the terms of the
|
|
|
|
GPLv3 license.
|
|
|
|
|
|
|
|
The other plugins in the `plugins/` directory may be licensed under the GPLv3
|
|
|
|
license. Check the plugin's `Cargo.toml` file for more information.
|