/clap

CLever Audio Plugin

Primary LanguageCMIT LicenseMIT

    _______      .---.         ____     .-------.
   /   __  \     | ,_|       .'  __ `.  \  _(`)_ \
  | ,_/  \__)  ,-./  )      /   '  \  \ | (_ o._)|
,-./  )        \  '_ '`)    |___|  /  | |  (_,_) /
\  '_ '`)       > (_)  )       _.-`   | |   '-.-'
 > (_)  )  __  (  .  .-'    .'   _    | |   |
(  .  .-'_/  )  `-'`-'|___  |  _( )_  | |   |
 `-'`-'     /    |        \ \ (_ o _) / /   )
   `._____.'     `--------`  '.(_,_).'  `---'

CLever Audio Plugin.

Learn about CLAP

The starting point is clap.h.

The two most important objects are clap_host and clap_plugin.

Most features comes 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 ext folder.

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

An extension comes with:

  • an 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 methods 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
  • 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:

  • log, lets the host aggregate plugin logs
  • thread-check, check which thread you are currently on, useful for correctness validation
  • audio-ports, define and configure the ports layout
  • params, parameters management
  • latency, report the plugin latency
  • state, save and load the plugin state

GUI extensions

Extra extensions

Examples