Phase 1: import .vstpreset in offline render (loadSerializedState)

daw_vst_bridge --render now applies a VST3 preset when job has 'preset'
(base64 of a .vstpreset file). Parse the SDK binary chunk format with
PresetFile (vst3sdk), rewrap component/controller state into the bridge
blob [4B BE compLen][comp][4B BE ctrlLen][ctrl] and apply via
loadSerializedState before rendering. SF2/SFZ ignore preset (warning).
Bad base64/magic/chunks fail the job with rc 1 and no partial clip.

Tests: golden Nexus .vstpreset fixture; VST3 with/without preset,
bad preset -> rc 1, non-VST3 preset ignored. 20/20 pass.
This commit is contained in:
2026-08-17 10:44:13 +07:00
parent 4d1a2ed54a
commit bbb11f8066
6 changed files with 175 additions and 3 deletions
+3
View File
@@ -12,6 +12,9 @@
// bpm?, soundfont_bank?, soundfont_program?,
// notes: [{pitch?, velocity?, start_beat?, duration_beats?}] }
// instrument_type: 0=VST3, 1=VST2, 2=SF2/SF3, 3=SFZ (InstrumentType enum).
// preset: base64 of a .vstpreset file (VST3 only; SF2/SFZ ignore it). The
// bridge parses the SDK chunk format and applies component/controller
// state via loadSerializedState before rendering.
// pitch/velocity: velocity 0..1 (float) or 0..127; start/duration in beats.
//
// Returns 0 on success. On failure prints a clear error to stderr and returns