diff --git a/docs/TTS-DESIGN.md b/docs/TTS-DESIGN.md index e5e3de3..8bdd289 100644 --- a/docs/TTS-DESIGN.md +++ b/docs/TTS-DESIGN.md @@ -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.