Skip to content

iPlug2/clap

This branch is 29 commits behind free-audio/clap:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Sep 23, 2024
27f20f8 · Sep 23, 2024
Jul 10, 2023
May 31, 2022
Jan 13, 2024
Sep 23, 2024
Jan 8, 2024
May 1, 2021
Sep 23, 2024
Nov 30, 2023
Jul 10, 2023
Sep 23, 2024
Mar 17, 2022
Jun 29, 2021
May 15, 2024
Nov 3, 2022

Repository files navigation

CLAP

Learn about CLAP

CLAP stands for CLever Audio Plugin. It is an interface that provides a stable ABI to define a standard for Digital Audio Workstations and audio plugins (synthesizers, audio effects, ...) to work together.

The ABI, or Application Binary Interface, serves as a means of communication between a host and a plugin. It provides backwards compatibility, that is, a plugin binary compiled with CLAP 1.x can be loaded by any other CLAP 1.y.

To work with CLAP, include clap/clap.h. To also include the draft extensions, include clap/all.h.

The two most important objects are clap_host and clap_plugin.

src/plugin-template.c is a very minimal example which demonstrates how to wire a CLAP plugin.

Entry point

The entry point is declared in entry.h.

Extensions

Most features come from extensions, which are in fact C interfaces.

// host extension
const clap_host_log *log = host->extension(host, CLAP_EXT_LOG);
if (log)
   log->log(host, CLAP_LOG_INFO, "Hello World! ;^)");

// plugin extension
const clap_plugin_params *params = plugin->extension(plugin, CLAP_EXT_PARAMS);
if (params)
{
   uint32_t paramsCount = params->count(plugin);
   // ...
}

The extensions are defined in the ext folder.

Some extensions are still in the progress of being designed and they are in the draft folder.

An extension comes with:

  • a header #include <clap/ext/xxx.h>
  • an extension identifier: #define CLAP_EXT_XXX "clap/XXX"
  • host interfaces are named like: struct clap_host_xxx
  • plugin interfaces are named like: struct clap_plugin_xxx
  • each method must have a clear thread specification

You can create your own extensions and share them. Make sure that the extension identifier:

  • includes versioning in case the ABI breaks
  • is a unique identifier

All strings are valid UTF-8.

Fundamental extensions

This is a list of the extensions that you most likely want to implement and use to get a basic plugin experience:

  • state, save and load the plugin state
    • state-context, same as state but with additional context info (preset, duplicate, project)
    • resource-directory, host provided folder for the plugin to save extra resource like multi-samples, ... (draft)
  • params, parameters management
  • note-ports, define the note ports
  • audio-ports, define the audio ports
  • render, renders realtime or offline
  • latency, report the plugin latency
  • tail, processing tail length
  • gui, generic gui controller
  • voice-info, let the host know how many voices the plugin has, this is important for polyphonic modulations
  • track-info, give some info to the plugin about the track it belongs to
  • tuning, host provided microtuning (draft)
  • triggers, plugin's triggers, similar to parameters but stateless

Support extensions

  • thread-check, check which thread you are currently on, useful for correctness validation
  • thread-pool, use the host thread pool
  • log, lets the host aggregate plugin logs
  • timer-support, lets the plugin register timer handlers
  • posix-fd-support, lets the plugin register I/O handlers

Deeper Host integration

  • remote-controls, bank of controls that can be mapped on a controlles with 8 knobs
  • preset-discovery, let the host index the plugin's preset in their native file format
  • preset-load, let the host ask the plugin to load a preset
  • param-indication, let the plugin know when a physical control is mapped to a parameter and if there is automation data
  • note-name, give a name to notes, useful for drum machines
  • transport-control, let the plugin control the host's transport (draft)
  • context-menu, exchange context menu entries between host and plugin, let the plugin ask the host to popup its own context menu

Third-party extensions

Adapters

  • clap-wrapper, wrappers for using CLAP in other plugin environments

Resources

  • clap-validator, a validator and automatic test suite for CLAP plugins.
  • clapdb, a list of plugins and DAWs which supports CLAP

Examples

Community related projects

  • clap-juce-extension, juce add-on
  • MIP2, host and plugins
  • Avendish, a reflection-based API for media plug-ins in C++ which supports Clap
  • NIH-plug, an API-agnostic, Rust-based plugin framework aiming to reduce boilerplate without getting in your way
  • iPlug2, a liberally licensed C++ audio plug-in framework that supports Clap

Programming Language Bindings

Artwork

Packages

No packages published

Languages

  • C 95.8%
  • CMake 2.8%
  • C++ 1.4%