VoxCPM2 上手:从开源语音合成到声音克隆
【免费下载链接】VoxCPMVoxCPM2: Tokenizer-Free TTS for Multilingual Speech Generation, Creative Voice Design, and True-to-Life Cloning项目地址: https://gitcode.com/GitHub_Trending/vo/VoxCPM
VoxCPM2 是一个 Apache-2.0 协议(可免费商用)完全开源的语音合成项目:支持 30 种语言加 9 种中文方言,原生输出 48kHz 音频,既能用文本直接生成语音,也能用一句话描述凭空创造音色,或者拿几秒参考音频克隆某个人的声音。如果你一直在找一个免费的 TTS 工具,同时还想做声音克隆,它要解决的就是这三件事。
装好环境,出第一段声音
一条命令装好
pip install voxcpm环境要求三个:Python ≥ 3.10(且 < 3.13)、PyTorch ≥ 2.5.0、CUDA ≥ 12.0。纯 CPU 也能跑,但速度很慢,建议先用一块至少 8GB 显存的 GPU 试试——VoxCPM2 是 20 亿参数,运行大约占 8GB 显存。如果网络拉不动模型权重,建议先从 ModelScope 把权重下到本地,然后给from_pretrained传本地路径即可。
几行代码听到第一段语音
最核心的调用就这几行(模型入口在 src/voxcpm/core.py,所有功能都围绕generate这一个方法展开):
from voxcpm import VoxCPM import soundfile as sf model = VoxCPM.from_pretrained("openbmb/VoxCPM2", load_denoiser=False) wav = model.generate( text="你好,这是一个开源语音合成演示。", cfg_value=2.0, # 文本忠实度,越高越贴着文本读 inference_timesteps=10, # 扩散步数,越大越精细但越慢 seed=42, # 固定随机种子,结果可复现 ) sf.write("demo.wav", wav, model.tts_model.sample_rate)输出直接是 48kHz 高采样率音频。注意采样率要从model.tts_model.sample_rate取,别自己写死 48000。
不想写代码的话,也可以跑项目自带的演示页面:
python app.py --port 8808然后浏览器打开 localhost:8808,各模式都能点着试。
三种克隆玩法:音色设计、参考克隆、极致克隆
音色设计:一句话造一个新声音
不用找任何参考音频,在文本开头用括号写描述就行:
wav = model.generate( text="(年轻女性,温柔甜美的声音)你好,我是你的语音助手。", cfg_value=2.0, )描述里可以写性别、年龄、音色、情绪、语速,生成出来就是一个"新的人"。建议同一个描述多生成 1~3 次挑最好的,可控生成的结果每次可能不太一样。
参考音频克隆:几秒就够了
有目标人的声音素材时,直接传参考音频路径:
wav = model.generate( text="这是用 VoxCPM2 克隆的演示语音。", reference_wav_path="examples/reference_speaker.wav", )还可以叠加风格指令——把描述写进括号,保留原音色的同时调节语速和情绪:
wav = model.generate( text="(稍快一点,欢快的语气)这是带风格控制的克隆语音。", reference_wav_path="examples/reference_speaker.wav", )极致克隆:连音频带转录一起给
这种模式让模型基于参考音频"接着往下说",所以声音细节还原得最精准。需要提供参考音频,以及它的准确转录文本:
wav = model.generate( text="这是极致克隆的演示。", prompt_wav_path="examples/reference_speaker.wav", prompt_text="参考音频的转录文本", reference_wav_path="examples/reference_speaker.wav", # 可选,提升相似度 )同一份音频同时传给reference_wav_path和prompt_wav_path,相似度最佳。
聊聊"无令牌化"到底是什么意思
VoxCPM2 最大的架构卖点是 tokenizer-free——简单说,就是不用先把声音切成一小块一小块的离散编码再建模(每切一次就丢一点信息),而是直接对着连续的语音表征做生成,所以听感更接近真人说话。
整个流水线分四段:LocEnc 先把音频编码成连续表征,TSLM(文本-语义语言模型,基于 MiniCPM-4 基座)处理文本并产出语义表示,RALM 生成细粒度的声学特征,最后由 LocDiT(局部扩散变换器)用扩散过程把波形合成出来。输出端的 AudioVAE V2 采用非对称编解码,输入 16kHz 的参考音频也能直接输出 48kHz,等于内置了超分。
模型在超过 200 万小时的多语种音频上训练,连续表征让它能捕捉到语气、情绪这些细微信号,这类东西用离散 token 方案很难学全。
效果不对时,先查这三个方向
音质不够好。先把inference_timesteps加到 20,再把cfg_value在 2.0~3.0 之间微调:偏低会更平滑但也容易飘,偏高更贴文本。不满意就重跑一次,需要复现时固定seed。
克隆相似度不高。先查参考音频:建议 3~10 秒,背景干净,有噪音就开降噪(加载时load_denoiser=True,或生成时传denoise=True)。还不行就升级到上面的极致克隆模式,把转录文本也提供给模型。
显存不够。2B 模型大约要 8GB 显存。显存紧张可以传device="cpu"走 CPU(慢但能跑),或者换 VoxCPM-0.5B / 1.5 小模型,代价是只支持中英文。
再往前走:微调和生产部署
LoRA 微调:5~10 分钟音频就够
想把某个人的声音或某个口音固定下来,不用从头训。准备一份 JSONL 数据(每行一条,音频路径 + 文本,格式参考 examples/train_data_example.jsonl),然后跑微调脚本:
python scripts/train_voxcpm_finetune.py \ --config_path conf/voxcpm_v2/voxcpm_finetune_lora.yaml关键参数都集中在 conf/voxcpm_v2/voxcpm_finetune_lora.yaml,不想碰配置文件也可以python lora_ft_webui.py打开 WebUI 里训练和推理。训完之后还支持 LoRA 热切换,运行时加载不同的权重换不同的声音。
部署与推理加速
默认 PyTorch 实现在 RTX 4090 上 RTF 约 0.3(合成 1 秒音频耗时 0.3 秒)。吞吐不够的话有两条路:pip install nano-vllm-voxcpm装 Nano-vLLM-VoxCPM,RTF 能压到约 0.13,支持并发请求和 FastAPI 服务;或者用 vLLM-Omni 起 OpenAI 兼容的/v1/audio/speech接口,现有客户端可以直接接。
要跑在端侧的话,llama.cpp-omni 提供了 VoxCPM2 的 GGUF 权重,CPU / Metal / CUDA / Vulkan 都能跑,Apple M4 Pro 上 Q8_0 版本 RTF 约 1.76,接近准实时。
想翻代码的话,clone 仓库从 src/voxcpm/core.py 读起:
git clone https://gitcode.com/GitHub_Trending/vo/VoxCPM【免费下载链接】VoxCPMVoxCPM2: Tokenizer-Free TTS for Multilingual Speech Generation, Creative Voice Design, and True-to-Life Cloning项目地址: https://gitcode.com/GitHub_Trending/vo/VoxCPM
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考