Added VST SDK support.

This commit is contained in:
Johannes Findeisen 2026-11-06 18:13:49 +01:00
commit 8e09f58944
25 changed files with 850 additions and 23 deletions

View file

@ -3363,6 +3363,83 @@ from software-port tests. No dependencies or project-format change were added.
See [MIDI_WORKFLOWS.md](MIDI_WORKFLOWS.md), [PREFERENCES.md](PREFERENCES.md) and
[the gallery](../screenshots/README.md) for reproduction and exact limits.
---
## Phase 106 — Steinberg VST SDK and ASIO Integration
### Goal
Use the official Steinberg SDKs to qualify and extend xtc's VST hosting and
prepare native Windows ASIO audio I/O, with runnable examples. Keep the C99
engine and public C API; SDK-specific C++ belongs in optional tools/examples or
an isolated platform bridge. This is a staged phase, **in progress**, not a
claim that every VST extension or ASIO driver is supported.
### Tasks and acceptance criteria
- [x] Add an opt-in external VST3 SDK CMake build, official validator target,
and original SDK-built gain effect and MIDI instrument examples. Ordinary
builds must remain offline and SDK-independent.
- [x] Load conventional Linux VST3 bundles as well as inner binaries, preserving
the chosen bundle path in plugin metadata and existing module ownership.
- [x] Supply VST3 process context with sample position, sample rate, tempo and
musical position for effect and instrument processing, including seeks.
- [x] Provide a headless C example rendering the SDK synth through the gain
effect to a no-clobber WAV, and automated SDK/xtc interoperability checks.
- [ ] Qualify the ASIO SDK device/channel/format/latency diagnostic example on
native Windows with a real installed driver. Explicit driver selection;
no automatic installation, sample-rate changes or device routing.
- [ ] Add VST3 edit-controller lifecycle/connection handling, normalized
parameters, sample-accurate input automation and parameter feedback to
xtc's existing controls and undo paths; test with SDK and real plugins.
- [ ] Add bounded component/controller opaque-state persistence and transactional
reload, with relocation/missing-module and corrupt-state tests.
- [ ] Extend the graph/host contract for native stereo, multiple buses,
sidechains, latency compensation, tails and float64 negotiation; retain
explicit rejection until each layout is supported and tested.
- [ ] Embed native VST3 editors with Linux run-loop/resize ownership, close and
reopen tests, and main/audio-thread separation. Extend note expression,
MIDI mapping and process-context requirements without inventing timing.
- [ ] Extend legacy VST2 interoperability (parameters/state/editor/transport)
against user-supplied licensed plugins. The discontinued VST2 SDK is not
supplied by VST3 and must not be presented as a downloadable dependency.
- [ ] Introduce a native Windows ASIO backend behind the C backend interface:
explicit driver/device selection, buffer negotiation, integer/float sample
conversion, double buffers/time-info callbacks, channel mapping, latency,
reset/resync/rate-change recovery and callback quiescence. First establish
a Windows build of the C engine; do not pretend ASIO is a Linux backend.
- [ ] Qualify ASIO start/stop/reopen, playback/capture, MIDI coexistence, format
conversion and failure cleanup with deterministic driver tests and real
Windows hardware loopback; record SDK, OS, driver and hardware versions.
- [ ] Audit SDK licenses/notices and packaging for each enabled integration;
update examples, user documentation and the compatibility matrix after
each completed slice. No third-party plugin redistribution implied.
### Implementation status
The first slice adds optional SDK builds/examples, Linux bundle resolution and
VST3 transport context. See [STEINBERG.md](STEINBERG.md) and
[examples/steinberg](../examples/steinberg/README.md) for reproduction and exact
limits. The optional ASIO diagnostic source uses a separately supplied SDK;
Windows compilation and hardware validation remain pending. The application
still uses JACK/PipeWire on Linux. Controller/editor/opaque-state, richer bus
layouts and the native Windows backend remain open acceptance criteria above.
### Validation of the initial slice
On 2026-11-06, `make BUILD_DIR=build/steinberg-host all test` passed with
warnings enabled. The optional official-SDK target passed Steinberg validator
**94/94** plus xtc gain/synth, sample-offset and bundle-path save/reload checks
against SDK revision `3cdf9ca5d1f5b1b21e0a86832aa4abe55607bd96` (3.8.1).
Focused Clang ASan/UBSan module-path, modern-host and SDK interoperability tests
passed; static analysis of path resolution and the host facade reported no
findings. Independent WAV checks confirmed float32/mono/48 kHz, 96000 frames,
note-off silence and no-clobber destination preservation. Metadata inspection
accepts readable bundle binaries without executing them. Linux ASIO-option
configuration correctly rejects the unsupported platform; no Windows build or
ASIO hardware result is claimed.
---
## Recommended Execution Order