今天在 GitHub Trending 上看到一个非常有技术深度的项目:OmniVoice,由 k2-fsa 团队开源的零样本多语言 TTS 模型,支持超过 600 种语言的语音克隆与合成,推理速度达到实时的 40 倍。

一、项目概述

OmniVoice 是一个大规模多语言零样本文本转语音(TTS)模型,支持超过 600 种语言——这是目前零样本 TTS 模型中覆盖语言最广的。项目基于一种新颖的扩散语言模型风格架构,能够生成高质量语音,同时保持优越的推理速度。

核心特性包括:

  • 600+ 语言支持:零样本 TTS 领域最广的语言覆盖范围
  • 语音克隆:从短参考音频克隆任意说话人声音
  • 语音设计:通过说话人属性(性别、年龄、音调、方言/口音、耳语等)控制生成声音
  • 细粒度控制:支持非语言符号(如 [laughter])和拼音/音素发音纠正
  • 快速推理:RTF 低至 0.025(比实时快 40 倍)
  • 扩散语言模型架构:简洁、可扩展的设计,兼顾质量与速度

项目已在 HuggingFace 发布预训练模型和在线 Demo,并提供了 Google Colab 笔记本供快速体验。

二、技术原理

架构设计

OmniVoice 采用扩散语言模型风格架构(Diffusion Language Model-style Architecture),这是一种将扩散模型与语言模型范式融合的设计方案。传统 TTS 系统通常基于 Tacotron、FastSpeech 或 VITS 等架构,而 OmniVoice 选择了扩散模型路线,通过迭代去噪过程生成语音特征,再经由声码器转换为最终波形。

这种架构的优势在于:

  1. 生成质量高:扩散模型在生成质量和多样性上优于传统自回归模型
  2. 推理速度快:通过优化扩散步数(默认 32 步,可降至 16 步),RTF 可低至 0.025
  3. 可扩展性强:架构设计简洁清晰,支持多 GPU 批量推理和 FlashInfer 加速

核心技术栈

从 pyproject.toml 可以看出项目的技术选型:

dependencies = [
    "torch>=2.4",
    "torchaudio>=2.4",
    "transformers>=5.3.0",
    "accelerate",
    "pydub",
    "gradio",
    "tensorboardX",
    "webdataset",
    "numpy",
    "soundfile",
    "librosa",
]
  • PyTorch 2.4+:深度学习框架,支持 NVIDIA GPU、Apple Silicon MPS、Intel Arc XPU 三种后端
  • Transformers 5.3+:用于加载 Whisper ASR 模型(自动转录参考音频)
  • Accelerate:多设备推理调度
  • Gradio:Web Demo 界面
  • WebDataset:训练数据加载

三种生成模式

OmniVoice 提供三种语音生成模式,统一通过 model.generate() API 调用:

1. 语音克隆(Voice Cloning):提供参考音频和参考文本,模型提取说话人特征并克隆声音。支持自动转录(省略 ref_text 时用 Whisper ASR 自动识别)。

2. 语音设计(Voice Design):通过属性描述(性别、年龄、音调、口音等)控制生成声音,无需参考音频。支持英语口音(American、British 等)和汉语方言(四川话、陕西话等)。

3. 自动语音(Auto Voice):模型自动选择声音,无需任何参考或指令。

语音克隆 Prompt 复用

一个实用的设计是语音克隆 Prompt 持久化:

# 首次使用:编码参考音频并保存
prompt = model.create_voice_clone_prompt(
    ref_audio="ref.wav", ref_text="Transcription of the reference audio."
)
prompt.save("my_voice.pt")

# 后续会话:直接加载,跳过音频加载和自动转录
from omnivoice import VoiceClonePrompt
prompt = VoiceClonePrompt.load("my_voice.pt")
audio = model.generate(text="Hello again!", voice_clone_prompt=prompt)

这种设计避免了每次推理都重复处理参考音频,特别适合需要反复使用同一声音的场景。

FlashInfer 加速

项目集成了 FlashInfer 内核加速,可实现 2-2.9 倍无损加速:

批次大小基线 RTFFlashInfer RTF加速比
10.08990.04302.1x
1 + CUDA Graph—0.03672.4x
40.03310.01522.2x
80.02980.01152.6x

加速手段包括:序列打包(CFG cond/uncond 对)、融合 RMSNorm/RoPE/GEMM 内核、可选 CUDA Graphs。单流场景推荐启用 CUDA Graphs,批次 ≥4 时普通 FlashInfer 路径已是最优。

三、安装与快速开始

环境要求

  • Python ≥ 3.10
  • PyTorch ≥ 2.4(支持 NVIDIA GPU、Apple Silicon、Intel Arc GPU)

安装步骤

Step 1:安装 PyTorch(按平台选择)

# 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

# Apple Silicon
pip install torch==2.8.0 torchaudio==2.8.0

# Intel Arc GPU (XPU)
pip install torch torchaudio \
    --index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/

Step 2:安装 OmniVoice

