Views
No views yet
Arabic · Cantonese · Chinese · Czech · Dutch · English · Finnish · French · German · Greek · Hindi · Indonesian · Italian · Japanese · Korean · Polish · Portuguese · Romanian · Russian · Spanish · Thai · Turkish · Ukrainian · VietnameseAnhui · Fujian · Gansu · Guizhou · Hebei · Henan · Hubei · Hunan · Jiangxi · Liaoning · Minnan · Ningxia · Shaanxi · Shandong · Shanghai · Shanxi · Sichuan · Tianjin · Wenzhou · Wu · Yunnan1git clone https://github.com/FireRedTeam/FireRedTTS3.git
2cd FireRedTTS3pip install -r requirements.txthf CLI:1pip install "huggingface_hub[cli]"
2hf download FireRedTeam/FireRedTTS3 --local-dir pretrained_models/1pip install modelscope
2modelscope download --model FireRedTeam/FireRedTTS3 --local_dir pretrained_models/FastText language-id model and let it detect the language automatically.1# Download FastText language-id model (lid.176) with:
2curl -L -o fireredtts3/utils/llm_tn/models/lid.176.ftz https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.ftzwetext TN tool, which supports Chinese and English, other languages (e.g. Japanese, Russian) undergo only basic cleaning. For full language TN support, enable the LLM-based TN by passing use_llm_tn=True when initializing FireRedTTS3. It reads its config from a .env file:1cp .env.example .env
2
3# Then fill in your values
4LLM_TN_API_URL=https://api.deepseek.com/chat/completions # any OpenAI-compatible endpoint
5LLM_TN_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
6LLM_TN_MODEL=deepseek-v4-flash # or any model >= 30B1import torch
2import torchaudio
3from fireredtts3.core import FireRedTTS3
4
5# Init model: choose the text-normalization frontend here.
6# use_wetext=True -> local weText TN (zh/en only)
7# use_llm_tn=True -> LLM-based TN (all languages, needs .env / API creds)
8# both False -> no TN frontend built
9tts = FireRedTTS3(
10 "pretrained_models",
11 use_wetext=True,
12 use_llm_tn=False,
13)
14
15language = None # Automatic detection if pass None
16prompt_text = "<prompt audio text>"
17prompt_audio, prompt_audio_sr = torchaudio.load('prompt.wav')
18text = "今天天气很好,我们一起去公园散步吧。"
19
20gen_audio, gen_audio_sr = tts.generate(
21 language=language,
22 prompt_text=prompt_text,
23 prompt_audio=prompt_audio,
24 prompt_audio_sr=prompt_audio_sr,
25 text=text,
26 do_tn=True, # whether to run the frontend TN on this call
27)
28torchaudio.save("gen.wav", gen_audio.cpu(), gen_audio_sr)
29
30# Supported languages and dialects
31
32# Multilingual languages:
33# Arabic, Cantonese, Chinese, Czech, Dutch, English, Finnish,
34# French, German, Greek, Hindi, Indonesian, Italian, Japanese,
35# Korean, Polish, Portuguese, Romanian, Russian, Spanish, Thai,
36# Turkish, Ukrainian, Vietnamese
37
38# Multi-dialect:
39# ZH_Anhui, ZH_Fujian, ZH_Gansu, ZH_Guizhou, ZH_Hebei, ZH_Henan,
40# ZH_Hubei, ZH_Hunan, ZH_Jiangxi, ZH_Liaoning, ZH_Minnan, ZH_Ningxia,
41# ZH_Shaanxi, ZH_Shandong, ZH_Shanghai, ZH_Shanxi, ZH_Sichuan,
42# ZH_Tianjin, ZH_Wenzhou, ZH_Wu, ZH_Yunnanfireredtts3.core.FireRedTTS3Instruct.1import torch
2import torchaudio
3from fireredtts3.core import FireRedTTS3Instruct
4
5# Init the Instruct model (same text-frontend options as FireRedTTS3)
6instruct = FireRedTTS3Instruct(
7 "pretrained_models",
8 use_wetext=True,
9 use_llm_tn=False, # set True to enable LLM-based TN (all languages)
10)
11
12# ---- 1) Voice Design Inference ---------------
13# Generate a brand-new voice from a natural-language description only;
14# no reference audio is needed. The model first writes a voice-attribute
15# plan (returned as gen_text), then renders the audio.
16instruction = "一个年轻女性的温柔嗓音,语速稍慢,带一点俏皮。"
17text = "今天天气很好,我们一起去公园散步吧。"
18gen_audio, gen_audio_sr, gen_text = instruct.generate_voice_design(
19 instruction=instruction,
20 text=text,
21)
22torchaudio.save("design.wav", gen_audio.cpu(), gen_audio_sr)
23print("Voice plan:", gen_text)
24
25# ---- 2) Semantic Edit ------------------------
26# Content-level editing: insertion / deletion / substitution by instruction.
27# Returns the edited audio and the model's rewritten text with edit mask.
28audio_in, audio_in_sr = torchaudio.load("input.wav")
29gen_audio, gen_audio_sr, gen_text = instruct.generate_semantic_edit(
30 instruction="Replace 'cats' with 'dogs'.",
31 audio_in=audio_in,
32 audio_in_sr=audio_in_sr,
33)
34torchaudio.save("edit_semantic.wav", gen_audio.cpu(), gen_audio_sr)
35print("Edited text:", gen_text)
36
37# ---- 3) Acoustic Edit ------------------------
38# Acoustic-attribute editing: speed / pitch / volume. The instruction must
39# follow the trained templates below (free-form phrasing is not supported):
40# speed -> "adjust the speed to X" X in [0.5, 2.0], step 0.1
41# pitch -> "shift the pitch by N step(s)" N in {-6,...,-1,1,...,+6}
42# volume -> "adjust the volume to X" X in [0.3, 2.0], step 0.1
43gen_audio, gen_audio_sr = instruct.generate_acoustic_edit(
44 instruction="adjust the speed to 0.5x",
45 audio_in=audio_in,
46 audio_in_sr=audio_in_sr,
47)
48torchaudio.save("edit_acoustic.wav", gen_audio.cpu(), gen_audio_sr)
49
50# ---- 4) ICL zero-shot voice cloning using the Instruct model ----
51gen_audio, gen_audio_sr = instruct.generate_tts(
52 prompt_text="<prompt audio text>",
53 prompt_audio=prompt_audio,
54 prompt_audio_sr=prompt_audio_sr,
55 text="<text to be synthesized>",
56)
57torchaudio.save("gen_instruct.wav", gen_audio.cpu(), gen_audio_sr)| Model | Test-EN WER/SIM | Test-ZH CER/SIM | Test-Hard CER/SIM | Avg WER/SIM |
|---|---|---|---|---|
| CosyVoice3-1.5B | 2.22 / 72.0 | 1.12 / 78.1 | 5.83 / 75.8 | 3.06 / 75.3 |
| DiTAR | 1.69 / 73.5 | 1.02 / 75.3 | – / – | – / – |
| F5-TTS | 2.00 / 67.0 | 1.53 / 76.0 | 8.67 / 71.3 | 4.10 / 71.4 |
| FireRedTTS-2 | 1.95 / 66.5 | 1.14 / 73.6 | 8.98 / 70.3 | 4.02 / 70.1 |
| IndexTTS2 | 2.23 / 70.6 | 1.03 / 76.5 | 7.12 / 75.5 | 3.46 / 74.2 |
| MegaTTS3 | 2.79 / 77.1 | 1.52 / 79.0 | – / – | – / – |
| MiniMax-Speech | 1.65 / 69.2 | 0.83 / 78.3 | – / – | – / – |
| Qwen3-TTS | 1.23 / 71.7 | 1.22 / 77.0 | 6.76 / 74.8 | 3.07 / 74.5 |
| Seed-TTS | 2.25 / 76.2 | 1.12 / 79.6 | 7.59 / 77.6 | 3.65 / 77.8 |
| VibeVoice | 3.04 / 68.9 | 1.16 / 74.4 | – / – | – / – |
| VoxCPM2 | 1.84 / 75.3 | 0.97 / 79.5 | 8.13 / 75.3 | 3.65 / 76.7 |
| dots.tts (Pretrain) | 1.80 / 77.0 | 0.97 / 80.4 | 6.65 / 78.8 | 3.14 / 78.7 |
| FireRedTTS3-Base | 1.64 / 77.2 | 1.01 / 80.9 | 6.50 / 78.4 | 3.04 / 78.8 |
| Language | Minimax | ElevenLabs | VoxCPM2 | FishAudio S2 | dots.tts (Pretrain) | FireRedTTS3 |
|---|---|---|---|---|---|---|
| Arabic | 1.67 | 1.67 | 13.05 | 3.50 | 37.91 | 1.75 |
| Cantonese | 34.11 | 51.51 | 38.58 | 30.67 | 37.91 | 40.32 |
| Chinese | 2.25 | 16.03 | 1.14 | 0.73 | 1.08 | 0.91 |
| Czech | 3.88 | 2.11 | 24.13 | 2.84 | 5.05 | 3.17 |
| Dutch | 1.14 | 0.80 | 0.91 | 0.99 | 1.20 | 1.15 |
| English | 2.16 | 2.34 | 2.29 | 1.62 | 1.06 | 2.12 |
| Finnish | 4.67 | 2.96 | 2.63 | 3.33 | 3.44 | 3.10 |
| French | 4.10 | 5.22 | 4.53 | 3.05 | 3.82 | 5.28 |
| German | 1.91 | 0.57 | 0.68 | 0.55 | 1.03 | 0.69 |
| Greek | 2.02 | 0.99 | 2.84 | 5.74 | 2.97 | 1.24 |
| Hindi | 6.96 | 5.83 | 19.70 | 14.64 | 14.32 | 7.02 |
| Indonesian | 1.24 | 1.06 | 1.08 | 1.46 | 2.71 | 1.42 |
| Italian | 1.54 | 1.74 | 1.56 | 1.27 | 3.16 | 2.28 |
| Japanese | 3.52 | 10.65 | 4.63 | 2.76 | 7.16 | 3.60 |
| Korean | 1.75 | 1.87 | 1.96 | 1.18 | 5.30 | 2.42 |
| Polish | 1.42 | 0.77 | 1.14 | 1.26 | 2.72 | 1.22 |
| Portuguese | 1.88 | 1.33 | 1.94 | 1.14 | 1.64 | 1.79 |
| Romanian | 2.88 | 1.35 | 21.58 | 10.74 | 3.36 | 1.93 |
| Russian | 4.28 | 3.88 | 3.63 | 2.40 | 3.64 | 3.28 |
| Spanish | 1.03 | 1.08 | 1.44 | 0.91 | 0.96 | 1.21 |
| Thai | 2.70 | 73.94 | 2.96 | 4.23 | 7.45 | 1.87 |
| Turkish | 1.52 | 0.70 | 0.82 | 0.87 | 5.45 | 0.92 |
| Ukrainian | 1.08 | 1.00 | 6.32 | 2.30 | 1.61 | 0.55 |
| Vietnamese | 0.88 | 73.42 | 3.31 | 7.41 | 3.85 | 0.86 |
| Average | 3.77 | 10.95 | 6.79 | 4.40 | 6.60 | 3.75 |
| Language | Minimax | ElevenLabs | VoxCPM2 | FishAudio S2 | dots.tts (Pretrain) | FireRedTTS3 |
|---|---|---|---|---|---|---|
| Arabic | 73.6 | 70.6 | 79.1 | 75.0 | 77.5 | 78.9 |
| Cantonese | 77.8 | 67.0 | 83.5 | 80.5 | 84.7 | 83.9 |
| Chinese | 78.0 | 67.7 | 82.5 | 81.6 | 82.3 | 84.2 |
| Czech | 79.6 | 68.5 | 78.3 | 79.8 | 83.8 | 86.1 |
| Dutch | 73.8 | 68.0 | 80.8 | 73.0 | 81.4 | 84.3 |
| English | 75.6 | 61.3 | 85.4 | 79.7 | 86.9 | 86.8 |
| Finnish | 83.5 | 75.9 | 89.0 | 81.9 | 88.0 | 89.9 |
| French | 62.8 | 53.5 | 73.5 | 69.8 | 78.2 | 81.0 |
| German | 73.3 | 61.4 | 80.3 | 76.7 | 79.5 | 83.3 |
| Greek | 82.6 | 73.3 | 86.0 | 79.5 | 87.6 | 89.3 |
| Hindi | 81.8 | 73.0 | 85.6 | 82.1 | 84.5 | 87.2 |
| Indonesian | 72.9 | 66.0 | 80.0 | 76.3 | 80.8 | 83.3 |
| Italian | 69.9 | 57.9 | 78.0 | 74.7 | 84.5 | 83.6 |
| Japanese | 77.6 | 73.8 | 82.8 | 79.6 | 83.1 | 82.8 |
| Korean | 77.6 | 70.0 | 83.3 | 81.7 | 84.3 | 86.6 |
| Polish | 80.2 | 72.9 | 88.4 | 81.9 | 87.3 | 89.8 |
| Portuguese | 80.5 | 71.1 | 83.7 | 78.1 | 83.1 | 86.3 |
| Romanian | 80.9 | 69.9 | 79.7 | 73.3 | 86.2 | 86.2 |
| Russian | 76.1 | 67.6 | 81.1 | 79.0 | 83.0 | 84.7 |
| Spanish | 76.2 | 61.5 | 83.1 | 77.6 | 83.9 | 86.3 |
| Thai | 80.0 | 58.8 | 84.0 | 78.6 | 83.8 | 83.3 |
| Turkish | 77.9 | 59.6 | 87.1 | 83.5 | 87.4 | 86.6 |
| Ukrainian | 73.0 | 64.7 | 79.8 | 74.7 | 80.5 | 79.8 |
| Vietnamese | 74.3 | 36.9 | 80.6 | 74.0 | 80.7 | 81.3 |
| Average | 76.6 | 65.5 | 82.3 | 78.0 | 83.5 | 84.8 |
| Model | ZH APS↑ | DSD↑ | RP↑ | EN APS↑ | DSD↑ | RP↑ |
|---|---|---|
| MOSS-VoiceGenerator | 71.6 | 72.5 | 61.3 | 58.8 | 71.8 | 61.6 |
| VoiceSculptor-VD | 74.6 | 63.5 | 62.0 | – | – | – |
| Ming-Omni-TTS-16B-A3B | 84.6 | 70.7 | 56.0 | – | – | – |
| Qwen3-TTS-VD | 83.7 | 81.7 | 65.8 | 76.4 | 81.4 | 64.2 |
| FireRedTTS3-Instruct | 85.8 | 82.0 | 69.7 | 80.7 | 82.3 | 72.0 |
| Task | Setting | Metric | Ming-UniAudio-Edit zh | en | FireRedTTS3-Instruct zh | en |
|---|---|---|---|---|
| Deletion | basic | WER (%)↓ | 11.89 | 14.85 | 10.51 | 14.46 |
| SIM↑ | 0.78 | 0.76 | 0.78 | 0.79 | ||
| ACC (%)↑ | 100.00 | 82.22 | 100.00 | 97.78 | ||
| no-edit WER (%)↓ | 11.49 | 24.26 | 10.30 | 23.97 | ||
| open | WER (%)↓ | 22.92 | 27.60 | 16.31 | 18.62 | |
| SIM↑ | 0.81 | 0.74 | 0.81 | 0.78 | ||
| ACC (%)↑ | 82.92 | 85.00 | 89.32 | 89.50 | ||
| no-edit WER (%)↓ | 17.50 | 35.21 | 11.69 | 27.08 | ||
| Insertion | basic | WER (%)↓ | 3.42 | 6.63 | 3.62 | 6.84 |
| SIM↑ | 0.83 | 0.79 | 0.83 | 0.83 | ||
| ACC (%)↑ | 80.00 | 71.43 | 81.18 | 76.40 | ||
| no-edit WER (%)↓ | 3.52 | 17.70 | 3.80 | 18.23 | ||
| open | WER (%)↓ | 3.89 | 7.59 | 4.79 | 9.05 | |
| SIM↑ | 0.83 | 0.79 | 0.84 | 0.83 | ||
| ACC (%)↑ | 79.31 | 62.31 | 79.31 | 65.83 | ||
| no-edit WER (%)↓ | 4.10 | 18.84 | 5.22 | 20.22 | ||
| Substitution | basic | WER (%)↓ | 4.52 | 8.99 | 2.92 | 5.63 |
| SIM↑ | 0.82 | 0.78 | 0.83 | 0.80 | ||
| ACC (%)↑ | 78.62 | 59.78 | 87.42 | 75.42 | ||
| no-edit WER (%)↓ | 4.63 | 19.28 | 3.19 | 17.05 | ||
| open | WER (%)↓ | 4.56 | 7.64 | 3.52 | 6.54 | |
| SIM↑ | 0.83 | 0.77 | 0.83 | 0.80 | ||
| ACC (%)↑ | 76.62 | 65.62 | 86.15 | 71.48 | ||
| no-edit WER (%)↓ | 4.75 | 18.39 | 3.85 | 18.42 | ||
| Average | basic+open | WER (%)↓ | 8.53 | 12.22 | 6.97 | 10.22 |
| SIM↑ | 0.82 | 0.77 | 0.82 | 0.80 | ||
| ACC (%)↑ | 82.91 | 71.06 | 87.27 | 78.91 | ||
| no-edit WER (%)↓ | 7.67 | 22.28 | 6.49 | 20.90 |
| Task | Metric | Ming-UniAudio-Edit ZH | EN | FireRedTTS3-Instruct ZH | EN |
|---|---|---|---|
| Speed Alteration | WER(%)↓ | 5.88 | 17.53 | 2.27 | 4.75 |
| SIM↑ | 0.66 | 0.57 | 0.80 | 0.71 | |
| RDE(%)↓ | 6.36 | 5.92 | 4.35 | 4.29 | |
| Pitch Alteration | WER(%)↓ | 7.45 | 13.37 | 2.34 | 2.94 |
| SIM↑ | 0.36 | 0.24 | 0.51 | 0.44 | |
| Volume Alteration | WER(%)↓ | 1.71 | 1.35 | 1.69 | 1.26 |
| SIM↑ | 0.86 | 0.80 | 0.92 | 0.90 | |
| RAE(%)↓ | 14.9 | 11.7 | 3.58 | 4.44 |
1@article{fireredtts3,
2 title = {FireRedTTS3: Unified Speech Generation and Editing with Semantically Enriched Speech Representations},
3 author = {FireRed Team},
4 journal = {arXiv preprint},
5 year = {2026},
6}