Skip to main content

Crate clap_wrapper

Crate clap_wrapper 

Source
Expand description

§clap-wrapper-rs

Validate Crates

An easy way to use clap-wrapper in your Rust plugins!

§Usecases

  • Adding VST3 or AUv2 support to existing Rust plugin frameworks that do not support them (e.g. clack)
  • Making your own audio plugin framework without dealing with VST3 and AUv2 directly

§Features

  • Provides a simple way to export Rust-based CLAP plugins as VST3 and AUv2 plugins.
  • Builds “fat”, self-contained binaries for VST3 and AUv2 plugins.
  • Does not use cmake. Instead it uses the cc crate to compile the clap-wrapper code.
  • Tested on Linux (Ubuntu 22.04), MacOS (13.7) and Windows (10). In theory the minimum supported OSX version is 10.12, but I have no way to test that.

§Limitations

  • Currently only supports VST3 and AUv2 plugins. Standalone builds are not supported yet.
  • AUv2 wrapper can only export up to 4 plugins per binary for now.

§Usage

Add this to your Cargo.toml:

[dependencies]
clap-wrapper = { version = "0.3.1", features = ["vst3", "auv2", "parallel"] } # these features are enabled by default

Then, in your lib.rs:

// exports `GetPluginFactoryAUV2` symbol.
clap_wrapper::export_auv2!(); 
// exports `GetPluginFactory` symbol and extra VST3 symbols.
clap_wrapper::export_vst3!(); 

This will export VST3 and AUv2 entrypoints that use the clap_entry symbol exported from your crate (as an example, nih_plug::nih_export_clap exports it).

Keep in mind, that clap-wrapper-rs only adds the necessary entrypoints that reexport the CLAP plugin you already have. You’d still have to use a crate like nih-plug to actually create the plugin.

After building, you have to “bundle” your plugin. This means setting up the correct directory structure and copying the necessary files. See VST 3 Developer Portal: Plug-in Format Structure for more info about VST3 directory structure. For AUv2, the directory structure is similar.

clap-wrapper-rs ships with a bundler tool that can be run as a separate step after building the plugin library. Click here for more info about how to use it.

See validate.yml for a complete example of how to build, bundle and validate a plugin.

§Changelog

  • 0.3.1:
    • Added unique suffix to generated ObjC classes as a temporary workaround
  • 0.3.0:
    • Updated clap-wrapper to latest (0.14.0). See clap-wrapper changelog.
    • Added an experimental bundler tool (see bundler folder) that can be used to automate the bundling process.
  • 0.2.1:
    • Added documentation
  • 0.2.0:
    • Embedded VST3 and AUv2 SDKs directly into the crate, removing the need to download them separately. This is possible thanks to VST3 SDK’s new MIT license.
    • Added vst3 and auv2 features to enable/disable building those wrappers.
    • Simplified build.rs by a lot.
  • 0.1.2:
    • Updated clap-wrapper to latest.

§License

Licensed under either of

  • Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

§Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Macros§

export_auv2
Exports a VST3 entrypoint named GetPluginFactory that wraps a global CLAP entrypoint (clap_entry) exported from the resulting shared library.
export_vst3
Exports an AUv2 entrypoint named GetPluginFactoryAUV2 that wraps a global CLAP entrypoint (clap_entry) exported from the resulting shared library. Currently it only reexports the first plugin available through the CLAP entrypoint, but this limitation might be lifted in the future.