基于 Apple MLX 框架构建的最佳音频处理库,为 Apple Silicon 提供快速高效的文本转语音 (TTS)、语音转文本 (STT) 和语音转语音 (STS) 功能。
pip install mlx-audio
从 pypi 安装最新发布版:
uv tool install --force mlx-audio --prerelease=allow
从 github 安装最新代码:
uv tool install --force git+https://github.com/Blaizzy/mlx-audio.git --prerelease=allow
git clone https://github.com/Blaizzy/mlx-audio.git
cd mlx-audio
pip install -e ".[dev]"
# 基础 TTS 生成
mlx_audio.tts.generate --model mlx-community/Kokoro-82M-bf16 --text 'Hello, world!' --lang_code a
# 选择语音并调整语速
mlx_audio.tts.generate --model mlx-community/Kokoro-82M-bf16 --text 'Hello!' --voice af_heart --speed 1.2 --lang_code a
# 立即播放音频
mlx_audio.tts.generate --model mlx-community/Kokoro-82M-bf16 --text 'Hello!' --play --lang_code a
# 保存到指定目录
mlx_audio.tts.generate --model mlx-community/Kokoro-82M-bf16 --text 'Hello!' --output_path ./my_audio --lang_code a
from mlx_audio.tts.utils import load_model
# 加载模型
model = load_model("mlx-community/Kokoro-82M-bf16")
# 生成语音
for result in model.generate("Hello from MLX-Audio!", voice="af_heart"):
print(f"Generated {result.audio.shape[0]} samples")
# result.audio 包含 mx.array 格式的波形
| 模型 | 描述 | 语言 | 仓库 |
|---|---|---|---|
| Kokoro | 快速、高质量的多语言 TTS | EN, JA, ZH, FR, ES, IT, PT, HI | mlx-community/Kokoro-82M-bf16 |
| Qwen3-TTS | 阿里巴巴的多语言 TTS,支持语音设计 | ZH, EN, JA, KO, + 更多 | mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-bf16 |
| CSM | 支持语音克隆的对话语音模型 | EN | mlx-community/csm-1b |
| Dia | 专注于对话的 TTS | EN | mlx-community/Dia-1.6B-fp16 |
| OuteTTS | 高效的 TTS 模型 | EN | mlx-community/OuteTTS-1.0-0.6B-fp16 |
| Spark | SparkTTS 模型 | EN, ZH | mlx-community/Spark-TTS-0.5B-bf16 |
| Chatterbox | 富有表现力的多语言 TTS | EN, ES, FR, DE, IT, PT, PL, TR, RU, NL, CS, AR, ZH, JA, HU, KO | mlx-community/chatterbox-fp16 |
| Soprano | 高质量 TTS | EN | mlx-community/Soprano-1.1-80M-bf16 |
| Ming Omni TTS (BailingMM) | 支持语音克隆、风格控制及语音/音乐/事件生成的多模态生成 | EN, ZH | mlx-community/Ming-omni-tts-16.8B-A3B-bf16 |
| Ming Omni TTS (Dense) | 轻量级密集版 Ming Omni,用于语音克隆和风格控制 | EN, ZH | mlx-community/Ming-omni-tts-0.5B-bf16 |
| 模型 | 描述 | 语言 | 仓库 |
|---|---|---|---|
| Whisper | OpenAI 的鲁棒 STT 模型 | 99+ 种语言 | mlx-community/whisper-large-v3-turbo-asr-fp16 |
| Distil-Whisper | 蒸馏版快速 Whisper 变体 | EN | distil-whisper/distil-large-v3 |
| Qwen3-ASR | 阿里巴巴的多语言 ASR | ZH, EN, JA, KO, + 更多 | mlx-community/Qwen3-ASR-1.7B-8bit |
| Qwen3-ForcedAligner | 词级音频对齐 | ZH, EN, JA, KO, + 更多 | mlx-community/Qwen3-ForcedAligner-0.6B-8bit |
| Parakeet | NVIDIA 的高精度 STT | EN (v2), 25 种欧洲语言 (v3) | mlx-community/parakeet-tdt-0.6b-v3 |
| Voxtral | Mistral 的语音模型 | 多种 | mlx-community/Voxtral-Mini-3B-2507-bf16 |
| Voxtral Realtime | Mistral 的 4B 流式 STT | 多种 | 4bit, fp16 |
| VibeVoice-ASR | Microsoft 的 9B ASR,支持说话人日志和时间戳 | 多种 | mlx-community/VibeVoice-ASR-bf16 |
| Canary | NVIDIA 的多语言 ASR,支持翻译 | 25 种欧洲语言 + RU, UK | README |
| Moonshine | Useful Sensors 的轻量级 ASR | EN | README |
| MMS | Meta 的大规模多语言 ASR,支持适配器 | 1000+ | README |
| Granite Speech | IBM 的 ASR + 语音翻译 | EN, FR, DE, ES, PT, JA | README |
| 模型 | 描述 | 语言 | 仓库 |
|---|---|---|---|
| Sortformer v1 | NVIDIA 的端到端说话人日志 (最多 4 个说话人) | 语言无关 | mlx-community/diar_sortformer_4spk-v1-fp32 |
| Sortformer v2.1 | NVIDIA 的流式说话人日志,支持 AOSC 压缩 | 语言无关 | mlx-community/diar_streaming_sortformer_4spk-v2.1-fp32 |
查看 Sortformer README 了解 API 详情、流式示例和模型转换。
| 模型 | 描述 | 用例 | 仓库 |
|---|---|---|---|
| SAM-Audio | 文本引导的源分离 | 提取特定声音 | mlx-community/sam-audio-large |
| Liquid2.5-Audio* | 语音转语音、文本转语音和语音转文本 | 语音交互 | mlx-community/LFM2.5-Audio-1.5B-8bit |
| MossFormer2 SE | 语音增强 | 降噪 | starkdmi/MossFormer2_SE_48K_MLX |
| DeepFilterNet (1/2/3) | 语音增强 | 噪声抑制 | mlx-community/DeepFilterNet-mlx |
Kokoro 是一个快速、多语言的 TTS 模型,包含 54 种语音预设。
from mlx_audio.tts.utils import load_model
model = load_model("mlx-community/Kokoro-82M-bf16")
# 使用不同语音生成
for result in model.generate(
text="Welcome to MLX-Audio!",
voice="af_heart", # 美式女声
speed=1.0,
lang_code="a" # 美式英语
):
audio = result.audio
可用语音:
- 美式英语: af_heart, af_bella, af_nova, af_sky, am_adam, am_echo, 等。
- 英式英语: bf_alice, bf_emma, bm_daniel, bm_george, 等。
- 日语: jf_alpha, jm_kumo, 等。
- 中文: zf_xiaobei, zm_yunxi, 等。
语言代码:
| 代码 | 语言 | 备注 |
|------|----------|------|
| a | 美式英语 | 默认 |
| b | 英式英语 | |
| j | 日语 | 需要 pip install misaki[ja] |
| z | 普通话 | 需要 pip install misaki[zh] |
| e | 西班牙语 | |
| f | 法语 | |
阿里巴巴最先进的多语言 TTS,支持语音克隆、情感控制和语音设计功能。
from mlx_audio.tts.utils import load_model
model = load_model("mlx-community/Qwen3-TTS-12Hz-0.6B-Base-bf16")
results = list(model.generate(
text="Hello, welcome to MLX-Audio!",
voice="Chelsie",
language="English",
))
audio = results[0].audio # mx.array
查看 Qwen3-TTS README 了解语音克隆、CustomVoice、VoiceDesign 以及所有可用模型。
mlx_audio.tts.generate \
--model mlx-community/Ming-omni-tts-16.8B-A3B-bf16 \
--prompt "Please generate speech based on the following description.\n" \
--text "This is a quick Ming Omni test." \
--lang_code en \
--output_path audio_io \
--file_prefix ming_basic \
--verbose
查看 Ming Omni TTS README 了解 CLI 和 Python 示例,以及 Ming Omni Dense README 了解 mlx-community/Ming-omni-tts-0.5B-bf16 的工作流程。
使用参考音频样本克隆任何语音:
mlx_audio.tts.generate \
--model mlx-community/csm-1b \
--text "Hello from Sesame." \
--ref_audio ./reference_voice.wav \
--play
from mlx_audio.stt.generate import generate_transcription
result = generate_transcription(
model="mlx-community/whisper-large-v3-turbo-asr-fp16",
audio="audio.wav",
)
print(result.text)
阿里巴巴的多语言语音模型,用于转录和词级对齐。
from mlx_audio.stt import load
# 语音识别
model = load("mlx-community/Qwen3-ASR-0.6B-8bit")
result = model.generate("audio.wav", language="English")
print(result.text)
# 词级强制对齐
aligner = load("mlx-community/Qwen3-ForcedAligner-0.6B-8bit")
result = aligner.generate("audio.wav", text="I have a dream", language="English")
for item in result:
print(f"[{item.start_time:.2f}s - {item.end_time:.2f}s] {item.text}")
查看 Qwen3-ASR README 了解 CLI 用法、所有模型及更多示例。
Microsoft 的 90 亿参数语音转文本模型,支持说话人日志和时间戳。支持长音频(最长 60 分钟)并输出结构化 JSON。
from mlx_audio.stt.utils import load
model = load("mlx-community/VibeVoice-ASR-bf16")
# 基础转录
result = model.generate(audio="meeting.wav", max_tokens=8192, temperature=0.0)
print(result.text)
# [{"Start":0,"End":5.2,"Speaker":0,"Content":"Hello everyone, let's begin."},
# {"Start":5.5,"End":9.8,"Speaker":1,"Content":"Thanks for joining today."}]
# 访问解析后的片段
for seg in result.segments:
print(f"[{seg['start_time']:.1f}-{seg['end_time']:.1f}] Speaker {seg['speaker_id']}: {seg['text']}")
流式转录:
# 在生成时流式输出 token
for text in model.stream_transcribe(audio="speech.wav", max_tokens=4096):
print(text, end="", flush=True)
使用上下文 (热词/元数据):
result = model.generate(
audio="technical_talk.wav",
context="MLX, Apple Silicon, PyTorch, Transformer",
max_tokens=8192,
temperature=0.0,
)
CLI 用法:
```bash