• src/doors/termgfx/test/test_stream_volume.csrc/doors/syncretro/README.

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Fri Aug 14 19:14:44 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/8c09a2f494a1ce9ec0df1166
    Added Files:
    src/doors/termgfx/test/test_stream_volume.c
    Modified Files:
    src/doors/syncretro/README.md main.c syncretro_audio.c syncretro_audio.h test_audio_bytes.c test_audio_bytes.golden src/doors/termgfx/audio_stream.c audio_stream.h src/doors/termgfx/test/CMakeLists.txt
    Log Message:
    syncretro: step the volume in percent, and fix a mute with no way out

    The channel level stepped in 6 dB increments and snapped to full mute
    below -36 dB, but applied that snap in BOTH directions: from the -60 dB
    mute floor, '+' landed at -54 dB, still inside the snap zone, and bounced straight back to mute. Volume down was a one-way trip. The same trap
    caught any configured level inside -36..-60 dB, audible but unable to
    climb out. Reported by nelgin on IRC; the behavior dates from b226d59546 (lite-11-farm, 2026-07-17), which made the stream dB-native.

    The ladder a player walks now lives in the door, in percent: it holds
    0..100, steps by 10, and converts at the seam. That is the unit the
    sysop's [audio] volume knob is already in and the unit the on-screen
    readout now uses ("Volume 70%", "Volume 0% (off)"), so nothing a player
    or a sysop touches speaks decibels, and the keys reach as far per press
    as SynchroLand's do. A clamped 0..100 ladder is symmetric by
    construction, which leaves the failure no place to hide.

    termgfx accordingly takes an absolute level, termgfx_stream_set_volume(),
    and loses termgfx_stream_volume_step() along with the snap-to-mute floor
    that existed only to shorten a dB ladder no door offers now. Zero percent converts to the silence floor, which is a real mute: the door stops
    encoding and sending, flushes the channel, and re-primes the cushion on
    the way back up.

    A new termgfx unit test covers the level and its clamps, and a step added
    to syncretro's audio-transcript golden pins the round trip on the wire, including that chunks fed at 0% emit nothing at all. That re-prime path
    off mute was unreachable before this, so it had never run.

    The door keys the README lists never included '+' and '-' at all.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net