# PyPI 稳定版
pip install omnivoice

# 或从 GitHub 源码安装
pip install git+https://github.com/k2-fsa/OmniVoice.git

快速体验

无需写代码,三种方式快速体验:

# 本地 Web UI
omnivoice-demo --ip 0.0.0.0 --port 8001

或访问 HuggingFace Space 在线体验,也可在 Google Colab 中运行。

国内用户如遇 HuggingFace 连接问题,可设置镜像:export HF_ENDPOINT="https://hf-mirror.com"

四、使用方法与实战

语音克隆实战

from omnivoice import OmniVoice
import soundfile as sf
import torch

# 加载模型
model = OmniVoice.from_pretrained(
    "k2-fsa/OmniVoice",
    device_map="cuda:0",
    dtype=torch.float16
)
# Apple Silicon 用户:device_map="mps"
# Intel Arc GPU 用户:device_map="xpu"

# 语音克隆
audio = model.generate(
    text="你好,这是一个零样本语音克隆的测试。",
    ref_audio="ref.wav",
    ref_text="这是参考音频的转录文本。",
)
# 返回 np.ndarray 列表,24kHz 采样率

sf.write("output.wav", audio[0], 24000)

如果不提供 ref_text,模型会自动使用 Whisper ASR 转录参考音频。可通过 asr_model_name 指定本地 Whisper 模型,通过 asr_device 指定 ASR 运行设备。

语音设计实战

# 通过属性描述生成语音
audio = model.generate(
    text="Hello, this is a test of voice design.",
    instruct="female, low pitch, british accent",
)

支持的属性维度:

属性可选值
gendermale / female
agechild → elderly
pitchvery low → very high
stylewhisper
English accentAmerican, British, …
Chinese dialect四川话, 陕西话, …

非语言符号与发音纠正

# 插入笑声等非语言符号
audio = model.generate(
    text="[laughter] You really got me. I didn't see that coming at all."
)

# 中文拼音纠正(多音字)
audio = model.generate(
    text="这批货物打ZHE2出售后他严重SHE2本了,再也经不起ZHE1腾了。"
)

# 英文音素纠正
audio = model.generate(
    text="He plays the [B EY1 S] guitar while catching a [B AE1 S] fish."
)

支持的非语言符号包括:[laughter]、[sigh]、[confirmation-en]、[question-en]、[surprise-ah]、[surprise-oh]、[surprise-wa] 等。

命令行批量推理

# 单条推理
omnivoice-infer \
    --model k2-fsa/OmniVoice \
    --text "This is a test for text to speech." \
    --ref_audio ref.wav \
    --output hello.wav

# 批量推理(支持多 GPU 分发)
omnivoice-infer-batch \
    --model k2-fsa/OmniVoice \
    --test_list test.jsonl \
    --res_dir results/ \
    --batch_size 8 \
    --enable_flashinfer true

批量推理的 JSONL 格式:

{"id": "sample_001", "text": "Hello world", "ref_audio": "/path/to/ref.wav", "ref_text": "Reference transcript", "instruct": "female, british accent", "language_id": "en", "duration": 10.0, "speed": 1.0}

只有 id 和 text 是必填字段。

五、常见问题与解决方案

1. HuggingFace 模型下载失败

国内访问 HuggingFace 可能超时。设置镜像:

export HF_ENDPOINT="https://hf-mirror.com"

2. 参考音频选择建议

  • 使用 3-10 秒的参考音频片段
  • 过长的音频会降低推理速度并可能影响克隆质量
  • 同语言参考音频发音更标准;跨语言克隆会带有参考音频语言的口音

3. 数字读法不正确

阿拉伯数字默认可能逐位读取。启用文本归一化:

audio = model.generate(text="I have 2345 apples.", normalize_text=True)

需要安装额外依赖:pip install "omnivoice[tn]"(基于 WeTextProcessing)。macOS Apple Silicon 上 pynini 无预编译 wheel,需通过 conda 安装:conda install -c conda-forge pynini。

4. Apple Silicon 性能优化

使用 device_map="mps" 调用 Metal Performance Shaders。注意 flash_attn 在 MPS 上不可用,模型会自动回退到 SDPA。

5. 语音设计模式不稳定

语音设计主要在中英文数据上训练,对低资源语言可能产生不稳定结果。如需高质量输出,优先使用语音克隆模式。

六、总结

OmniVoice 在多语言 TTS 领域树立了新的标杆——600+ 语言覆盖、零样本语音克隆、扩散语言模型架构、RTF 0.025 的推理速度,加上 FlashInfer 加速和 Prompt 持久化等工程化设计,使其既能用于研究探索,也具备生产部署的实用性。项目支持 NVIDIA、Apple Silicon、Intel Arc 三大硬件平台,安装门槛低,API 设计统一清晰,是目前开源 TTS 生态中最值得关注的项目之一。

项目地址:https://github.com/k2-fsa/OmniVoice

论文:arXiv:2604.00688

在线体验:HuggingFace Space