- synthChanged() no longer builds JaySynthActionListener Strings and
calls sendActionMessage directly on the audio thread. It now pushes
a small POD event into a lock-free SPSC queue (JUCE's AbstractFifo),
drained by the existing 10ms UI timer on the message thread, which
does the String-building/posting there instead.
- VoiceProcessDataV's ~450KB-900KB of SYNTH_MAX_BUFSIZE-sized local
arrays are now persistent per-voice buffers allocated once in
VoiceSetBufsize (freed in VoiceFree), matching the pattern already
used for pBuf_Q and by vcf.c/env.c/lfo.c, instead of being
reallocated on the stack on every audio block.
- SynthDebug uses vsnprintf instead of vsprintf, bounding writes to
its 1024-byte buffer.
Verified with clean debug and release builds (no new warnings) and a
live playback smoke test in Reaper.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011dhtwRLARk4eiPngcQykLJ