• src/doors/termgfx/audio.c audio.h audio_mgr.c audio_mgr.hsrc/doors/syn

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Jun 28 23:51:28 2026
    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