https://gitlab.synchro.net/main/sbbs/-/commit/dcb6be63ca06fa49e3557126
Modified Files:
src/doors/termgfx/audio_mgr.c
Log Message:
termgfx: queue looping SFX at 25% so loops mix at one-shot levels
SyncTERM's audio-APC volume is two independent gain stages (ticket #262, confirmed as-designed): the A;Queue volume is baked into the entry at
queue time (0% floors to -60dB, unrecoverable) and A;Volume only moves
the live channel gain, whose percentage form caps at unity. One-shots
carry their level in the queue entry and ride the default -12dB channel
base (sfx_dispatch never sends A;Volume); loops queue an entry and drive
the channel percent up to 0dB -- queueing that entry at 100% therefore
ran looping ambiences up to 12dB (4x) hotter than one-shots of equal
nominal volume. Queue loop entries at 25% (~ -12dB) instead: loops and one-shots now mix at the same level across the whole range, a uniform
-12dB shift with the distance-falloff shape unchanged (and it still
matches the DOS audiolib's linear-amplitude MV_Pan3D curve).
Rewrite the loop_start comment to this model, replacing the "SyncTERM
will not un-mute a dead voice" theory from 2a84663b40 (card-4-shades):
a 0%-queued voice isn't dead, it's -60dB baked, which live percentage
volume can never recover -- the queue-active + A;Volume architecture
stands, only the queue level changes.
No client-cache impact: the queue volume is an A;Queue command
parameter, not sample content, so cached samples play at the corrected
level with no re-upload or version bump.
Validated live over SyncTERM: up-close ambience level (E1L1 projector)
now sits right alongside one-shot SFX.
Co-Authored-By: Claude Fable 5 <
noreply@anthropic.com>
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)