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. 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
because steinberg is an incredibly nice company, i can't actually distribute vst2 plugin binaries without a license, which they don't give out anymore :)
so you're gonna have to build the plugins yourself, but don't worry cause it's relatively easy! (i think)
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 do all three steps 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 with cargo b --package package_name --release
and take the .so
or .dll
, but don't quote me on that
PRs are welcome for more build instructions
plugin list
the following is the current list of plugins
basic_gain
: simple gain pluginnoted
: output midi at regular intervalssosten
: granular sustain pluginquinoa
: [WIP] granular synthesis pluginXLowpass
: reimplementation of Airwindows XLowpassmultidim
: randomized midi note generatorrobotuna
: automatic pitch correctionhysteria
: hysteresis nonlinear effectthreebandeq
: 3 band eqthreebandwidth
: 3 band stereo widenertritu
: say-goodbye-to-your-audio distortionthreebandfolding
: 3 band wave folding distortiondouble_reverse_delta_inverter
: idk, a weird distortiontransmute_pitch
: pitch to midi converter
there's a bit of an explanation of each of the plugins below, but it's not a thorough documentation or a manual, it's just a bunch of notes i've written and a short description of the parameters
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. small but versatile
parameters:
enable
: will enable the sustain if it's over 0.5length
: length of the grain in samples. maximum is 48000 cause i said somanual/pitch detection
: whether to use the manually set length (if under 0.5) or use the detected pitch (over 0.5)dissipation
: amount of dissipation of the inputdirection
: direction in which the grain is played
to use this plugin, add an automation for enable
and set the value to 1.0
wherever you want the sustain to happen. as soon as that happens, it'll start looping the last length
samples
if set to manual, it uses the provided length for the looped grain. if pitch detection is enabled, it will use the detected pitch to calculate the period of the input, and it'll use that for the length of the grain. this should cause the sound to be sustained seamlessly
dissipation is a weird thingy. it smooths out the sound, and i think it's a lowpass filter? not sure. makes cool sounds though. what it does is roughly x[n] = dissipation * x[n] + (1 - dissipation) * x[n + 1]
after each time it plays a sample, so dissipation = 1
will leave the audio untouched, and setting it to 0.5
provides the greatest effect
direction is a selector, with three ranges:
[0, 0.4)
: the grain will be played backwards[0.4, 0.6)
: the grain will cycle through forwards and backwards[0.6, 1.0]
: the grain will play forwards
my three main uses are:
- sustaining a note, which you can do with
manual/pitch detection = 1
,direction = 1
, and any amount of dissipation - wavetable-ish kinda thing, by setting
manual = 0
and a really low length, you can play notes of frequency1 / length
- glitch repetition effect, by setting
manual = 0
, any direction (but usually forward), any dissipation, and a medium length. enable at the end of a bar or smth
but you can probably use it for more stuff! idk! this are just my suggestions
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, progress is kinda stuck
XLowpass
XLowpass 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
simple three band equalizer
parameters:
low band
: frequency at which the low band endshigh band
: frequency at which the high band startslow gain
: gain for the low bandmid gain
: gain for the mid bandhigh 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
threebandwidth
three band stereo widener
parameters:
low band
: frequency at which the low band endshigh band
: frequency at which the high band startslow width
: width for the low bandmid width
: width for the mid bandhigh width
: width for the high band
bands work as they do in threebandeq
. the width parameters control how wide an audio signal should be in the stereo field. width
of 1 leaves the audio as is, width
of 0 makes it mono, values between 0 and 1 decrease the stereo width, values over 1 increase it.
tritu
hard limiter followed by a soft limiter with distortion
parameters:
pregain
: pregain for the hard limiterdrive
: drive for the soft limiterdistortion
: amount of distortion on the soft limiter
distortion affects lower volumes more than higher volumes, so if you crank up drive
a lot, there will be less distortion (this is a good thing for high values of distortion
!). if you leave drive
low and set distortion
to max, your audio will turn to almost white noise
i like this plugin a lot
threebandfolding
three band wavefolding distortion
parameters:
low band
: frequency at which the low band endshigh band
: frequency at which the high band startslow folding freq
: folding frequency for the low bandmid folding freq
: folding frequency for the mid bandhigh folding freq
: folding frequency for the high band
bands work as they do in threebandeq
. the folding freq
parameters control the frequency of the wavefolding. higher is more distortion. use values over 40 if you want to hear white noise
double-reverse delta inverter
weird kinda distortion that makes loud things quiet and makes quiet things loud
parameters:
dry/wet
: dry/wet control
yeah there's not many params in this one, the implementation is pretty straightforward. it does weird things: a square wave of amplitude 1 will just be completely eliminated, while sine waves are distorted
the effect is reversible (it's an involution), so if you add this plugin twice in a row you get the original signal back. this means you can apply drdi to your audio, apply some other effect, and apply drdi again to get some fun stuff
transmute midi
analyzes pitch of incoming audio and sends out the corresponding midi note
params:
passthrough
: how much of the original audio to be let through
latency should be close to 1024 samples, which is around 20ms i think. the pitch detection is not excellent and it's monophonic, so if you have a noisy input or a bunch of notes at the same time it's anyone's guess what the midi output will be. there's also no pitch bending or anything fancy like that, so it'll jump around notes even if the input has portamento.
aside from that, it works well enough on my quick tests
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. if you are fine with that, ig go ahead i'm not your mum
license
gpl3 or something, i need to check which one to use and the add the correct file
consider it gpl3 for now