{"id":13605656,"url":"https://github.com/Tremus/CPLUG","last_synced_at":"2025-04-12T05:34:00.286Z","repository":{"id":223797455,"uuid":"761524337","full_name":"Tremus/CPLUG","owner":"Tremus","description":"C wrapper for VST3, AUv2, CLAP audio plugin formats","archived":false,"fork":false,"pushed_at":"2024-07-07T05:44:23.000Z","size":249,"stargazers_count":100,"open_issues_count":4,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-08-02T19:38:05.586Z","etag":null,"topics":["audio-unit","clap","vst3"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tremus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-22T01:42:30.000Z","updated_at":"2024-07-29T17:19:56.000Z","dependencies_parsed_at":"2024-02-22T06:23:43.754Z","dependency_job_id":"c775790c-2a94-4147-83e6-70ba6e9d39e8","html_url":"https://github.com/Tremus/CPLUG","commit_stats":null,"previous_names":["tremus/cplug"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tremus%2FCPLUG","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tremus%2FCPLUG/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tremus%2FCPLUG/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tremus%2FCPLUG/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tremus","download_url":"https://codeload.github.com/Tremus/CPLUG/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223497970,"owners_count":17155230,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-unit","clap","vst3"],"created_at":"2024-08-01T19:01:01.283Z","updated_at":"2024-11-07T10:30:59.295Z","avatar_url":"https://github.com/Tremus.png","language":"C","funding_links":[],"categories":["C","Audio Plug-in/App Frameworks"],"sub_categories":[],"readme":"# CPLUG\n\n\u003e _\"I just want to build a plugin\"_ - Me (and probably you too!)\n\nCPLUG is a simple wrapper API for the VST3, Audio Unit v2 \u0026 CLAP plugin formats. There are no extra dependancies outside of the C APIs. It uses a C99 interface, making it easily compatable with other languages. Efforts have been made to use minimal code, making it easy to read and modify. It uses very few files, making it easy to build and include in other projects.\n\nCPLUG only provides the plumbing of wrapping plugin APIs - no extras! It is intended to be compatible with other libraries of your choice (eg. [PUGL](https://github.com/lv2/pugl), [NanoVG](https://github.com/memononen/nanovg), Qt).\n\nCPLUG uses a CLAP style single event queue for processing.\n\nAll GUI code is pushed to the user to implement how they chose.\n\nAll strings are expected to be `\\0` terminated \u0026 UTF8.\n\n## Building\n\n**TLDR;** To quickly get started, try building the example project using [CMake](CMakeLists.txt)\n\nThe idea is [cplug.h](src/cplug.h) contains forward declarations of functions which you implement in your own source file. Pair these with a single source file corresponding to the plugin format you're building.\n\nThe source files are configurable using macros you define. A full list of these macros can be found in the [example project](example/config.h). AUv2 and Standalone builds require a few extra macros which are set in [CMakeLists.txt](CMakeLists.txt). If you're building these targets, you should read the CMake file.\n\n| Source file            | Lines of code | Description           | Extra dependencies        |\n| ---------------------- | ------------- | --------------------- | ------------------------- |\n| cplug.h                | \u003c 300         | Common API            | None                      |\n| cplug_clap.c           | \u003c 800         | CLAP wrapper          | `#include \u003cclap/clap.h\u003e`  |\n| cplug_auv2.c           | \u003c 1,400       | Audio Unit v2 wrapper | None                      |\n| cplug_standalone_osx.m | \u003c 1,400       | Standalone            | None                      |\n| cplug_standalone_win.c | \u003c 1,600       | Standalone            | None                      |\n| cplug_vst3.c           | \u003c 2,200       | VST3 wrapper          | `#include \u003cvst3_c_api.h\u003e` |\n\nCopies of the CLAP API and VST3 C API are included in the `src` folder. They're both single files.\n\nTested using compilers MinGW GCC 8, VS 17.5, Clang 15 (Windows), Clang 14 (Mac), using C99 \u0026 C++11\n\n\u003e [!NOTE]\n\u003e Some versions of MinGW may not ship with `mmeapi.h`, which is required for MIDI in Windows standalone builds. Either define the functions and structs yourself, or use a different compiler for this build\n\n## Features\n\n### Included:\n\n- Uses _sample accurate automation_ by default\n- Standalone builds include hotreloading, and a native menu for switching between sample rates, block sizes, MIDI devices and audio drivers.\n\n### **Not** included\n\n-   _\"Distributable\"_. Support for external GUIs and external processing\n-   Parameter groups.\n-   Bus activation/deactivation\n-   MPE\n\nMost plugins don't support these features, \u0026 most users don't ask for them or know about them. This library takes a YAGNI approach to uncommon features. Because this library is such a thin wrapper over the plugin APIs, adding any feature you need yourself should be a breeze.\n\n## Roadmap\n\n-   AUv2: Support multiple input/output busses\n-   AUv2: Support sample accurate processing AUv2\n-   Add example using PUGL \u0026 NanoVG\n-   Add example using Dear ImGUI\n-   Add example using Nuklear\n-   (Maybe) Support Max 4 Live?\n-   (Maybe) Support FL Studio Plugins?\n-   (Maybe) Support Linux\n-   (I'd rather not) Support AAX\n\n## Useful Resources\n\n-   [VST3 Technical Documentation](https://steinbergmedia.github.io/vst3_dev_portal/pages/Technical+Documentation/Index.html)\n-   [Audio Unit Programming Guide](https://developer.apple.com/library/archive/documentation/MusicAudio/Conceptual/AudioUnitProgrammingGuide/Introduction/Introduction.html)\n-   [Audio Unit v2 (C) API](https://developer.apple.com/documentation/audiotoolbox/audio_unit_v2_c_api?language=objc)\n-   [CLAP Developers: Getting Started](https://cleveraudio.org/developers-getting-started/)\n-   [pluginval](https://github.com/Tracktion/pluginval)\n-   [clap-validator](https://github.com/free-audio/clap-validator)\n\n## Licensing\n\nThe files [src/vst3_c_api.h](src/vst3_c_api.h) and [src/cplug_vst3.c](src/cplug_vst3.c) are required to use the [VST 3 SDK License](https://forums.steinberg.net/t/vst-3-sdk-license/201637)\n\nThe file [src/clap/clap.h](src/clap/clap.h) uses an MIT license included at the top of the file.\n\nEverything else is in the public domain, or MIT if you insist. See [LICENSE](LICENSE).\n\n## Credits\n\n- Filipe Coelho - Most of the VST3 wrapper and debugging code is a heavily edited version of his code from the DPF repo\n- Nakst - The drawing used in the example plugin was taken from the [CLAP tutorial](https://nakst.gitlab.io/tutorial/clap-part-1.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTremus%2FCPLUG","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FTremus%2FCPLUG","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTremus%2FCPLUG/lists"}