docs: corrected Flextalk pitch/speed mapping (per-voice naturals, REG_DWORD fix)

This commit is contained in:
Fisto
2026-09-15 13:16:09 +02:00
parent ad81303b6f
commit e79c254e39
+16 -11
View File
@@ -230,17 +230,22 @@ record what the engine needs to interpret, add, or hide._
### Speed and pitch mapping (measured 2026-09-15)
- SAPI4 uses engine units, not multipliers or semitones. Measured on the dev host:
- MSTTS Sam: speed 30-450, natural about 150; pitch 50-200 with a real audible effect
(F0 about 134 Hz at pitch 50, about 199 Hz at pitch 200 on the test phrase).
- Flextalk: speed 50-390, natural about 300 (output with no setting is byte-identical to
`-s 300`); **pitch has no effect** (byte-identical output at pitch 100/150/200), so the
wrapper ignores `pitch` for Keith Bell and Kerry Watson.
- Mapping implemented in `setup/vekslop-tts.sh`: `speed 1.0` = the voice's natural rate
(150 MSTTS, 300 Flextalk), scaled by the multiplier and clamped to the engine range.
`pitch` for MSTTS maps ±12 semitones to engine units `100 ± 6.25·st`, clamped to 50-200.
Pitch is a no-op for Flextalk voices; the wrapper's `--voices` output marks
`keith-bell` and `kerry-watson` with the `no-pitch` flag so the UI disables the slider.
- SAPI4 uses engine units, not multipliers or semitones. Measured on the dev host with a
correctly typed Flextalk install:
- MSTTS Sam: speed 30-450, natural about 150; pitch 50-200 with a real audible effect.
- Flextalk: speed 50-390, natural about 150 (durations at 100/200/300 fit a natural rate
near 140-150); pitch 50-250 works. Measured F0: Kerry 0 st = 209 Hz, -6 st = 148 Hz,
+6 st = 250 Hz (clamped); Keith 0 st = 119 Hz, +6 st = 170 Hz.
- **Correction to the earlier note**: the previous "Flextalk ignores pitch / natural 300"
finding was an artifact of the speaker registry values being stored as `REG_SZ`. The
engine requires `REG_DWORD` for numeric speaker values; with strings it synthesizes a
monotone buzz at maximum pitch. Fixed in `setup/setup-flextalk.sh`; no `no-pitch` flag
is needed.
- Mapping implemented in `setup/vekslop-tts.sh`: `speed 1.0` = natural rate 150 for every
voice, scaled by the multiplier and clamped to the engine range. `pitch` semitones scale
the voice's natural pitch unit by `2^(st/12)` and clamp to the range. Natural units are
about 100 (MSTTS), 106 (Keith Bell) and 186 (Kerry Watson). The engines' F0 response is
approximate, not semitone-calibrated.
- `{setting}` is unused; the wrapper reads `VESKSLOP_TTS_SPEED` and
`VESKSLOP_TTS_PITCH` from the environment when Veskslop later exports them.