时间就是能力等等发展的地盘。——马克思
MLX-Audio:把 Apple Silicon 的“音频算力”榨干的全能库
如果你正在用 Apple Silicon(M1/M2/M3/M4)做音频方向的 AI,那么 MLX-Audio 会让你大呼过瘾。它是基于 Apple 的 MLX 框架构建的“全能音频库”,把文本转语音(TTS)、语音转文本(STT)和语音转语音(STS)装进一个统一的工具箱,强调在苹果芯片上的快与稳,并且做了极扎实的工程细节:模型适配、量化、Web UI、OpenAI 兼容 API、Swift 包、乃至大规模合成的示例工程。
仓库:Blaizzy/mlx-audio
描述:TTS / STT / STS 一站式音频处理库,针对 Apple Silicon 优化
许可证:MIT
技术栈:Python + MLX(Apple),Next.js Web UI,OpenAI 兼容 REST API,Swift 侧包可选
特性简述:
在 Apple Silicon 上加速推理
多模型架构,覆盖 TTS、STT、STS
多语言支持、语音自定义���克隆
语速可调、3D 可视化 Web 界面
OpenAI 兼容 API(方便接入已有应用)
3/4/6/8bit 等量化支持
iOS/macOS 的 Swift 包,走端侧
安装与启动:Python 一体,也支持 uv 工具链
最简单的安装:
如果你只想要命令行工具,可以用 uv 安装:
1 2 3 4 5 uv tool install --force mlx-audio --prerelease=allow uv tool install --force git+https://github.com/Blaizzy/mlx-audio.git --prerelease=allow
开发或需要 Web 界面:
1 2 3 git clone https://github.com/Blaizzy/mlx-audio.gitcd mlx-audio pip install -e ".[dev]"
快速体验:命令行与 Python API
命令行(TTS)
1 2 3 4 5 6 7 8 9 10 11 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
Python API(TTS)
1 2 3 4 5 6 7 8 9 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" )
模型一览:从多语言 TTS 到带说话人分离的 STT
MLX-Audio 支持的模型非常丰富,且针对 Apple Silicon 做了适配与转换:
TTS(文本转语音)
Kokoro:快速高质量多语种 TTS(EN/JA/ZH/FR/ES/IT/PT/HI)
Qwen3-TTS:多语种、支持“情感控制 / Voice Design / 语音克隆”
CSM:会话式 TTS,支持语音克隆
Dia:对话风格 TTS
OuteTTS:高效型 TTS
SparkTTS:EN/ZH
Chatterbox:多语种表达力强
Soprano:高质量 EN
Kokoro 示例:
1 2 3 4 5 6 7 8 9 10 11 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 = 法语
Qwen3-TTS 示例:
1 2 3 4 5 6 7 8 9 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
CSM 语音克隆(CLI):
1 2 3 4 5 mlx_audio.tts.generate \ --model mlx-community/csm-1b \ --text "Hello from Sesame." \ --ref_audio ./reference_voice.wav \ --play
STT(语音转文本)
Whisper(OpenAI):99+ 语言
Parakeet(NVIDIA):英语准确
Voxtral(Mistral)
VibeVoice-ASR(Microsoft 9B):说话人分离 + 时间戳,长音频(最多 60 分钟)→ 结构化 JSON
Whisper 调用:
1 2 3 4 5 6 7 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)
VibeVoice-ASR(带分离与时间戳):
1 2 3 4 5 6 7 8 9 10 11 12 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)for seg in result.segments: print (f"[{seg['start_time' ]:.1 f} -{seg['end_time' ]:.1 f} ] Speaker {seg['speaker_id' ]} : {seg['text' ]} " )
流式转写:
1 2 for text in model.stream_transcribe(audio="speech.wav" , max_tokens=4096 ): print (text, end="" , flush=True )
带上下文热词:
1 2 3 4 5 6 result = model.generate( audio="technical_talk.wav" , context="MLX, Apple Silicon, PyTorch, Transformer" , max_tokens=8192 , temperature=0.0 , )
STT CLI:
1 2 3 4 5 6 7 python -m mlx_audio.stt.generate \ --model mlx-community/VibeVoice-ASR-bf16 \ --audio meeting.wav \ --output-path output \ --format json \ --max-tokens 8192 \ --verbose
STS(语音转语音 / 音频处理)
SAM-Audio:文本引导的声源分离
Liquid2.5-Audio:语音互转、跨模态
MossFormer2 SE:语音增强与降噪
SAM-Audio 分离示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from mlx_audio.sts import SAMAudio, SAMAudioProcessor, save_audio model = SAMAudio.from_pretrained("mlx-community/sam-audio-large" ) processor = SAMAudioProcessor.from_pretrained("mlx-community/sam-audio-large" ) batch = processor( descriptions=["A person speaking" ], audios=["mixed_audio.wav" ], ) result = model.separate_long( batch.audios, descriptions=batch.descriptions, anchors=batch.anchor_ids, chunk_seconds=10.0 , overlap_seconds=3.0 , ode_opt={"method" : "midpoint" , "step_size" : 2 /32 }, ) save_audio(result.target[0 ], "voice.wav" ) save_audio(result.residual[0 ], "background.wav" )
MossFormer2 增强示例:
1 2 3 4 5 from mlx_audio.sts import MossFormer2SEModel, save_audio model = MossFormer2SEModel.from_pretrained("starkdmi/MossFormer2_SE_48K_MLX" ) enhanced = model.enhance("noisy_speech.wav" ) save_audio(enhanced, "clean.wav" , 48000 )
Web 界面与 OpenAI 兼容 API:一边调试一边服务
开启服务:
1 2 3 4 5 6 mlx_audio.server --host 0.0.0.0 --port 8000cd mlx_audio/ui npm install && npm run dev
API 示例(OpenAI 兼容):
1 2 3 4 curl -X POST http://localhost:8000/v1/audio/speech \ -H "Content-Type: application/json" \ -d '{"model": "mlx-community/Kokoro-82M-bf16", "input": "Hello!", "voice": "af_heart"}' \ --output speech.wav
1 2 3 curl -X POST http://localhost:8000/v1/audio/transcriptions \ -F "file=@audio.wav" \ -F "model=mlx-community/whisper-large-v3-turbo-asr-fp16"
量化与模型转换:更小更快,适配 MLX
把 Hugging Face 模型转换为 MLX 并量化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 python -m mlx_audio.convert \ --hf-path prince-canuma/Kokoro-82M \ --mlx-path ./Kokoro-82M-4bit \ --quantize \ --q-bits 4 \ --upload-repo username/Kokoro-82M-4bit python -m mlx_audio.convert \ --hf-path prince-canuma/Kokoro-82M \ --mlx-path ./Kokoro-82M-bf16 \ --dtype bfloat16 \ --upload-repo username/Kokoro-82M-bf16
常见参数:
--hf-path 源模型(HF 或本地)
--mlx-path 输出路径
--quantize、--q-bits(4/6/8)、--q-group-size
--dtype(fp16/bf16/fp32)
--upload-repo(上传到 HF Hub)
Swift 包:端侧 TTS
如果你要在 iOS/macOS 端做 TTS,官方提供了独立仓库:
示例工程:把“圣经”做成有声书
仓库里有一个 bible-audiobook 的例子,作者用 JS/TS 和 bun,把全本《American King James Bible》逐节合成为音频:
总计 31,102 节 → 合成耗时约 28 小时 05 分钟
输出音频总时长约 86 小时 32 分钟 36 秒
设备:Mac mini M4 Pro(12 核、24GB RAM)
说明了 MLX-Audio 在 Apple Silicon 上进行大规模批处理的稳定性与效率;脚本里还集成了 pm2 来增强容错与自动恢复。步骤包括 WAV→MP3 转换、完整性统计等。
环境要求与 ffmpeg
Python 3.10+
Apple Silicon Mac(M1/M2/M3/M4)
MLX 框架
ffmpeg(保存 MP3/FLAC 所需;WAV 无需)
1 2 3 4 5 brew install ffmpeg sudo apt install ffmpeg
为什么选 MLX-Audio
针对 Apple Silicon 做到“跑起来就很快”,尤其适合端侧与小型工作站
一站式覆盖 TTS、STT、STS,且模型生态丰富
Web UI 与 OpenAI 兼容 API 让集成变得轻松
量化与转换打通了 Hugging Face → MLX 的模型迁移链路
Swift 包加成,真正端到端
如果你要在 Mac 上做语音合成、识别、分离、增强的工程化项目,MLX-Audio 给你一个“从脚本到服务,从本地到端侧”的完整路径。