Files
sherpa-onnx/.github/scripts/test-python-tts-frontends.sh
T
Fangjun Kuang 0b3647632f Remove espeak-ng and piper-phonemize from sherpa-onnx (#4055)
Fixes #3731

espeak-ng and piper-phonemize are no longer built into sherpa-onnx.

Text frontends are now:

- **lexicon** — built in, no extra dependency
- **phonemize** — phonemize outside sherpa-onnx (e.g. [piper-phonemize](https://github.com/csukuangfj/piper-phonemize)) and pass the result in. That library is GPL, so it stays optional: sherpa-onnx is GPL-free after this PR.

## API

- `SherpaOnnxGenerationConfig` gains `phoneme_codepoints` and `tokens` (mutually exclusive alternatives to `text`)
- `data_dir` on the TTS model configs is deprecated and ignored; the ABI slot is kept
- all bindings updated: C/C++, Python, Java, Kotlin, Go, Rust, C#, Swift, Pascal, Dart/Flutter, node-addon, WASM, HarmonyOS
2026-10-20 11:09:04 +08:00

163 lines
7.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Tests every python-api-examples/test-offline-tts-*.py example.
#
# These cover the two text-frontend paths that replaced the removed espeak-ng
# support:
#
# * *-lexicon.py -- pass a lexicon file, no external phonemizer needed
# * *-phonemize.py -- phonemize outside sherpa-onnx (piper_phonemize,
# pypinyin, misaki) and pass phoneme_codepoints
# * *-tokens.py -- same as *-phonemize.py but pass token strings via
# GenerationConfig.tokens (sherpa-onnx adds the
# bos/pad/eos markers itself)
#
# Requires: piper_phonemize, pypinyin, misaki[zh], kaldifst, soundfile
#
# Note: misaki keeps its Chinese dependencies behind the "zh" extra, so
# "misaki[zh]" (not bare "misaki") is required for `from misaki import zh`.
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/common.sh"
log() {
# This function is from espnet
local fname=${BASH_SOURCE[1]##*/}
echo -e "$(date '+%Y-%m-%d %H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*"
}
export GIT_CLONE_PROTECTION_ACTIVE=false
echo "EXE is $EXE"
echo "PATH: $PATH"
python3 -m pip install --upgrade soundfile
python3 -m pip install --upgrade pypinyin 'misaki[zh]' kaldifst
python3 -m pip install --upgrade piper_phonemize -f https://k2-fsa.github.io/icefall/piper_phonemize.html
# Import exactly what the examples import -- bare "import misaki" does NOT
# exercise misaki.zh, which is where the extras-gated deps (cn2an, jieba,
# pypinyin-dict) are needed.
python3 -c "
import kaldifst
import numpy
import soundfile
import piper_phonemize
from pypinyin import Style, lazy_pinyin
from pypinyin.contrib.tone_convert import to_finals_tone3, to_initials
from misaki import zh
print('phonemizer deps OK')
"
# test waves are saved in ./tts
mkdir -p ./tts
LEXICON=https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/lexicon-en-us.txt
VOCOS_22=https://github.com/k2-fsa/sherpa-onnx/releases/download/vocoder-models/vocos-22khz-univ.onnx
VOCOS_16=https://github.com/k2-fsa/sherpa-onnx/releases/download/vocoder-models/vocos-16khz-univ.onnx
VOCOS_24=https://github.com/k2-fsa/sherpa-onnx/releases/download/vocoder-models/vocos_24khz.onnx
run() {
# run <example.py> <wav produced by the example>
local ex=$1
local wav=$2
log "Run $ex"
python3 ./python-api-examples/$ex
mv -v "$wav" ./tts/
}
log "------------------------------------------------------------"
log "coqui (character frontend)"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-coqui-de-css10.tar.bz2
run test-offline-tts-coqui-phonemize.py test-coqui-phonemize.wav
rm -rf vits-coqui-de-css10
log "------------------------------------------------------------"
log "inflect (vits-ext)"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-inflect-en-nano-v2.tar.bz2
download $LEXICON
run test-offline-tts-inflect-lexicon.py test-inflect-lexicon.wav
run test-offline-tts-inflect-phonemize.py test-inflect-phonemize.wav
rm -rf vits-inflect-en-nano-v2 lexicon-en-us.txt
log "------------------------------------------------------------"
log "kitten"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/kitten-micro-en-v0_8.tar.bz2
download $LEXICON
run test-offline-tts-kitten-lexicon.py test-kitten-lexicon.wav
run test-offline-tts-kitten-phonemize.py test-kitten-phonemize.wav
rm -rf kitten-micro-en-v0_8 lexicon-en-us.txt
log "------------------------------------------------------------"
log "kokoro en"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/kokoro-en-v0_19.tar.bz2
download $LEXICON
run test-offline-tts-kokoro-en-lexicon.py test-kokoro-en-lexicon.wav
run test-offline-tts-kokoro-en-phonemize.py test-kokoro-en-phonemize.wav
rm -rf kokoro-en-v0_19 lexicon-en-us.txt
log "------------------------------------------------------------"
log "kokoro multi-lang"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/kokoro-multi-lang-v1_0.tar.bz2
run test-offline-tts-kokoro-multilang-lexicon.py test-kokoro-multilang-lexicon.wav
run test-offline-tts-kokoro-multilang-phonemize.py test-kokoro-multilang-phonemize.wav
rm -rf kokoro-multi-lang-v1_0
log "------------------------------------------------------------"
log "matcha en"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/matcha-icefall-en_US-ljspeech.tar.bz2
download $VOCOS_22
download $LEXICON
run test-offline-tts-matcha-en-lexicon.py test-matcha-en-lexicon.wav
run test-offline-tts-matcha-en-phonemize.py test-matcha-en-phonemize.wav
rm -rf matcha-icefall-en_US-ljspeech lexicon-en-us.txt
log "------------------------------------------------------------"
log "matcha zh"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/matcha-icefall-zh-baker.tar.bz2
run test-offline-tts-matcha-zh-lexicon.py test-matcha-zh-lexicon.wav
run test-offline-tts-matcha-zh-phonemize.py test-matcha-zh-phonemize.wav
rm -rf matcha-icefall-zh-baker
log "------------------------------------------------------------"
log "matcha zh-en"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/matcha-icefall-zh-en.tar.bz2
download $VOCOS_16
download $LEXICON
run test-offline-tts-matcha-zh-en-lexicon.py test-matcha-zh-en-lexicon.wav
run test-offline-tts-matcha-zh-en-phonemize.py test-matcha-zh-en-phonemize.wav
rm -rf matcha-icefall-zh-en vocos-16khz-univ.onnx lexicon-en-us.txt
log "------------------------------------------------------------"
log "piper (vits)"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-piper-en_US-amy-low.tar.bz2
download $LEXICON
run test-offline-tts-piper-lexicon.py test-piper-lexicon.wav
run test-offline-tts-piper-phonemize.py test-piper-phonemize.wav
run test-offline-tts-piper-tokens.py test-piper-tokens.wav
rm -rf vits-piper-en_US-amy-low lexicon-en-us.txt
log "------------------------------------------------------------"
log "zipvoice"
log "------------------------------------------------------------"
download_and_extract https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/sherpa-onnx-zipvoice-distill-int8-zh-en-emilia.tar.bz2
download $VOCOS_24
download $LEXICON
run test-offline-tts-zipvoice-lexicon.py test-zipvoice-lexicon.wav
run test-offline-tts-zipvoice-phonemize.py test-zipvoice-phonemize.wav
rm -rf sherpa-onnx-zipvoice-distill-int8-zh-en-emilia vocos_24khz.onnx lexicon-en-us.txt
# the 22 kHz vocoder is shared by matcha-en and matcha-zh
rm -f vocos-22khz-univ.onnx
log "All test-offline-tts examples passed"
ls -lh ./tts/