vst-rs
is a library for creating VST2 plugins in the Rust programming language.
This library is a work in progress, and as such it does not yet implement all functionality. It can create basic VST plugins without an editor interface.
Note: If you are upgrading from a version prior to 0.2.0, you will need to update
your plugin code to be compatible with the new, thread-safe plugin API. See the
transfer_and_smooth
example for a guide on how
to port your plugin.
This crate is available on crates.io. If you prefer the bleeding-edge, you can also include the crate directly from the official Github repository.
# get from crates.io.
vst = "0.2.0"
# get directly from Github. This might be unstable!
vst = { git = "https://github.com/rustaudio/vst-rs" }
To create a plugin, simply create a type which implements plugin::Plugin
and
std::default::Default
. Then call the macro plugin_main!
, which will export
the necessary functions and handle dealing with the rest of the API.
A simple plugin that bears no functionality. The provided Cargo.toml has a crate-type directive which builds a dynamic library, usable by any VST host.
src/lib.rs
#[macro_use]
extern crate vst;
use vst::plugin::{Info, Plugin};
#[derive(Default)]
struct BasicPlugin;
impl Plugin for BasicPlugin {
fn get_info(&self) -> Info {
Info {
name: "Basic Plugin".to_string(),
unique_id: 1357, // Used by hosts to differentiate between plugins.
..Default::default()
}
}
}
plugin_main!(BasicPlugin); // Important!
Cargo.toml
[package]
name = "basic_vst"
version = "0.0.1"
authors = ["Author <[email protected]>"]
[dependencies]
vst = { git = "https://github.com/rustaudio/vst-rs" }
[lib]
name = "basicvst"
crate-type = ["cdylib"]
On OS X VST plugins are packaged inside of loadable bundles.
To package your VST as a loadable bundle you may use the osx_vst_bundler.sh
script this library provides.
Example:
./osx_vst_bundler.sh Plugin target/release/plugin.dylib
Creates a Plugin.vst bundle