156 lines
4.3 KiB
Markdown
156 lines
4.3 KiB
Markdown
# TTS Summary
|
|
|
|
## Available TTS modes (`--tts`)
|
|
|
|
Runtime-supported values in `s2s_pipeline.py`:
|
|
|
|
- `chatTTS` → `chatTTS_handler.py`
|
|
- `facebookMMS` → `facebookmms_handler.py`
|
|
- `pocket` → `pocket_tts_handler.py`
|
|
- `kokoro` → `kokoro_handler.py`
|
|
- `qwen3` → `qwen3_tts_handler.py`
|
|
|
|
Deprecated TTS implementations, including MeloTTS, live in [`../../../archive/TTS`](../../../archive/TTS) and are no longer wired into `s2s_pipeline.py`.
|
|
|
|
## Usage
|
|
|
|
### 1) ChatTTS (`--tts chatTTS`)
|
|
|
|
Primary args prefix: `--chat_tts_*`
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--tts chatTTS \
|
|
--chat_tts_device cuda \
|
|
--chat_tts_stream true \
|
|
--chat_tts_chunk_size 512
|
|
```
|
|
|
|
### 2) Facebook MMS (`--tts facebookMMS`)
|
|
|
|
Primary args prefix: `--facebook_mms_*` plus `--tts_language`
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--tts facebookMMS \
|
|
--facebook_mms_device cuda \
|
|
--tts_language en
|
|
```
|
|
|
|
This handler maps STT language codes (e.g. `en`, `fr`, `es`) to MMS model suffixes (e.g. `eng`, `fra`, `spa`) and reloads the model on language changes.
|
|
|
|
### 3) Pocket TTS (`--tts pocket`)
|
|
|
|
Primary args prefix: `--pocket_tts_*`
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--tts pocket \
|
|
--pocket_tts_voice jean \
|
|
--pocket_tts_device cpu \
|
|
--pocket_tts_sample_rate 16000
|
|
```
|
|
|
|
Available preset voices include:
|
|
`alba`, `marius`, `javert`, `jean`, `fantine`, `cosette`, `eponine`, `azelma`.
|
|
|
|
### 4) Kokoro (`--tts kokoro`)
|
|
|
|
Primary args prefix: `--kokoro_*`
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--tts kokoro \
|
|
--kokoro_device auto \
|
|
--kokoro_voice bm_fable \
|
|
--kokoro_lang_code b
|
|
```
|
|
|
|
Behavior:
|
|
- Uses MLX backend on Apple Silicon (`mlx-community/Kokoro-82M-bf16`)
|
|
- Uses native kokoro pipeline otherwise (`hexgrad/Kokoro-82M`)
|
|
- Can auto-switch voice/language based on STT language code mapping
|
|
|
|
### 5) Qwen3-TTS (`--tts qwen3`)
|
|
|
|
Primary args prefix: `--qwen3_tts_*`
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--tts qwen3 \
|
|
--qwen3_tts_model_name Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice \
|
|
--qwen3_tts_device cuda \
|
|
--qwen3_tts_backend ggml \
|
|
--qwen3_tts_speaker Aiden \
|
|
--qwen3_tts_language auto \
|
|
--qwen3_tts_non_streaming_mode True
|
|
```
|
|
|
|
Behavior:
|
|
- Uses `faster-qwen3-tts` on non-macOS platforms, defaulting to the GGML backend. Pass `--qwen3_tts_backend torch` to use the CUDA-graphs backend instead.
|
|
- Uses `mlx-audio` on Apple Silicon and auto-maps `Qwen/...` model IDs to `mlx-community/...`, defaulting to the `6bit` MLX variant unless the model name already pins a suffix.
|
|
- Supports MLX quantization overrides on Apple Silicon via `--qwen3_tts_mlx_quantization bf16|4bit|6bit|8bit`.
|
|
- Keeps the existing voice-clone/custom-voice/voice-design handler flow intact.
|
|
- Defaults to the CustomVoice model with speaker `Aiden`, so no reference audio is required. Voice-clone/base models can still use `--qwen3_tts_ref_audio`.
|
|
|
|
Install notes for Linux GGML:
|
|
- The default PyPI `qwentts-cpp-python` wheel targets CUDA 12.8.
|
|
- If that wheel does not match your CUDA runtime, install one of the Hugging Face wheelhouse builds before installing `speech-to-speech`.
|
|
|
|
```bash
|
|
pip install "qwentts-cpp-python==0.3.1+cu130" \
|
|
-f https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cu130
|
|
pip install speech-to-speech
|
|
```
|
|
|
|
Available wheelhouse directories include `cu124`, `cu128`, `cu130`, and `cpu`.
|
|
|
|
Example for Apple Silicon using the default 6-bit MLX variant:
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--tts qwen3 \
|
|
--qwen3_tts_model_name Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice \
|
|
--qwen3_tts_speaker Aiden
|
|
```
|
|
|
|
You can override the default and select `bf16`, `4bit`, or `8bit` explicitly:
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--tts qwen3 \
|
|
--qwen3_tts_model_name Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice \
|
|
--qwen3_tts_mlx_quantization 4bit \
|
|
--qwen3_tts_speaker Aiden
|
|
```
|
|
|
|
To benchmark the Apple Silicon MLX variants side by side:
|
|
|
|
```bash
|
|
.venv/bin/python benchmark_tts.py \
|
|
--handlers qwen3 \
|
|
--iterations 3 \
|
|
--qwen3_mlx_quantizations bf16 4bit 6bit 8bit
|
|
```
|
|
|
|
This will run separate benchmark entries for `qwen3[bf16]`, `qwen3[4bit]`, `qwen3[6bit]`, and `qwen3[8bit]`.
|
|
|
|
## Setup
|
|
|
|
### Low-latency GPU setup
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--stt whisper \
|
|
--tts pocket
|
|
```
|
|
|
|
### Apple Silicon setup
|
|
|
|
```bash
|
|
python s2s_pipeline.py \
|
|
--local_mac_optimal_settings
|
|
```
|
|
|
|
`--tts pocket` and `--tts kokoro` are also valid options on macOS.
|