VOX prosody: NetTTS parser port, wrapper VOX mode, docs
This commit is contained in:
+28
-5
@@ -18,6 +18,8 @@
|
||||
# VESKSLOP_TTS_ECHO mono echo amount 0-100 (default 0)
|
||||
# VESKSLOP_TTS_WORDS 1 = synthesize each word, merge (Flextalk)
|
||||
# VESKSLOP_TTS_WORD_GAP_MS silence between words in ms (0-500)
|
||||
# VESKSLOP_TTS_VOX 1 = VOX prosody, NetTTS-style (Flextalk)
|
||||
# VESKSLOP_TTS_VOX_CLEAN 1 = VOX without the \!wH1/\!wH0 stutter
|
||||
#
|
||||
# Output: 48 kHz mono s16le WAV, trimmed, faded, loudness-normalized.
|
||||
set -eu
|
||||
@@ -49,6 +51,8 @@ HIGHPASS=${VESKSLOP_TTS_HIGHPASS:-40}
|
||||
ECHO=${VESKSLOP_TTS_ECHO:-0}
|
||||
WORDS=${VESKSLOP_TTS_WORDS:-0}
|
||||
WORD_GAP=${VESKSLOP_TTS_WORD_GAP_MS:-120}
|
||||
VOX=${VESKSLOP_TTS_VOX:-0}
|
||||
VOX_CLEAN=${VESKSLOP_TTS_VOX_CLEAN:-0}
|
||||
|
||||
case "$VOICE" in
|
||||
sam) ENGVOICE="Sam" ;;
|
||||
@@ -197,12 +201,30 @@ if [ -n "$SPEAKER_GUID" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# SAPI4 is ANSI/CP1252; transliterate UTF-8 (emoji become '?').
|
||||
# SAPI4 is ANSI/CP1252. VOX mode (Flextalk only) first transforms the text into
|
||||
# vendor tags (\!wH1/\!wH0, \!br, \!sfNN) with setup/vox_parser.py; the parser
|
||||
# works on UTF-8, so it runs before the CP1252 transliteration.
|
||||
TEXT_SRC="$TEXTFILE"
|
||||
if [ "$VOX" = "1" ] && [ -n "$SPEAKER_GUID" ]; then
|
||||
if command -v python3 >/dev/null 2>&1 && [ -f "$ROOT/setup/vox_parser.py" ]; then
|
||||
if [ "$VOX_CLEAN" = "1" ]; then
|
||||
python3 "$ROOT/setup/vox_parser.py" --clean < "$TEXTFILE" > "$TMP/vox.txt"
|
||||
else
|
||||
python3 "$ROOT/setup/vox_parser.py" < "$TEXTFILE" > "$TMP/vox.txt"
|
||||
fi
|
||||
TEXT_SRC="$TMP/vox.txt"
|
||||
else
|
||||
echo "vox mode needs python3 and setup/vox_parser.py" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# transliterate UTF-8 (emoji become '?')
|
||||
if command -v iconv >/dev/null 2>&1; then
|
||||
iconv -f UTF-8 -t WINDOWS-1252//TRANSLIT "$TEXTFILE" > "$TXT" 2>/dev/null \
|
||||
|| cp "$TEXTFILE" "$TXT"
|
||||
iconv -f UTF-8 -t WINDOWS-1252//TRANSLIT "$TEXT_SRC" > "$TXT" 2>/dev/null \
|
||||
|| cp "$TEXT_SRC" "$TXT"
|
||||
else
|
||||
cp "$TEXTFILE" "$TXT"
|
||||
cp "$TEXT_SRC" "$TXT"
|
||||
fi
|
||||
|
||||
HOST="$ROOT/build/sapi4host-winlib.exe"
|
||||
@@ -232,7 +254,8 @@ try_run_host() {
|
||||
|
||||
# Word mode (Flextalk): synthesize each word and merge with silence gaps, which
|
||||
# gives the staccato radio cadence the Half-Life VOX/HEV voices are known for.
|
||||
if [ "$WORDS" = "1" ] && [ -n "$SPEAKER_GUID" ]; then
|
||||
# VOX mode takes precedence: it produces its own cadence with vendor tags.
|
||||
if [ "$WORDS" = "1" ] && [ -n "$SPEAKER_GUID" ] && [ "$VOX" != "1" ]; then
|
||||
GAP=$WORD_GAP
|
||||
case "$GAP" in *[!0-9]*|"") GAP=120 ;; esac
|
||||
[ "$GAP" -gt 500 ] && GAP=500
|
||||
|
||||
Reference in New Issue
Block a user