fix(drop-fx): inject via .vstpreset + TrackFX_SetPreset (vst_chunk is REAPER-framed, raw bytes silently no-op); FX hotspot now prefix tcp.fx*/mcp.fx*/fx_*

This commit is contained in:
2026-07-28 06:19:29 -04:00
parent 104a25f390
commit b4dd6dc9f1
11 changed files with 494 additions and 344 deletions
+18 -11
View File
@@ -353,16 +353,22 @@ target_include_directories(drag_out PUBLIC src)
# ---------------------------------------------------------------------------
# 2l') Pure instrument_drop library — NO REAPER, NO SWELL, NO VST3 SDK. The S17
# drop-and-load blob-construction core: turn the dragged capture id into the
# base64 "vst_chunk" the extension injects via TrackFX_SetNamedConfigParm so a
# freshly-added ReaSampler 9000 plays that capture. Reuses the instrument's OWN
# serializer (sample_map::serializeComponentState) — NOT a parallel byte writer —
# so the cross-artifact blob contract cannot drift; links sample_map (which pulls
# bank_book/wav_trim/sampler_core transitively) and NEITHER SDK. The round-trip
# test decodes back through the instrument's own reader. Mirror of assignment_request.
# drop-and-load payload-construction core (S-GA-DropFX revision): turn the dragged
# capture id into a Steinberg-format .vstpreset image the shell applies via
# TrackFX_SetPreset so a freshly-added ReaSampler 9000 plays that capture (the
# former "vst_chunk" named-config-parm write fed REAPER raw component bytes its
# VST3 wrapper framing cannot apply — the blank-on-drop regression). Reuses the
# instrument's OWN serializer (sample_map::serializeComponentState) — NOT a
# parallel byte writer — so the cross-artifact contract cannot drift; links
# sample_map (which pulls bank_book/wav_trim/sampler_core transitively) and
# NEITHER SDK. The class-ID string derives from the FROZEN UID macros
# (src/vst/reasampler_uid.h, SDK-free), channel-selected via the generated
# version header — hence the generated include dir. The round-trip test parses
# the container and decodes back through the instrument's own reader. Mirror of
# assignment_request.
# ---------------------------------------------------------------------------
add_library(instrument_drop STATIC src/instrument_drop.cpp)
target_include_directories(instrument_drop PUBLIC src src/vst)
target_include_directories(instrument_drop PUBLIC src src/vst ${CMAKE_CURRENT_BINARY_DIR}/generated)
target_link_libraries(instrument_drop PUBLIC sample_map)
# ---------------------------------------------------------------------------
@@ -654,9 +660,10 @@ add_executable(drag_out_tests tests/test_drag_out.cpp)
target_link_libraries(drag_out_tests PRIVATE drag_out)
add_test(NAME drag_out_tests COMMAND drag_out_tests)
# instrument_drop (S17): the drop-and-load vst_chunk blob builder. The round-trip test
# decodes the base64 back through the instrument's OWN reader (deserializeComponentState) to
# prove the extension injects exactly what setState accepts — the cross-artifact contract guard.
# instrument_drop (S17): the drop-and-load .vstpreset payload builder. The round-trip test
# parses the preset container and decodes its Comp chunk back through the instrument's OWN
# reader (deserializeComponentState) to prove the extension feeds setState exactly what it
# accepts — the cross-artifact contract guard.
add_executable(instrument_drop_tests tests/test_instrument_drop.cpp)
target_link_libraries(instrument_drop_tests PRIVATE instrument_drop)
add_test(NAME instrument_drop_tests COMMAND instrument_drop_tests)