零成本搞定本地AI语音生成+识别+克隆

想不到现在的语音模型已经这么强了!以前用 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)

S
sss 2 months ago
能不能出个完整的视频教程,这样更好一点
V
Versun 2 months ago
额,看看吧,主要视频我要花费比较多的时间去弄
2 months ago
博主真厉害,加油!
V
Versun 2 months ago
谢谢!!