One-Shot-Voice-Cloning 项目介绍
项目概述
One-Shot-Voice-Cloning 是一个强大的语音克隆项目,致力于通过一段参考语音,即可生成任意文本的语音输出。项目采用 Unet 网络和 AdaIN 层的技术,实现了卓越的说话人和风格迁移能力。
项目特点
- 无卡顿语音克隆:用户只需提供一段参考语音即可进行语音克隆,无需额外手动输入时长统计。
- 中立情感语音训练:项目只使用中立情感的语料进行模型训练,避免使用强情感语音,这使得在处理未见过的风格迁移上仍有巨大挑战。
- Unet和AdaIN技术优势:得益于 Unet 网络和自适应实例归一化(AdaIN)层,该算法表现出强大的说话人和风格迁移能力。
功能介绍
- 一次性语音克隆推理:通过一个参考语音即可生成目标语音。
- 自动估算时长统计:使用 Style Encoder 自动估算参考语音的时长统计。
- 多说话人文本到语音转换(待开发):使用说话人嵌入实例归一化的方法实现,并提供预训练的内容编码器。
- Unet-TTS 训练过程(待开发):目前正在准备简单明了的训练过程文档。
- C++推理功能(待开发)。
使用指南
安装要求
- 系统需求:该项目仅支持 Linux 系统。
- 软件需求:根据 CUDA 版本安装匹配的 TensorFlow 和 tensorflow-addons 版本,默认情况下分别为 TensorFlow 2.6 和 tensorflow-addons 0.14.0。
安装步骤如下:
cd One-Shot-Voice-Cloning/TensorFlowTTS
pip install .
项目使用
项目提供两种使用方式:
选项 1:修改源代码
用户可以通过修改 UnetTTS_syn.py
文件中的参考音频文件进行语音克隆。
运行如下命令:
cd One-Shot-Voice-Cloning
CUDA_VISIBLE_DEVICES=0 python UnetTTS_syn.py
选项 2:使用 Jupyter Notebook
- 注意:请将项目路径添加到系统路径中,否则无法从
UnetTTS_syn.py
文件中导入所需的类UnetTTS
。
示例代码:
import sys
sys.path.append("<your repository's parent directory>/One-Shot-Voice-Cloning")
from UnetTTS_syn import UnetTTS
from tensorflow_tts.audio_process import preprocess_wav
""" 初始化模型 """
models_and_params = {"duration_param": "train/configs/unetts_duration.yaml",
"duration_model": "models/duration4k.h5",
"acous_param": "train/configs/unetts_acous.yaml",
"acous_model": "models/acous12k.h5",
"vocoder_param": "train/configs/multiband_melgan.yaml",
"vocoder_model": "models/vocoder800k.h5"}
feats_yaml = "train/configs/unetts_preprocess.yaml"
text2id_mapper = "models/unetts_mapper.json"
Tts_handel = UnetTTS(models_and_params, text2id_mapper, feats_yaml)
""" 使用参考语音克隆任意文本 """
wav_fpath = "./reference_speech.wav"
ref_audio = preprocess_wav(wav_fpath, source_sr=16000, normalize=True, trim_silence=True, is_sil_pad=True,
vad_window_length=30,
vad_moving_average_width=1,
vad_max_silence_length=1)
text = "一句话#3风格迁移#3语音合成系统"
syn_audio, _, _ = Tts_handel.one_shot_TTS(text, ref_audio)
参考资料
本项目受到以下开源库和项目的启发和支持:
该项目适合从事语音合成和语音克隆的研究人员、开发人员以及对语音技术感兴趣的爱好者。未来,项目团队将不断完善和扩展功能,为用户提供更好的使用体验。