MeloVC 是一个修改自 MeloTTS 的文本转语音(TTS)项目,专注于高质量的中英双语语音合成,并通过 Speaker Embedding 技术实现了零样本(Zero-Shot)声音克隆。
与原始 MeloTTS 不同,本项目不再使用 speaker_id,而是通过提取任意一段参考音频的声纹(Speaker Embedding)来控制生成语音的音色和风格。
-
🆕 Mamba 文本编码器版本(实验性更新) 本项目新增了一个 基于 Mamba(State Space Model)的文本编码器变体,用于替换原有的 Transformer Text Encoder。 该版本在保持整体声学架构不变的前提下,引入 线性复杂度序列建模能力,以提升长文本与中英混合文本场景下的推理效率与稳定性。
-
⚠️ 当前版本为 实验性(Experimental),在韵律和表达力上可能与 Transformer 版本存在差异。 -
🔬 设计动机(Why Mamba) 原始 Transformer 文本编码器在 TTS 场景中存在以下局限:
- 序列长度平方复杂度(O(n²))
- 长文本或中英混合输入时显存占用较高
- 推理阶段延迟不稳定
- Mamba 的优势:
- 线性时间复杂度(O(n))
- 更适合长序列建模
- 推理显存占用更低
对中英混合文本更加友好 因此,本项目引入 Mamba 作为一种 可选的文本编码器实现。
- 📦 Mamba 版本模型文件 以下文件为 Mamba 文本编码器版本 所对应的配置与模型权重:
模块 文件名 配置文件 config_Mamba.json Generator G_Mamba_30000.pth Discriminator D_Mamba_30000.pth Duration Predictor DUR_Mamba_30000.pth
注意:Mamba 版本与 Transformer 版本 checkpoint 不可混用。
- 基频包络控制 增加了harvest基频提取方法
- HiFi-GAN升级成了NSF-HIFIGAN
- 预训练的模型V2开源到了 HuggingFace。
- 高质量语音合成:所有模型均在 44.1kHz 采样率下训练,提供清晰、自然的听感,以追求更高的音质。
- 语言支持:本项目专注于中英文,移除了对其他语言的支持,简化了模型结构。
- 零样本声音克隆 (Zero-Shot Voice Cloning):基于
speechbrain/spkrec-ecapa-voxceleb提取的 192 维 Speaker Embedding。仅需一段3秒的参考音频,这使得模型具备了强大的零样本声音克隆能力。同时支持无参考文本生成。 - 中英双语支持:深度优化了中英文混合文本的处理,发音更准确、流畅。
- 易于使用的推理接口:输入
文本+参考音频或预提取的 Speaker Embedding即可进行推理。 - 开源预训练多说话人模型:V100 单核,训练24*3小时,见 HuggingFace。
- 数据集:使用了不同的数据集组合进行训练,以优化特定场景下的表现。
- 基于 200+ 小时 VoxBox 开源数据集和 16 小时私有数据混合训练,泛化能力和音色多样性更强。由于数据量有限,克隆不同音色效果存在差异。
- Ai-shell3 85小时
- hifi_tts 90小时
- ravdess 1小时
- vctk 41小时
- 私有数据 16小时
- 基于 200+ 小时 VoxBox 开源数据集和 16 小时私有数据混合训练,泛化能力和音色多样性更强。由于数据量有限,克隆不同音色效果存在差异。
首先,克隆本仓库并安装所需的依赖。
git clone https://github.com/shichaog/MeloVC.git
cd MeloVC
pip install -e .
python -m unidic download克隆
python infer.py --text "我最近在学习machine learning,希望能够在未来的artificial intelligence领域有所建树。" -m /path/to/G_XXXX.pth -o ./
非克隆
python infer.py --text "我最近在学习machine learning,希望能够在未来的artificial intelligence领域有所建树。" --ref_audio_path XXXX.wav -m /path/to/G_XXX.pth -o ./
如果你想使用自己的数据集训练模型,或者微调模型请遵循以下步骤:
在训练前请先安装MeloVC到开发模式,然后到melovc目录下
pip install -e .
cd melovc
准备你的数据集,并创建一个 `metadata.list 文件,格式如下:
path/to/audio1.wav|LANGUAGE-CODE|这是第一段文本。
path/to/audio2.wav|LANGUAGE-CODE|This is the second text.
...
- 语言
- 仅中文,LANGUAGE-CODE:ZH
- 仅英文,LANGUAGE-CODE:EN
- 中英文混合,LANGUAGE-CODE:ZH_MIX_EN
- 音频格式:推荐使用 44.1kHz 采样率的 WAV 文件。
- 文本:确保文本与音频内容对应,并已进行清洗,比如用ASR模型如(whisper)检验文本。
- 为了效果,建议如下:
- 单人训练,建议高质量总时长在10小时以上
- 大规模人数,由于不方便统计单人时长,以数据量越多越好
在data/example/metadata.list目录下有一个例子可以参考。
在上述准备妥当之后,可以使用如下预处理命令代码:
python preprocess_text.py --metadata path/to/metadata.list --config_path path/to/config.json
这会提前计算训练时用到的bert、spectral、speaker Embedding信息,以加速训练的过程。在处理完成之后会在metadata.list同名目录下生成config.json、train.list、val.list文件,这里包括模型、训练以及数据相关信息。
复制并修改 configs/config.json 文件,主要关注以下部分:
data->training_files: 指向你的filelist.txt。data->embedding_dir: 指向你保存 Speaker Embedding 的目录(如果预计算了)。train: 调整batch_size,epochs等训练参数。
bash train.sh <path/to/config.json> <num_of_gpus>
如:bash train.sh path/to/your/config.json 1
这会在执行该命令的目录下生成logs目录,该目录中包含了训练的log以及checkpoint,可以使用tensorboard查看结果。在训练的时候会从Huggingface上下载模型文件 HuggingFace。
如果你发现这个有用,请参与后续的迭代。
本项目采用 Apache 2.0 License。
- 感谢MeloTTS, VITS, VITS2 和 Bert-VITS2.团队的原始工作。
- 感谢 SpeechBrain 提供了强大的预训练声纹提取模型。
- 感谢 SparkAudio 数据集的开放。
