https://gitlab.synchro.net/main/sbbs/-/commit/5b29253803e4f3d00cf14b3c
Added Files:
src/doors/termgfx/audio.c audio.h audio_mgr.c audio_mgr.h
Modified Files:
src/doors/syncduke/syncduke_input.c syncduke_io.c syncduke_stubs.c src/doors/termgfx/CMakeLists.txt
Log Message:
syncduke: digital sound effects via SyncTERM audio APC
Add a termgfx audio module and wire SyncDuke's SFX through it:
* termgfx/audio.{c,h} -- I/O-free SyncTERM:A / SyncTERM:Q builders (Store,
Load, Queue, Synth, Flush) + the libsndfile capability parser.
* termgfx/audio_mgr.{c,h} -- per-session policy: capability tier, an
upload-once sample cache, per-play slot Load+Queue (a Queue empties its
slot, so each play re-Loads -- the file stays cached, no re-transfer),
round-robin channel pool, reserved music channel. NULL/tier<1 = silent.
* syncduke FX_PlayVOC3D/WAV3D ship each in-memory VOC/WAV to SyncTERM, which
decodes it via libsndfile and mixes it; the cap probe rides the startup
handshake and the reply is parsed from the input stream.
Gated on a libsndfile-capable SyncTERM (audio APC, tier 1); a no-op on older
or non-SyncTERM clients. Validated live on SyncTERM 1.10a -- weapon/menu/world SFX play and repeat. Music (MIDI), looped/ambient SFX and 3D pan are follow-ups.
Co-Authored-By: Claude Opus 4.8 <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net