找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4632

积分

0

好友

600

主题
发表于 15 小时前 | 查看: 22| 回复: 0

你给 AI 三秒钟你的声音,它就能用你的声音说 600 多种语言。不是调几个参数、训练几天的那种“克隆”——是零样本的,给音频就出结果。

今天 GitHub 热榜上的 OmniVoice 做的就是这件事。k2-fsa 团队出品,Apache 协议,Python 实现,支持语音克隆、语音设计、批量推理。RTF(实时因子)低至 0.025,意味着生成 10 秒的语音只需要 0.25 秒。

01 它在解决什么问题

语音合成(TTS)这个领域,过去几年发展很快,但有几个老大难问题一直没解决好。

第一,语言覆盖太窄。 主流 TTS 模型支持几十种语言算多的了。全球有 7000 多种语言,大量小语种根本没有可用的 TTS 工具。少数民族语言、方言、濒危语言,在数字世界里几乎是沉默的。

第二,语音克隆门槛高。 想克隆一个特定的声音,传统方法需要大量训练数据(几十分钟到几小时的干净录音),还需要几天的微调训练。普通用户根本玩不转。

第三,可控性差。 大多数 TTS 系统给你什么声音就是什么声音。你想要“一个低沉的英国口音男声”,没法直接描述,只能从预设列表里碰运气。

第四,推理速度慢。 扩散模型质量好但速度慢。生成一句 5 秒的话要等好几秒甚至十几秒,实时对话根本用不了。

OmniVoice 的方案是用一个扩散语言模型风格的架构,同时解决这四个问题。600+ 语言覆盖、3 秒音频零样本克隆、属性描述式语音设计、RTF 0.025 的推理速度。

02 核心原理:扩散语言模型风格架构

OmniVoice 的技术架构跟传统 TTS 不太一样。它不是用经典的 Tacotron 或 VITS 架构,而是用了一种叫“扩散语言模型风格”的设计。

这个设计的核心思路是:把语音生成过程拆成多步去噪。从一个纯噪声开始,每一步去掉一点噪声,逐步逼近目标语音。跟 Stable Diffusion 生成图片的逻辑类似,只不过这里生成的是音频。

为什么这个架构能同时做到高质量和快速度?

传统 TTS 模型要么质量好但慢(自回归模型,一个 Token 一个 Token 生成),要么快但质量一般(并行解码但缺乏细粒度控制)。扩散模型理论上质量好,但传统扩散需要几百步去噪,太慢了。

OmniVoice 的创新在于把扩散步数压到 32 步(快速模式 16 步),同时用语言模型风格的架构做条件建模。这意味着模型能理解文本语义(像 LLM 那样),又能在少量扩散步内生成高质量音频。

零样本克隆的原理。 你给一段 3-10 秒的参考音频,模型提取其中的声音特征(音色、语调、节奏模式),编码成一个“声音提示词”。这个提示词作为条件注入扩散过程,引导生成的音频带有参考声音的特征。

不需要微调,不需要训练,一次前向推理就出结果。

跨语言克隆。 参考音频是中文,目标文本是英语,模型能克隆你的声音说英语。但有个特点:生成语音会带有参考音频语言的口音。比如用中文参考音频说英语,会带中文口音。这在某些场景下是 bug,在某些场景下是 feature。

03 三种生成模式

OmniVoice 支持三种声音生成方式,覆盖不同需求。

语音克隆(Voice Cloning)。 给一段参考音频,克隆其声音特征。这是最稳定的模式,因为模型主要在克隆任务上训练。

你可以手动提供参考音频的文字转录,也可以省略——模型会自动调用 Whisper ASR 做转录。克隆出来的声音可以跨会话复用:编码一次存成 .pt 文件,下次直接加载,不用重新处理音频。

还支持细粒度控制。文本里插入 [laughter] 标签,生成的语音会在对应位置笑。插入 [sigh],会叹气。中文可以用拼音加声调数字纠正发音,英文可以用 CMU 音标字典覆盖默认读音。

语音设计(Voice Design)。 不需要参考音频,直接用文字描述你想要的声音。支持的属性包括性别(male/female)、年龄段(child 到 elderly)、音调(very low 到 very high)、风格(whisper)、英语口音(American、British 等)、汉语方言(四川话、陕西话等)。

属性可以自由组合。比如 "female, low pitch, british accent" 会生成一个低音调的英国口音女声。不过语音设计目前主要在中英文数据上训练,其他语言可能不稳定。

自动语音(Auto Voice)。 不提供任何声音参考或描述,模型自动选一个声音。适合快速原型验证或批量生成不需要特定音色的场景。

04 怎么部署

OmniVoice 的部署需要 Python 环境和一块 GPU。支持三种 GPU 平台。

NVIDIA GPU(推荐)。 需要先装 PyTorch,版本和 CUDA 对应。

pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 \
    --extra-index-url https://download.pytorch.org/whl/cu128
pip install omnivoice

Apple Silicon(M1/M2/M3/M4)。 不需要 CUDA,直接装 CPU 版 PyTorch,用 MPS 后端加速。

pip install torch==2.8.0 torchaudio==2.8.0
pip install omnivoice

Intel Arc GPU。 通过 PyTorch 的 XPU 后端支持。已在 Arc A310(4GB)和 Arc Pro B50(16GB)上测试通过。flash_attn 不可用,自动回退到 SDPA。

pip install torch torchaudio \
    --index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/
pip install omnivoice

不想装环境? 直接用 HuggingFace Space 在线体验,或者打开 Google Colab 一键运行,零配置。

