host: volume option; docs: voice adjustments beyond speed (volume, Flextalk profile)

This commit is contained in:
Fisto
2026-09-15 13:38:36 +02:00
parent 6f131b1f9e
commit 2ced066de2
4 changed files with 48 additions and 6 deletions
+6
View File
@@ -82,6 +82,12 @@ final file `WatsonUNInstall.dll` is incomplete).
Verified with the corrected DWORD registry: Kerry 0 st = 209 Hz, -6 st = 148 Hz,
+6 st = 250 Hz (clamped at max); Keith 0 st = 119 Hz, +6 st = 170 Hz.
- The wrapper maps semitones as `natural * 2^(st/12)` and clamps to the range.
- volume: available through `ITTSAttributes` (host flag `-V`). Flextalk is linear
(0-65535, default 65535; half is about -6 dB). MSTTS is non-linear (0 = silence,
4096 about -24 dB, 65535+ full scale); treat it as on/off.
- Flextalk per-speaker profile values are applied at voice load; `Expression` was
verified audible (0/59/100 produce different waveforms at equal duration). Changing
them requires a registry edit and re-selecting the voice.
## Decompiled corpora (Ghidra)
+28 -2
View File
@@ -260,10 +260,36 @@ record what the engine needs to interpret, add, or hide._
### Text handling
- SAPI4 is ANSI/CP1252. The wrapper converts UTF-8 to CP1252 and maps emoji and
unmappable characters to spaces. Engine tag parsing is disabled, so input stays plain
text (no SSML), matching the contract.
unmappable characters to spaces. The host passes `TTSDATAFLAG_TAGGED`, so SAPI4 control
tags in the text are enabled at the engine level; tagged input is not part of this
contract and is untested. Plain text (no SSML) is the contract.
- Lines up to 1000 characters are well within engine limits.
### Other voice adjustments (beyond speed)
All voices implement SAPI4 `ITTSAttributes`, so **pitch, speed and volume** exist at the
API level. The Veskslop contract exposes only speed and pitch; volume is available in the
host as `sapi4host -V <value>` and is not sent by Veskslop.
- **Volume** (measured 2026-09-15):
- Flextalk: linear, range 0-65535, default 65535; half (32767) is about -6 dB, 0 is
silence.
- MSTTS: default is 0xFFFFFFFF; 0 is silence, but the response is not linear (for
example 4096 gives about -24 dB while 65535 and larger are full scale). Treat volume
as effectively on/off for MSTTS.
- **Flextalk per-speaker profile** (applied at voice load, not runtime-adjustable):
values live in `HKLM\Software\AT&T\Watson\2.0\FlexTalk\2.0\Speakers\{GUID}` (see
`docs/NOTES.md` for the full list and defaults). `Pitch`/`Speaking Rate` set the natural
voice; **Expression** was verified to change the synthesis audibly (Keith Bell at
Expression 0 / 59 / 100 yields different waveforms with the same duration). Changing a
profile requires a registry edit and re-selecting the voice.
- **MSTTS voice character** is fixed by the `.vce`/`.cfg` data; the engine exposes no
per-voice profile in the registry. Its effect variants (telephone, in Hall, in Stadium,
in Space) are separate voice modes with separate data, exposed as distinct voice IDs
(`mike-telephone`, `mary-hall`, ...), not runtime effects.
- Not exposed by this integration: SSML, prosody/style tags, or SAPI4 attribute
extensions beyond pitch/speed/volume.
### Transport and latency
- Installation is one command: `setup/install.sh` (system dependencies with sudo, wine