157 lines
5.7 KiB
Markdown
157 lines
5.7 KiB
Markdown
# unnieversal
|
|
|
|
some VST plugins made in Rust using `baseplug`
|
|
|
|
source for the plugins are inside the `crates` folder. all plugins have only been tested on macos with reaper
|
|
|
|
disclaimer: i am not responsible for loss of work, time, sanity, or anything else if you decide to use these plugins
|
|
|
|
as of now no plugin has ui, so they all just have a few sliders with whatever look your daw gives them
|
|
|
|
## building a plugin
|
|
|
|
### macos
|
|
|
|
to build a plugin, first run:
|
|
|
|
```bash
|
|
cargo b --package package_name --release
|
|
```
|
|
|
|
Then make the generated dylib file into a VST plugin:
|
|
|
|
```bash
|
|
./osx_vst_bundler.sh PluginName target/release/libpackage_name.dylib
|
|
```
|
|
|
|
this will create `PluginName.vst` in the `build` folder. You can copy it into `/Library/Audio/Plug-Ins/VST` and use it in your daw
|
|
|
|
alternatively, you can run:
|
|
|
|
```bash
|
|
./macos.sh packagename
|
|
```
|
|
|
|
this will generate `Packagename.vst` in `build` and copy it directly for you
|
|
|
|
### other platforms
|
|
|
|
no idea what you have to do for other platforms, refer to the `vst-rs` [docs](https://github.com/rustaudio/vst-rs). i think you can just build and take the `.so` or `.dll`, but don't quote me on that
|
|
|
|
PRs are welcome for more build instructions
|
|
|
|
i also might delete the `build` folder from the repo,
|
|
|
|
## plugin list
|
|
|
|
the following is the current list of plugins
|
|
|
|
- basic_gain: simple gain plugin
|
|
- noted: output midi at regular intervals
|
|
- sosten: granular sustain plugin
|
|
- quinoa: [WIP] granular synthesis plugin
|
|
- XLowpass: reimplementation of [Airwindows XLowpass](http://www.airwindows.com/xlowpass/)
|
|
- multidim: randomized midi note generator
|
|
- robotuna: automatic pitch correction
|
|
- hysteria: hysteresis nonlinear effect
|
|
- threebandeq: 3 band eq
|
|
|
|
### basic_gain
|
|
|
|
simple gain plugin, used as a template for starting new projects
|
|
|
|
### noted
|
|
|
|
midi retriggerer
|
|
|
|
parameters:
|
|
- `tempo`: how often to retrigger a note
|
|
|
|
it listens for incoming midi, and while a note is on, it triggers it every `tempo` beats. if `tempo` is one, it will trigger once per beat
|
|
|
|
it's useful when you want to play a note super fast (over 1/64 tempo) but don't want to have a section full of tiny midi notes. just add the plugin, set the tempo to how often you want it to play, and add a midi note that lasts however long you want the notes to play for
|
|
|
|
### sosten
|
|
|
|
sustains a sound by replaying a grain of sound on loop
|
|
|
|
parameters:
|
|
- `length`: length of the grain in samples. maximum is 48000 cause i said so
|
|
- `mix`: dry/wet knob
|
|
- `enable`: will enable the sustain if it's over 0.5
|
|
|
|
to use this plugin, add an automation for `enable` and set the value to `1.0` wherever you want the sustain to happen
|
|
|
|
### quinoa [WIP]
|
|
|
|
nothing implemented yet, but it's supposed to be a granular synthesis plugin that does stuff with an audio file
|
|
|
|
since this needs a ui so we can select a file to play, and i still don't know how to do that, it's kinda stuck
|
|
|
|
### XLowpass
|
|
|
|
XLowpass just reimplements [Airwindows XLowpass](http://www.airwindows.com/xlowpass/) in rust. it's a lowpass distortion filter
|
|
|
|
parameters:
|
|
- `gain`
|
|
- `frequency`: cutoff frequency. it's not in hz, so move it around until it does what you want it to
|
|
- `nuke`: amount of distortion
|
|
|
|
i haven't checked correctly, but there's probably some mistakes and it might not sound exactly the same. it does what i want it to, so that's good enough for me. also i have absolutely no idea what the code does, it's just a direct translation
|
|
|
|
you might need to play with the parameters around a bit to get it to sound good
|
|
|
|
### multidim
|
|
|
|
multidim simulates a ball bouncing around in a 16-dimensional cube. each time the ball bounces off of a wall, a midi note is sent out
|
|
|
|
parameters:
|
|
- `speed`: speed at which the ball moves. around 1 should cause approximately one bounce per beat
|
|
- `root`: the lowest note that will be generated (in midi number). the rest of the notes will be from `root` to `root + 16`
|
|
- `note_length`: length of each note in beats
|
|
- `enable`: enables the generation if over 0.5
|
|
|
|
since some daws keep the plugins running all the time (whether the song is playing or not), this plugin will generate notes constantly even if the song is paused. since this gets annoying fast, i added an `enable` param. set it to 1 to make the plugin generate notes
|
|
|
|
### robotuna
|
|
|
|
WIP automatic pitch correction and pitch shifting. the intention is to use it to make hyperpop-style high-pitched vocals
|
|
|
|
it kinda works, but not really. since the pitch shifting part is too slow using a phase vocoder, it doesn't run in real time, and there's some clicking noises. i need to rework that whole thing so it can run in real time. i'll probably change the whole thing completely instead of optimizing it cause yeah
|
|
|
|
### hysteria
|
|
|
|
hysteria is a hysteresis nonlinear effect, which compresses and distorts the input audio
|
|
|
|
parameters:
|
|
- `drive`
|
|
- `saturation`
|
|
- `width`: width of the hysteresis loop
|
|
|
|
original source [here](https://ccrma.stanford.edu/~jatin/ComplexNonlinearities/Hysteresis.html)
|
|
|
|
turn the values up for loud and distorted. don't set them all to the max at once though, that doesn't sound as interesting
|
|
|
|
### threebandeq [WIP]
|
|
|
|
simple three band equalizer
|
|
|
|
parameters:
|
|
- `low band`: frequency at which the low band ends
|
|
- `high band`: frequency at which the high band starts
|
|
- `low gain`: gain for the low band
|
|
- `mid gain`: gain for the mid band
|
|
- `high gain`: gain for the high band
|
|
|
|
low band goes from 0hz to `low band`, mid band goes from `low band` to `high band`, high band goes from `high band` to half the sample rate
|
|
|
|
## contributing
|
|
|
|
issues and prs are welcome, but please open an issue before making any big pr, i don't wanna have to reject a pr where you have put a lot of effort on
|
|
|
|
## license
|
|
|
|
gpl3 or something, i need to check which one to use and the add the correct file
|
|
|
|
consider it gpl3 for now
|