想让 AI 用你的声音说话?只需要一段 3 到 10 秒的录音,OmniVoice 就能克隆你的声音,说出任意文字。
OmniVoice 是什么
OmniVoice 是小米 / k2-fsa 团队开发的开源零样本 TTS 模型,支持 600+ 种语言,基于扩散语言模型架构,推理速度极快(RTF 最低 0.025,比实时快 40 倍)。
支持三种模式:
- 语音克隆:提供参考音频,克隆声音说出任意文字
- 语音设计:用文字描述声音(性别、年龄、音调、口音等)
- 自动语音:模型自动选择声音
环境准备
安装 conda 环境
conda create -n omnivoice python=3.11 -y
conda activate omnivoice
安装 PyTorch
# Apple Silicon
pip install torch==2.8.0 torchaudio==2.8.0
# NVIDIA GPU(以 CUDA 12.8 为例)
pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128
安装 OmniVoice
git clone https://github.com/k2-fsa/OmniVoice.git
cd OmniVoice
pip install -e .
下载模型
第一次运行会自动下载。如果在国内连不上 HuggingFace,设置镜像:
export HF_ENDPOINT=https://hf-mirror.com
语音克隆
准备一段参考音频(3~10 秒的中文录音,WAV 格式),然后:
omnivoice-infer \
--model k2-fsa/OmniVoice \
--text "你想让 AI 说的内容" \
--ref_audio ref.wav \
--output output.wav
不需要手动提供参考音频的文字,模型会自动用 Whisper ASR 转录。
Python API
from omnivoice import OmniVoice
import soundfile as sf
import torch
model = OmniVoice.from_pretrained(
"k2-fsa/OmniVoice",
device_map="mps", # Apple Silicon;NVIDIA 用 "cuda:0"
dtype=torch.float16
)
audio = model.generate(
text="你想让 AI 说的内容",
ref_audio="ref.wav",
)
sf.write("output.wav", audio[0], model.sampling_rate)
注意事项
- 参考音频推荐 3~10 秒,太长反而会降低克隆质量
- 中文克隆需要提供中文参考音频,不要用英文音频克隆中文声音
- 如果想要稳定的中文输出,必须用语音克隆模式(提供参考音频),Auto Voice 模式下模型随机选择语言,不可控
- Apple Silicon 上音频分词器不支持 MPS,自动回退到 CPU,属于正常现象
原理简介
语音克隆的流程:
- 参考音频 → Whisper 自动转录成文字
- 参考音频 → HiggsAudioV2 音频分词器提取声音特征(音色、语调、节奏)
- 声音特征 + 目标文字输入模型
- 扩散语言模型迭代解码(默认 32 步),生成目标音频 token
- 音频 token 解码成波形
简单说就是:用参考音频的声音,说出你给的文字。