Plugin SDK v2
A stable C ABI for building audio plugins for Mcaster1AMP. Write in C or C++,
expose typed parameters, and the host loads your plugin with hot-reload.
The SDK is in active beta. The interfaces below
illustrate the shape of the ABI; grab the current headers from the developer forums and the changelog.
1. The plugin entry point
Every plugin is a shared library exporting a single factory that returns a descriptor. The host inspects
the descriptor to learn the plugin's type, parameters, and callbacks.
// mc1amp_plugin.h (excerpt)
typedef enum { MC1_PLUGIN_DSP, MC1_PLUGIN_INPUT, MC1_PLUGIN_OUTPUT } mc1_plugin_type;
typedef struct {
const char* id; // "com.you.tape-saturator"
const char* name; // "Vintage Tape Saturator"
const char* version; // "1.0.0"
mc1_plugin_type type;
uint32_t abi_version; // MC1_ABI_VERSION
} mc1_plugin_descriptor;
// Exported by every plugin:
MC1_EXPORT const mc1_plugin_descriptor* mc1_plugin_main(void);
2. A DSP effect
DSP plugins implement a real-time process callback. It runs inside the audio thread, so it
must be allocation- and lock-free.
typedef struct {
void* (*create)(double sample_rate, int max_frames);
void (*destroy)(void* state);
// in/out are interleaved stereo float; frames = sample count
void (*process)(void* state, const float* in, float* out, int frames);
void (*set_param)(void* state, int id, float value);
} mc1_dsp_vtable;
3. Declaring parameters
Expose typed parameters and the host renders controls, persists state, and supports automation.
static const mc1_param PARAMS[] = {
{ .id = 0, .name = "Drive", .min = 0.f, .max = 1.f, .def = 0.5f },
{ .id = 1, .name = "Tone", .min = 0.f, .max = 1.f, .def = 0.5f },
};
4. Input & output plugins
Input plugins implement open/read/close to feed PCM
into the ring buffer. Output plugins implement a write sink to route the
playback bus to a device or encoder. Both follow the same descriptor + vtable pattern as DSP.
5. Build & load
# Build a shared library (Linux/macOS)
cc -shared -fPIC -O2 tape_saturator.c -o tape_saturator.mc1amp
# Drop it in the plugins folder; the host hot-loads it.
~/Mcaster1/Mcaster1AMP/plugins/