crates | ||
src | ||
.gitignore | ||
Cargo.toml | ||
macos.sh | ||
osx_vst_bundler.sh | ||
README.md |
unnieversal
some VST plugins made in Rust using baseplug
source for the plugins are inside the crates
folder
the compiled plugins live inside build
. 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 this plugins
building a plugin
macos
to build a plugin, first run:
cargo b --package package_name --release
Then make the generated dylib file into a VST plugin:
./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:
./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. 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. you can find the code in the crates
folder
- 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
- multidim: randomized midi note generator
- robotuna: automatic pitch correction
- hysteria: hysteresis nonlinear effect
- threebandeq: [WIP] 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 somix
: dry/wet knobenable
: 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 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 tonuke
: 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 beatroot
: the lowest note that will be generated (in midi number). the rest of the notes will be fromroot
toroot + 16
note_length
: length of each note in beatsenable
: 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
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]
wip, there's nothing yet