AUDIO
Source snapshot · 6 November 2026

Deterministic generic instrument

REAPER fixture

python3 tools/reaper-validation/instrument.py --format clap \
  --bundle target/plugins/debug/ravet-synth-plugin.clap --reaper /path/to/reaper
# Use --format vst3 or lv2 and that format's bundle for the other cases.
python3 -m unittest discover -s tools/reaper-validation -p 'test*.py'

The sibling of the Delay harness reuses its new work folder, private configuration, scan paths, process timeout and normal-resource snapshot guard. It starts REAPER with that work folder as its current directory. Only native macOS/Linux CLAP, VST3 and LV2 runs are provided by this sibling; its --windows-root route is refused. It never copies a licence fixture or normal REAPER configuration. On macOS its private app uses the distinct bundle identifier org.ravet.reaper-instrument-harness.

The generated MIDI item contains notes at 0.5 and 1 seconds (velocity 127), with CC 1 = 64 at 0.9 seconds. Four two-second stereo 48 kHz renders check:

Every rendered sample is checked (tolerance 1e-5 for host PCM rounding), including polarity, amplitude and silence after exactly 64 samples. The second click is 0.25 * 64 / 127 except in cc_off. The script also checks REAPER's reported first-instance PDC field. Two serial instruments with both lookaheads enabled would cause REAPER to compensate two audio delays despite undelayed MIDI echo; the fixture deliberately avoids that ambiguous timing setup. Format fixture checks independently verify generated MIDI bytes and offsets; the REAPER render alone does not inspect MIDI packet bytes or exclude a host MIDI-through route.

See the dated receipt and support matrix. Linux REAPER 7.82 passes CLAP/VST3/LV2. macOS host attempts are recorded as startup failures, with no instrument render evidence. Validators and offline tests do not establish DAW/device support, audible quality, polyphony or real-time deadlines. AAX SDK 2.8 exposes no tail report in this adapter, and LV2 has no exported tail port; the shared processor's finite tail is measured in their audio tests.