fix: sample playback — restore pointer swap, don't kill voices on load
The previous fix (kill all voices + memcpy under lock) prevented
crashes but also prevented playback — every loadData call killed
active voices and held the lock too long for the audio callback.
Restore the back-buffer swap approach: write to sample_buf_back
without lock, then swap pointers under a brief lock. The audio
callback's trylock skips at most one 5ms period during the swap.
No voices are killed, playback continues uninterrupted.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>