Qwen3-TTS MLX
Run Qwen3-TTS locally on Apple Silicon (M1/M2/M3/M4) using MLX. Supports 11 languages, 9 built-in voices, voice cloning, and voice design from text descriptions.
When to Use
- - Generate speech fully offline on a Mac
- Produce narration, audiobooks, podcasts, or video voiceovers
- Create multilingual TTS with controllable style and emotion
- Clone any voice from a short audio sample
- Design custom voices from text descriptions
Quick Start
Install
CODEBLOCK0
Basic Usage
CODEBLOCK1
With Style Control
CODEBLOCK2
Model Variants
| Variant | Model | Size | Memory | Use Case |
|---|
| CustomVoice | INLINECODE0 | ~1GB | ~4GB | Built-in voices + style control (recommended) |
| VoiceDesign |
mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-5bit | ~2GB | ~5GB | Create voices from text descriptions |
| Base |
mlx-community/Qwen3-TTS-12Hz-0.6B-Base-4bit | ~1GB | ~4GB | Voice cloning from reference audio |
Supported Languages
| Language | Code | Notes |
|---|
| Auto-detect | INLINECODE3 | Default, detects from text |
| Chinese |
Chinese | Mandarin |
| English |
English | |
| Japanese |
Japanese | |
| Korean |
Korean | |
| French |
French | |
| German |
German | |
| Spanish |
Spanish | |
| Portuguese |
Portuguese | |
| Italian |
Italian | |
| Russian |
Russian | |
Built-in Voices
| Voice | Language | Character |
|---|
| Vivian | Chinese | Female, bright, young |
| Serena |
Chinese | Female, gentle, soft |
| Uncle_Fu | Chinese | Male, authoritative, news anchor |
| Dylan | Chinese | Male, Beijing dialect |
| Eric | Chinese | Male, Sichuan dialect |
| Ryan | English | Male, energetic |
| Aiden | English | Male, clear, neutral |
| Ono_Anna | Japanese | Female |
| Sohee | Korean | Female |
Voice Selection Guide:
| Scenario | Recommended Voice |
|---|
| Chinese news/narration | Uncle_Fu |
| Chinese casual/lively |
Eric |
| Chinese female, professional | Vivian |
| Chinese female, storytelling | Serena |
| English energetic content | Ryan |
| English neutral/educational | Aiden |
| Japanese content | Ono_Anna |
| Korean content | Sohee |
Modes
1) CustomVoice
Use built-in voices with optional emotion/style control via --instruct.
CODEBLOCK3
Style instruction examples:
- -
"calm and warm" - Soft, friendly delivery - INLINECODE16 - Professional broadcast style
- INLINECODE17 - High energy, enthusiastic
- INLINECODE18 - Emotional, somber tone
- INLINECODE19 - Quiet, close-mic feel
2) VoiceDesign
Create a completely new voice by describing it in natural language.
CODEBLOCK4
Voice description examples:
- - INLINECODE20
- INLINECODE21
- INLINECODE22
- INLINECODE23
3) VoiceClone
Clone any voice from a reference audio sample (5-10 seconds recommended).
CODEBLOCK5
Tips for voice cloning:
- - Use clean audio without background noise
- 5-10 seconds of speech works best
- Provide accurate transcript of the reference
- Reference and output language should match
CLI Parameters
| Parameter | Required | Default | Description |
|---|
| INLINECODE24 | Yes | - | Text to synthesize |
| INLINECODE25 |
No | Vivian | Built-in voice (CustomVoice only) |
|
--lang_code | No | auto | Language code |
|
--instruct | No | - | Style control or voice description |
|
--speed | No | 1.0 | Speech speed multiplier |
|
--temperature | No | 0.7 | Sampling temperature (higher = more variation) |
|
--model | No | (per mode) | Override default model |
|
--output | No | - | Output file path |
|
--out-dir | No | ./outputs | Output directory when --output not set |
|
--ref_audio | VoiceClone | - | Reference audio file |
|
--ref_text | VoiceClone | - | Reference audio transcript |
Python API
Using generate_audio (recommended)
CODEBLOCK6
Using Model directly
CODEBLOCK7
VoiceDesign
CODEBLOCK8
VoiceClone
CODEBLOCK9
Batch Processing
Use scripts/batch_dubbing.py for processing multiple lines:
CODEBLOCK10
See references/dubbing_format.md for the JSON format.
Performance
| Metric | Value |
|---|
| Sample rate | 24,000 Hz |
| Real-time factor |
~0.7x (faster than real-time) |
| Peak memory | ~4-6 GB |
| First run | Downloads model (~1-2GB) |
Troubleshooting
| Issue | Solution |
|---|
| Slow generation | Use 4-bit CustomVoice model |
| Unnatural pauses |
Add punctuation, keep sentences short |
| Wrong language detected | Specify
--lang_code explicitly |
| Voice cloning quality | Use cleaner reference audio, accurate transcript |
| Tokenizer warnings | Harmless, can be ignored |
| Out of memory | Close other apps, use 4-bit model |
Qwen3-TTS MLX
在 Apple Silicon(M1/M2/M3/M4)上使用 MLX 本地运行 Qwen3-TTS。支持 11 种语言、9 种内置语音、语音克隆以及通过文本描述设计语音。
使用场景
- - 在 Mac 上完全离线生成语音
- 制作旁白、有声书、播客或视频配音
- 创建具有可控风格和情感的多语言 TTS
- 从短音频样本中克隆任意语音
- 通过文本描述设计自定义语音
快速开始
安装
bash
pip install mlx-audio
brew install ffmpeg
基本用法
bash
python scripts/run_tts.py custom-voice \
--text 你好,欢迎使用本地文本转语音。 \
--voice Ryan \
--output output.wav
带风格控制
bash
python scripts/run_tts.py custom-voice \
--text 突发新闻:本地 AI 模型实现人类级语音。 \
--voice Uncle_Fu \
--instruct 新闻主播语气,冷静且权威 \
--output news.wav
模型变体
| 变体 | 模型 | 大小 | 内存 | 使用场景 |
|---|
| CustomVoice | mlx-community/Qwen3-TTS-12Hz-0.6B-CustomVoice-4bit | ~1GB | ~4GB | 内置语音 + 风格控制(推荐) |
| VoiceDesign |
mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-5bit | ~2GB | ~5GB | 从文本描述创建语音 |
| Base | mlx-community/Qwen3-TTS-12Hz-0.6B-Base-4bit | ~1GB | ~4GB | 从参考音频进行语音克隆 |
支持的语言
| 语言 | 代码 | 备注 |
|---|
| 自动检测 | auto | 默认,从文本中检测 |
| 中文 |
Chinese | 普通话 |
| 英语 | English | |
| 日语 | Japanese | |
| 韩语 | Korean | |
| 法语 | French | |
| 德语 | German | |
| 西班牙语 | Spanish | |
| 葡萄牙语 | Portuguese | |
| 意大利语 | Italian | |
| 俄语 | Russian | |
内置语音
| 语音 | 语言 | 角色 |
|---|
| Vivian | 中文 | 女性,明亮,年轻 |
| Serena |
中文 | 女性,温柔,柔和 |
| Uncle_Fu | 中文 | 男性,权威,新闻主播 |
| Dylan | 中文 | 男性,北京口音 |
| Eric | 中文 | 男性,四川口音 |
| Ryan | 英语 | 男性,充满活力 |
| Aiden | 英语 | 男性,清晰,中性 |
| Ono_Anna | 日语 | 女性 |
| Sohee | 韩语 | 女性 |
语音选择指南:
| 场景 | 推荐语音 |
|---|
| 中文新闻/旁白 | Uncle_Fu |
| 中文休闲/活泼 |
Eric |
| 中文女性,专业 | Vivian |
| 中文女性,讲故事 | Serena |
| 英语充满活力的内容 | Ryan |
| 英语中性/教育 | Aiden |
| 日语内容 | Ono_Anna |
| 韩语内容 | Sohee |
模式
1) CustomVoice
使用内置语音,通过 --instruct 可选控制情感/风格。
bash
python scripts/run_tts.py custom-voice \
--text 这是个令人惊叹的消息! \
--voice Vivian \
--instruct 兴奋且快乐 \
--output excited.wav
风格指令示例:
- - 冷静且温暖 - 柔和、友好的表达
- 新闻主播,权威 - 专业广播风格
- 兴奋且充满活力 - 高能量、热情
- 悲伤且忧郁 - 情感化、低沉语调
- 耳语,亲密 - 安静、近麦克风感觉
2) VoiceDesign
通过自然语言描述创建全新的语音。
bash
python scripts/run_tts.py voice-design \
--text 欢迎收听我们的播客。 \
--instruct 温暖、成熟的男性旁白,低音调且语气柔和 \
--output podcast_intro.wav
语音描述示例:
- - 年轻活泼的女性,高音调
- 年长睿智的男性,深沉共鸣的声音
- 专业女性新闻主播,发音清晰
- 友好的年轻男性,休闲放松
3) VoiceClone
从参考音频样本中克隆任意语音(建议 5-10 秒)。
bash
python scripts/run_tts.py voice-clone \
--text 这是我克隆的语音在说新内容。 \
--ref_audio reference.wav \
--ref_text 参考音频的准确转录文本 \
--output cloned.wav
语音克隆提示:
- - 使用无背景噪音的干净音频
- 5-10 秒的语音效果最佳
- 提供参考音频的准确转录文本
- 参考音频和输出语言应匹配
CLI 参数
| 参数 | 必需 | 默认值 | 描述 |
|---|
| --text | 是 | - | 要合成的文本 |
| --voice |
否 | Vivian | 内置语音(仅 CustomVoice) |
| --lang_code | 否 | auto | 语言代码 |
| --instruct | 否 | - | 风格控制或语音描述 |
| --speed | 否 | 1.0 | 语速倍数 |
| --temperature | 否 | 0.7 | 采样温度(越高变化越大) |
| --model | 否 | (按模式) | 覆盖默认模型 |
| --output | 否 | - | 输出文件路径 |
| --out-dir | 否 | ./outputs | 未设置 --output 时的输出目录 |
| --ref_audio | VoiceClone | - | 参考音频文件 |
| --ref_text | VoiceClone | - | 参考音频转录文本 |
Python API
使用 generate_audio(推荐)
python
from mlxaudio.tts.generate import generateaudio
带风格控制的 CustomVoice
generate_audio(
text=来自 Qwen3-TTS 的问候!,
model=mlx-community/Qwen3-TTS-12Hz-0.6B-CustomVoice-4bit,
voice=Ryan,
lang_code=english,
instruct=友好且温暖,
output_path=.,
file_prefix=hello,
audio_format=wav,
join_audio=True,
verbose=True,
)
直接使用 Model
python
from mlx_audio.tts.utils import load
import soundfile as sf
import numpy as np
加载模型
model = load(mlx-community/Qwen3-TTS-12Hz-0.6B-CustomVoice-4bit)
生成音频(返回生成器)
audio_chunks = []
for chunk in model.generate
customvoice(
text=来自 Qwen3-TTS 的问候。,
speaker=Ryan,
language=english,
instruct=清晰、稳定的表达
):
if hasattr(chunk, audio) and chunk.audio is not None:
audio_chunks.append(chunk.audio)
合并并保存
audio = np.concatenate(audio_chunks)
sf.write(output.wav, audio, 24000)
VoiceDesign
python
from mlxaudio.tts.generate import generateaudio
generate_audio(
text=欢迎收看本期节目。,
model=mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-5bit,
instruct=温暖、友好的女性旁白,中音调,
lang_code=english,
output_path=.,
fileprefix=voicedesign,
join_audio=True,
)
VoiceClone
python
from mlxaudio.tts.generate import generateaudio
generate_audio(
text=克隆语音中的新内容。,
model=mlx-community/Qwen3-TTS-12Hz-0.6B-Base-4bit,
ref_audio=reference.wav,
ref_text=参考音频的转录文本,
output_path=.,
file_prefix=cloned,
join_audio=True,
)
批量处理
使用 scripts/batch_dubbing.py 处理多行文本:
bash
python scripts/batch_dubbing