想让 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,属于正常现象

原理简介

语音克隆的流程:

  1. 参考音频 → Whisper 自动转录成文字
  2. 参考音频 → HiggsAudioV2 音频分词器提取声音特征(音色、语调、节奏)
  3. 声音特征 + 目标文字输入模型
  4. 扩散语言模型迭代解码(默认 32 步),生成目标音频 token
  5. 音频 token 解码成波形

简单说就是:用参考音频的声音,说出你给的文字