国内用户如果下载 HuggingFace 模型慢,设置镜像地址即可:export HF_ENDPOINT="https://hf-mirror.com"

05 怎么用

部署好后,有三种使用方式。

方式一:Web 界面。 一条命令启动 Gradio Web UI。

omnivoice-demo --ip 0.0.0.0 --port 8001

浏览器打开 localhost:8001 ,界面上可以直接上传参考音频、输入文本、选模式、调参数,点击生成。适合非技术用户或快速试用。

方式二:命令行。 三种模式各一条命令。

语音克隆:

omnivoice-infer \
    --model k2-fsa/OmniVoice \
    --text "你好,这是语音克隆测试。" \
    --ref_audio ref.wav \
    --ref_text "这是参考音频的文字内容。" \
    --output output.wav

语音设计:

omnivoice-infer \
    --model k2-fsa/OmniVoice \
    --text "你好,这是语音设计测试。" \
    --instruct "female, low pitch, british accent" \
    --output output.wav

自动语音:

omnivoice-infer \
    --model k2-fsa/OmniVoice \
    --text "你好,这是自动语音测试。" \
    --output output.wav

方式三:Python API。 最灵活的方式,适合集成到自己的项目里。

from omnivoice import OmniVoice
import soundfile as sf
import torch

model = OmniVoice.from_pretrained(
    "k2-fsa/OmniVoice",
    device_map="cuda:0",
    dtype=torch.float16
)

# 语音克隆
audio = model.generate(
    text="Hello, this is a test of zero-shot voice cloning.",
    ref_audio="ref.wav",
    ref_text="Transcription of the reference audio.",
)

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

输出是 24kHz 采样率的 numpy 数组,可以直接保存为 wav 文件。

复用克隆声音。 把参考音频编码一次,存下来,以后直接加载。

prompt = model.create_voice_clone_prompt(
    ref_audio="ref.wav",
    ref_text="参考音频的文字内容。"
)
prompt.save("my_voice.pt")

# 新会话中直接加载
from omnivoice import VoiceClonePrompt
prompt = VoiceClonePrompt.load("my_voice.pt")
audio = model.generate(text="用我的声音说新内容。", voice_clone_prompt=prompt)

06 批量推理与加速

需要大规模生成语音时,OmniVoice 提供了批量推理和多 GPU 分发。

omnivoice-infer-batch \
    --model k2-fsa/OmniVoice \
    --test_list test.jsonl \
    --res_dir results/

输入是一个 JSONL 文件,每行一个任务。只有 idtext 是必填的,其余可选。

{"id":"001","text":"第一段文字","ref_audio":"ref.wav","ref_text":"参考文本","speed":1.0}
{"id":"002","text":"第二段文字","instruct":"male, british accent"}
{"id":"003","text":"第三段文字"}

FlashInfer 加速。 装 FlashInfer 内核可以无损加速 2-2.9 倍。原理是把 CFG 的条件/非条件对做序列打包,融合 RMSNorm/RoPE/GEMM 内核,可选 CUDA Graph。

单卡 H100 上,batch=8 + FlashInfer 的 RTF 是 0.0115,意味着生成 1 小时的音频只需要 41 秒。batch=1 + CUDA Graph 的 RTF 是 0.0367,适合实时对话场景。

07 一些实用技巧

参考音频的选择。 用 3-10 秒的干净录音。太短克隆效果差,太长会拖慢推理且可能降低质量。避免背景音乐和噪声。

数字读法。 默认情况下 "123" 可能被逐字读出。传 normalize_text=True 会自动把数字转成文字("one hundred twenty-three"),需要额外装 pip install "omnivoice[tn]" 。中文和英文用 WeTextProcessing,其他语言用 num2words。

跨语言克隆的口音问题。 如果要标准发音,用目标语言的参考音频。比如要让克隆声音说标准英语,就用英语参考音频。用中文参考音频说英语,会带中文口音。

控制语速和时长。 speed 参数控制语速(大于 1.0 加速,小于 1.0 减速)。 duration 参数固定输出时长(秒),优先级高于 speed

08 谁在做这个项目

OmniVoice 来自 k2-fsa 团队。这个团队在语音领域深耕多年,也是 Sherpa-ONNX(端侧语音识别/合成框架)和 Icefall(K2 语音识别训练方案)的作者。

论文已发表在 arXiv 上,核心贡献者包括 Zhu Han、Ye Lingxuan、Kang Wei、Yao Zengwei 等,Daniel Povey 也在作者列表中。Daniel Povey 是语音识别领域的泰斗级人物,Kaldi 的主要作者。

社区活跃,已有生态项目基于 OmniVoice 做扩展。整个项目完全开源,代码托管在 GitHub 上。

09 伦理与限制

项目方明确声明:禁止用于未经授权的语音克隆、冒充、欺诈或任何非法用途。用户需遵守当地法律法规。

技术限制方面:语音设计模式目前只在中英文数据上训练,其他语言可能不稳定。跨语言克隆会带口音。低资源语言的生成质量取决于训练数据量。

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

Apache 协议,Python 实现,支持 NVIDIA / Apple Silicon / Intel Arc 三种 GPU 平台,在线试用和 Colab 零配置可用。

如果你需要多语言语音合成、语音克隆,或者想给自己的应用加 TTS 能力,这个项目是目前语言覆盖最广的开源选择。




上一篇:PyMeasure:用Python实现科学测量自动化与实时数据可视化
下一篇:嵌入式AI编程工具环境怎么搭:Cursor、Claude Code、Codex 接入 STM32CubeIDE 与 ESP-IDF
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-9-14 19:22 , Processed in 0.322720 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表