想不到现在的语音模型已经这么强了!以前用 ElevenLabs 的 API 总是舍不得放开用,更别提自由克隆音色了。
直到昨天,我抱着试一试的心态,在自己那台 M1 + 16G 内存的老 Mac mini 上部署了 Qwen3 系列的语音模型。结果出乎意料——不仅运行极其丝滑,输出质量也相当惊艳!
搭配mlx-audio,实现本地AI语音生成+识别+克隆,可玩性极高,我配置到小龙虾上,每天给我读日报、代替 Whisper 语音识别、体验非常好。
独乐乐不如众乐乐,今天就来给大家简单复盘一下这个极简的部署过程:
一、安装环境
brew install ffmpeg uv && uv tool install --force "mlx-audio" --prerelease=allow
ffmpeg 处理音频格式,uv 是 Python 包管理器,mlx-audio 是核心(MLX 框架支持 Apple Neural Engine)。
装完验证一下:uv tool list | grep mlx
看到 mlx-audio v0.4.2 就可以了。
二、下载模型
第一次跑命令,模型会自动下载,但因为众所周知的原因,国内访问 HuggingFace 非常缓慢,所以有必要使用 ModelScope 进行手动下载
# 安装 ModelScope
pip install modelscope
# 下载 Qwen3-TTS(用于文字转语音):
modelscope download \
--model mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-8bit
# 下载 Qwen3-ASR(用于语音转文字):
modelscope download \
--model mlx-community/Qwen3-ASR-0.6B-8bit
# 下载 Qwen3-Base(用于音色克隆):
modelscope download \
--model mlx-community/Qwen3-TTS-12Hz-1.7B-Base-bf16
# 查看下载的模型:
ls ~/.cache/modelscope/hub/models/mlx-community/
三、TTS 测试:文字转语音
mlx_audio.tts.generate \
--model ~/.cache/modelscope/hub/models/mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-8bit \
--text "你好,这是本地 TTS 测试,声音自然吗?" \
--output-path ./test_tts.wav
四、ASR 测试:语音转文字
mlx_audio.stt.generate \
--model ~/.cache/modelscope/hub/models/mlx-community/Qwen3-ASR-0.6B-8bit \
--audio ./test_tts.wav \
--output-path ./transcript.txt \
--language zh
实测准确率非常高
五、Base 测试:语音克隆
mlx_audio.tts.generate \
--model ~/.cache/modelscope/hub/models/mlx-community/Qwen3-TTS-12Hz-1.7B-Base-bf16 \
--text "这里填写要说的文字" \
--ref_audio "需要克隆的音色15秒左右.wav" \
--ref_text "克隆音频的纯文字内容,可用ASR模型生成" \
--output_path ./output \
--speed 0.5
高级玩法:自定义音色提示词
mlx_audio.tts.generate \
--model ~/.cache/modelscope/hub/models/mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-8bit \
--text "我是明日香" \
--instruct "a confident teenage girl, flirtatious, seductive edge" \
--output-path ./asuka.wav
很简单,只要使用 instruct 参数,后面写上你的要求就可以随意调了,少女、御姐、正太都能整。
常用 voice prompt 示例:
| 自信少女 | "a confident teenage girl, German-Japanese, EVA pilot" |
| 温柔女声 | "a warm, gentle female voice, slightly soft" |
| 磁性男声 | "a deep, masculine voice with authority" |
| 儿童声音 | "a cheerful little child, about 5 years old" |
ASR:长音频转写
# 处理长音频(自动分片)
mlx_audio.stt.generate \
--model ~/.cache/modelscope/hub/models/mlx-community/Qwen3-ASR-0.6B-8bit \
--audio /path/to/long_audio.m4a \
--output-path ./transcript.txt \
--format txt \
--language zh \
--chunk-duration 30
批量处理
# 批量转换目录下所有音频
for f in *.wav; do
mlx_audio.stt.generate \
--model --model ~/.cache/modelscope/hub/models/mlx-community/Qwen3-ASR-0.6B-8bit \
--audio "$f" \
--output-path "${f%.wav}.txt"
done
常见问题
模型下载失败/超时:配置镜像源
内存不足 (OOM):使用量化模型(如 8bit 版本)
命令找不到:重启终端,或运行 uv tool update-shell
音频格式不支持:先用 ffmpeg -i input.mp3 output.wav 转换
M1/M2 报错:确保 macOS 14.0+,MLX 原生支持 Apple Silicon
模型路径错误:使用绝对路径,或 realpath 命令定位
调试技巧
# 查看详细日志
mlx_audio.tts.generate --verbose ...
创建封装脚本
创建 `mlx-tts.sh` 方便日常使用:
#!/bin/bash
TEXT="${1:-"Hello, Human!"}"
MODEL_DIR=~/.cache/modelscope/hub/models/mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-8bit
OUTPUT_DIR=./voice_output
mkdir -p "$OUTPUT_DIR"
mlx_audio.tts.generate \
--model "$MODEL_DIR" \
--text "$TEXT" \
--instruct "a confident teenage girl with a flirtatious, seductive edge" \
--output-path "$OUTPUT_DIR/output.wav" \
--audio-format wav
echo "已生成: $OUTPUT_DIR/output.wav"
使用:bash mlx-tts.sh "要转换的文字内容"
Comments (4)