Kahya TTS 是 Alican Kiraz 基于 OpenBMB VoxCPM2 微调出来的土耳其语文本转语音模型,仓库现在叫 Kızagan-TTS-v1.0。它输出 48 kHz 单声道语音,给一段参考录音就能克隆音色,仓库里还带了一个按句逐条生成音频的推理脚本。Hugging Face 上有一个可以点开就用的 Space 演示。
v1.0 打包的是评测过、已经合并好的 Step 1500 检查点。这次发布没有再微调,也没改权重,新增的是写清楚用法的推理方案、可以直接跑的命令,以及评测结果。
模型与训练来源
| 项目 | 内容 |
|---|---|
| 基础模型 | openbmb/VoxCPM2 |
| 微调检查点 | AlicanKiraz0/Kizagan-TTS-step_1500 |
| 数据集 | AlicanKiraz0/TR-Voice-TTS,私有的土耳其语单说话人语料 |
| 适配方式 | LoRA,rank 64、alpha 64,作用在 LM 与 DiT 的注意力投影上 |
| 发布格式 | 完整合并权重,可以直接加载,不用再挂旧的 LoRA 适配器 |
| 推理精度 / 输出 | BF16 / 48 kHz 单声道 |
在线演示 Space 里的模型约 2.29B 参数,推理代码取自 OpenBMB/VoxCPM 仓库的一个固定版本。作者说原始的训练输入清单和优化器状态没能找回,所以模型卡并没有声称训练过程可以独立复现。
快速上手
模型卡给的命令面向 Linux + NVIDIA CUDA GPU + Python 3.12,VoxCPM 锁定在评测时用的那个源码版本:
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu130
python -m pip install "voxcpm @ git+https://github.com/OpenBMB/VoxCPM.git@f772e498a45fbb5fb8e13fbf9b9c48be9fe33e69" "huggingface_hub==1.30.0"
hf download AlicanKiraz0/Kizagan-TTS-v1.0 --local-dir ./Kizagan-TTS-v1.0
拿一段干净的单声道参考录音克隆音色,再合成新文本:
python ./Kizagan-TTS-v1.0/inference.py \
--model ./Kizagan-TTS-v1.0 \
--reference ./speaker.wav \
--text "Merhaba, yeni bir metni referans sesle okuyorum." \
--output-dir ./Kizagan-voice-clone
每次运行会产出 audio.wav、逐句的 sentence_*.wav 和 metrics.json。脚本固定 CFG 2.0、16 步扩散、随机种子 42,关闭编译、降噪和自动重试,拼接时不加静音、不裁剪、也不做交叉淡化。按模型卡给的命令做冒烟测试,生成了一段 3.36 秒的 48 kHz 音频,可以试听。
声音克隆
Kahya 推理时接收一段参考录音,以此为条件合成新文本。换一段录音不会训练新适配器,也不会改模型权重。参考录音的文字稿是可选的,打 包的 inference.py 只用参考音频。
| 能力 | 使用方式 | 本次发布的验证情况 |
|---|---|---|
| 只用参考音频克隆 | --reference 或 Python 参数 reference_wav_path | 打包命令已经测过,有少量同说话人的听感结果 |
| 长文本保持同一参考 | --sentences-file,每行一句 | 两次长文本听感测试中更受偏好 |
| 参考音频 + 文字稿 | Python 中同时传入 prompt_wav_path 与 prompt_text | 继承自 VoxCPM2 API(上游叫 Ultimate Cloning),只做了功能验证 |
| 带参考的情绪 / 语速引导 | 在文本开头加括号形式的自然语言指令 | 继承的控制格式,没评测风格准确度 |
| 无参考的声音设计 | 在文本开头写声音描述 | 继承的控制格式,没评测设计出来的音色质量 |
| 无参考的普通 TTS | Python generate(text=...) | 继承的 API,没评测默认音色质量 |
| 流式输出音频块 | Python generate_streaming(...) | Python 逐块产出;CLI 保存完整 WAV |
使用时注意几点:
- 用你自己的声音,或者已经拿到授权的录音。单人说话、环境安静、发音清楚,避开背景音乐、多人重叠和削波。评测用的参考音频长 6.175 秒,这只是示例,不是 API 要求的上下限。
- VoxCPM2 内部会把参考音频重采样到 16 kHz,输出是 48 kHz。
- 它的输入是文本,参考录音只用来定音色,不 是语音到语音的变声器。
- 长文本要准备“每行一句”的文件:每一行都从头用同一段原始参考重建缓存,上一句的生成结果不会当成下一句的提示。
实测性能
下面这组数据来自一次固定的开发评测:NVIDIA RTX PRO 6000 Blackwell Workstation Edition(96 GB),CUDA BF16,CFG 2.0,16 步扩散,种子 42,同一段参考音频。只测了两段文本,算不上吞吐承诺。
| 示例 | 句数 | 生成音频 | 调用耗时合计 | 整体 RTF | PyTorch 峰值预留显存 |
|---|---|---|---|---|---|
| 图书馆,151 词 | 12 | 68.16 s | 24.521 s | 0.360 | 6,114 MiB |
| 火车站台,149 词 | 13 | 66.72 s | 24.042 s | 0.360 | 6,114 MiB |
整体 RTF = 调用耗时之和 / 音频时长之和,不算模型加载、文件读写和最后拼接。更多细节见 evaluation/README.md。
听感评测
一位土耳其语听者在两段新的开发文本上对比了“逐句生成”和“整段生成”,A/B 位置做了平衡,响度也对齐:
| 示例 | 逐句生成:自然度 / 相似度 | 整段生成:自然度 / 相似度 | 偏好 |
|---|---|---|---|
| 图书馆 | 5/5、5/5 | 1/5、1/5 | 逐句 |
| 火车站台 | 4/5、5/5 | 1/5、1/5 | 逐句 |
听者反馈说,两段整段生成的输出在接近结尾时质量都掉了。固定 ASR 的词错误数(整段 / 逐句):图书馆文本 1/151 与 0/151,站台文本 2/149 与 2/149。作者强调这些只是给开发做参考的观察,不是群体 MOS,也不能保证换别的文本还是这个效果。
局限
- 微调数据是单说话人语料,听感评测也只针对这个说话人,陌生说话人、口音或其他语言的克隆相似度还没验证。
--text是一次调用,不会自动分句;长段落请用逐句文件。- 脚本不会自动处理土耳其语缩写、数字和有歧义的句子边界,数字得按读法写出来。
- 风格指令遵循、声音设计和流式这些高级模式只检查过能不能跑,没做听感评测。
- 逐句拼接时不加停顿,也不做交叉淡化,句与句之间可能接得不顺。
相关链接
- 模型仓库:AlicanKiraz0/Kahya-TTS-v1.0(现为 Kizagan-TTS-v1.0)
- 在线演示:hugging-apps/kahya-tts-v1
- 基础模型:openbmb/VoxCPM2,上游实现 OpenBMB/VoxCPM
- 技术报告:VoxCPM2 Technical Report
项目作者:Alican Kiraz。基础模型 VoxCPM2 来自 OpenBMB。
