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/
Ready to ship? Submit your plugin to the gallery, and read the API reference for the full interface.