Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Repository and tools

PathWhat
crates/apfcore: plugin API, parameters, queue, state, CLAP backend
crates/apf-webviewweb view (wry) and the apf.js bridge
crates/apf-hosta minimal CLAP host for tests: renders audio and drives the web view end to end
crates/apf-hotthe hot-reload shell: runs a plugin from a published dynamic library and swaps in new builds
crates/apf-testtest a plugin through the CLAP interface in memory, with the counting allocator
examples/01-sine to 10-synththe example ladder
examples/demo-synth16-voice synth: sine, saw and square (PolyBLEP), resonant state-variable low-pass, ADSR, sustain pedal, pitch bend, mod wheel (cutoff, vibrato, resonance, gain), factory presets, web view
examples/tuning-demomicrotuned sine synth: the controller example (tuning kept outside the parameters, in sessions and presets, edited through apf.plugin) with a resizable web view
wrapper/CMake project building every format with clap-wrapper, and its patches
xtask/cargo xtask bundle / install / hot / validate / new / notices (cargo xtask --help)
third_party/option-extMIT re-implementation of an MPL-2.0 transitive dependency (see Licences)
docs/bookthis book (mdBook sources)
docs/known-issues.mdopen problems and host quirks

The build commands and the packaging settings in a plugin’s Cargo.toml ([package.metadata.apf]) are in Hosts and formats.

Test and validation tools

PathWhat
scripts/reaper-render-test.shloads the installed CLAP, VST3 and AU in REAPER, renders and compares
scripts/au-automation-check.swiftwhile a host plays automation, the AUv3’s parameter tree (what the host’s own knobs read, such as Logic’s Smart Controls) follows it (wrapper patch 0006)
scripts/au-legato-check.swiftan AUv3 instrument keeps sounding when a held note is struck again legato (a note-off and a note-on of the key on one sample; wrapper patch 0007); --preset NAME loads a factory preset first
scripts/au-state-check.swifta restored session sounds the same with the web view closed and opened, in seven restore orders (AUv3 out of process, AUv2 with --in-process, an uninstalled AUv2 build with --bundle, a host’s saved state with --state)
scripts/au-probe.swiftan installed AU as Logic sees it: parameters, groups, factory presets (--preset N selects one); --gui S --resize [--in-process] checks that the web view follows its window; --gui S --keys [--in-process] that keys the page leaves reach the host whole (key-down, key-up, modifiers)
tools/vst3-state-checkthe same session check for VST3, headless and portable (C++17, VST3 SDK hosting): a restored session sounds as saved in seven restore orders, the controller shows the restored values and the processor holds them; --view adds the web view opened (off screen) against closed, --state a host’s saved .vstpreset, --inject-stale checks the check. Built and run by cargo xtask validate
scripts/clap-validator-0.4.1-preset-deadlock.patchfix for a deadlock in clap-validator (see Validation)

Wrapper patches

wrapper/patches/ holds the changes APF applies to clap-wrapper before building:

PatchFixes
0001AUv3: parameter value names (choices shown as numbers) and group order
0002AUv3: factory presets in the host’s preset menu
0003presets keep the plugin’s order (VST3 program lists, AU lists)
0004web view resizing in Audio Unit hosts
0005a restored session keeps its parameter values (AUv2 and AUv3)
0006the AUv3 parameter tree follows host automation
0007AUv3: a note struck again legato keeps its key
0008the CLAP, VST3 and Audio Unit SDKs are downloaded once per machine into CPM’s source cache, not into every build folder