Address three issues introduced with the 3-oscillator synth: - Crashes: ToolboxSlot.values was a plain HashMap read on the audio thread while the UI wrote it (knob drags vs. the synth's ~40-param-per-note reads). Made it a ConcurrentHashMap so get/put are atomic and reads are lock-free (RT-safe). - Filter cutoff not affecting the sound: (a) the cheap ladder went unstable at high cutoff (f > 1 -> NaN -> silent voice) — replaced with a stable Cytomic TPT state-variable low-pass (with NaN recovery); (b) a voice captured its patch only at note-on, so live knob turns were inaudible — the engine now refreshes active voices' patches every block, so cutoff/level/mod changes affect held & playing notes. - Hiccups: every note allocated a SynthPatch (+arrays) causing GC dropouts — the patch is now cached per bus and reparsed only on param/tempo change, so steady playback allocates nothing on the audio thread. Patch bump to 0.4.3 (versionCode 10). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.0 KiB
5.0 KiB