Sync wrapper with Veskslop: streaming/crunch modes, vox/hev voice IDs

The Veskslop integration copy had grown word streaming
(VESKSLOP_TTS_STREAM, stream gain), 1990s crunch filters
(VESKSLOP_TTS_CRUNCH[_BITS|_RATE]), echo timing/level, and first-class
vox/hev voice IDs with preset-aware default metadata. Merge those back
into the standalone repo, keeping the tuned VOX preset (pitch 0, rate 15,
head size 34, lowering 50) in the preset and in the published defaults.

Update the wrapper regression test to the tuned registry values, add
__pycache__ to .gitignore, and document the new variables, voice IDs,
placeholder set and the word-mode-over-VOX precedence in README, NOTES
and TTS-DESIGN.
This commit is contained in:
Fisto
2026-09-22 13:55:28 +02:00
parent 3c896bac4d
commit de4631fe54
6 changed files with 207 additions and 26 deletions
+11 -3
View File
@@ -73,8 +73,8 @@ Options: `-v` voice, `-t` text, `-o` output WAV, `-p` pitch, `-s` speed, `-V` vo
export VESKSLOP_TTS_CMD="$PWD/setup/veskslop-tts.sh {out} {text_file}"
export VESKSLOP_TTS_VOICES="$(setup/veskslop-tts.sh --voices)"
The wrapper maps voice IDs (`sam`, `mary`, `mike`, `keith-bell`, `kerry-watson`, plus the
MSTTS variants), reads `VESKSLOP_TTS_VOICE`, `VESKSLOP_TTS_SPEED` (multiplier),
The wrapper maps voice IDs (`sam`, `mary`, `mike`, `keith-bell`, `kerry-watson`, `vox`,
`hev`, plus the MSTTS variants), reads `VESKSLOP_TTS_VOICE`, `VESKSLOP_TTS_SPEED` (multiplier),
`VESKSLOP_TTS_PITCH` (semitones) and `VESKSLOP_TTS_EXPRESSION` (0-100, Flextalk voices
only), starts Xvfb when `DISPLAY` is unset, and writes a 48 kHz mono s16le WAV trimmed,
faded and normalized to about -16 LUFS (-3 dBFS true peak).
@@ -95,10 +95,17 @@ so the first word is not gated; tune with `VESKSLOP_TTS_HUM_MS` (0 = off),
**Half-Life presets** (Keith Bell): `VESKSLOP_TTS_PRESET=vox` applies the Valve VOX
profile (pitch 0, rate 15, head size 34, lowering 50) and enables VOX prosody;
`VESKSLOP_TTS_PRESET=hev` is a starting point for the HEV suit voice. The VOX values were
`VESKSLOP_TTS_PRESET=hev` is a starting point for the HEV suit voice. The `vox` and `hev`
voice IDs select these directly. The VOX values were
tuned against the game's word assets with `tools/vox_compare.py`; details in
`docs/TTS-DESIGN.md`.
`VESKSLOP_TTS_CRUNCH` (`hl90`, `hl90hq`, `telephone`, `adpcm`, `crush`) adds 1990s lossy
character to the output; `VESKSLOP_TTS_CRUNCH_BITS`/`_RATE` override its bit depth and
sample rate. `VESKSLOP_TTS_STREAM=1` makes word mode write the WAV as it goes (no
measurement pass; `VESKSLOP_TTS_STREAM_GAIN_DB` sets the gain). Echo timing and level are
`VESKSLOP_TTS_ECHO_DELAY_MS` and `VESKSLOP_TTS_ECHO_LEVEL`.
## Layout
- `host/sapi4host.c` — host: voice select, pitch/speed, text -> WAV
@@ -109,6 +116,7 @@ tuned against the game's word assets with `tools/vox_compare.py`; details in
- `setup/inf2reg.py` — INF AddReg -> `.reg` converter
- `setup/run.sh` — run helper (prefix + Xvfb)
- `setup/veskslop-tts.sh` — Veskslop command-provider wrapper (post-processing included)
- `setup/test-wrapper.sh` — wrapper regression test (stubbed Wine/host, no prefix needed)
- `setup/vox_parser.py` — NetTTS-style VOX prosody encoder (Flextalk voices)
- `tools/vox_compare.py` — reference-vs-synthesis metrics for preset tuning
- `docs/NOTES.md` — registry/CLSID facts, runtime RE notes, gotchas