feat: per-key sample bank, auto-trim silence, compressor
Sample Bank (notepat):
- Hold End to arm, press any tone key to record a sample to that key
- Release tone key to save. Each key gets its own sample.
- Home still records global sample (doesn't overwrite per-key)
- Delete clears all per-key samples back to default
- Per-key samples auto-load to C buffer on playback
Audio engine:
- Auto-trim silence from recording start (threshold -40dB)
- sound.sample.getData() — read sample buffer to JS Float32Array
- sound.sample.loadData(f32, rate) — write JS array to C buffer
- Period=1024 for low-latency capture (~21ms)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>