#vst #plugin #vst2

vst

VST 2.4 API implementation in rust. Create plugins or hosts.

4 releases (2 breaking)

0.2.0 Nov 25, 2019
0.1.0 Apr 10, 2019
0.0.2 Aug 2, 2018
0.0.1 Jan 3, 2018

#7 in #plugin

Download history 16/week @ 2019-08-12 10/week @ 2019-08-19 35/week @ 2019-08-26 20/week @ 2019-09-02 26/week @ 2019-09-09 46/week @ 2019-09-16 26/week @ 2019-09-23 9/week @ 2019-09-30 15/week @ 2019-10-07 18/week @ 2019-10-14 21/week @ 2019-10-21 15/week @ 2019-10-28 32/week @ 2019-11-04 18/week @ 2019-11-11 23/week @ 2019-11-18

99 downloads per month
Used in 1 crate

MIT license

165KB
3K SLoC

vst-rs

Travis Build crates.io dependency status Discord Chat Discourse topics

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.

Library Documentation

Crate

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" }

Usage

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.

Example Plugin

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 <author@example.com>"]

[dependencies]
vst = { git = "https://github.com/rustaudio/vst-rs" }

[lib]
name = "basicvst"
crate-type = ["cdylib"]

Packaging on OS X

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

Special Thanks

Marko Mijalkovic for initiating this project

Dependencies

~215–455KB