Add an incomplete list of features to the readme
This commit is contained in:
parent
824893c33d
commit
21ce38ca23
78
README.md
78
README.md
|
@ -2,14 +2,15 @@
|
||||||
|
|
||||||
[![Tests](https://github.com/robbert-vdh/nih-plug/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/robbert-vdh/nih-plug/actions/workflows/test.yml?query=branch%3Amaster)
|
[![Tests](https://github.com/robbert-vdh/nih-plug/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/robbert-vdh/nih-plug/actions/workflows/test.yml?query=branch%3Amaster)
|
||||||
|
|
||||||
This is a work in progress JUCE-lite-lite written in Rust to do some experiments
|
This is a work in progress API-agnostic audio plugin framework written in Rust
|
||||||
with, as well as a small collection of plugins. The idea is to have a statefull
|
to do some experiments with, as well as a small collection of plugins. The idea
|
||||||
but simple plugin API that gets rid of as much unnecessary ceremony wherever
|
is to have a statefull but simple plugin API that gets rid of as much
|
||||||
possible, while also keeping the amount of magic to minimum. Since this is not
|
unnecessary ceremony wherever possible, while also keeping the amount of magic
|
||||||
quite meant for general use just yet, the plugin API is limited to the
|
to minimum. Since this is not quite meant for general use just yet, the plugin
|
||||||
functionality I needed and I'll expose more functionality as I need it. See the
|
API surface is currently limited to the functionality that I either needed
|
||||||
documentation comment in the `Plugin` trait for an incomplete list of missing
|
myself or that was requested by others. See the [current
|
||||||
functionality.
|
features](#current-features) section for more information on the project's
|
||||||
|
current status.
|
||||||
|
|
||||||
Come join us on the [Rust Audio Discord](https://discord.gg/ykxU3rt4Cb).
|
Come join us on the [Rust Audio Discord](https://discord.gg/ykxU3rt4Cb).
|
||||||
|
|
||||||
|
@ -17,7 +18,7 @@ Come join us on the [Rust Audio Discord](https://discord.gg/ykxU3rt4Cb).
|
||||||
|
|
||||||
- [Plugins](#plugins)
|
- [Plugins](#plugins)
|
||||||
- [Framework](#framework)
|
- [Framework](#framework)
|
||||||
- [Current status](#current-status)
|
- [Current features](#current-features)
|
||||||
- [Building](#building)
|
- [Building](#building)
|
||||||
- [Plugin formats](#plugin-formats)
|
- [Plugin formats](#plugin-formats)
|
||||||
- [Example plugins](#example-plugins)
|
- [Example plugins](#example-plugins)
|
||||||
|
@ -44,13 +45,60 @@ for download links.
|
||||||
|
|
||||||
## Framework
|
## Framework
|
||||||
|
|
||||||
### Current status
|
### Current features
|
||||||
|
|
||||||
It actually works! There's still lots of small things to implement, but the core
|
- Supports both VST3 and [CLAP](https://github.com/free-audio/clap) by simply
|
||||||
functionality and basic GUI support are there, with export targets and plugin
|
adding the corresponding `nih_export_<api>!(Foo)` macro to your plugin's
|
||||||
bundling for both VST3 and CLAP. Currently the Windows support has only been
|
library.
|
||||||
tested under Wine with [yabridge](https://github.com/robbert-vdh/yabridge), and
|
- Declarative parameter handling without any boilerplate.
|
||||||
the macOS version hasn't been tested at all. Feel free to be the first one!
|
- Define parameters for your plugin by adding `FloatParam`, `IntParam`,
|
||||||
|
`BoolParam`, and `EnumParam<T>` fields to your parameter struct, assign
|
||||||
|
stable IDs to them with the `#[id = "foobar"]`, and a `#[derive(Params)]`
|
||||||
|
does all of the boring work for you.
|
||||||
|
- Parameters can have complex value distributions and the parameter objects
|
||||||
|
come with built-in smoothers and callbacks.
|
||||||
|
- Use simple enums deriving the `Enum` trait with the `EnumParam<T>` parameter
|
||||||
|
type for parameters that allow the user to choose between multiple discrete
|
||||||
|
options. That way you can use regular Rust pattern matching when working
|
||||||
|
with these values without having to do any conversions yourself.
|
||||||
|
- Store additional non-parameter state for your plugin by adding any field
|
||||||
|
that can be serialized with [serde](https://serde.rs/) to your plugin's
|
||||||
|
`Params` object and annotating them with `#[persist = "key"]`.
|
||||||
|
- Group your parameters into logical groups by nesting `Params` objects using
|
||||||
|
the `#[nested = "Group Name"]`attribute.
|
||||||
|
- Stateful. Behaves mostly like JUCE, just without all of the boilerplate.
|
||||||
|
- Does not make any assumptions on how you want to process audio, but does come
|
||||||
|
with utilities and adapters to help with common access patterns.
|
||||||
|
- Efficiently iterate over an audio buffer either per-sample per-channel,
|
||||||
|
per-block per-channel, or even per-block per-sample-per-channel with the
|
||||||
|
option to manually index the buffer or get access to a channel slice at any
|
||||||
|
time.
|
||||||
|
- Easily leverage per-channel SIMD using the SIMD adapters on the buffer and
|
||||||
|
block iterators.
|
||||||
|
- Comes with bring-your-own-FFT adapters for common (inverse) short-time
|
||||||
|
Fourier Transform operations. More to come.
|
||||||
|
- Optional sample accurate automation support for VST3 and CLAP that can be
|
||||||
|
enabled by setting the `Plugin::SAMPLE_ACCURATE_AUTOMATION` constant to
|
||||||
|
`true`.
|
||||||
|
- Comes with adapters for popular Rust GUI frameworks as well as some basic
|
||||||
|
widgets for them that integrate with NIH-plug's parameter system. Currently
|
||||||
|
there's support for [egui](nih_plug_egui) and [iced](nih_plug_iced).
|
||||||
|
- Basic note/MIDI support. MIDI CC handling and note output is currently not
|
||||||
|
implemented. Let me know if you need this.
|
||||||
|
- A plugin bundler accessible through the
|
||||||
|
`cargo xtask bundle <package> <build_arguments>` command that detects
|
||||||
|
automatically detects which plugin targets your plugin exposes and creates the
|
||||||
|
correct plugin bundles for your target platform, with cross-compilation
|
||||||
|
support. The cargo subcommand can easily be added to [your own
|
||||||
|
project](https://github.com/robbert-vdh/nih-plug/tree/master/nih_plug_xtask)
|
||||||
|
as an alias or
|
||||||
|
[globally](https://github.com/robbert-vdh/nih-plug/tree/master/cargo_nih_plug)
|
||||||
|
as a regular cargo subcommand.
|
||||||
|
- Tested on Linux, Windows, with limited testing on macOS. Windows support has
|
||||||
|
mostly been tested through Wine with
|
||||||
|
[yabridge](https://github.com/robbert-vdh/yabridge).
|
||||||
|
- See the [`Plugin`](src/plugin.rs) trait's documentation for an incomplete list
|
||||||
|
of the functionlaity that has currently not yet been implemented.
|
||||||
|
|
||||||
### Building
|
### Building
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue