voice declarations: mark Flextalk voices no-pitch; refresh contract snapshot
This commit is contained in:
@@ -64,8 +64,8 @@ The wrapper maps voice IDs (`sam`, `mary`, `mike`, `keith-bell`, `kerry-watson`,
|
|||||||
MSTTS variants), reads `VESKSLOP_TTS_VOICE`, `VESKSLOP_TTS_SPEED` (multiplier) and
|
MSTTS variants), reads `VESKSLOP_TTS_VOICE`, `VESKSLOP_TTS_SPEED` (multiplier) and
|
||||||
`VESKSLOP_TTS_PITCH` (semitones), starts Xvfb when `DISPLAY` is unset, and writes a
|
`VESKSLOP_TTS_PITCH` (semitones), 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).
|
48 kHz mono s16le WAV trimmed, faded and normalized to about -16 LUFS (-3 dBFS true peak).
|
||||||
Flextalk voices ignore pitch (engine limitation); everything else maps as documented in
|
Flextalk voices ignore pitch (engine limitation) and are declared with the `no-pitch`
|
||||||
`docs/TTS-DESIGN.md`.
|
flag; everything else maps as documented in `docs/TTS-DESIGN.md`.
|
||||||
|
|
||||||
## Layout
|
## Layout
|
||||||
|
|
||||||
|
|||||||
+14
-6
@@ -137,10 +137,13 @@ Implemented on the Veskslop side (2026-09-15):
|
|||||||
`VESKSLOP_TTS_PITCH` only when the value is set.
|
`VESKSLOP_TTS_PITCH` only when the value is set.
|
||||||
- The HTTP provider adds `speed` and `pitch` to the request body only when set.
|
- The HTTP provider adds `speed` and `pitch` to the request body only when set.
|
||||||
- The TTS panel has speed and pitch sliders; changes are saved to the daemon preferences.
|
- The TTS panel has speed and pitch sliders; changes are saved to the daemon preferences.
|
||||||
- Command mode advertises voices through `VESKSLOP_TTS_VOICES`
|
- Command mode advertises voices through `VESKSLOP_TTS_VOICES`. Entries are separated by commas or
|
||||||
(`id`, `id|Name`, `id|Name|gender`, or `id|Name|gender|language`, comma separated). While a
|
newlines and use `id`, `id|Name`, `id|Name|gender`, `id|Name|gender|language`, or
|
||||||
custom command is set, the engine's declared voices replace the espeak list, so no misleading
|
`id|Name|gender|language|flags`, where flags are `+`-separated. The `no-pitch` flag marks a voice
|
||||||
espeak entries appear. Reading `/voices` for the HTTP provider is still future work.
|
that ignores pitch; `/api/audio/tts/voices` then reports `supportsPitch: false` and the TTS panel
|
||||||
|
disables the pitch slider. While a custom command is set, the engine's declared voices replace
|
||||||
|
the espeak list, so no misleading espeak entries appear. Reading `/voices` for the HTTP provider
|
||||||
|
is still future work.
|
||||||
|
|
||||||
Do not encode settings into the voice string (for example `anna+speed1.2`). It breaks voice lists
|
Do not encode settings into the voice string (for example `anna+speed1.2`). It breaks voice lists
|
||||||
and is hard to validate.
|
and is hard to validate.
|
||||||
@@ -236,7 +239,8 @@ record what the engine needs to interpret, add, or hide._
|
|||||||
- Mapping implemented in `setup/vekslop-tts.sh`: `speed 1.0` = the voice's natural rate
|
- 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.
|
(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` for MSTTS maps ±12 semitones to engine units `100 ± 6.25·st`, clamped to 50-200.
|
||||||
Pitch is a no-op for Flextalk voices.
|
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.
|
||||||
- `{setting}` is unused; the wrapper reads `VESKSLOP_TTS_SPEED` and
|
- `{setting}` is unused; the wrapper reads `VESKSLOP_TTS_SPEED` and
|
||||||
`VESKSLOP_TTS_PITCH` from the environment when Veskslop later exports them.
|
`VESKSLOP_TTS_PITCH` from the environment when Veskslop later exports them.
|
||||||
|
|
||||||
@@ -299,6 +303,10 @@ _Added 2026-09-15._
|
|||||||
the client's display.
|
the client's display.
|
||||||
- **Voice declarations**: list only usable IDs in `VESKSLOP_TTS_VOICES`. Veskslop hides the
|
- **Voice declarations**: list only usable IDs in `VESKSLOP_TTS_VOICES`. Veskslop hides the
|
||||||
espeak list while a custom command is set, so a missing declaration means an empty voice list,
|
espeak list while a custom command is set, so a missing declaration means an empty voice list,
|
||||||
not a fallback.
|
not a fallback. The list accepts commas or newlines, and the optional `no-pitch` flag tells the
|
||||||
|
UI to grey out the pitch slider for that voice.
|
||||||
|
- **Flextalk pitch**: confirmed that pitch is a no-op for Keith Bell and Kerry Watson. Mark those
|
||||||
|
entries `no-pitch` so users are not offered a control that does nothing. Speed applies to every
|
||||||
|
voice and needs no flag.
|
||||||
- **Licensing**: keep the engine DLLs and voice data local and out of any repository; Veskslop
|
- **Licensing**: keep the engine DLLs and voice data local and out of any repository; Veskslop
|
||||||
never bundles or redistributes them.
|
never bundles or redistributes them.
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ ROOT=$(CDPATH= cd -- "$HERE/.." && pwd)
|
|||||||
export WINEPREFIX=${WINEPREFIX:-$HOME/.wine-microslopsam}
|
export WINEPREFIX=${WINEPREFIX:-$HOME/.wine-microslopsam}
|
||||||
export WINEARCH=win32
|
export WINEARCH=win32
|
||||||
|
|
||||||
VOICES="sam|Sam|male|en,mary|Mary|female|en,mike|Mike|male|en,keith-bell|Keith Bell|male|en,kerry-watson|Kerry Watson|female|en,mike-telephone|Mike (for Telephone)|male|en,mary-telephone|Mary (for Telephone)|female|en,mike-hall|Mike in Hall|male|en,mike-stadium|Mike in Stadium|male|en,mike-space|Mike in Space|male|en,mary-hall|Mary in Hall|female|en,mary-stadium|Mary in Stadium|female|en,mary-space|Mary in Space|female|en"
|
# VESKSLOP_TTS_VOICES entries: id|Name|gender|language[|flags]
|
||||||
|
# `no-pitch` marks voices whose engine ignores pitch (Flextalk).
|
||||||
|
VOICES="sam|Sam|male|en,mary|Mary|female|en,mike|Mike|male|en,keith-bell|Keith Bell|male|en|no-pitch,kerry-watson|Kerry Watson|female|en|no-pitch,mike-telephone|Mike (for Telephone)|male|en,mary-telephone|Mary (for Telephone)|female|en,mike-hall|Mike in Hall|male|en,mike-stadium|Mike in Stadium|male|en,mike-space|Mike in Space|male|en,mary-hall|Mary in Hall|female|en,mary-stadium|Mary in Stadium|female|en,mary-space|Mary in Space|female|en"
|
||||||
|
|
||||||
if [ "${1:-}" = "--voices" ]; then
|
if [ "${1:-}" = "--voices" ]; then
|
||||||
echo "$VOICES"
|
echo "$VOICES"
|
||||||
|
|||||||
Reference in New Issue
Block a user